Package com.itextpdf.layout.renderer
Class FlexContainerRenderer
- java.lang.Object
-
- com.itextpdf.layout.renderer.AbstractRenderer
-
- com.itextpdf.layout.renderer.BlockRenderer
-
- com.itextpdf.layout.renderer.DivRenderer
-
- com.itextpdf.layout.renderer.FlexContainerRenderer
-
- All Implemented Interfaces:
IPropertyContainer
,IRenderer
public class FlexContainerRenderer extends DivRenderer
-
-
Field Summary
Fields Modifier and Type Field Description private IFlexItemMainDirector
flexItemMainDirector
private java.util.Map<IRenderer,Tuple2<UnitValue,UnitValue>>
heights
Child renderers and their heights and min heights before the layout.private java.util.Map<java.lang.Float,java.lang.Float>
hypotheticalCrossSizes
Used for caching purposes in FlexUtil We couldn't find the real use case when this map contains more than 1 entry but let it still be a map to be on a safe(r) side Map mainSize (always width in our case) - hypotheticalCrossSizeprivate java.util.List<java.util.List<FlexItemInfo>>
lines
-
Fields inherited from class com.itextpdf.layout.renderer.AbstractRenderer
BOTTOM_SIDE, childRenderers, EPS, flushed, INF, isLastRendererForModelElement, LEFT_SIDE, modelElement, occupiedArea, OVERLAP_EPSILON, parent, positionedRenderers, properties, RIGHT_SIDE, TOP_SIDE
-
-
Constructor Summary
Constructors Constructor Description FlexContainerRenderer(Div modelElement)
Creates a FlexContainerRenderer from its corresponding layout object.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addChild(IRenderer renderer)
Adds a child to the current rendererprivate static void
addSimulateDiv(AbstractRenderer overflowRenderer, float width)
private void
adjustLayoutResultToHandleOverflowRenderers(LayoutResult result, java.util.List<IRenderer> renderersToOverflow)
private void
applyWrapReverse()
Apply wrap-reverse property.private IFlexItemMainDirector
createMainDirector()
(package private) AbstractRenderer[]
createSplitAndOverflowRenderers(int childPos, int layoutStatus, LayoutResult childResult, java.util.Map<java.lang.Integer,IRenderer> waitingFloatsSplitRenderers, java.util.List<IRenderer> waitingOverflowFloatRenderers)
(package private) void
decreaseLayoutBoxAfterChildPlacement(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)
(package private) void
decreaseLayoutBoxAfterChildPlacementColumnLayout(Rectangle layoutBox, IRenderer childRenderer)
(package private) void
decreaseLayoutBoxAfterChildPlacementRowLayout(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)
private void
fillSplitOverflowRenderersForPartialResult(AbstractRenderer splitRenderer, AbstractRenderer overflowRenderer, java.util.List<FlexItemInfo> line, IRenderer childRenderer, LayoutResult childResult)
private FlexItemInfo
findFlexItemInfo(AbstractRenderer renderer)
private java.util.List<FlexItemInfo>
findLine(IRenderer renderer)
private void
findMinMaxWidth(float initialMinWidth, float initialMaxWidth, AbstractWidthHandler minMaxWidthHandler, java.util.List<IRenderer> childRenderers)
private void
findMinMaxWidthIfCorrespondingPropertiesAreNotSet(MinMaxWidth minMaxWidth, AbstractWidthHandler minMaxWidthHandler)
(package private) void
fixOccupiedAreaIfOverflowedX(OverflowPropertyValue overflowX, Rectangle layoutBox)
(package private) IFlexItemMainDirector
getFlexItemMainDirector()
(package private) java.lang.Float
getHypotheticalCrossSize(java.lang.Float mainSize)
MinMaxWidth
getMinMaxWidth()
Calculates min and max width values for current renderer.IRenderer
getNextRenderer()
Gets a new instance of this class to be used as a next renderer, after this renderer is used, iflayout(LayoutContext)
is called more than once.(package private) LayoutArea
getOccupiedAreaInCaseNothingWasWrappedWithFull(LayoutResult result, IRenderer splitRenderer)
(package private) void
handleForcedPlacement(boolean anythingPlaced)
private boolean
isColumnReverse()
private boolean
isRowReverse()
Check if flex container direction is row reverse.(package private) boolean
isWrapReverse()
Check if flex container is wrapped reversely.LayoutResult
layout(LayoutContext layoutContext)
This method simulates positioning of the renderer, including all of its children, and returns theLayoutResult
, representing the layout result, including occupied area, status, i.e.(package private) LayoutResult
processNotFullChildResult(LayoutContext layoutContext, java.util.Map<java.lang.Integer,IRenderer> waitingFloatsSplitRenderers, java.util.List<IRenderer> waitingOverflowFloatRenderers, boolean wasHeightClipped, java.util.List<Rectangle> floatRendererAreas, boolean marginsCollapsingEnabled, float clearHeightCorrection, Border[] borders, UnitValue[] paddings, java.util.List<Rectangle> areas, int currentAreaPos, Rectangle layoutBox, java.util.Set<Rectangle> nonChildFloatingRendererAreas, IRenderer causeOfNothing, boolean anythingPlaced, int childPos, LayoutResult result)
(package private) Rectangle
recalculateLayoutBoxBeforeChildLayout(Rectangle layoutBox, IRenderer childRenderer, Rectangle initialLayoutBox)
(package private) void
recalculateOccupiedAreaAfterChildLayout(Rectangle resultBBox, java.lang.Float blockMaxHeight)
private void
restoreHeightForOverflowRenderer(IRenderer childRenderer, IRenderer overflowRenderer)
private java.util.List<IRenderer>
retrieveRenderersToOverflow(Rectangle flexContainerBBox)
private void
setAlignSelfIfNotStretch(IRenderer overflowRenderer)
(package private) void
setHypotheticalCrossSize(java.lang.Float mainSize, java.lang.Float hypotheticalCrossSize)
(package private) MarginsCollapseInfo
startChildMarginsHandling(IRenderer childRenderer, Rectangle layoutBox, MarginsCollapseHandler marginsCollapseHandler)
(package private) boolean
stopLayoutingChildrenIfChildResultNotFull(LayoutResult returnResult)
-
Methods inherited from class com.itextpdf.layout.renderer.BlockRenderer
applyMaxHeight, applyMinHeight, applyRotationLayout, applyVerticalAlignment, applyWidth, beginRotationIfApplied, correctFixedLayout, createOverflowRenderer, createRotationTransformInsideOccupiedArea, createSplitRenderer, draw, endRotationIfApplied, fixOccupiedAreaIfOverflowedY, getOccupiedAreaBBox, getResolvedFont
-
Methods inherited from class com.itextpdf.layout.renderer.AbstractRenderer
addAllChildRenderers, addAllChildRenderers, addAllProperties, addChildRenderer, alignChildHorizontally, allowLastYLineRecursiveExtraction, applyAbsolutePosition, applyAbsolutePositionIfNeeded, applyAction, applyBorderBox, applyBorderBox, applyDestination, applyDestinationsAndAnnotation, applyLinkAnnotation, applyMargins, applyMargins, applyMarginsBordersPaddings, applyPaddings, applyPaddings, applyRelativePositioningTranslation, beginElementOpacityApplying, beginTransformationIfApplied, calculateAbsolutePdfBBox, calculateAdditionalWidth, calculateBBox, calculatePaddingBorderHeight, calculatePaddingBorderWidth, calculateShiftToPositionBBoxOfPointsAt, clipBackgroundArea, clipBackgroundArea, clipBorderArea, createFontCharacteristics, createXObject, deleteOwnProperty, deleteProperty, drawBackground, drawBorder, drawChildren, drawPositionedChildren, endElementOpacityApplying, endTransformationIfApplied, getAspectRatio, getBackgroundArea, getBorderAreaBBox, getBorderRadii, getBorders, getBorders, getChildRenderers, getDefaultProperty, getFirstYLineRecursively, getInnerAreaBBox, getLastYLineRecursively, getMargins, getModelElement, getOccupiedArea, getOwnProperties, getOwnProperty, getPaddings, getParent, getPdfDocument, getProperty, getProperty, getPropertyAsBoolean, getPropertyAsColor, getPropertyAsFloat, getPropertyAsFloat, getPropertyAsFloat, getPropertyAsFont, getPropertyAsInteger, getPropertyAsTransparentColor, getPropertyAsUnitValue, getPropertyAsUnitValue, getRootRenderer, hasAbsoluteUnitValue, hasAspectRatio, hasOwnOrModelProperty, hasOwnProperty, hasProperty, hasRelativeUnitValue, initElementAreas, isAbsolutePosition, isBorderBoxSizing, isFirstOnRootArea, isFirstOnRootArea, isFixedLayout, isFlushed, isKeepTogether, isKeepTogether, isNotFittingHeight, isNotFittingLayoutArea, isNotFittingWidth, isOverflowFit, isOverflowProperty, isOverflowProperty, isOverflowProperty, isPositioned, isRelativePosition, isStaticLayout, logWarningIfGetNextRendererNotOverridden, move, noAbsolutePositionInfo, preparePositionedRendererAndAreaForLayout, processWaitingDrawing, rectangleToPointsList, removeAllChildRenderers, removeChildRenderer, replaceOwnProperty, resolveFirstPdfFont, resolveFirstPdfFont, retrieveHeight, retrieveMaxHeight, retrieveMaxWidth, retrieveMinHeight, retrieveMinWidth, retrieveUnitValue, retrieveUnitValue, retrieveWidth, returnBackOwnProperty, setBorders, setChildRenderer, setChildRenderers, setMinMaxWidthBasedOnFixedWidth, setParent, setProperty, setThisAsParent, shrinkOccupiedAreaForAbsolutePosition, toString, transformPoints, updateHeight, updateHeightsOnSplit, updateHeightsOnSplit, updateMaxHeight, updateMinHeight, updateWidth
-
-
-
-
Field Detail
-
hypotheticalCrossSizes
private final java.util.Map<java.lang.Float,java.lang.Float> hypotheticalCrossSizes
Used for caching purposes in FlexUtil We couldn't find the real use case when this map contains more than 1 entry but let it still be a map to be on a safe(r) side Map mainSize (always width in our case) - hypotheticalCrossSize
-
lines
private java.util.List<java.util.List<FlexItemInfo>> lines
-
flexItemMainDirector
private IFlexItemMainDirector flexItemMainDirector
-
-
Method Detail
-
getNextRenderer
public IRenderer getNextRenderer()
Gets a new instance of this class to be used as a next renderer, after this renderer is used, iflayout(LayoutContext)
is called more than once.If a renderer overflows to the next area, iText uses this method to create a renderer for the overflow part. So if one wants to extend
FlexContainerRenderer
, one should override this method: otherwise the default method will be used and thus the default rather than the custom renderer will be created.- Specified by:
getNextRenderer
in interfaceIRenderer
- Overrides:
getNextRenderer
in classDivRenderer
- Returns:
- new renderer instance
-
layout
public LayoutResult layout(LayoutContext layoutContext)
This method simulates positioning of the renderer, including all of its children, and returns theLayoutResult
, representing the layout result, including occupied area, status, i.e. if there was enough place to fit the renderer subtree, etc.LayoutResult
can be extended to return custom layout results for custom elements, e.g.TextRenderer
usesTextLayoutResult
as its result. This method can be called standalone to learn how much area the renderer subtree needs, or can be called beforeIRenderer.draw(DrawContext)
, to prepare the renderer to be flushed to the output stream.- Specified by:
layout
in interfaceIRenderer
- Overrides:
layout
in classBlockRenderer
- Parameters:
layoutContext
- the description of layout area and any other additional information- Returns:
- result of the layout process
-
getMinMaxWidth
public MinMaxWidth getMinMaxWidth()
Calculates min and max width values for current renderer.- Overrides:
getMinMaxWidth
in classBlockRenderer
- Returns:
- instance of
MinMaxWidth
-
getFlexItemMainDirector
IFlexItemMainDirector getFlexItemMainDirector()
-
isWrapReverse
boolean isWrapReverse()
Check if flex container is wrapped reversely.- Returns:
true
if flex-wrap property is set to wrap-reverse,false
otherwise.
-
createSplitAndOverflowRenderers
AbstractRenderer[] createSplitAndOverflowRenderers(int childPos, int layoutStatus, LayoutResult childResult, java.util.Map<java.lang.Integer,IRenderer> waitingFloatsSplitRenderers, java.util.List<IRenderer> waitingOverflowFloatRenderers)
- Overrides:
createSplitAndOverflowRenderers
in classBlockRenderer
-
processNotFullChildResult
LayoutResult processNotFullChildResult(LayoutContext layoutContext, java.util.Map<java.lang.Integer,IRenderer> waitingFloatsSplitRenderers, java.util.List<IRenderer> waitingOverflowFloatRenderers, boolean wasHeightClipped, java.util.List<Rectangle> floatRendererAreas, boolean marginsCollapsingEnabled, float clearHeightCorrection, Border[] borders, UnitValue[] paddings, java.util.List<Rectangle> areas, int currentAreaPos, Rectangle layoutBox, java.util.Set<Rectangle> nonChildFloatingRendererAreas, IRenderer causeOfNothing, boolean anythingPlaced, int childPos, LayoutResult result)
- Overrides:
processNotFullChildResult
in classBlockRenderer
-
getOccupiedAreaInCaseNothingWasWrappedWithFull
LayoutArea getOccupiedAreaInCaseNothingWasWrappedWithFull(LayoutResult result, IRenderer splitRenderer)
-
stopLayoutingChildrenIfChildResultNotFull
boolean stopLayoutingChildrenIfChildResultNotFull(LayoutResult returnResult)
- Overrides:
stopLayoutingChildrenIfChildResultNotFull
in classBlockRenderer
-
recalculateOccupiedAreaAfterChildLayout
void recalculateOccupiedAreaAfterChildLayout(Rectangle resultBBox, java.lang.Float blockMaxHeight)
- Overrides:
recalculateOccupiedAreaAfterChildLayout
in classBlockRenderer
-
startChildMarginsHandling
MarginsCollapseInfo startChildMarginsHandling(IRenderer childRenderer, Rectangle layoutBox, MarginsCollapseHandler marginsCollapseHandler)
- Overrides:
startChildMarginsHandling
in classBlockRenderer
-
decreaseLayoutBoxAfterChildPlacement
void decreaseLayoutBoxAfterChildPlacement(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)
- Overrides:
decreaseLayoutBoxAfterChildPlacement
in classBlockRenderer
-
decreaseLayoutBoxAfterChildPlacementRowLayout
void decreaseLayoutBoxAfterChildPlacementRowLayout(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)
-
decreaseLayoutBoxAfterChildPlacementColumnLayout
void decreaseLayoutBoxAfterChildPlacementColumnLayout(Rectangle layoutBox, IRenderer childRenderer)
-
recalculateLayoutBoxBeforeChildLayout
Rectangle recalculateLayoutBoxBeforeChildLayout(Rectangle layoutBox, IRenderer childRenderer, Rectangle initialLayoutBox)
- Overrides:
recalculateLayoutBoxBeforeChildLayout
in classBlockRenderer
-
handleForcedPlacement
void handleForcedPlacement(boolean anythingPlaced)
- Overrides:
handleForcedPlacement
in classBlockRenderer
-
setHypotheticalCrossSize
void setHypotheticalCrossSize(java.lang.Float mainSize, java.lang.Float hypotheticalCrossSize)
-
getHypotheticalCrossSize
java.lang.Float getHypotheticalCrossSize(java.lang.Float mainSize)
-
applyWrapReverse
private void applyWrapReverse()
Apply wrap-reverse property.
-
findFlexItemInfo
private FlexItemInfo findFlexItemInfo(AbstractRenderer renderer)
-
findLine
private java.util.List<FlexItemInfo> findLine(IRenderer renderer)
-
fixOccupiedAreaIfOverflowedX
void fixOccupiedAreaIfOverflowedX(OverflowPropertyValue overflowX, Rectangle layoutBox)
- Overrides:
fixOccupiedAreaIfOverflowedX
in classBlockRenderer
-
addChild
public void addChild(IRenderer renderer)
Adds a child to the current renderer- Specified by:
addChild
in interfaceIRenderer
- Overrides:
addChild
in classAbstractRenderer
- Parameters:
renderer
- a child to be added
-
addSimulateDiv
private static void addSimulateDiv(AbstractRenderer overflowRenderer, float width)
-
fillSplitOverflowRenderersForPartialResult
private void fillSplitOverflowRenderersForPartialResult(AbstractRenderer splitRenderer, AbstractRenderer overflowRenderer, java.util.List<FlexItemInfo> line, IRenderer childRenderer, LayoutResult childResult)
-
setAlignSelfIfNotStretch
private void setAlignSelfIfNotStretch(IRenderer overflowRenderer)
-
restoreHeightForOverflowRenderer
private void restoreHeightForOverflowRenderer(IRenderer childRenderer, IRenderer overflowRenderer)
-
findMinMaxWidthIfCorrespondingPropertiesAreNotSet
private void findMinMaxWidthIfCorrespondingPropertiesAreNotSet(MinMaxWidth minMaxWidth, AbstractWidthHandler minMaxWidthHandler)
-
findMinMaxWidth
private void findMinMaxWidth(float initialMinWidth, float initialMaxWidth, AbstractWidthHandler minMaxWidthHandler, java.util.List<IRenderer> childRenderers)
-
isRowReverse
private boolean isRowReverse()
Check if flex container direction is row reverse.- Returns:
true
if flex-direction property is set to row-reverse,false
otherwise.
-
isColumnReverse
private boolean isColumnReverse()
-
createMainDirector
private IFlexItemMainDirector createMainDirector()
-
retrieveRenderersToOverflow
private java.util.List<IRenderer> retrieveRenderersToOverflow(Rectangle flexContainerBBox)
-
adjustLayoutResultToHandleOverflowRenderers
private void adjustLayoutResultToHandleOverflowRenderers(LayoutResult result, java.util.List<IRenderer> renderersToOverflow)
-
-