Skip to content

Commit 42962d3

Browse files
committed
Add html mode check for LineRenderer childs
DEVSIX-3837
1 parent 9946d7d commit 42962d3

File tree

2 files changed

+113
-5
lines changed

2 files changed

+113
-5
lines changed

layout/src/main/java/com/itextpdf/layout/renderer/LineRenderer.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,12 @@ public LayoutResult layout(LayoutContext layoutContext) {
125125

126126
occupiedArea = new LayoutArea(layoutContext.getArea().getPageNumber(), layoutBox.clone().moveUp(layoutBox.getHeight()).setHeight(0).setWidth(0));
127127

128+
updateChildrenParent();
129+
128130
float curWidth = 0;
129131
if (RenderingMode.HTML_MODE.equals(this.<RenderingMode>getProperty(Property.RENDERING_MODE))
130-
&& hasProperty(Property.LINE_HEIGHT)) {
132+
&& hasProperty(Property.LINE_HEIGHT)
133+
&& hasChildRendererInHtmlMode()) {
131134
float[] ascenderDescender = LineHeightHelper.getActualAscenderDescender(this);
132135
maxAscent = ascenderDescender[0];
133136
maxDescent = ascenderDescender[1];
@@ -150,8 +153,6 @@ && hasProperty(Property.LINE_HEIGHT)) {
150153
widthHandler = new MaxSumWidthHandler(minMaxWidth);
151154
}
152155

153-
updateChildrenParent();
154-
155156
resolveChildrenFonts();
156157

157158
int totalNumberOfTrimmedGlyphs = trimFirst();
@@ -922,6 +923,15 @@ public MinMaxWidth getMinMaxWidth() {
922923
return result.getMinMaxWidth();
923924
}
924925

926+
boolean hasChildRendererInHtmlMode() {
927+
for (IRenderer childRenderer : childRenderers) {
928+
if (RenderingMode.HTML_MODE.equals(childRenderer.<RenderingMode>getProperty(Property.RENDERING_MODE))) {
929+
return true;
930+
}
931+
}
932+
return false;
933+
}
934+
925935
float getTopLeadingIndent(Leading leading) {
926936
switch (leading.getType()) {
927937
case Leading.FIXED:

layout/src/test/java/com/itextpdf/layout/renderer/LineRendererUnitTest.java

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,19 @@ This file is part of the iText (R) project.
5353
import com.itextpdf.layout.layout.LayoutContext;
5454
import com.itextpdf.layout.layout.LayoutResult;
5555
import com.itextpdf.layout.property.FloatPropertyValue;
56+
import com.itextpdf.layout.property.LineHeight;
5657
import com.itextpdf.layout.property.Property;
5758
import com.itextpdf.layout.property.RenderingMode;
5859
import com.itextpdf.layout.property.UnitValue;
5960
import com.itextpdf.test.annotations.LogMessage;
6061
import com.itextpdf.test.annotations.LogMessages;
6162
import com.itextpdf.test.annotations.type.UnitTest;
6263

64+
import java.util.Arrays;
6365
import org.junit.Assert;
6466
import org.junit.Test;
6567
import org.junit.experimental.categories.Category;
6668

67-
import java.util.Arrays;
68-
6969
@Category(UnitTest.class)
7070
public class LineRendererUnitTest extends AbstractRendererUnitTest {
7171

@@ -181,4 +181,102 @@ public void adjustChildrenYLineImageChildHtmlModeTest() {
181181
Assert.assertEquals(50f, lineRenderer.getOccupiedAreaBBox().getBottom(), EPS);
182182
Assert.assertEquals(150.0, childImageRenderer.getOccupiedAreaBBox().getBottom(), EPS);
183183
}
184+
185+
@Test
186+
public void hasChildRendererInHtmlModeTest() {
187+
LineRenderer lineRenderer = new LineRenderer();
188+
189+
TextRenderer textRenderer1 = new TextRenderer(new Text("text1"));
190+
191+
TextRenderer textRenderer2 = new TextRenderer(new Text("text2"));
192+
textRenderer2.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
193+
194+
lineRenderer.addChild(textRenderer1);
195+
lineRenderer.addChild(textRenderer2);
196+
197+
Assert.assertTrue(lineRenderer.hasChildRendererInHtmlMode());
198+
}
199+
200+
@Test
201+
public void childRendererInDefaultModeTest() {
202+
LineRenderer lineRenderer = new LineRenderer();
203+
204+
TextRenderer textRenderer1 = new TextRenderer(new Text("text1"));
205+
206+
TextRenderer textRenderer2 = new TextRenderer(new Text("text2"));
207+
textRenderer2.setProperty(Property.RENDERING_MODE, RenderingMode.DEFAULT_LAYOUT_MODE);
208+
209+
lineRenderer.addChild(textRenderer1);
210+
lineRenderer.addChild(textRenderer2);
211+
212+
Assert.assertFalse(lineRenderer.hasChildRendererInHtmlMode());
213+
}
214+
215+
@Test
216+
public void hasChildRendererInHtmlModeNoChildrenTest() {
217+
LineRenderer lineRenderer = new LineRenderer();
218+
Assert.assertFalse(lineRenderer.hasChildRendererInHtmlMode());
219+
}
220+
221+
@Test
222+
public void lineRendererLayoutInHtmlModeWithLineHeightAndNoChildrenTest() {
223+
Document document = createDocument();
224+
225+
LineRenderer lineRenderer = new LineRenderer();
226+
lineRenderer.setParent(document.getRenderer());
227+
lineRenderer.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
228+
lineRenderer.setProperty(Property.LINE_HEIGHT, LineHeight.createNormalValue());
229+
230+
lineRenderer.layout(new LayoutContext(createLayoutArea(1000, 1000)));
231+
232+
Assert.assertEquals(0f, lineRenderer.maxAscent, 0f);
233+
Assert.assertEquals(0f, lineRenderer.maxDescent, 0f);
234+
}
235+
236+
@Test
237+
public void lineRendererLayoutInHtmlModeWithLineHeightAndChildrenInDefaultModeTest() {
238+
Document document = createDocument();
239+
240+
LineRenderer lineRenderer = new LineRenderer();
241+
lineRenderer.setParent(document.getRenderer());
242+
lineRenderer.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
243+
lineRenderer.setProperty(Property.LINE_HEIGHT, LineHeight.createFixedValue(50));
244+
245+
TextRenderer textRenderer1 = new TextRenderer(new Text("text"));
246+
textRenderer1.setProperty(Property.RENDERING_MODE, RenderingMode.DEFAULT_LAYOUT_MODE);
247+
248+
TextRenderer textRenderer2 = new TextRenderer(new Text("text"));
249+
textRenderer2.setProperty(Property.RENDERING_MODE, RenderingMode.DEFAULT_LAYOUT_MODE);
250+
251+
lineRenderer.addChild(textRenderer1);
252+
lineRenderer.addChild(textRenderer2);
253+
254+
lineRenderer.layout(new LayoutContext(createLayoutArea(1000, 1000)));
255+
256+
Assert.assertEquals(10.3392f, lineRenderer.maxAscent, EPS);
257+
Assert.assertEquals(-2.98079f, lineRenderer.maxDescent, EPS);
258+
}
259+
260+
@Test
261+
public void lineRendererLayoutInHtmlModeWithLineHeightAndChildInHtmlModeTest() {
262+
Document document = createDocument();
263+
264+
LineRenderer lineRenderer = new LineRenderer();
265+
lineRenderer.setParent(document.getRenderer());
266+
lineRenderer.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
267+
lineRenderer.setProperty(Property.LINE_HEIGHT, LineHeight.createFixedValue(50));
268+
269+
TextRenderer textRenderer1 = new TextRenderer(new Text("text"));
270+
textRenderer1.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
271+
272+
TextRenderer textRenderer2 = new TextRenderer(new Text("text"));
273+
274+
lineRenderer.addChild(textRenderer1);
275+
lineRenderer.addChild(textRenderer2);
276+
277+
lineRenderer.layout(new LayoutContext(createLayoutArea(1000, 1000)));
278+
279+
Assert.assertEquals(28.67920f, lineRenderer.maxAscent, EPS);
280+
Assert.assertEquals(-21.32080f, lineRenderer.maxDescent, EPS);
281+
}
184282
}

0 commit comments

Comments
 (0)