RTL: dynamic

This commit is contained in:
MarcinZiabek
2022-09-29 21:28:22 +02:00
parent fab0f5bfe1
commit a7ac747776
3 changed files with 56 additions and 6 deletions
+43
View File
@@ -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
View File
@@ -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;
+12 -5
View File
@@ -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,
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());