Skip to content

Commit 6e07dfa

Browse files
Eugene BochiloiText-CI
authored andcommitted
Implement initial layout method for FlexContainerRenderer
DEVSIX-4997 Autoported commit. Original commit hash: [41a612275]
1 parent 511639c commit 6e07dfa

File tree

34 files changed

+1290
-140
lines changed

34 files changed

+1290
-140
lines changed

itext.tests/itext.layout.tests/itext/layout/FlexContainerTest.cs

Lines changed: 626 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
using iText.Layout.Borders;
2+
using iText.Layout.Element;
3+
using iText.Layout.Properties;
4+
using iText.Test;
5+
6+
namespace iText.Layout.Renderer {
7+
public class FlexContainerRendererTest : ExtendedITextTest {
8+
private static float EPS = 0.0001F;
9+
10+
[NUnit.Framework.Test]
11+
public virtual void WidthNotSetTest() {
12+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
13+
DivRenderer divRenderer = new DivRenderer(new Div());
14+
flexRenderer.AddChild(divRenderer);
15+
NUnit.Framework.Assert.AreEqual(0F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
16+
NUnit.Framework.Assert.AreEqual(0F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
17+
}
18+
19+
[NUnit.Framework.Test]
20+
public virtual void WidthSetToChildOneChildTest() {
21+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
22+
DivRenderer divRenderer = new DivRenderer(new Div());
23+
divRenderer.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
24+
flexRenderer.AddChild(divRenderer);
25+
NUnit.Framework.Assert.AreEqual(50F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
26+
NUnit.Framework.Assert.AreEqual(50F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
27+
}
28+
29+
[NUnit.Framework.Test]
30+
public virtual void WidthSetToChildManyChildrenTest() {
31+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
32+
DivRenderer divRenderer1 = new DivRenderer(new Div());
33+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
34+
DivRenderer divRenderer2 = new DivRenderer(new Div());
35+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
36+
DivRenderer divRenderer3 = new DivRenderer(new Div());
37+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
38+
DivRenderer divRenderer4 = new DivRenderer(new Div());
39+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(5));
40+
flexRenderer.AddChild(divRenderer1);
41+
flexRenderer.AddChild(divRenderer2);
42+
flexRenderer.AddChild(divRenderer3);
43+
flexRenderer.AddChild(divRenderer4);
44+
NUnit.Framework.Assert.AreEqual(125F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
45+
NUnit.Framework.Assert.AreEqual(125F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
46+
}
47+
48+
[NUnit.Framework.Test]
49+
public virtual void WidthSetToChildManyChildrenWithBordersMarginsPaddingsTest() {
50+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
51+
DivRenderer divRenderer1 = new DivRenderer(new Div());
52+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
53+
divRenderer1.SetProperty(Property.BORDER, new SolidBorder(5));
54+
DivRenderer divRenderer2 = new DivRenderer(new Div());
55+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
56+
divRenderer2.SetProperty(Property.MARGIN_LEFT, UnitValue.CreatePointValue(10));
57+
DivRenderer divRenderer3 = new DivRenderer(new Div());
58+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
59+
divRenderer3.SetProperty(Property.PADDING_RIGHT, UnitValue.CreatePointValue(15));
60+
DivRenderer divRenderer4 = new DivRenderer(new Div());
61+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(10));
62+
flexRenderer.AddChild(divRenderer1);
63+
flexRenderer.AddChild(divRenderer2);
64+
flexRenderer.AddChild(divRenderer3);
65+
flexRenderer.AddChild(divRenderer4);
66+
NUnit.Framework.Assert.AreEqual(165F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
67+
NUnit.Framework.Assert.AreEqual(165F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
68+
}
69+
70+
[NUnit.Framework.Test]
71+
public virtual void WidthSetToFlexRendererAndToChildManyChildrenWithBordersMarginsPaddingsTest() {
72+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
73+
flexRenderer.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
74+
DivRenderer divRenderer1 = new DivRenderer(new Div());
75+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
76+
divRenderer1.SetProperty(Property.BORDER, new SolidBorder(5));
77+
DivRenderer divRenderer2 = new DivRenderer(new Div());
78+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
79+
divRenderer2.SetProperty(Property.MARGIN_LEFT, UnitValue.CreatePointValue(10));
80+
DivRenderer divRenderer3 = new DivRenderer(new Div());
81+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
82+
divRenderer3.SetProperty(Property.PADDING_RIGHT, UnitValue.CreatePointValue(15));
83+
DivRenderer divRenderer4 = new DivRenderer(new Div());
84+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(10));
85+
flexRenderer.AddChild(divRenderer1);
86+
flexRenderer.AddChild(divRenderer2);
87+
flexRenderer.AddChild(divRenderer3);
88+
flexRenderer.AddChild(divRenderer4);
89+
NUnit.Framework.Assert.AreEqual(50F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
90+
NUnit.Framework.Assert.AreEqual(50F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
91+
}
92+
93+
[NUnit.Framework.Test]
94+
public virtual void WidthSetToChildManyChildrenFlexRendererWithRotationAngleTest() {
95+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
96+
flexRenderer.SetProperty(Property.ROTATION_ANGLE, 10f);
97+
DivRenderer divRenderer1 = new DivRenderer(new Div());
98+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
99+
DivRenderer divRenderer2 = new DivRenderer(new Div());
100+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
101+
DivRenderer divRenderer3 = new DivRenderer(new Div());
102+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
103+
DivRenderer divRenderer4 = new DivRenderer(new Div());
104+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(5));
105+
flexRenderer.AddChild(divRenderer1);
106+
flexRenderer.AddChild(divRenderer2);
107+
flexRenderer.AddChild(divRenderer3);
108+
flexRenderer.AddChild(divRenderer4);
109+
NUnit.Framework.Assert.AreEqual(104.892334F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
110+
NUnit.Framework.Assert.AreEqual(104.892334F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
111+
}
112+
113+
[NUnit.Framework.Test]
114+
public virtual void WidthSetToChildManyChildrenFlexRendererWithMinWidthTest() {
115+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
116+
flexRenderer.SetProperty(Property.MIN_WIDTH, UnitValue.CreatePointValue(71));
117+
DivRenderer divRenderer1 = new DivRenderer(new Div());
118+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
119+
DivRenderer divRenderer2 = new DivRenderer(new Div());
120+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
121+
DivRenderer divRenderer3 = new DivRenderer(new Div());
122+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
123+
DivRenderer divRenderer4 = new DivRenderer(new Div());
124+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(5));
125+
flexRenderer.AddChild(divRenderer1);
126+
flexRenderer.AddChild(divRenderer2);
127+
flexRenderer.AddChild(divRenderer3);
128+
flexRenderer.AddChild(divRenderer4);
129+
NUnit.Framework.Assert.AreEqual(71F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
130+
NUnit.Framework.Assert.AreEqual(125F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
131+
}
132+
133+
[NUnit.Framework.Test]
134+
public virtual void WidthSetToChildManyChildrenFlexRendererWithMinWidthBiggerThanMaxWidthTest() {
135+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
136+
flexRenderer.SetProperty(Property.MIN_WIDTH, UnitValue.CreatePointValue(150));
137+
DivRenderer divRenderer1 = new DivRenderer(new Div());
138+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
139+
DivRenderer divRenderer2 = new DivRenderer(new Div());
140+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
141+
DivRenderer divRenderer3 = new DivRenderer(new Div());
142+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
143+
DivRenderer divRenderer4 = new DivRenderer(new Div());
144+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(5));
145+
flexRenderer.AddChild(divRenderer1);
146+
flexRenderer.AddChild(divRenderer2);
147+
flexRenderer.AddChild(divRenderer3);
148+
flexRenderer.AddChild(divRenderer4);
149+
NUnit.Framework.Assert.AreEqual(150F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
150+
NUnit.Framework.Assert.AreEqual(150F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
151+
}
152+
153+
[NUnit.Framework.Test]
154+
public virtual void WidthSetToChildManyChildrenFlexRendererWithMaxWidthTest() {
155+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
156+
flexRenderer.SetProperty(Property.MAX_WIDTH, UnitValue.CreatePointValue(150));
157+
DivRenderer divRenderer1 = new DivRenderer(new Div());
158+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
159+
DivRenderer divRenderer2 = new DivRenderer(new Div());
160+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
161+
DivRenderer divRenderer3 = new DivRenderer(new Div());
162+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
163+
DivRenderer divRenderer4 = new DivRenderer(new Div());
164+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(5));
165+
flexRenderer.AddChild(divRenderer1);
166+
flexRenderer.AddChild(divRenderer2);
167+
flexRenderer.AddChild(divRenderer3);
168+
flexRenderer.AddChild(divRenderer4);
169+
NUnit.Framework.Assert.AreEqual(125F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
170+
NUnit.Framework.Assert.AreEqual(150F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
171+
}
172+
173+
[NUnit.Framework.Test]
174+
public virtual void WidthSetToChildManyChildrenFlexRendererWithMaxWidthLowerThanMinWidthTest() {
175+
FlexContainerRenderer flexRenderer = new FlexContainerRenderer(new Div());
176+
flexRenderer.SetProperty(Property.MAX_WIDTH, UnitValue.CreatePointValue(100));
177+
DivRenderer divRenderer1 = new DivRenderer(new Div());
178+
divRenderer1.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(50));
179+
DivRenderer divRenderer2 = new DivRenderer(new Div());
180+
divRenderer2.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(40));
181+
DivRenderer divRenderer3 = new DivRenderer(new Div());
182+
divRenderer3.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(30));
183+
DivRenderer divRenderer4 = new DivRenderer(new Div());
184+
divRenderer4.SetProperty(Property.WIDTH, UnitValue.CreatePointValue(5));
185+
flexRenderer.AddChild(divRenderer1);
186+
flexRenderer.AddChild(divRenderer2);
187+
flexRenderer.AddChild(divRenderer3);
188+
flexRenderer.AddChild(divRenderer4);
189+
NUnit.Framework.Assert.AreEqual(100F, flexRenderer.GetMinMaxWidth().GetMinWidth(), EPS);
190+
NUnit.Framework.Assert.AreEqual(100F, flexRenderer.GetMinMaxWidth().GetMaxWidth(), EPS);
191+
}
192+
}
193+
}

itext.tests/itext.layout.tests/itext/layout/renderer/FlexUtilTest.cs

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ public virtual void DifferentBasisSumLtWidthGrow1Shrink1Test01() {
351351
}
352352

353353
[NUnit.Framework.Test]
354-
public virtual void DifferentBasisSumLtWidthGrow1Shrink1Item2Margin20Test01() {
354+
public virtual void DifferentBasisSumLtWidthGrow1Shrink0Item2MarginBorderPadding30Test01() {
355355
Rectangle bBox = new Rectangle(575, 842);
356356
IList<UnitValue> flexBasisValues = JavaUtil.ArraysAsList(UnitValue.CreatePointValue(50f), UnitValue.CreatePointValue
357357
(80f), UnitValue.CreatePointValue(100f));
@@ -381,10 +381,45 @@ public virtual void DifferentBasisSumLtWidthGrow1Shrink1Item2Margin20Test01() {
381381
IList<IList<FlexItemInfo>> rectangleTable = FlexUtil.CalculateChildrenRectangles(bBox, (FlexContainerRenderer
382382
)div.GetRenderer(), flexItemCalculationInfos);
383383
NUnit.Framework.Assert.AreEqual(86.66667f, rectangleTable[0][0].GetRectangle().GetWidth(), EPS);
384-
NUnit.Framework.Assert.AreEqual(116.66667f, rectangleTable[0][1].GetRectangle().GetWidth(), EPS);
384+
NUnit.Framework.Assert.AreEqual(176.66667f, rectangleTable[0][1].GetRectangle().GetWidth(), EPS);
385385
NUnit.Framework.Assert.AreEqual(136.66667f, rectangleTable[0][2].GetRectangle().GetWidth(), EPS);
386386
}
387387

388+
[NUnit.Framework.Test]
389+
public virtual void DifferentBasisSumLtWidthGrow1Shrink1Item2MarginBorderPadding30Test01() {
390+
Rectangle bBox = new Rectangle(575, 842);
391+
IList<UnitValue> flexBasisValues = JavaUtil.ArraysAsList(UnitValue.CreatePointValue(50f), UnitValue.CreatePointValue
392+
(80f), UnitValue.CreatePointValue(100f));
393+
IList<FlexUtil.FlexItemCalculationInfo> flexItemCalculationInfos = new List<FlexUtil.FlexItemCalculationInfo
394+
>();
395+
Div div = new Div().SetWidth(200).SetHeight(100);
396+
DocumentRenderer documentRenderer = new DocumentRenderer(new Document(new PdfDocument(new PdfWriter(new MemoryStream
397+
()))));
398+
for (int i = 0; i < flexBasisValues.Count; i++) {
399+
Div flexItem = new Div().Add(new Paragraph("x"));
400+
if (1 == i) {
401+
flexItem.SetMargin(10).SetBorder(new SolidBorder(15)).SetPadding(5);
402+
}
403+
AbstractRenderer flexItemRenderer = (AbstractRenderer)flexItem.CreateRendererSubTree().SetParent(documentRenderer
404+
);
405+
div.Add(flexItem);
406+
flexItemCalculationInfos.Add(new FlexUtil.FlexItemCalculationInfo(flexItemRenderer, flexBasisValues[i], 1,
407+
1, bBox.GetWidth()));
408+
}
409+
FlexContainerRenderer flexContainerRenderer = new FlexContainerRenderer(div);
410+
div.SetNextRenderer(flexContainerRenderer);
411+
// before checks
412+
foreach (FlexUtil.FlexItemCalculationInfo info in flexItemCalculationInfos) {
413+
NUnit.Framework.Assert.IsNull(info.mainSize);
414+
NUnit.Framework.Assert.IsNull(info.crossSize);
415+
}
416+
IList<IList<FlexItemInfo>> rectangleTable = FlexUtil.CalculateChildrenRectangles(bBox, (FlexContainerRenderer
417+
)div.GetRenderer(), flexItemCalculationInfos);
418+
NUnit.Framework.Assert.AreEqual(30.434784f, rectangleTable[0][0].GetRectangle().GetWidth(), EPS);
419+
NUnit.Framework.Assert.AreEqual(108.69565f, rectangleTable[0][1].GetRectangle().GetWidth(), EPS);
420+
NUnit.Framework.Assert.AreEqual(60.869568f, rectangleTable[0][2].GetRectangle().GetWidth(), EPS);
421+
}
422+
388423
[NUnit.Framework.Test]
389424
public virtual void DifferentBasisSumLtWidthGrow1Shrink1Item2MuchContentTest01() {
390425
Rectangle bBox = new Rectangle(575, 842);

0 commit comments

Comments
 (0)