Files
Navigator/DataDisplay/Controls/RenderView.cs
2024-02-23 06:53:16 -05:00

59 lines
2.0 KiB
C#

using SkiaSharp.Views.Forms;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;
namespace DataDisplay.Controls
{
public class CanvasView : SKCanvasView
{
public static readonly BindableProperty RendererProperty = BindableProperty.Create(
nameof(Renderer),
typeof(Renderers.IRenderer),
typeof(CanvasView),
null,
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: (bindable, oldValue, newValue) =>
{
((CanvasView)bindable).RendererChanged((Renderers.IRenderer)oldValue, (Renderers.IRenderer)newValue);
});
// callback appelée lors de la modificiation de la propriété "Renderer"
void RendererChanged(Renderers.IRenderer currentRenderer, Renderers.IRenderer newRenderer)
{
if (currentRenderer != newRenderer)
{
// détacher l'événement de l'ancien renderer
if (currentRenderer != null)
currentRenderer.RefreshRequested -= Renderer_RefreshRequested;
// attacher l'événement du nouveau renderer
if (newRenderer != null)
newRenderer.RefreshRequested += Renderer_RefreshRequested;
// rafraichir le contrôle
InvalidateSurface();
}
}
// Causes refreshing during an event triggered by the ISKRenderer interface
void Renderer_RefreshRequested(object sender, EventArgs e)
{
InvalidateSurface();
}
protected override void OnPaintSurface(SKPaintSurfaceEventArgs e)
{
if (null == Renderer) return;
Renderer.PaintSurface(e.Surface, e.Info);
}
public Renderers.IRenderer Renderer
{
get { return (Renderers.IRenderer)GetValue(RendererProperty); }
set { SetValue(RendererProperty, value); }
}
}
}