source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Tizen.cs (59 lines of code) (raw):

using Microsoft.Maui.Handlers; using SkiaSharp.Views.Maui.Platform; using SkiaSharp.Views.Tizen.NUI; using ScalingInfo = SkiaSharp.Views.Tizen.ScalingInfo; namespace SkiaSharp.Views.Maui.Handlers { public partial class SKCanvasViewHandler : ViewHandler<ISKCanvasView, SKCanvasView> { private SKSizeI lastCanvasSize; private SKTouchHandler? touchHandler; protected override SKCanvasView CreatePlatformView() => new SKCanvasView(); protected override void ConnectHandler(SKCanvasView platformView) { platformView.PaintSurface += OnPaintSurface; base.ConnectHandler(platformView); } protected override void DisconnectHandler(SKCanvasView platformView) { touchHandler?.Detach(platformView); touchHandler = null; platformView.PaintSurface -= OnPaintSurface; base.DisconnectHandler(platformView); } // Mapper actions / properties public static void OnInvalidateSurface(SKCanvasViewHandler handler, ISKCanvasView canvasView, object? args) { handler.PlatformView.Invalidate(); } public static void MapIgnorePixelScaling(SKCanvasViewHandler handler, ISKCanvasView canvasView) { handler.PlatformView.IgnorePixelScaling = canvasView.IgnorePixelScaling; } public static void MapEnableTouchEvents(SKCanvasViewHandler handler, ISKCanvasView canvasView) { handler.touchHandler ??= new SKTouchHandler( args => canvasView.OnTouch(args), (x, y) => handler.OnGetScaledCoord(x, y)); handler.touchHandler?.SetEnabled(handler.PlatformView, canvasView.EnableTouchEvents); } // helper methods private void OnPaintSurface(object? sender, Tizen.SKPaintSurfaceEventArgs e) { var newCanvasSize = e.Info.Size; if (lastCanvasSize != newCanvasSize) { lastCanvasSize = newCanvasSize; VirtualView?.OnCanvasSizeChanged(newCanvasSize); } VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info, e.RawInfo)); } private SKPoint OnGetScaledCoord(double x, double y) { if (VirtualView?.IgnorePixelScaling == true && PlatformView != null) { x = ScalingInfo.FromPixel(x); y = ScalingInfo.FromPixel(y); } return new SKPoint((float)x, (float)y); } } }