Browse Source

replace mouse and touch events to pointer event to fix issue #8200

pull/8234/head
Todd 4 years ago
parent
commit
131c81ad22
  1. 10
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor
  2. 103
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs

10
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor

@ -1,14 +1,12 @@
<div id="container" class="avalonia-container" tabindex="0" oncontextmenu="return false;" <div id="container" class="avalonia-container" tabindex="0" oncontextmenu="return false;"
ontouchstart="@OnTouchStart"
ontouchend="@OnTouchEnd"
ontouchcancel="@OnTouchCancel" ontouchcancel="@OnTouchCancel"
ontouchmove="@OnTouchMove" ontouchmove="@OnTouchMove"
onmousemove="@OnMouseMove"
onmousedown="@OnMouseDown"
onmouseup="@OnMouseUp"
onwheel="@OnWheel" onwheel="@OnWheel"
onkeydown="@OnKeyDown" onkeydown="@OnKeyDown"
onkeyup="@OnKeyUp"> onkeyup="@OnKeyUp"
onpointerdown="@OnPointerDown"
onpointerup="@OnPointerUp"
onpointermove="@OnPointerMove">
<canvas id="htmlCanvas" @ref="_htmlCanvas" @attributes="AdditionalAttributes"/> <canvas id="htmlCanvas" @ref="_htmlCanvas" @attributes="AdditionalAttributes"/>

103
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs

@ -56,90 +56,91 @@ namespace Avalonia.Web.Blazor
{ {
return _nativeControlHost ?? throw new InvalidOperationException("Blazor View wasn't initialized yet"); return _nativeControlHost ?? throw new InvalidOperationException("Blazor View wasn't initialized yet");
} }
private void OnTouchStart(TouchEventArgs e) private void OnTouchCancel(TouchEventArgs e)
{ {
foreach (var touch in e.ChangedTouches) foreach (var touch in e.ChangedTouches)
{ {
_topLevelImpl.RawTouchEvent(RawPointerEventType.TouchBegin, new Point(touch.ClientX, touch.ClientY), _topLevelImpl.RawTouchEvent(RawPointerEventType.TouchCancel, new Point(touch.ClientX, touch.ClientY),
GetModifiers(e), touch.Identifier); GetModifiers(e), touch.Identifier);
} }
} }
private void OnTouchEnd(TouchEventArgs e) private void OnTouchMove(TouchEventArgs e)
{ {
foreach (var touch in e.ChangedTouches) foreach (var touch in e.ChangedTouches)
{ {
_topLevelImpl.RawTouchEvent(RawPointerEventType.TouchEnd, new Point(touch.ClientX, touch.ClientY), _topLevelImpl.RawTouchEvent(RawPointerEventType.TouchUpdate, new Point(touch.ClientX, touch.ClientY),
GetModifiers(e), touch.Identifier); GetModifiers(e), touch.Identifier);
} }
} }
private void OnTouchCancel(TouchEventArgs e) private void OnPointerMove(Microsoft.AspNetCore.Components.Web.PointerEventArgs e)
{ {
foreach (var touch in e.ChangedTouches) if (e.PointerType == "mouse")
{ {
_topLevelImpl.RawTouchEvent(RawPointerEventType.TouchCancel, new Point(touch.ClientX, touch.ClientY), _topLevelImpl.RawMouseEvent(RawPointerEventType.Move, new Point(e.ClientX, e.ClientY), GetModifiers(e));
GetModifiers(e), touch.Identifier);
} }
} }
private void OnTouchMove(TouchEventArgs e) private void OnPointerUp(Microsoft.AspNetCore.Components.Web.PointerEventArgs e)
{ {
foreach (var touch in e.ChangedTouches) if (e.PointerType == "touch")
{ {
_topLevelImpl.RawTouchEvent(RawPointerEventType.TouchUpdate, new Point(touch.ClientX, touch.ClientY), _topLevelImpl.RawTouchEvent(RawPointerEventType.TouchEnd, new Point(e.ClientX, e.ClientY),
GetModifiers(e), touch.Identifier); GetModifiers(e), e.PointerId);
} }
} else if (e.PointerType == "mouse")
{
private void OnMouseMove(MouseEventArgs e) RawPointerEventType type = default;
{
_topLevelImpl.RawMouseEvent(RawPointerEventType.Move, new Point(e.ClientX, e.ClientY), GetModifiers(e));
}
private void OnMouseUp(MouseEventArgs e) switch (e.Button)
{ {
RawPointerEventType type = default; case 0:
type = RawPointerEventType.LeftButtonUp;
break;
switch (e.Button) case 1:
{ type = RawPointerEventType.MiddleButtonUp;
case 0: break;
type = RawPointerEventType.LeftButtonUp;
break;
case 1: case 2:
type = RawPointerEventType.MiddleButtonUp; type = RawPointerEventType.RightButtonUp;
break; break;
}
case 2: _topLevelImpl.RawMouseEvent(type, new Point(e.ClientX, e.ClientY), GetModifiers(e));
type = RawPointerEventType.RightButtonUp;
break;
} }
_topLevelImpl.RawMouseEvent(type, new Point(e.ClientX, e.ClientY), GetModifiers(e));
} }
private void OnMouseDown(MouseEventArgs e) private void OnPointerDown(Microsoft.AspNetCore.Components.Web.PointerEventArgs e)
{ {
RawPointerEventType type = default; if (e.PointerType == "touch")
{
switch (e.Button) _topLevelImpl.RawTouchEvent(RawPointerEventType.TouchBegin, new Point(e.ClientX, e.ClientY),
GetModifiers(e), e.PointerId);
}
else if (e.PointerType == "mouse")
{ {
case 0: RawPointerEventType type = default;
type = RawPointerEventType.LeftButtonDown;
break; switch (e.Button)
{
case 0:
type = RawPointerEventType.LeftButtonDown;
break;
case 1: case 1:
type = RawPointerEventType.MiddleButtonDown; type = RawPointerEventType.MiddleButtonDown;
break; break;
case 2: case 2:
type = RawPointerEventType.RightButtonDown; type = RawPointerEventType.RightButtonDown;
break; break;
} }
_topLevelImpl.RawMouseEvent(type, new Point(e.ClientX, e.ClientY), GetModifiers(e)); _topLevelImpl.RawMouseEvent(type, new Point(e.ClientX, e.ClientY), GetModifiers(e));
}
} }
private void OnWheel(WheelEventArgs e) private void OnWheel(WheelEventArgs e)
@ -189,7 +190,7 @@ namespace Avalonia.Web.Blazor
return modifiers; return modifiers;
} }
private static RawInputModifiers GetModifiers(MouseEventArgs e) private static RawInputModifiers GetModifiers(Microsoft.AspNetCore.Components.Web.PointerEventArgs e)
{ {
var modifiers = RawInputModifiers.None; var modifiers = RawInputModifiers.None;

Loading…
Cancel
Save