diff --git a/QuestPDF.Previewer.Examples/Program.cs b/QuestPDF.Previewer.Examples/Program.cs index 67a6b45..96e7c10 100644 --- a/QuestPDF.Previewer.Examples/Program.cs +++ b/QuestPDF.Previewer.Examples/Program.cs @@ -1,7 +1,9 @@ -using QuestPDF.Fluent; +using Avalonia.Media; +using QuestPDF.Fluent; using QuestPDF.Helpers; using QuestPDF.Infrastructure; using QuestPDF.Previewer; +using Colors = QuestPDF.Helpers.Colors; Document .Create(container => @@ -48,5 +50,23 @@ Document x.CurrentPageNumber(); }); }); + + container.Page(page => + { + page.Size(PageSizes.A3); + page.Margin(2, Unit.Centimetre); + page.PageColor(Colors.White); + page.DefaultTextStyle(x => x.FontSize(20)); + + page.Content() + .PaddingVertical(1, Unit.Centimetre) + .Column(x => + { + x.Spacing(20); + + foreach (var i in Enumerable.Range(0, 10)) + x.Item().Background(Colors.Grey.Lighten2).Height(80); + }); + }); }) .ShowInPreviewer(); \ No newline at end of file diff --git a/QuestPDF.Previewer/DocumentRenderer.cs b/QuestPDF.Previewer/DocumentRenderer.cs index 46864c7..f61b23b 100644 --- a/QuestPDF.Previewer/DocumentRenderer.cs +++ b/QuestPDF.Previewer/DocumentRenderer.cs @@ -9,8 +9,6 @@ using SkiaSharp; namespace QuestPDF.Previewer { - public record RenderedPageInfo(SKPicture Picture, Size Size); - internal class DocumentRenderer : INotifyPropertyChanged { public float PageSpacing { get; set; } @@ -72,15 +70,15 @@ namespace QuestPDF.Previewer { var canvas = new PreviewerCanvas(); - DocumentGenerator.RenderDocument(canvas, new SizeTrackingCanvas(), document, s => - { - var width = s.PageSizes.Max(p => p.Width); - var height = s.PageSizes.Sum(p => p.Height) + ((s.PageSizes.Count - 1) * PageSpacing); - Bounds = new Size(width, height); - }); + DocumentGenerator.RenderDocument(canvas, document); + + var width = canvas.Pictures.Max(p => p.Size.Width); + var height = canvas.Pictures.Sum(p => p.Size.Height) + (canvas.Pictures.Count - 1) * PageSpacing; + Bounds = new Size(width, height); foreach (var pages in Pages) pages?.Picture?.Dispose(); + Dispatcher.UIThread.Post(() => { Pages.Clear(); diff --git a/QuestPDF.Previewer/PreviewerApp.axaml.cs b/QuestPDF.Previewer/PreviewerApp.axaml.cs index 86b6b58..1b52956 100644 --- a/QuestPDF.Previewer/PreviewerApp.axaml.cs +++ b/QuestPDF.Previewer/PreviewerApp.axaml.cs @@ -23,6 +23,7 @@ namespace QuestPDF.Previewer Document = Document }; } + base.OnFrameworkInitializationCompleted(); } } diff --git a/QuestPDF.Previewer/PreviewerCanvas.cs b/QuestPDF.Previewer/PreviewerCanvas.cs index a53ba0e..c57364b 100644 --- a/QuestPDF.Previewer/PreviewerCanvas.cs +++ b/QuestPDF.Previewer/PreviewerCanvas.cs @@ -4,18 +4,19 @@ using SkiaSharp; namespace QuestPDF.Previewer { + public record RenderedPageInfo(SKPicture Picture, Size Size); + internal sealed class PreviewerCanvas : SkiaCanvasBase, IRenderingCanvas { private SKPictureRecorder? _currentRecorder; - - private readonly List _pictures = new(); - public IReadOnlyList Pictures => _pictures; + + public ICollection Pictures { get; } = new List(); private Size? _currentSize; public override void BeginDocument() { - _pictures.Clear(); + Pictures.Clear(); } public override void BeginPage(Size size) @@ -31,8 +32,9 @@ namespace QuestPDF.Previewer public override void EndPage() { var picture = _currentRecorder?.EndRecording(); + if (picture != null && _currentSize.HasValue) - _pictures.Add(new RenderedPageInfo(picture, _currentSize.Value)); + Pictures.Add(new RenderedPageInfo(picture, _currentSize.Value)); _currentRecorder?.Dispose(); _currentRecorder = null; diff --git a/QuestPDF.Previewer/PreviewerWindow.axaml b/QuestPDF.Previewer/PreviewerWindow.axaml index 394537e..fd04a39 100644 --- a/QuestPDF.Previewer/PreviewerWindow.axaml +++ b/QuestPDF.Previewer/PreviewerWindow.axaml @@ -1,4 +1,4 @@ - - + - + @@ -57,4 +57,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/QuestPDF/Drawing/DocumentGenerator.cs b/QuestPDF/Drawing/DocumentGenerator.cs index d176856..2a5882c 100644 --- a/QuestPDF/Drawing/DocumentGenerator.cs +++ b/QuestPDF/Drawing/DocumentGenerator.cs @@ -53,13 +53,6 @@ namespace QuestPDF.Drawing internal static void RenderDocument(TCanvas canvas, IDocument document) where TCanvas : ICanvas, IRenderingCanvas - { - RenderDocument(canvas, new FreeCanvas(), document); - } - - internal static void RenderDocument(TCanvas canvas, TFreeCanvas freeCanvas, IDocument document, Action? afterFirstPass = null) - where TCanvas : ICanvas, IRenderingCanvas - where TFreeCanvas : ICanvas, IRenderingCanvas { var container = new DocumentContainer(); document.Compose(container); @@ -74,8 +67,7 @@ namespace QuestPDF.Drawing if (metadata.ApplyCaching) ApplyCaching(content); - RenderPass(pageContext, freeCanvas, content, metadata, debuggingState); - afterFirstPass?.Invoke(freeCanvas); + RenderPass(pageContext, new FreeCanvas(), content, metadata, debuggingState); RenderPass(pageContext, canvas, content, metadata, debuggingState); } diff --git a/QuestPDF/Drawing/SizeTrackingCanvas.cs b/QuestPDF/Drawing/SizeTrackingCanvas.cs deleted file mode 100644 index 5c2e3b7..0000000 --- a/QuestPDF/Drawing/SizeTrackingCanvas.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections.Generic; -using QuestPDF.Infrastructure; - -namespace QuestPDF.Drawing -{ - internal class SizeTrackingCanvas : FreeCanvas - { - private readonly List _pageSizes = new(); - public IReadOnlyList PageSizes => _pageSizes; - - public override void BeginPage(Size size) - { - _pageSizes.Add(size); - } - } -}