|
@@ -51,9 +51,6 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
AvaloniaProperty.Register<Scene, ObservableCollection<Overlay>>(
|
|
|
nameof(AllOverlays));
|
|
|
|
|
|
- public static readonly StyledProperty<string> CheckerImagePathProperty = AvaloniaProperty.Register<Scene, string>(
|
|
|
- nameof(CheckerImagePath));
|
|
|
-
|
|
|
public static readonly StyledProperty<Cursor> DefaultCursorProperty = AvaloniaProperty.Register<Scene, Cursor>(
|
|
|
nameof(DefaultCursor));
|
|
|
|
|
@@ -92,6 +89,15 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
set => SetValue(CustomBackgroundScaleYProperty, value);
|
|
|
}
|
|
|
|
|
|
+ public static readonly StyledProperty<Bitmap> BackgroundBitmapProperty = AvaloniaProperty.Register<Scene, Bitmap>(
|
|
|
+ nameof(BackgroundBitmap));
|
|
|
+
|
|
|
+ public Bitmap BackgroundBitmap
|
|
|
+ {
|
|
|
+ get => GetValue(BackgroundBitmapProperty);
|
|
|
+ set => SetValue(BackgroundBitmapProperty, value);
|
|
|
+ }
|
|
|
+
|
|
|
public SceneRenderer SceneRenderer
|
|
|
{
|
|
|
get => GetValue(SceneRendererProperty);
|
|
@@ -104,12 +110,6 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
set => SetValue(DefaultCursorProperty, value);
|
|
|
}
|
|
|
|
|
|
- public string CheckerImagePath
|
|
|
- {
|
|
|
- get => GetValue(CheckerImagePathProperty);
|
|
|
- set => SetValue(CheckerImagePathProperty, value);
|
|
|
- }
|
|
|
-
|
|
|
public ObservableCollection<Overlay> AllOverlays
|
|
|
{
|
|
|
get => GetValue(AllOverlaysProperty);
|
|
@@ -140,8 +140,6 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
set { SetValue(RenderOutputProperty, value); }
|
|
|
}
|
|
|
|
|
|
- private Bitmap? checkerBitmap;
|
|
|
-
|
|
|
private Overlay? capturedOverlay;
|
|
|
|
|
|
private List<Overlay> mouseOverOverlays = new();
|
|
@@ -180,7 +178,6 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
AutoBackgroundScaleProperty, CustomBackgroundScaleXProperty, CustomBackgroundScaleYProperty);
|
|
|
|
|
|
FadeOutProperty.Changed.AddClassHandler<Scene>(FadeOutChanged);
|
|
|
- CheckerImagePathProperty.Changed.AddClassHandler<Scene>(CheckerImagePathChanged);
|
|
|
AllOverlaysProperty.Changed.AddClassHandler<Scene>(ActiveOverlaysChanged);
|
|
|
DefaultCursorProperty.Changed.AddClassHandler<Scene>(DefaultCursorChanged);
|
|
|
ChannelsProperty.Changed.AddClassHandler<Scene>(Refresh);
|
|
@@ -190,6 +187,7 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
AutoBackgroundScaleProperty.Changed.AddClassHandler<Scene>(Refresh);
|
|
|
CustomBackgroundScaleXProperty.Changed.AddClassHandler<Scene>(Refresh);
|
|
|
CustomBackgroundScaleYProperty.Changed.AddClassHandler<Scene>(Refresh);
|
|
|
+ BackgroundBitmapProperty.Changed.AddClassHandler<Scene>(Refresh);
|
|
|
}
|
|
|
|
|
|
private static void Refresh(Scene scene, AvaloniaPropertyChangedEventArgs args)
|
|
@@ -306,7 +304,7 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
|
|
|
private void DrawCheckerboard(DrawingSurface surface, RectD dirtyBounds)
|
|
|
{
|
|
|
- if (checkerBitmap == null) return;
|
|
|
+ if (BackgroundBitmap == null) return;
|
|
|
|
|
|
RectD operationSurfaceRectToRender = new RectD(0, 0, dirtyBounds.Width, dirtyBounds.Height);
|
|
|
VecD checkerScale = AutoBackgroundScale
|
|
@@ -318,7 +316,7 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
checkerPaint = new Paint
|
|
|
{
|
|
|
Shader = Shader.CreateBitmap(
|
|
|
- checkerBitmap,
|
|
|
+ BackgroundBitmap,
|
|
|
TileMode.Repeat, TileMode.Repeat,
|
|
|
Matrix3X3.CreateScale((float)checkerScale.X, (float)checkerScale.Y)),
|
|
|
FilterQuality = FilterQuality.None
|
|
@@ -796,18 +794,6 @@ internal class Scene : Zoombox.Zoombox, ICustomHitTest
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static void CheckerImagePathChanged(Scene scene, AvaloniaPropertyChangedEventArgs e)
|
|
|
- {
|
|
|
- if (e.NewValue is string path)
|
|
|
- {
|
|
|
- scene.checkerBitmap = ImagePathToBitmapConverter.LoadDrawingApiBitmapFromRelativePath(path);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- scene.checkerBitmap = null;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
private static void DocumentChanged(Scene scene, AvaloniaPropertyChangedEventArgs e)
|
|
|
{
|
|
|
if (e.OldValue is DocumentViewModel oldDocumentViewModel)
|