Browse Source

RTL: constrained

MarcinZiabek 3 years ago
parent
commit
fab0f5bfe1
2 changed files with 30 additions and 3 deletions
  1. 19 0
      QuestPDF.Examples/RightToLeftExamples.cs
  2. 11 3
      QuestPDF/Elements/Constrained.cs

+ 19 - 0
QuestPDF.Examples/RightToLeftExamples.cs

@@ -124,5 +124,24 @@ namespace QuestPDF.Examples
                         .Background(Colors.Red.Medium);
                 });
         }
+        
+        [Test]
+        public void Constrained()
+        {
+            RenderingTest
+                .Create()
+                .ProduceImages()
+                .PageSize(600, 600)
+                .ShowResults()
+                .Render(container =>
+                {
+                    container
+                        .Padding(25)
+                        .ContentFromRightToLeft()
+                        .Border(1)
+                        .MaxWidth(100)
+                        .Background(Colors.Red.Medium);
+                });
+        }
     }
 }

+ 11 - 3
QuestPDF/Elements/Constrained.cs

@@ -5,8 +5,10 @@ using QuestPDF.Infrastructure;
 
 namespace QuestPDF.Elements
 {
-    internal class Constrained : ContainerElement, ICacheable
+    internal class Constrained : ContainerElement, ICacheable, IContentDirectionAware
     {
+        public ContentDirection ContentDirection { get; set; }
+        
         public float? MinWidth { get; set; }
         public float? MaxWidth { get; set; }
 
@@ -45,11 +47,17 @@ namespace QuestPDF.Elements
         
         internal override void Draw(Size availableSpace)
         {
-            var available = new Size(
+            var size = new Size(
                 Min(MaxWidth, availableSpace.Width),
                 Min(MaxHeight, availableSpace.Height));
             
-            Child?.Draw(available);
+            var offset = ContentDirection == ContentDirection.LeftToRight
+                ? Position.Zero
+                : new Position(availableSpace.Width - size.Width, 0);
+            
+            Canvas.Translate(offset);
+            base.Draw(size);
+            Canvas.Translate(offset.Reverse());
         }
         
         private static float Min(float? x, float y)