Browse Source

Fixed Row.AutoItem width calculation

MarcinZiabek 3 years ago
parent
commit
a0b32e5ecf

+ 2 - 1
QuestPDF.Previewer.Examples/Program.cs

@@ -2,13 +2,14 @@
 using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
 using QuestPDF.Previewer;
+using QuestPDF.ReportSample;
 using QuestPDF.ReportSample.Layouts;
 
 //ImagePlaceholder.Solid = true;
 
 // var model = DataSource.GetReport();
 // var report = new StandardReport(model);
-// report.ShowInPreviewer().Wait();
+// report.ShowInPreviewer();
 //
 // return;
 

+ 17 - 3
QuestPDF.ReportSample/Layouts/TableOfContentsTemplate.cs

@@ -3,6 +3,7 @@ using System.Drawing;
 using QuestPDF.Fluent;
 using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
+using SkiaSharp;
 
 namespace QuestPDF.ReportSample.Layouts
 {
@@ -44,9 +45,22 @@ namespace QuestPDF.ReportSample.Layouts
                 .SectionLink(locationName)
                 .Row(row =>
                 {
-                    row.ConstantItem(25).Text($"{number}.");
-                    row.RelativeItem().Text(locationName);
-                    row.ConstantItem(150).AlignRight().Text(text =>
+                    row.ConstantItem(20).Text($"{number}.");
+                    row.AutoItem().Text(locationName);
+                    
+                    row.RelativeItem().PaddingHorizontal(2).AlignBottom().TranslateY(-3).Height(1).Canvas((canvas, space) =>
+                    {
+                        // best to statically cache
+                        using var paint = new SKPaint
+                        {
+                            StrokeWidth = space.Height,
+                            PathEffect = SKPathEffect.CreateDash(new float[] { 1, 3 }, 0)
+                        };
+                        
+                        canvas.DrawLine(0, 0, space.Width, 0, paint);
+                    });
+                    
+                    row.AutoItem().Text(text =>
                     {
                         text.BeginPageNumberOfSection(locationName);
                         text.Span(" - ");

+ 5 - 13
QuestPDF/Elements/Row.cs

@@ -102,13 +102,14 @@ namespace QuestPDF.Elements
 
         private void UpdateItemsWidth(float availableWidth)
         {
-            HandleItemsWithAutoWidth();
+            foreach (var rowItem in Items.Where(x => x.Type == RowItemType.Auto))
+                rowItem.Size = rowItem.Measure(Size.Max).Width;
             
-            var constantWidth = Items.Where(x => x.Type == RowItemType.Constant).Sum(x => x.Size);
+            var constantWidth = Items.Where(x => x.Type != RowItemType.Relative).Sum(x => x.Size);
             var relativeWidth = Items.Where(x => x.Type == RowItemType.Relative).Sum(x => x.Size);
             var spacingWidth = (Items.Count - 1) * Spacing;
 
-            foreach (var item in Items.Where(x => x.Type == RowItemType.Constant))
+            foreach (var item in Items.Where(x => x.Type != RowItemType.Relative))
                 item.Width = item.Size;
             
             if (relativeWidth <= 0)
@@ -119,16 +120,7 @@ namespace QuestPDF.Elements
             foreach (var item in Items.Where(x => x.Type == RowItemType.Relative))
                 item.Width = item.Size * widthPerRelativeUnit;
         }
-
-        private void HandleItemsWithAutoWidth()
-        {
-            foreach (var rowItem in Items.Where(x => x.Type == RowItemType.Auto))
-            {
-                rowItem.Size = rowItem.Measure(Size.Max).Width;
-                rowItem.Type = RowItemType.Constant;
-            }
-        }
-
+        
         private ICollection<RowItemRenderingCommand> PlanLayout(Size availableSpace)
         {
             var leftOffset = 0f;