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 SKHtmlCanvasInterop.GLInfo? _jsGlInfo = null!;
private InputHelperInterop _inputHelper = null!;
private InputHelperInterop _canvasHelper = null!;
private ElementReference _htmlCanvas;
private ElementReference _inputElement;
private double _dpi;
@ -254,10 +255,11 @@ namespace Avalonia.Web.Blazor
Threading.Dispatcher.UIThread.Post(async () =>
{
_inputHelper = await InputHelperInterop.ImportAsync(Js, _inputElement);
_canvasHelper = await InputHelperInterop.ImportAsync(Js, _htmlCanvas);
_inputHelper.Hide();
_inputHelper.SetCursor("default");
_topLevelImpl.SetCssCursor = _inputHelper.SetCursor;
_canvasHelper.SetCursor("default");
_topLevelImpl.SetCssCursor = _canvasHelper.SetCursor;
Console.WriteLine("starting html canvas setup");
_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 const string Default = "default";
public string? Value { get; set; }
public CssCursor(StandardCursorType type)
@ -17,7 +18,7 @@ namespace Avalonia.Web.Blazor
/// </summary>
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>
@ -65,7 +66,7 @@ namespace Avalonia.Web.Blazor
StandardCursorType.BottomLeftCorner => "sw-resize",
StandardCursorType.BottomRightCorner => "se-resize",
_ => "default",
_ => Default,
};
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 ITextInputMethodImpl _textInputMethod;
private readonly TouchDevice _touchDevice;
private string _currentCursor = CssCursor.Default;
public RazorViewTopLevelImpl(ITextInputMethodImpl textInputMethod)
{
@ -127,11 +128,15 @@ namespace Avalonia.Web.Blazor
public void SetCursor(ICursorImpl cursor)
{
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()

Loading…
Cancel
Save