Browse Source

RTL: dynamic

MarcinZiabek 3 years ago
parent
commit
a7ac747776

+ 43 - 0
QuestPDF.Examples/RightToLeftExamples.cs

@@ -1,4 +1,5 @@
 using NUnit.Framework;
+using QuestPDF.Elements;
 using QuestPDF.Examples.Engine;
 using QuestPDF.Fluent;
 using QuestPDF.Helpers;
@@ -143,5 +144,47 @@ namespace QuestPDF.Examples
                         .Background(Colors.Red.Medium);
                 });
         }
+        
+        [Test]
+        public void Dynamic()
+        {
+            RenderingTest
+                .Create()
+                .ProduceImages()
+                .PageSize(600, 600)
+                .ShowResults()
+                .Render(container =>
+                {
+                    container
+                        .Padding(25)
+                        .ContentFromRightToLeft()
+                        .Dynamic(new SimpleDynamic());
+                });
+        }
+
+        class SimpleDynamic : IDynamicComponent<int>
+        {
+            public int State { get; set; }
+            
+            public DynamicComponentComposeResult Compose(DynamicContext context)
+            {
+                var content = context.CreateElement(container =>
+                {
+                    container
+                        .Row(row =>
+                        {
+                            row.ConstantItem(200).Background(Colors.Red.Lighten2).Height(200);
+                            row.ConstantItem(150).Background(Colors.Green.Lighten2).Height(200);
+                            row.ConstantItem(100).Background(Colors.Blue.Lighten2).Height(200);
+                        });
+                });
+                
+                return new DynamicComponentComposeResult
+                {
+                    Content = content,
+                    HasMoreContent = false
+                };
+            }
+        }
     }
 }

+ 1 - 1
QuestPDF/Drawing/DocumentGenerator.cs

@@ -162,7 +162,7 @@ namespace QuestPDF.Drawing
             return debuggingState;
         }
         
-        private static void ApplyContentDirection(Element? content, ContentDirection direction)
+        internal static void ApplyContentDirection(this Element? content, ContentDirection direction)
         {
             if (content == null)
                 return;

+ 11 - 4
QuestPDF/Elements/Dynamic.cs

@@ -6,13 +6,14 @@ using QuestPDF.Infrastructure;
 
 namespace QuestPDF.Elements
 {
-    internal class DynamicHost : Element, IStateResettable
+    internal class DynamicHost : Element, IStateResettable, IContentDirectionAware
     {
         private DynamicComponentProxy Child { get; }
         private object InitialComponentState { get; set; }
 
         internal TextStyle TextStyle { get; set; } = TextStyle.Default;
-
+        public ContentDirection ContentDirection { get; set; }
+        
         public DynamicHost(DynamicComponentProxy child)
         {
             Child = child;
@@ -51,12 +52,14 @@ namespace QuestPDF.Elements
             
             var context = new DynamicContext
             {
-                PageNumber = PageContext.CurrentPage,
-                TotalPages = PageContext.GetLocation(Infrastructure.PageContext.DocumentLocation).PageEnd,
                 PageContext = PageContext,
                 Canvas = Canvas,
+                
                 TextStyle = TextStyle,
+                ContentDirection = ContentDirection,
                 
+                PageNumber = PageContext.CurrentPage,
+                TotalPages = PageContext.GetLocation(Infrastructure.PageContext.DocumentLocation).PageEnd,
                 AvailableSize = availableSize
             };
             
@@ -73,7 +76,9 @@ namespace QuestPDF.Elements
     {
         internal IPageContext PageContext { get; set; }
         internal ICanvas Canvas { get; set; }
+        
         internal TextStyle TextStyle { get; set; }
+        internal ContentDirection ContentDirection { get; set; }
     
         public int PageNumber { get; internal set; }
         public int TotalPages { get; internal set; }
@@ -85,6 +90,8 @@ namespace QuestPDF.Elements
             content(container);
             
             container.ApplyDefaultTextStyle(TextStyle);
+            container.ApplyContentDirection(ContentDirection);
+            
             container.VisitChildren(x => x?.Initialize(PageContext, Canvas));
             container.VisitChildren(x => (x as IStateResettable)?.ResetState());