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 IFlexItemMainDirectorflexItemMainDirectorprivate java.util.Map<IRenderer,Tuple2<UnitValue,UnitValue>>heightsChild renderers and their heights and min heights before the layout.private java.util.Map<java.lang.Float,java.lang.Float>hypotheticalCrossSizesUsed 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 voidaddChild(IRenderer renderer)Adds a child to the current rendererprivate static voidaddSimulateDiv(AbstractRenderer overflowRenderer, float width)private voidadjustLayoutResultToHandleOverflowRenderers(LayoutResult result, java.util.List<IRenderer> renderersToOverflow)private voidapplyWrapReverse()Apply wrap-reverse property.private IFlexItemMainDirectorcreateMainDirector()(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) voiddecreaseLayoutBoxAfterChildPlacement(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)(package private) voiddecreaseLayoutBoxAfterChildPlacementColumnLayout(Rectangle layoutBox, IRenderer childRenderer)(package private) voiddecreaseLayoutBoxAfterChildPlacementRowLayout(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)private voidfillSplitOverflowRenderersForPartialResult(AbstractRenderer splitRenderer, AbstractRenderer overflowRenderer, java.util.List<FlexItemInfo> line, IRenderer childRenderer, LayoutResult childResult)private FlexItemInfofindFlexItemInfo(AbstractRenderer renderer)private java.util.List<FlexItemInfo>findLine(IRenderer renderer)private voidfindMinMaxWidth(float initialMinWidth, float initialMaxWidth, AbstractWidthHandler minMaxWidthHandler, java.util.List<IRenderer> childRenderers)private voidfindMinMaxWidthIfCorrespondingPropertiesAreNotSet(MinMaxWidth minMaxWidth, AbstractWidthHandler minMaxWidthHandler)(package private) voidfixOccupiedAreaIfOverflowedX(OverflowPropertyValue overflowX, Rectangle layoutBox)(package private) IFlexItemMainDirectorgetFlexItemMainDirector()(package private) java.lang.FloatgetHypotheticalCrossSize(java.lang.Float mainSize)MinMaxWidthgetMinMaxWidth()Calculates min and max width values for current renderer.IRenderergetNextRenderer()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) LayoutAreagetOccupiedAreaInCaseNothingWasWrappedWithFull(LayoutResult result, IRenderer splitRenderer)(package private) voidhandleForcedPlacement(boolean anythingPlaced)private booleanisColumnReverse()private booleanisRowReverse()Check if flex container direction is row reverse.(package private) booleanisWrapReverse()Check if flex container is wrapped reversely.LayoutResultlayout(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) LayoutResultprocessNotFullChildResult(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) RectanglerecalculateLayoutBoxBeforeChildLayout(Rectangle layoutBox, IRenderer childRenderer, Rectangle initialLayoutBox)(package private) voidrecalculateOccupiedAreaAfterChildLayout(Rectangle resultBBox, java.lang.Float blockMaxHeight)private voidrestoreHeightForOverflowRenderer(IRenderer childRenderer, IRenderer overflowRenderer)private java.util.List<IRenderer>retrieveRenderersToOverflow(Rectangle flexContainerBBox)private voidsetAlignSelfIfNotStretch(IRenderer overflowRenderer)(package private) voidsetHypotheticalCrossSize(java.lang.Float mainSize, java.lang.Float hypotheticalCrossSize)(package private) MarginsCollapseInfostartChildMarginsHandling(IRenderer childRenderer, Rectangle layoutBox, MarginsCollapseHandler marginsCollapseHandler)(package private) booleanstopLayoutingChildrenIfChildResultNotFull(LayoutResult returnResult)-
Methods inherited from class com.itextpdf.layout.renderer.BlockRenderer
applyMaxHeight, applyMinHeight, applyRotationLayout, applyVerticalAlignment, applyWidth, beginRotationIfApplied, correctFixedLayout, createOverflowRenderer, createRotationTransformInsideOccupiedArea, createSplitRenderer, draw, endRotationIfApplied, fixOccupiedAreaIfOverflowedY, getMinMaxWidth, 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, retrieveResolvedDeclaredHeight, 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:
getNextRendererin interfaceIRenderer- Overrides:
getNextRendererin 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.LayoutResultcan be extended to return custom layout results for custom elements, e.g.TextRendererusesTextLayoutResultas 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:
layoutin interfaceIRenderer- Overrides:
layoutin 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:
getMinMaxWidthin classBlockRenderer- Returns:
- instance of
MinMaxWidth
-
getFlexItemMainDirector
IFlexItemMainDirector getFlexItemMainDirector()
-
isWrapReverse
boolean isWrapReverse()
Check if flex container is wrapped reversely.- Returns:
trueif flex-wrap property is set to wrap-reverse,falseotherwise.
-
createSplitAndOverflowRenderers
AbstractRenderer[] createSplitAndOverflowRenderers(int childPos, int layoutStatus, LayoutResult childResult, java.util.Map<java.lang.Integer,IRenderer> waitingFloatsSplitRenderers, java.util.List<IRenderer> waitingOverflowFloatRenderers)
- Overrides:
createSplitAndOverflowRenderersin 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:
processNotFullChildResultin classBlockRenderer
-
getOccupiedAreaInCaseNothingWasWrappedWithFull
LayoutArea getOccupiedAreaInCaseNothingWasWrappedWithFull(LayoutResult result, IRenderer splitRenderer)
-
stopLayoutingChildrenIfChildResultNotFull
boolean stopLayoutingChildrenIfChildResultNotFull(LayoutResult returnResult)
- Overrides:
stopLayoutingChildrenIfChildResultNotFullin classBlockRenderer
-
recalculateOccupiedAreaAfterChildLayout
void recalculateOccupiedAreaAfterChildLayout(Rectangle resultBBox, java.lang.Float blockMaxHeight)
- Overrides:
recalculateOccupiedAreaAfterChildLayoutin classBlockRenderer
-
startChildMarginsHandling
MarginsCollapseInfo startChildMarginsHandling(IRenderer childRenderer, Rectangle layoutBox, MarginsCollapseHandler marginsCollapseHandler)
- Overrides:
startChildMarginsHandlingin classBlockRenderer
-
decreaseLayoutBoxAfterChildPlacement
void decreaseLayoutBoxAfterChildPlacement(Rectangle layoutBox, LayoutResult result, IRenderer childRenderer)
- Overrides:
decreaseLayoutBoxAfterChildPlacementin 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:
recalculateLayoutBoxBeforeChildLayoutin classBlockRenderer
-
handleForcedPlacement
void handleForcedPlacement(boolean anythingPlaced)
- Overrides:
handleForcedPlacementin 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:
fixOccupiedAreaIfOverflowedXin classBlockRenderer
-
addChild
public void addChild(IRenderer renderer)
Adds a child to the current renderer- Specified by:
addChildin interfaceIRenderer- Overrides:
addChildin 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:
trueif flex-direction property is set to row-reverse,falseotherwise.
-
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)
-
-