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 + + + + - - - - - - - - + + + + + +