diff --git a/.editorconfig b/.editorconfig
index 4c7c462..5eddcfb 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -110,7 +110,7 @@ dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggest
#Style - Modifier preferences
#when this rule is set to a list of modifiers, prefer the specified ordering.
-csharp_preferred_modifier_order = public,private,internal,static,override,readonly,virtual:suggestion
+csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent
#Style - Pattern matching
diff --git a/QuestPDF.Previewer/FluentWindow.cs b/QuestPDF.Previewer/FluentWindow.cs
new file mode 100644
index 0000000..de63e30
--- /dev/null
+++ b/QuestPDF.Previewer/FluentWindow.cs
@@ -0,0 +1,46 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
+using Avalonia.Platform;
+using Avalonia.Styling;
+
+namespace QuestPDF.Previewer
+{
+ internal class FluentWindow : Window, IStyleable
+ {
+ Type IStyleable.StyleKey => typeof(Window);
+
+ public FluentWindow()
+ {
+ ExtendClientAreaToDecorationsHint = true;
+ ExtendClientAreaTitleBarHeightHint = -1;
+
+ TransparencyLevelHint = WindowTransparencyLevel.AcrylicBlur;
+
+ this.GetObservable(WindowStateProperty)
+ .Subscribe(x =>
+ {
+ PseudoClasses.Set(":maximized", x == WindowState.Maximized);
+ PseudoClasses.Set(":fullscreen", x == WindowState.FullScreen);
+ });
+
+ this.GetObservable(IsExtendedIntoWindowDecorationsProperty)
+ .Subscribe(x =>
+ {
+ if (!x)
+ {
+ SystemDecorations = SystemDecorations.Full;
+ TransparencyLevelHint = WindowTransparencyLevel.Blur;
+ }
+ });
+ }
+
+ protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
+ {
+ base.OnApplyTemplate(e);
+ ExtendClientAreaChromeHints =
+ ExtendClientAreaChromeHints.PreferSystemChrome |
+ ExtendClientAreaChromeHints.OSXThickTitleBar;
+ }
+ }
+}
diff --git a/QuestPDF.Previewer/Images/Logo.png b/QuestPDF.Previewer/Images/Logo.png
new file mode 100644
index 0000000..a0f1a19
Binary files /dev/null and b/QuestPDF.Previewer/Images/Logo.png differ
diff --git a/QuestPDF.Previewer/PreviewerApp.axaml b/QuestPDF.Previewer/PreviewerApp.axaml
index ce95e17..da35cb1 100644
--- a/QuestPDF.Previewer/PreviewerApp.axaml
+++ b/QuestPDF.Previewer/PreviewerApp.axaml
@@ -2,6 +2,6 @@
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-
+
\ No newline at end of file
diff --git a/QuestPDF.Previewer/PreviewerApp.axaml.cs b/QuestPDF.Previewer/PreviewerApp.axaml.cs
index 84bad05..86b6b58 100644
--- a/QuestPDF.Previewer/PreviewerApp.axaml.cs
+++ b/QuestPDF.Previewer/PreviewerApp.axaml.cs
@@ -1,5 +1,4 @@
using Avalonia;
-using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using QuestPDF.Infrastructure;
@@ -8,8 +7,6 @@ namespace QuestPDF.Previewer
{
internal class PreviewerApp : Application
{
- private PreviewerView? _preview;
-
public IDocument? Document { get; init; }
public override void Initialize()
@@ -21,24 +18,12 @@ namespace QuestPDF.Previewer
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
- HotReloadManager.Register(HandleDocumentHotReload);
-
- _preview = new PreviewerView()
+ desktop.MainWindow = new PreviewerWindow()
{
- Document = Document,
- };
- desktop.MainWindow = new Window()
- {
- Title = "QuestPDF Document Preview",
- Content = _preview,
+ Document = Document
};
}
base.OnFrameworkInitializationCompleted();
}
-
- private void HandleDocumentHotReload()
- {
- _preview?.InvalidatePreview();
- }
}
}
diff --git a/QuestPDF.Previewer/PreviewerControl.cs b/QuestPDF.Previewer/PreviewerControl.cs
index 661f2e8..eccf2ce 100644
--- a/QuestPDF.Previewer/PreviewerControl.cs
+++ b/QuestPDF.Previewer/PreviewerControl.cs
@@ -79,9 +79,15 @@ namespace QuestPDF.Previewer
private void DrawException(DrawingContext context, Exception ex)
{
+ var parentBounds = Parent?.Bounds ?? Bounds;
+
var exceptionMsg = string.Join("\n", ex.GetType(), ex.Message);
- var fmtText = new FormattedText($"Exception occured:\n{exceptionMsg}", Typeface.Default, 25, TextAlignment.Left, TextWrapping.Wrap, new Avalonia.Size(Parent.Bounds.Width / 2, Parent.Bounds.Height / 2));
- var center = new Point((Parent.Bounds.Width - fmtText.Bounds.Width) / 2, (Parent.Bounds.Height - fmtText.Bounds.Height) / 2);
+
+ var fmtText = new FormattedText($"Exception occured:\n{exceptionMsg}",
+ Typeface.Default, 25, TextAlignment.Left, TextWrapping.Wrap,
+ new Avalonia.Size(parentBounds.Width / 2, parentBounds.Height / 2));
+
+ var center = new Point((parentBounds.Width - fmtText.Bounds.Width) / 2, (parentBounds.Height - fmtText.Bounds.Height) / 2);
context.DrawText(Brushes.Black, center, fmtText);
}
}
diff --git a/QuestPDF.Previewer/PreviewerView.axaml b/QuestPDF.Previewer/PreviewerView.axaml
deleted file mode 100644
index cc1389d..0000000
--- a/QuestPDF.Previewer/PreviewerView.axaml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/QuestPDF.Previewer/PreviewerWindow.axaml b/QuestPDF.Previewer/PreviewerWindow.axaml
new file mode 100644
index 0000000..1576066
--- /dev/null
+++ b/QuestPDF.Previewer/PreviewerWindow.axaml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QuestPDF.Previewer/PreviewerView.axaml.cs b/QuestPDF.Previewer/PreviewerWindow.axaml.cs
similarity index 71%
rename from QuestPDF.Previewer/PreviewerView.axaml.cs
rename to QuestPDF.Previewer/PreviewerWindow.axaml.cs
index e323d9c..b9ca8a5 100644
--- a/QuestPDF.Previewer/PreviewerView.axaml.cs
+++ b/QuestPDF.Previewer/PreviewerWindow.axaml.cs
@@ -5,12 +5,12 @@ using QuestPDF.Infrastructure;
namespace QuestPDF.Previewer
{
- internal class PreviewerView : UserControl
+ internal class PreviewerWindow : FluentWindow
{
private readonly PreviewerControl _previewHost;
public static readonly StyledProperty DocumentProperty =
- AvaloniaProperty.Register(nameof(Document));
+ AvaloniaProperty.Register(nameof(Document));
public IDocument? Document
{
@@ -18,15 +18,14 @@ namespace QuestPDF.Previewer
set => SetValue(DocumentProperty, value);
}
- public PreviewerView()
+ public PreviewerWindow()
{
InitializeComponent();
_previewHost = this.FindControl("PreviewerSurface");
- DocumentProperty
- .Changed
- .Subscribe(v => _previewHost.Document = v.NewValue.Value);
+ DocumentProperty.Changed.Subscribe(v => _previewHost.Document = v.NewValue.Value);
+ HotReloadManager.Register(InvalidatePreview);
}
private void InitializeComponent()
diff --git a/QuestPDF.Previewer/QuestPDF.Previewer.csproj b/QuestPDF.Previewer/QuestPDF.Previewer.csproj
index e314966..4da2021 100644
--- a/QuestPDF.Previewer/QuestPDF.Previewer.csproj
+++ b/QuestPDF.Previewer/QuestPDF.Previewer.csproj
@@ -1,4 +1,4 @@
-
+
net6.0
@@ -6,15 +6,17 @@
enable
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+