BioGTK  6.7.0
A .NET library & program for annotating, editing various microscopy imaging formats using Bioformats supported images. Including whole slide, pyramidal, and series.
Loading...
Searching...
No Matches
SlideArea.cs
1using Gtk;
2using SkiaSharp;
3using SkiaSharp.Views.Desktop;
4using SkiaSharp.Views.Gtk;
5using System;
6
7namespace BioGTK
8{
13 public class SlideArea : SKDrawingArea
14 {
15 #region Events
16
21 public event Action<SKCanvas, int, int> OnSkiaRender;
22
23 #endregion
24
25 #region Fields
26
27 private SKSlideRenderer _renderer;
28 private bool _isInitialized;
29
30 #endregion
31
32 #region Constructor
33
34 public SlideArea() : base()
35 {
36 // Configure widget
37 this.Expand = true;
38 this.CanFocus = true;
39
40 // Subscribe to paint event
41 this.PaintSurface += OnPaintSurface;
42
43 _isInitialized = true;
44 }
45
46 #endregion
47
48 #region Renderer Integration
49
53 public void SetRenderer(SKSlideRenderer renderer)
54 {
55 _renderer = renderer;
56 }
57
58 #endregion
59
60 #region Rendering
61
65 private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e)
66 {
67 if (!_isInitialized)
68 return;
69
70 var canvas = e.Surface.Canvas;
71 var width = e.Info.Width;
72 var height = e.Info.Height;
73
74 // Clear canvas
75 canvas.Clear(SKColors.Black);
76
77 try
78 {
79 // Render slide content from renderer
80 if (_renderer != null)
81 {
82 _renderer.DrawToCanvas(canvas, width, height);
83 }
84
85 // Allow custom drawing on top (annotations, etc.)
86 OnSkiaRender?.Invoke(canvas, width, height);
87 }
88 catch (Exception ex)
89 {
90 Console.WriteLine($"Paint surface error: {ex.Message}");
91 }
92 }
93
97 public void RequestRedraw()
98 {
99 this.QueueDraw();
100
101 if (this.IsRealized && this.Window != null)
102 {
103 this.Window.InvalidateRect(this.Allocation, false);
104 this.Window.ProcessUpdates(true);
105 }
106 }
107
108 #endregion
109
110 #region Cleanup
111
112 protected override void Dispose(bool disposing)
113 {
114 if (disposing)
115 {
116 this.PaintSurface -= OnPaintSurface;
117 }
118
119 base.Dispose(disposing);
120 }
121
122 #endregion
123 }
124}
Manages slide rendering by coordinating between the SkiaStitchingPipeline and SlideGLArea Handles asy...
void DrawToCanvas(SKCanvas canvas, int canvasWidth, int canvasHeight)
Draw the current image to a canvas with proper scaling Called during the Skia render callback from Sl...
GTK widget that provides SkiaSharp rendering surface for slide content Manages the rendering pipeline...
Definition SlideArea.cs:14
void RequestRedraw()
Request redraw of the widget.
Definition SlideArea.cs:97
Action< SKCanvas, int, int > OnSkiaRender
Event fired during Skia rendering phase Allows custom drawing on top of the slide content (annotation...
Definition SlideArea.cs:21
void SetRenderer(SKSlideRenderer renderer)
Set the renderer that will provide content for this area.
Definition SlideArea.cs:53
Definition ML.cs:17