Skip to content

Commit cdea893

Browse files
introfogiText-CI
authored andcommitted
Support continuous container for grid
DEVSIX-8331 Autoported commit. Original commit hash: [c367aa510]
1 parent 76283c5 commit cdea893

File tree

12 files changed

+133
-5
lines changed

12 files changed

+133
-5
lines changed

itext.tests/itext.layout.tests/itext/layout/element/GridContainerTest.cs

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,5 +925,105 @@ public virtual void MarginsCollapsingIssueTest() {
925925
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
926926
));
927927
}
928+
929+
[NUnit.Framework.Test]
930+
public virtual void SplitPageTest() {
931+
String filename = DESTINATION_FOLDER + "splitPageTest.pdf";
932+
String cmpName = SOURCE_FOLDER + "cmp_splitPageTest.pdf";
933+
IList<TemplateValue> columnsTemplate = new List<TemplateValue>();
934+
columnsTemplate.Add(new AutoRepeatValue(true, JavaUtil.ArraysAsList((GridValue)new PointValue(200))));
935+
using (Document document = new Document(new PdfDocument(new PdfWriter(filename)))) {
936+
GridContainer grid = new GridContainer();
937+
grid.SetWidth(420);
938+
grid.SetBorder(new SolidBorder(20));
939+
grid.SetPadding(20);
940+
grid.SetMargin(20);
941+
grid.SetProperty(Property.GRID_TEMPLATE_COLUMNS, columnsTemplate);
942+
grid.SetProperty(Property.COLUMN_GAP, 20.0f);
943+
grid.Add(new Paragraph("One").SetBackgroundColor(ColorConstants.CYAN));
944+
grid.Add(new Paragraph("Two").SetBackgroundColor(ColorConstants.CYAN));
945+
grid.Add(new Paragraph("Tree").SetBackgroundColor(ColorConstants.CYAN));
946+
grid.Add(new Paragraph("Four").SetBackgroundColor(ColorConstants.CYAN));
947+
grid.Add(new Paragraph("Five").SetBackgroundColor(ColorConstants.CYAN));
948+
grid.Add(new Paragraph("Six").SetBackgroundColor(ColorConstants.CYAN));
949+
grid.Add(new Paragraph("Seven").SetBackgroundColor(ColorConstants.CYAN));
950+
grid.Add(new Paragraph("Eight").SetBackgroundColor(ColorConstants.CYAN));
951+
grid.Add(new Paragraph("Nine").SetBackgroundColor(ColorConstants.CYAN));
952+
Div emptyDiv = new Div();
953+
emptyDiv.SetHeight(640);
954+
emptyDiv.SetBackgroundColor(ColorConstants.LIGHT_GRAY);
955+
document.Add(emptyDiv);
956+
document.Add(grid);
957+
}
958+
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
959+
));
960+
}
961+
962+
[NUnit.Framework.Test]
963+
public virtual void BorderBoxSizingTest() {
964+
String filename = DESTINATION_FOLDER + "borderBoxSizingTest.pdf";
965+
String cmpName = SOURCE_FOLDER + "cmp_borderBoxSizingTest.pdf";
966+
IList<TemplateValue> columnsTemplate = new List<TemplateValue>();
967+
columnsTemplate.Add(new AutoRepeatValue(true, JavaUtil.ArraysAsList((GridValue)new PointValue(200))));
968+
using (Document document = new Document(new PdfDocument(new PdfWriter(filename)))) {
969+
GridContainer grid = new GridContainer();
970+
grid.SetWidth(420);
971+
grid.SetBorder(new SolidBorder(20));
972+
grid.SetPadding(20);
973+
grid.SetMargin(20);
974+
grid.SetProperty(Property.GRID_TEMPLATE_COLUMNS, columnsTemplate);
975+
grid.SetProperty(Property.COLUMN_GAP, 20.0f);
976+
grid.Add(new Paragraph("One").SetBackgroundColor(ColorConstants.CYAN));
977+
Paragraph two = new Paragraph("Two").SetBackgroundColor(ColorConstants.CYAN);
978+
two.SetProperty(Property.BOX_SIZING, BoxSizingPropertyValue.BORDER_BOX);
979+
two.SetPadding(10);
980+
two.SetMargin(10);
981+
two.SetBorder(new SolidBorder(ColorConstants.BLUE, 10));
982+
grid.Add(two);
983+
grid.Add(new Paragraph("Tree").SetBackgroundColor(ColorConstants.CYAN));
984+
grid.Add(new Paragraph("Four").SetBackgroundColor(ColorConstants.CYAN));
985+
grid.Add(new Paragraph("Five").SetBackgroundColor(ColorConstants.CYAN));
986+
grid.Add(new Paragraph("Six").SetBackgroundColor(ColorConstants.CYAN));
987+
grid.Add(new Paragraph("Seven").SetBackgroundColor(ColorConstants.CYAN));
988+
grid.Add(new Paragraph("Eight").SetBackgroundColor(ColorConstants.CYAN));
989+
grid.Add(new Paragraph("Nine").SetBackgroundColor(ColorConstants.CYAN));
990+
document.Add(grid);
991+
}
992+
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
993+
));
994+
}
995+
996+
[NUnit.Framework.Test]
997+
public virtual void MarginCollapsingTest() {
998+
String filename = DESTINATION_FOLDER + "marginCollapsingTest.pdf";
999+
String cmpName = SOURCE_FOLDER + "cmp_marginCollapsingTest.pdf";
1000+
IList<TemplateValue> columnsTemplate = new List<TemplateValue>();
1001+
columnsTemplate.Add(new AutoRepeatValue(true, JavaUtil.ArraysAsList((GridValue)new PointValue(200))));
1002+
using (Document document = new Document(new PdfDocument(new PdfWriter(filename)))) {
1003+
GridContainer grid = new GridContainer();
1004+
grid.SetWidth(420);
1005+
grid.SetBorder(new SolidBorder(20));
1006+
grid.SetPadding(20);
1007+
grid.SetMargin(20);
1008+
grid.SetProperty(Property.GRID_TEMPLATE_COLUMNS, columnsTemplate);
1009+
grid.SetProperty(Property.COLUMN_GAP, 20.0f);
1010+
grid.Add(new Paragraph("One").SetBackgroundColor(ColorConstants.CYAN));
1011+
Div twoParent = new Div();
1012+
Paragraph two = new Paragraph("Two").SetBackgroundColor(ColorConstants.CYAN);
1013+
twoParent.Add(two);
1014+
twoParent.Add(new Div());
1015+
grid.Add(twoParent);
1016+
grid.Add(new Paragraph("Tree").SetBackgroundColor(ColorConstants.CYAN));
1017+
grid.Add(new Paragraph("Four").SetBackgroundColor(ColorConstants.CYAN));
1018+
grid.Add(new Paragraph("Five").SetBackgroundColor(ColorConstants.CYAN));
1019+
grid.Add(new Paragraph("Six").SetBackgroundColor(ColorConstants.CYAN));
1020+
grid.Add(new Paragraph("Seven").SetBackgroundColor(ColorConstants.CYAN));
1021+
grid.Add(new Paragraph("Eight").SetBackgroundColor(ColorConstants.CYAN));
1022+
grid.Add(new Paragraph("Nine").SetBackgroundColor(ColorConstants.CYAN));
1023+
document.Add(grid);
1024+
}
1025+
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
1026+
));
1027+
}
9281028
}
9291029
}
Binary file not shown.

itext/itext.layout/itext/layout/margincollapse/MarginsCollapseHandler.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,12 @@ private static void IgnoreModelBottomMargin(IRenderer renderer) {
540540
private static void OverrideModelBottomMargin(IRenderer renderer, float collapsedMargins) {
541541
iText.Layout.Margincollapse.MarginsCollapseHandler.OverrideModelMargin(renderer, Property.MARGIN_BOTTOM, collapsedMargins
542542
);
543+
if (renderer.HasProperty(Property.TREAT_AS_CONTINUOUS_CONTAINER_RESULT)) {
544+
ContinuousContainer continuousContainer = renderer.GetProperty<ContinuousContainer>(Property.TREAT_AS_CONTINUOUS_CONTAINER_RESULT
545+
);
546+
continuousContainer.UpdateValueOfSavedProperty(Property.MARGIN_BOTTOM, UnitValue.CreatePointValue(collapsedMargins
547+
));
548+
}
543549
}
544550

545551
private static float DefineMarginValueForCollapse(IRenderer renderer, int property) {

itext/itext.layout/itext/layout/properties/ContinuousContainer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,12 @@ public void ReApplyProperties(AbstractRenderer blockRenderer) {
101101
blockRenderer.SetProperty(Property.BORDER_BOTTOM, allBorders);
102102
}
103103
}
104+
105+
/// <summary>Updates values of the saved property.</summary>
106+
/// <param name="property">the property to be updated</param>
107+
/// <param name="value">the new value</param>
108+
public void UpdateValueOfSavedProperty(int property, Object value) {
109+
properties.Put(property, value);
110+
}
104111
}
105112
}

itext/itext.layout/itext/layout/renderer/BlockRenderer.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,8 +408,8 @@ public override LayoutResult Layout(LayoutContext layoutContext) {
408408
}
409409
ApplyVerticalAlignment();
410410
FloatingHelper.RemoveFloatsAboveRendererBottom(floatRendererAreas, this);
411-
ContinuousContainer.ClearPropertiesFromOverFlowRenderer(overflowRenderer_1);
412411
if (layoutResult_1 != LayoutResult.NOTHING) {
412+
ContinuousContainer.ClearPropertiesFromOverFlowRenderer(overflowRenderer_1);
413413
LayoutArea editedArea = FloatingHelper.AdjustResultOccupiedAreaForFloatAndClear(this, layoutContext.GetFloatRendererAreas
414414
(), layoutContext.GetArea().GetBBox(), clearHeightCorrection, bfcHeightCorrection, marginsCollapsingEnabled
415415
);
@@ -599,7 +599,9 @@ internal virtual AbstractRenderer[] CreateSplitAndOverflowRenderers(int childPos
599599
overflowRenderer.AddChildRenderer(childResult.GetOverflowRenderer());
600600
}
601601
overflowRenderer.childRenderers.AddAll(childRenderers.SubList(childPos + 1, childRenderers.Count));
602-
ContinuousContainer.ClearPropertiesFromOverFlowRenderer(overflowRenderer);
602+
if (layoutStatus != LayoutResult.NOTHING) {
603+
ContinuousContainer.ClearPropertiesFromOverFlowRenderer(overflowRenderer);
604+
}
603605
if (childResult.GetStatus() == LayoutResult.PARTIAL) {
604606
// Apply forced placement only on split renderer
605607
overflowRenderer.DeleteOwnProperty(Property.FORCED_PLACEMENT);

itext/itext.layout/itext/layout/renderer/GridContainerRenderer.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ public override IRenderer GetNextRenderer() {
5656

5757
/// <summary><inheritDoc/></summary>
5858
public override LayoutResult Layout(LayoutContext layoutContext) {
59-
//TODO DEVSIX-8331 enable continuous container
60-
//this.setProperty(Property.TREAT_AS_CONTINUOUS_CONTAINER, Boolean.TRUE);
59+
this.SetProperty(Property.TREAT_AS_CONTINUOUS_CONTAINER, true);
6160
Rectangle actualBBox = layoutContext.GetArea().GetBBox().Clone();
6261
float? blockWidth = RetrieveWidth(actualBBox.GetWidth());
6362
ContinuousContainer.SetupContinuousContainerIfNeeded(this);
@@ -75,6 +74,9 @@ public override LayoutResult Layout(LayoutContext layoutContext) {
7574
.GetHeight()));
7675
GridContainerRenderer.GridLayoutResult layoutResult = LayoutGrid(layoutContext, actualBBox, grid);
7776
if (layoutResult.GetOverflowRenderers().IsEmpty()) {
77+
ContinuousContainer continuousContainer = this.GetProperty<ContinuousContainer>(Property.TREAT_AS_CONTINUOUS_CONTAINER_RESULT
78+
);
79+
continuousContainer.ReApplyProperties(this);
7880
this.occupiedArea = CalculateContainerOccupiedArea(layoutContext, true);
7981
return new LayoutResult(LayoutResult.FULL, this.occupiedArea, null, null);
8082
}

0 commit comments

Comments
 (0)