Browse Source

Updated QuestPDF Previewer to Avalonia 11

Marcin Ziąbek 2 years ago
parent
commit
8161e456d0

+ 14 - 5
Source/QuestPDF.Previewer/InteractiveCanvas.cs

@@ -1,4 +1,5 @@
 using Avalonia;
 using Avalonia;
+using Avalonia.Media;
 using Avalonia.Platform;
 using Avalonia.Platform;
 using Avalonia.Rendering.SceneGraph;
 using Avalonia.Rendering.SceneGraph;
 using Avalonia.Skia;
 using Avalonia.Skia;
@@ -109,16 +110,24 @@ class InteractiveCanvas : ICustomDrawOperation
     
     
     #region rendering
     #region rendering
     
     
-    public void Render(IDrawingContextImpl context)
+    public void Render(ImmediateDrawingContext context)
     {
     {
+        // get SkiaSharp canvas
+        var leaseFeature = context.TryGetFeature<ISkiaSharpApiLeaseFeature>();
+        using var lease = leaseFeature.Lease();
+
+        var canvas = lease.SkCanvas;
+
+        if (canvas == null)
+            return;
+        
+        // draw document
         if (Pages.Count <= 0)
         if (Pages.Count <= 0)
             return;
             return;
 
 
         LimitScale();
         LimitScale();
         LimitTranslate();
         LimitTranslate();
-        
-        var canvas = (context as ISkiaDrawingContextImpl)?.SkCanvas;
-        
+    
         if (canvas == null)
         if (canvas == null)
             throw new InvalidOperationException($"Context needs to be ISkiaDrawingContextImpl but got {nameof(context)}");
             throw new InvalidOperationException($"Context needs to be ISkiaDrawingContextImpl but got {nameof(context)}");
 
 
@@ -140,7 +149,7 @@ class InteractiveCanvas : ICustomDrawOperation
         canvas.SetMatrix(originalMatrix);
         canvas.SetMatrix(originalMatrix);
         DrawInnerGradient(canvas);
         DrawInnerGradient(canvas);
     }
     }
-
+    
     private static void DrawPageSnapshot(SKCanvas canvas, DocumentSnapshot.PageSnapshot pageSnapshot)
     private static void DrawPageSnapshot(SKCanvas canvas, DocumentSnapshot.PageSnapshot pageSnapshot)
     {
     {
         canvas.Save();
         canvas.Save();

+ 3 - 2
Source/QuestPDF.Previewer/PreviewerApp.axaml

@@ -1,8 +1,9 @@
 <Application x:Class="QuestPDF.Previewer.PreviewerApp"
 <Application x:Class="QuestPDF.Previewer.PreviewerApp"
              xmlns="https://github.com/avaloniaui"
              xmlns="https://github.com/avaloniaui"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             Name="QuestPDF Document Preview">
+             Name="QuestPDF Document Preview"
+             RequestedThemeVariant="Dark">
 	<Application.Styles>
 	<Application.Styles>
-		<FluentTheme Mode="Dark" />
+		<FluentTheme />
 	</Application.Styles>
 	</Application.Styles>
 </Application>
 </Application>

+ 2 - 1
Source/QuestPDF.Previewer/PreviewerControl.cs

@@ -3,6 +3,7 @@ using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Input;
 using Avalonia.Media;
 using Avalonia.Media;
+using Avalonia.Threading;
 
 
 namespace QuestPDF.Previewer
 namespace QuestPDF.Previewer
 {
 {
@@ -46,7 +47,7 @@ namespace QuestPDF.Previewer
             CurrentScrollProperty.Changed.Subscribe(x =>
             CurrentScrollProperty.Changed.Subscribe(x =>
             {
             {
                 InteractiveCanvas.ScrollPercentY = x.NewValue.Value;
                 InteractiveCanvas.ScrollPercentY = x.NewValue.Value;
-                InvalidateVisual();
+                Dispatcher.UIThread.InvokeAsync(InvalidateVisual).GetTask();
             });
             });
 
 
             ClipToBounds = true;
             ClipToBounds = true;

+ 1 - 1
Source/QuestPDF.Previewer/PreviewerWindow.axaml

@@ -102,7 +102,7 @@
 			           AllowAutoHide="False" 
 			           AllowAutoHide="False" 
 			           Minimum="0" Maximum="1" 
 			           Minimum="0" Maximum="1" 
 			           IsVisible="{Binding VerticalScrollbarVisible, Mode=OneWay}"
 			           IsVisible="{Binding VerticalScrollbarVisible, Mode=OneWay}"
-			           Value="{Binding CurrentScroll, Mode=TwoWay}" 
+			           Value="{Binding CurrentScroll, Mode=TwoWay}"
 			           ViewportSize="{Binding ScrollViewportSize, Mode=OneWay}"></ScrollBar>
 			           ViewportSize="{Binding ScrollViewportSize, Mode=OneWay}"></ScrollBar>
 		</Grid>
 		</Grid>
 	</Panel>
 	</Panel>

+ 2 - 1
Source/QuestPDF.Previewer/PreviewerWindow.axaml.cs

@@ -1,9 +1,10 @@
 using Avalonia.Controls;
 using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
 using Avalonia.Markup.Xaml;
 using Avalonia.Markup.Xaml;
 
 
 namespace QuestPDF.Previewer
 namespace QuestPDF.Previewer
 {
 {
-    class PreviewerWindow : Window
+    internal partial class PreviewerWindow : Window
     {
     {
         public PreviewerWindow()
         public PreviewerWindow()
         {
         {

+ 5 - 7
Source/QuestPDF.Previewer/QuestPDF.Previewer.csproj

@@ -37,16 +37,14 @@
     
     
     <ItemGroup>
     <ItemGroup>
         <FrameworkReference Include="Microsoft.AspNetCore.App" />
         <FrameworkReference Include="Microsoft.AspNetCore.App" />
-        <PackageReference Include="Avalonia" Version="0.10.19" />
-        <PackageReference Include="Avalonia.Desktop" Version="0.10.19" />
-        <PackageReference Include="Avalonia.Diagnostics" Version="0.10.19" />
-        <PackageReference Include="Avalonia.Markup.Xaml.Loader" Version="0.10.18" />
-        <PackageReference Include="Avalonia.ReactiveUI" Version="0.10.19" />
-        <PackageReference Include="ReactiveUI" Version="18.4.44" />
+        <PackageReference Include="Avalonia.Desktop" Version="11.0.5" />
+        <PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.5" />
+        <PackageReference Include="Avalonia.ReactiveUI" Version="11.0.5" />
+        <PackageReference Include="Avalonia.Skia" Version="11.0.5" />
+        <PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.5" />
         <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.6" />
         <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.6" />
         <PackageReference Include="SkiaSharp.NativeAssets.Win32" Version="2.88.6" />
         <PackageReference Include="SkiaSharp.NativeAssets.Win32" Version="2.88.6" />
         <PackageReference Include="SkiaSharp.NativeAssets.macOS" Version="2.88.6" />
         <PackageReference Include="SkiaSharp.NativeAssets.macOS" Version="2.88.6" />
-        <PackageReference Include="System.Reactive" Version="5.0.0" />
         <PackageReference Include="SkiaSharp" Version="2.88.6" />
         <PackageReference Include="SkiaSharp" Version="2.88.6" />
     </ItemGroup>
     </ItemGroup>
 </Project>
 </Project>