Browse Source

[WASM] fix cursors. works fine

pull/7295/head
Sergey Mikolaytis 5 years ago
parent
commit
100af8ffe3
  1. 6
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs
  2. 5
      src/Web/Avalonia.Web.Blazor/Cursor.cs
  3. 11
      src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs

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

@ -22,6 +22,7 @@ namespace Avalonia.Web.Blazor
private DpiWatcherInterop _dpiWatcher = null!; private DpiWatcherInterop _dpiWatcher = null!;
private SKHtmlCanvasInterop.GLInfo? _jsGlInfo = null!; private SKHtmlCanvasInterop.GLInfo? _jsGlInfo = null!;
private InputHelperInterop _inputHelper = null!; private InputHelperInterop _inputHelper = null!;
private InputHelperInterop _canvasHelper = null!;
private ElementReference _htmlCanvas; private ElementReference _htmlCanvas;
private ElementReference _inputElement; private ElementReference _inputElement;
private double _dpi; private double _dpi;
@ -254,10 +255,11 @@ namespace Avalonia.Web.Blazor
Threading.Dispatcher.UIThread.Post(async () => Threading.Dispatcher.UIThread.Post(async () =>
{ {
_inputHelper = await InputHelperInterop.ImportAsync(Js, _inputElement); _inputHelper = await InputHelperInterop.ImportAsync(Js, _inputElement);
_canvasHelper = await InputHelperInterop.ImportAsync(Js, _htmlCanvas);
_inputHelper.Hide(); _inputHelper.Hide();
_inputHelper.SetCursor("default"); _canvasHelper.SetCursor("default");
_topLevelImpl.SetCssCursor = _inputHelper.SetCursor; _topLevelImpl.SetCssCursor = _canvasHelper.SetCursor;
Console.WriteLine("starting html canvas setup"); Console.WriteLine("starting html canvas setup");
_interop = await SKHtmlCanvasInterop.ImportAsync(Js, _htmlCanvas, OnRenderFrame); _interop = await SKHtmlCanvasInterop.ImportAsync(Js, _htmlCanvas, OnRenderFrame);

5
src/Web/Avalonia.Web.Blazor/Cursor.cs

@ -5,6 +5,7 @@ namespace Avalonia.Web.Blazor
{ {
public class CssCursor : ICursorImpl public class CssCursor : ICursorImpl
{ {
public const string Default = "default";
public string? Value { get; set; } public string? Value { get; set; }
public CssCursor(StandardCursorType type) public CssCursor(StandardCursorType type)
@ -17,7 +18,7 @@ namespace Avalonia.Web.Blazor
/// </summary> /// </summary>
public CssCursor(string base64, string format, PixelPoint hotspot, StandardCursorType fallback) public CssCursor(string base64, string format, PixelPoint hotspot, StandardCursorType fallback)
{ {
Value = $"url(data:image/{format},{base64}) {hotspot.X} {hotspot.Y}, {ToKeyword(fallback)}"; Value = $"url(\"data:image/{format};base64,{base64}\") {hotspot.X} {hotspot.Y}, {ToKeyword(fallback)}";
} }
/// <summary> /// <summary>
@ -65,7 +66,7 @@ namespace Avalonia.Web.Blazor
StandardCursorType.BottomLeftCorner => "sw-resize", StandardCursorType.BottomLeftCorner => "sw-resize",
StandardCursorType.BottomRightCorner => "se-resize", StandardCursorType.BottomRightCorner => "se-resize",
_ => "default", _ => Default,
}; };
public void Dispose() {} public void Dispose() {}

11
src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs

@ -21,6 +21,7 @@ namespace Avalonia.Web.Blazor
private readonly Stopwatch _sw = Stopwatch.StartNew(); private readonly Stopwatch _sw = Stopwatch.StartNew();
private readonly ITextInputMethodImpl _textInputMethod; private readonly ITextInputMethodImpl _textInputMethod;
private readonly TouchDevice _touchDevice; private readonly TouchDevice _touchDevice;
private string _currentCursor = CssCursor.Default;
public RazorViewTopLevelImpl(ITextInputMethodImpl textInputMethod) public RazorViewTopLevelImpl(ITextInputMethodImpl textInputMethod)
{ {
@ -127,11 +128,15 @@ namespace Avalonia.Web.Blazor
public void SetCursor(ICursorImpl cursor) public void SetCursor(ICursorImpl cursor)
{ {
var cur = cursor as CssCursor; var cur = cursor as CssCursor;
if (cur == null || cur.Value == null) var val = CssCursor.Default;
if (cur != null && cur.Value != null)
{ {
throw new NotSupportedException(); val = cur.Value;
}
if (_currentCursor != val)
{
SetCssCursor?.Invoke(val);
} }
SetCssCursor?.Invoke(cur.Value);
} }
public IPopupImpl? CreatePopup() public IPopupImpl? CreatePopup()

Loading…
Cancel
Save