Skip to content

Commit 96e6fe8

Browse files
committed
update mouse handling
1 parent 97b1567 commit 96e6fe8

File tree

11 files changed

+115
-31
lines changed

11 files changed

+115
-31
lines changed

samples/Blazorex.Samples.DoomFire/Pages/Home.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,6 @@
9898
_context.Font = "24px verdana";
9999
_context.FillStyle = "red";
100100
_context.FillText($"FPS: {fps:###}", 20, 40);
101-
_context.FillText($"Mouse Coords: {_mousecoords.X} : {_mousecoords.Y}", 20, 60);
101+
_context.FillText($"Mouse Coords: {_mousecoords.ClientX} : {_mousecoords.ClientY}", 20, 60);
102102
}
103103
}

samples/Blazorex.Samples.MouseCoords/Pages/Home.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,6 @@
7070
_context.Font = "24px verdana";
7171
_context.FillStyle = "red";
7272
_context.FillText($"FPS: {fps:###}", 20, 40);
73-
_context.FillText($"Mouse Coords: {_mousecoords.X} : {_mousecoords.Y}", 20, 60);
73+
_context.FillText($"Mouse Coords: {_mousecoords.ClientX} : {_mousecoords.ClientY}", 20, 60);
7474
}
7575
}

samples/Blazorex.Samples.PanAndZoom/Components/Pages/Home.razor

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
y = 0,
2323
scale = 1
2424
};
25+
MouseCoords _lastClickCoords = new()
26+
{
27+
ClientX = 0,
28+
ClientY = 0
29+
};
30+
bool _isMouseDown = false;
2531

2632
protected override void OnAfterRender(bool firstRender)
2733
{
@@ -35,7 +41,28 @@
3541
Height = _height,
3642
OnCanvasReady = this.OnMainCanvasReady,
3743
OnFrameReady = this.OnMainFrameReady,
38-
OnWheel = this.OnWheel
44+
OnMouseWheel = this.OnMouseWheel,
45+
OnMouseDown = this.OnMouseDown,
46+
OnMouseUp = this.OnMouseUp,
47+
OnMouseMove = (MouseCoords evt) =>
48+
{
49+
if (_isMouseDown)
50+
{
51+
var newX = evt.ClientX - _lastClickCoords.ClientX;
52+
var newY = evt.ClientY - _lastClickCoords.ClientY;
53+
_viewportTransform = new()
54+
{
55+
x = _viewportTransform.x + newX,
56+
y = _viewportTransform.y + newY,
57+
scale = _viewportTransform.scale
58+
};
59+
}
60+
_lastClickCoords = new MouseCoords()
61+
{
62+
ClientX = evt.ClientX,
63+
ClientY = evt.ClientY
64+
};
65+
}
3966
});
4067

4168
base.OnAfterRender(firstRender);
@@ -51,8 +78,16 @@
5178
this.Render();
5279
}
5380

81+
private void OnMouseDown(MouseButtonData evt)
82+
{
83+
_isMouseDown = true;
84+
}
85+
private void OnMouseUp(MouseButtonData evt)
86+
{
87+
_isMouseDown = false;
88+
}
5489

55-
private void OnWheel(WheelDelta evt)
90+
private void OnMouseWheel(WheelDelta evt)
5691
{
5792
var newScale = _viewportTransform.scale + evt.DeltaY * -0.001f;
5893
var newX = evt.ClientX - (evt.ClientX - _viewportTransform.x) * (newScale / _viewportTransform.scale);
@@ -81,6 +116,7 @@
81116
_context.Font = "24px verdana";
82117
_context.FillStyle = "yellow";
83118
_context.FillText("Use the wheel to change the zoom", 20, 20);
119+
_context.FillText("Click to pan the view", 20, 80);
84120

85121
_context.SetTransform(_viewportTransform.scale, 0, 0, _viewportTransform.scale, _viewportTransform.x, _viewportTransform.y);
86122
DrawRect(100, 100, 100, 100, "red");

src/Blazorex/Blazorex.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
<PropertyGroup>
44
<TargetFramework>net8.0</TargetFramework>
5-
<PackageVersion>1.1.3</PackageVersion>
5+
<PackageVersion>1.1.4</PackageVersion>
66
<IsPackable>true</IsPackable>
77
<Authors>davidguida</Authors>
88
<Product>Blazorex</Product>
99
<NeutralLanguage>en-US</NeutralLanguage>
1010
<Title>Blazorex</Title>
1111
<PackageDescription>Blazorex is an HTML Canvas wrapper library for Blazor, written with .NET.</PackageDescription>
12-
<Copyright>Copyright 2023</Copyright>
12+
<Copyright>Copyright 2025</Copyright>
1313
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
1414
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
1515
<PackageTags>blazor dotnet dotnet-core canvas gamedev</PackageTags>

src/Blazorex/CanvasBase.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,19 @@ public async ValueTask Resized(int width, int height)
6868
[JSInvokable]
6969
public async ValueTask Wheel(WheelDelta evt)
7070
{
71-
await this.OnWheel.InvokeAsync(evt);
71+
await this.OnMouseWheel.InvokeAsync(evt);
72+
}
73+
74+
[JSInvokable]
75+
public async ValueTask MouseDown(MouseButtonData evt)
76+
{
77+
await this.OnMouseDown.InvokeAsync(evt);
78+
}
79+
80+
[JSInvokable]
81+
public async ValueTask MouseUp(MouseButtonData evt)
82+
{
83+
await this.OnMouseUp.InvokeAsync(evt);
7284
}
7385

7486
#endregion JS interop
@@ -85,13 +97,19 @@ public async ValueTask Wheel(WheelDelta evt)
8597
public EventCallback<MouseCoords> OnMouseMove { get; set; }
8698

8799
[Parameter]
88-
public EventCallback<Size> OnResize { get; set; }
100+
public EventCallback<WheelDelta> OnMouseWheel { get; set; }
101+
102+
[Parameter]
103+
public EventCallback<MouseButtonData> OnMouseDown { get; set; }
89104

90105
[Parameter]
91-
public EventCallback<float> OnFrameReady { get; set; }
106+
public EventCallback<MouseButtonData> OnMouseUp { get; set; }
107+
108+
[Parameter]
109+
public EventCallback<Size> OnResize { get; set; }
92110

93111
[Parameter]
94-
public EventCallback<WheelDelta> OnWheel { get; set; }
112+
public EventCallback<float> OnFrameReady { get; set; }
95113

96114
[Parameter]
97115
public EventCallback<CanvasBase> OnCanvasReady { get; set; }

src/Blazorex/CanvasCreationOptions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ public readonly struct CanvasCreationOptions
4747

4848

4949
public Action<MouseCoords> OnMouseMove { get; init; }
50-
public Action<WheelDelta> OnWheel { get; init; }
50+
public Action<WheelDelta> OnMouseWheel { get; init; }
51+
public Action<MouseButtonData> OnMouseDown { get; init; }
52+
public Action<MouseButtonData> OnMouseUp { get; init; }
5153

5254
public Action<Size> OnResize { get; init; }
5355
}

src/Blazorex/CanvasManager.razor

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
OnCanvasReady="@onCanvasReady"
2020
OnFrameReady="@options.OnFrameReady"
2121
OnMouseMove="@options.OnMouseMove"
22-
OnWheel="@options.OnWheel"
22+
OnMouseWheel="@options.OnMouseWheel"
23+
OnMouseDown="@options.OnMouseDown"
24+
OnMouseUp="@options.OnMouseUp"
2325
OnKeyDown="@options.OnKeyDown"
2426
OnKeyUp="@options.OnKeyUp"
2527
OnResize="@options.OnResize"

src/Blazorex/MouseCoords.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/Blazorex/MouseEventArgs.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace Blazorex;
2+
3+
public readonly struct MouseCoords
4+
{
5+
public int ClientX { get; init; }
6+
public int ClientY { get; init; }
7+
public int OffsetX { get; init; }
8+
public int OffsetY { get; init; }
9+
}
10+
11+
public readonly struct MouseButtonData
12+
{
13+
public int Button { get; init; }
14+
public int ClientX { get; init; }
15+
public int ClientY { get; init; }
16+
}
17+
18+
public readonly struct WheelDelta
19+
{
20+
public int DeltaX { get; init; }
21+
public int DeltaY { get; init; }
22+
public int ClientX { get; init; }
23+
public int ClientY { get; init; }
24+
}

src/Blazorex/WheelDelta.cs

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)