Browse Source

Wrap inline block with relative width to new line if there is not enough space on current line

DEVSIX-5796, DEVSIX-1823, DEVSIX-6143

Autoported commit.
Original commit hash: [68055cba7]
pull/24/merge
Vitali Prudnikovich 3 years ago
committed by iText Software
parent
commit
530bdda407
  1. 1
      itext.tests/itext.layout.tests/itext/layout/InlineBlockTest.cs
  2. 29
      itext/itext.layout/itext/layout/renderer/LineRenderer.cs
  3. 2
      port-hash

1
itext.tests/itext.layout.tests/itext/layout/InlineBlockTest.cs

@ -153,7 +153,6 @@ namespace iText.Layout {
inlineDiv.SetProperty(Property.OVERFLOW_Y, OverflowPropertyValue.VISIBLE);
doc.Add(new Div().Add(floatingDiv).Add(new Paragraph().Add(inlineDiv)));
}
// TODO DEVSIX-5796 inline-block should be wrapped to the next line
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(output, cmp, destinationFolder));
}
}

29
itext/itext.layout/itext/layout/renderer/LineRenderer.cs

@ -319,17 +319,22 @@ namespace iText.Layout.Renderer {
}
MinMaxWidth childBlockMinMaxWidth = null;
bool isInlineBlockChild = IsInlineBlockChild(childRenderer);
if (!childWidthWasReplaced) {
if (isInlineBlockChild && childRenderer is AbstractRenderer) {
childBlockMinMaxWidth = ((AbstractRenderer)childRenderer).GetMinMaxWidth();
float childMaxWidth = childBlockMinMaxWidth.GetMaxWidth();
float lineFullAvailableWidth = layoutContext.GetArea().GetBBox().GetWidth() - lineLayoutContext.GetTextIndent
();
if (!noSoftWrap && childMaxWidth > bbox.GetWidth() + MIN_MAX_WIDTH_CORRECTION_EPS && bbox.GetWidth() != lineFullAvailableWidth
) {
childResult = new LineLayoutResult(LayoutResult.NOTHING, null, null, childRenderer, childRenderer);
}
else {
if (isInlineBlockChild && childRenderer is AbstractRenderer) {
MinMaxWidth childBlockMinMaxWidthLocal = ((AbstractRenderer)childRenderer).GetMinMaxWidth();
// Don't calculate childBlockMinMaxWidth in case of relative width here
// and further (childBlockMinMaxWidth != null)
if (!childWidthWasReplaced) {
childBlockMinMaxWidth = childBlockMinMaxWidthLocal;
}
float childMaxWidth = childBlockMinMaxWidthLocal.GetMaxWidth();
float lineFullAvailableWidth = layoutContext.GetArea().GetBBox().GetWidth() - lineLayoutContext.GetTextIndent
();
if (!noSoftWrap && childMaxWidth > bbox.GetWidth() + MIN_MAX_WIDTH_CORRECTION_EPS && bbox.GetWidth() != lineFullAvailableWidth
) {
childResult = new LineLayoutResult(LayoutResult.NOTHING, null, null, childRenderer, childRenderer);
}
else {
if (childBlockMinMaxWidth != null) {
childMaxWidth += MIN_MAX_WIDTH_CORRECTION_EPS;
float inlineBlockWidth = Math.Min(childMaxWidth, lineFullAvailableWidth);
if (!IsOverflowFit(this.GetProperty<OverflowPropertyValue?>(Property.OVERFLOW_X))) {
@ -344,6 +349,8 @@ namespace iText.Layout.Renderer {
childRenderer.SetProperty(Property.FORCED_PLACEMENT, true);
}
}
}
if (childBlockMinMaxWidth != null) {
childBlockMinMaxWidth.SetChildrenMaxWidth(childBlockMinMaxWidth.GetChildrenMaxWidth() + MIN_MAX_WIDTH_CORRECTION_EPS
);
childBlockMinMaxWidth.SetChildrenMinWidth(childBlockMinMaxWidth.GetChildrenMinWidth() + MIN_MAX_WIDTH_CORRECTION_EPS

2
port-hash

@ -1 +1 @@
df66dc931ee5705018f8872d51736c0fdb947df0
68055cba7740381c718ae965f0786060ba64e919
Loading…
Cancel
Save