Browse Source

Updated stability of rendering elements when negative space

MarcinZiabek 3 năm trước cách đây
mục cha
commit
b7b6488d16

+ 4 - 1
QuestPDF/Elements/Canvas.cs

@@ -1,4 +1,5 @@
 using QuestPDF.Drawing;
 using QuestPDF.Drawing;
+using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
 using SkiaSharp;
 using SkiaSharp;
 
 
@@ -12,7 +13,9 @@ namespace QuestPDF.Elements
         
         
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {
-            return SpacePlan.FullRender(availableSpace);
+            return availableSpace.IsNegative() 
+                ? SpacePlan.Wrap() 
+                : SpacePlan.FullRender(availableSpace);
         }
         }
 
 
         internal override void Draw(Size availableSpace)
         internal override void Draw(Size availableSpace)

+ 4 - 1
QuestPDF/Elements/DynamicImage.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using QuestPDF.Drawing;
 using QuestPDF.Drawing;
+using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
 using SkiaSharp;
 using SkiaSharp;
 
 
@@ -11,7 +12,9 @@ namespace QuestPDF.Elements
         
         
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {
-            return SpacePlan.FullRender(availableSpace.Width, availableSpace.Height);
+            return availableSpace.IsNegative() 
+                ? SpacePlan.Wrap() 
+                : SpacePlan.FullRender(availableSpace);
         }
         }
 
 
         internal override void Draw(Size availableSpace)
         internal override void Draw(Size availableSpace)

+ 4 - 1
QuestPDF/Elements/Empty.cs

@@ -1,4 +1,5 @@
 using QuestPDF.Drawing;
 using QuestPDF.Drawing;
+using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
 
 
 namespace QuestPDF.Elements
 namespace QuestPDF.Elements
@@ -9,7 +10,9 @@ namespace QuestPDF.Elements
         
         
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {
-            return SpacePlan.FullRender(0, 0);
+            return availableSpace.IsNegative() 
+                ? SpacePlan.Wrap() 
+                : SpacePlan.FullRender(0, 0);
         }
         }
 
 
         internal override void Draw(Size availableSpace)
         internal override void Draw(Size availableSpace)

+ 4 - 1
QuestPDF/Elements/Image.cs

@@ -1,4 +1,5 @@
 using QuestPDF.Drawing;
 using QuestPDF.Drawing;
+using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
 using SkiaSharp;
 using SkiaSharp;
 
 
@@ -15,7 +16,9 @@ namespace QuestPDF.Elements
         
         
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {
-            return SpacePlan.FullRender(availableSpace);
+            return availableSpace.IsNegative() 
+                ? SpacePlan.Wrap() 
+                : SpacePlan.FullRender(availableSpace);
         }
         }
 
 
         internal override void Draw(Size availableSpace)
         internal override void Draw(Size availableSpace)

+ 3 - 0
QuestPDF/Elements/Line.cs

@@ -23,6 +23,9 @@ namespace QuestPDF.Elements
         
         
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {
+            if (availableSpace.IsNegative())
+                return SpacePlan.Wrap();
+            
             return Type switch
             return Type switch
             {
             {
                 LineType.Vertical when availableSpace.Width + Infrastructure.Size.Epsilon >= Size => SpacePlan.FullRender(Size, 0),
                 LineType.Vertical when availableSpace.Width + Infrastructure.Size.Epsilon >= Size => SpacePlan.FullRender(Size, 0),

+ 2 - 1
QuestPDF/Elements/PageBreak.cs

@@ -1,4 +1,5 @@
 using QuestPDF.Drawing;
 using QuestPDF.Drawing;
+using QuestPDF.Helpers;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
 
 
 namespace QuestPDF.Elements
 namespace QuestPDF.Elements
@@ -14,7 +15,7 @@ namespace QuestPDF.Elements
 
 
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {
-            if (availableSpace.Width < 0f || availableSpace.Height < 0f)
+            if (availableSpace.IsNegative())
                 return SpacePlan.Wrap();
                 return SpacePlan.Wrap();
             
             
             if (IsRendered)
             if (IsRendered)

+ 6 - 0
QuestPDF/Helpers/Helpers.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using System.Linq.Expressions;
 using System.Linq.Expressions;
 using System.Reflection;
 using System.Reflection;
 using System.Text.RegularExpressions;
 using System.Text.RegularExpressions;
+using QuestPDF.Drawing;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
 
 
 namespace QuestPDF.Helpers
 namespace QuestPDF.Helpers
@@ -54,5 +55,10 @@ namespace QuestPDF.Helpers
 
 
             handler(element);
             handler(element);
         }
         }
+
+        internal static bool IsNegative(this Size size)
+        {
+            return size.Width < 0f || size.Height < 0f;
+        }
     }
     }
 }
 }