Experimental version of controlling content repeatability
This commit is contained in:
@@ -64,6 +64,8 @@ namespace QuestPDF.Drawing
|
||||
var container = new DocumentContainer();
|
||||
document.Compose(container);
|
||||
var content = container.Compose();
|
||||
|
||||
ApplyRepeatContent(content);
|
||||
ApplyDefaultTextStyle(content, TextStyle.LibraryDefault);
|
||||
|
||||
var debuggingState = Settings.EnableDebugging ? ApplyDebugging(content) : null;
|
||||
@@ -192,5 +194,23 @@ namespace QuestPDF.Drawing
|
||||
foreach (var child in content.GetChildren())
|
||||
ApplyDefaultTextStyle(child, documentDefaultTextStyle);
|
||||
}
|
||||
|
||||
internal static void ApplyRepeatContent(this Element? content, bool enabled = false)
|
||||
{
|
||||
if (content == null)
|
||||
return;
|
||||
|
||||
if (content is RepeatContent repeatContent)
|
||||
{
|
||||
ApplyRepeatContent(repeatContent.Child, repeatContent.Repeat);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var child in content.GetChildren())
|
||||
ApplyRepeatContent(child, enabled);
|
||||
|
||||
if (!enabled)
|
||||
content.CreateProxy(y => y is IContent ? new ShowOnce { Child = y } : y);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ namespace QuestPDF.Elements
|
||||
{
|
||||
public delegate void DrawOnCanvas(SKCanvas canvas, Size availableSpace);
|
||||
|
||||
internal class Canvas : Element, ICacheable
|
||||
internal class Canvas : Element, ICacheable, IContent
|
||||
{
|
||||
public DrawOnCanvas Handler { get; set; }
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ using QuestPDF.Infrastructure;
|
||||
|
||||
namespace QuestPDF.Elements
|
||||
{
|
||||
internal class DynamicHost : Element, IStateResettable
|
||||
internal class DynamicHost : Element, IStateResettable, IContent
|
||||
{
|
||||
private DynamicComponentProxy Child { get; }
|
||||
private object InitialComponentState { get; set; }
|
||||
|
||||
@@ -6,7 +6,7 @@ using SkiaSharp;
|
||||
|
||||
namespace QuestPDF.Elements
|
||||
{
|
||||
internal class DynamicImage : Element
|
||||
internal class DynamicImage : Element, IContent
|
||||
{
|
||||
public Func<Size, byte[]>? Source { get; set; }
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ using SkiaSharp;
|
||||
|
||||
namespace QuestPDF.Elements
|
||||
{
|
||||
internal class Image : Element, ICacheable
|
||||
internal class Image : Element, ICacheable, IContent
|
||||
{
|
||||
public SKImage? InternalImage { get; set; }
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace QuestPDF.Elements
|
||||
Horizontal
|
||||
}
|
||||
|
||||
internal class Line : Element, ILine, ICacheable
|
||||
internal class Line : Element, ILine, ICacheable, IContent
|
||||
{
|
||||
public LineType Type { get; set; } = LineType.Vertical;
|
||||
public string Color { get; set; } = Colors.Black;
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
using QuestPDF.Infrastructure;
|
||||
|
||||
namespace QuestPDF.Elements
|
||||
{
|
||||
internal class RepeatContent : ContainerElement
|
||||
{
|
||||
public bool Repeat { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ using QuestPDF.Infrastructure;
|
||||
|
||||
namespace QuestPDF.Elements.Text
|
||||
{
|
||||
internal class TextBlock : Element, IStateResettable
|
||||
internal class TextBlock : Element, IStateResettable, IContent
|
||||
{
|
||||
public HorizontalAlignment Alignment { get; set; } = HorizontalAlignment.Left;
|
||||
public List<ITextBlockItem> Items { get; set; } = new List<ITextBlockItem>();
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace QuestPDF.Fluent
|
||||
{
|
||||
var container = new Container();
|
||||
Decoration.Before = container;
|
||||
return container;
|
||||
return container.RepeatContent();
|
||||
}
|
||||
|
||||
public void Before(Action<IContainer> handler)
|
||||
@@ -36,7 +36,7 @@ namespace QuestPDF.Fluent
|
||||
{
|
||||
var container = new Container();
|
||||
Decoration.After = container;
|
||||
return container;
|
||||
return container.RepeatContent();
|
||||
}
|
||||
|
||||
public void After(Action<IContainer> handler)
|
||||
|
||||
@@ -195,5 +195,13 @@ namespace QuestPDF.Fluent
|
||||
{
|
||||
return element.Element(new ScaleToFit());
|
||||
}
|
||||
|
||||
public static IContainer RepeatContent(this IContainer element, bool enabled = true)
|
||||
{
|
||||
return element.Element(new RepeatContent
|
||||
{
|
||||
Repeat = enabled
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace QuestPDF.Infrastructure
|
||||
{
|
||||
internal interface IContent
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user