Class MarginsCollapseHandler
- java.lang.Object
-
- com.itextpdf.layout.margincollapse.MarginsCollapseHandler
-
public class MarginsCollapseHandler extends java.lang.Object
Rules of the margins collapsing are taken from Mozilla Developer Network: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing See also: https://www.w3.org/TR/CSS2/box.html#collapsing-margins
-
-
Field Summary
Fields Modifier and Type Field Description private MarginsCollapseInfo
backupCollapseInfo
private Rectangle
backupLayoutBox
private MarginsCollapseInfo
childMarginInfo
private MarginsCollapseInfo
collapseInfo
private int
firstNotEmptyKidIndex
private boolean
lastKidCollapsedAfterHasClearanceApplied
private MarginsCollapseInfo
prevChildMarginInfo
private int
processedChildrenNum
private IRenderer
renderer
private java.util.List<IRenderer>
rendererChildren
-
Constructor Summary
Constructors Constructor Description MarginsCollapseHandler(IRenderer renderer, MarginsCollapseInfo marginsCollapseInfo)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addNotYetAppliedTopMargin(Rectangle layoutBox)
private void
applyBottomMargin(Rectangle box, float bottomIndent)
void
applyClearance(float clearHeightCorrection)
private void
applySelfCollapsedKidMarginWithClearance(Rectangle layoutBox)
private void
applyTopMargin(Rectangle box, float topIndent)
private MarginsCollapseInfo
createMarginsInfoForBlockChild(int childIndex)
private static float
defineBottomMarginValueForCollapse(IRenderer renderer)
private static float
defineMarginValueForCollapse(IRenderer renderer, int property)
private static float
defineTopMarginValueForCollapse(IRenderer renderer)
void
endChildMarginsHandling(Rectangle layoutBox)
This method shall be called after child occupied area is included into parent occupied area.void
endMarginsCollapse(Rectangle layoutBox)
private static boolean
firstChildMarginAdjoinedToParent(IRenderer parent)
private void
fixPrevChildOccupiedArea(int childIndex)
private IRenderer
getRendererChild(int index)
private void
getRidOfCollapseArtifactsAtopOccupiedArea()
private static boolean
hasBottomBorders(IRenderer renderer)
private static boolean
hasBottomPadding(IRenderer renderer)
private static boolean
hasHeightProp(IRenderer renderer)
private static boolean
hasPadding(IRenderer renderer, int property)
private static boolean
hasPositiveHeight(IRenderer renderer)
private static boolean
hasTopBorders(IRenderer renderer)
private static boolean
hasTopPadding(IRenderer renderer)
private static void
ignoreModelBottomMargin(IRenderer renderer)
private static void
ignoreModelTopMargin(IRenderer renderer)
private static boolean
isBlockElement(IRenderer renderer)
private static boolean
lastChildMarginAdjoinedToParent(IRenderer parent)
private static boolean
marginsCouldBeSelfCollapsing(IRenderer renderer)
private static void
overrideModelBottomMargin(IRenderer renderer, float collapsedMargins)
private static void
overrideModelMargin(IRenderer renderer, int property, float collapsedMargins)
private static void
overrideModelTopMargin(IRenderer renderer, float collapsedMargins)
private void
prepareBoxForLayoutAttempt(Rectangle layoutBox, int childIndex, boolean childIsBlockElement)
void
processFixedHeightAdjustment(float heightDelta)
private void
processUsedChildBufferSpaceOnTop(Rectangle layoutBox)
private IRenderer
removeRendererChild(int index)
private static boolean
rendererIsFloated(IRenderer renderer)
private void
restoreLayoutBoxAfterFailedLayoutAttempt(Rectangle layoutBox)
MarginsCollapseInfo
startChildMarginsHandling(IRenderer child, Rectangle layoutBox)
void
startMarginsCollapse(Rectangle parentBBox)
private void
subtractUsedTopBufferFromBottomBuffer(float usedTopBuffer)
private void
updateCollapseBeforeIfPrevKidIsFirstAndSelfCollapsed(MarginsCollapse collapseAfter)
-
-
-
Field Detail
-
renderer
private IRenderer renderer
-
collapseInfo
private MarginsCollapseInfo collapseInfo
-
childMarginInfo
private MarginsCollapseInfo childMarginInfo
-
prevChildMarginInfo
private MarginsCollapseInfo prevChildMarginInfo
-
firstNotEmptyKidIndex
private int firstNotEmptyKidIndex
-
processedChildrenNum
private int processedChildrenNum
-
rendererChildren
private java.util.List<IRenderer> rendererChildren
-
backupLayoutBox
private Rectangle backupLayoutBox
-
backupCollapseInfo
private MarginsCollapseInfo backupCollapseInfo
-
lastKidCollapsedAfterHasClearanceApplied
private boolean lastKidCollapsedAfterHasClearanceApplied
-
-
Constructor Detail
-
MarginsCollapseHandler
public MarginsCollapseHandler(IRenderer renderer, MarginsCollapseInfo marginsCollapseInfo)
-
-
Method Detail
-
processFixedHeightAdjustment
public void processFixedHeightAdjustment(float heightDelta)
-
startChildMarginsHandling
public MarginsCollapseInfo startChildMarginsHandling(IRenderer child, Rectangle layoutBox)
-
applyClearance
public void applyClearance(float clearHeightCorrection)
-
createMarginsInfoForBlockChild
private MarginsCollapseInfo createMarginsInfoForBlockChild(int childIndex)
-
endChildMarginsHandling
public void endChildMarginsHandling(Rectangle layoutBox)
This method shall be called after child occupied area is included into parent occupied area.- Parameters:
layoutBox
- available area for child and its siblings layout. It might be adjusted inside the method
-
startMarginsCollapse
public void startMarginsCollapse(Rectangle parentBBox)
-
endMarginsCollapse
public void endMarginsCollapse(Rectangle layoutBox)
-
updateCollapseBeforeIfPrevKidIsFirstAndSelfCollapsed
private void updateCollapseBeforeIfPrevKidIsFirstAndSelfCollapsed(MarginsCollapse collapseAfter)
-
prepareBoxForLayoutAttempt
private void prepareBoxForLayoutAttempt(Rectangle layoutBox, int childIndex, boolean childIsBlockElement)
-
restoreLayoutBoxAfterFailedLayoutAttempt
private void restoreLayoutBoxAfterFailedLayoutAttempt(Rectangle layoutBox)
-
applyTopMargin
private void applyTopMargin(Rectangle box, float topIndent)
-
applyBottomMargin
private void applyBottomMargin(Rectangle box, float bottomIndent)
-
processUsedChildBufferSpaceOnTop
private void processUsedChildBufferSpaceOnTop(Rectangle layoutBox)
-
subtractUsedTopBufferFromBottomBuffer
private void subtractUsedTopBufferFromBottomBuffer(float usedTopBuffer)
-
fixPrevChildOccupiedArea
private void fixPrevChildOccupiedArea(int childIndex)
-
addNotYetAppliedTopMargin
private void addNotYetAppliedTopMargin(Rectangle layoutBox)
-
applySelfCollapsedKidMarginWithClearance
private void applySelfCollapsedKidMarginWithClearance(Rectangle layoutBox)
-
getRendererChild
private IRenderer getRendererChild(int index)
-
removeRendererChild
private IRenderer removeRendererChild(int index)
-
getRidOfCollapseArtifactsAtopOccupiedArea
private void getRidOfCollapseArtifactsAtopOccupiedArea()
-
marginsCouldBeSelfCollapsing
private static boolean marginsCouldBeSelfCollapsing(IRenderer renderer)
-
firstChildMarginAdjoinedToParent
private static boolean firstChildMarginAdjoinedToParent(IRenderer parent)
-
lastChildMarginAdjoinedToParent
private static boolean lastChildMarginAdjoinedToParent(IRenderer parent)
-
isBlockElement
private static boolean isBlockElement(IRenderer renderer)
-
hasHeightProp
private static boolean hasHeightProp(IRenderer renderer)
-
hasPositiveHeight
private static boolean hasPositiveHeight(IRenderer renderer)
-
hasTopPadding
private static boolean hasTopPadding(IRenderer renderer)
-
hasBottomPadding
private static boolean hasBottomPadding(IRenderer renderer)
-
hasTopBorders
private static boolean hasTopBorders(IRenderer renderer)
-
hasBottomBorders
private static boolean hasBottomBorders(IRenderer renderer)
-
rendererIsFloated
private static boolean rendererIsFloated(IRenderer renderer)
-
defineTopMarginValueForCollapse
private static float defineTopMarginValueForCollapse(IRenderer renderer)
-
ignoreModelTopMargin
private static void ignoreModelTopMargin(IRenderer renderer)
-
overrideModelTopMargin
private static void overrideModelTopMargin(IRenderer renderer, float collapsedMargins)
-
defineBottomMarginValueForCollapse
private static float defineBottomMarginValueForCollapse(IRenderer renderer)
-
ignoreModelBottomMargin
private static void ignoreModelBottomMargin(IRenderer renderer)
-
overrideModelBottomMargin
private static void overrideModelBottomMargin(IRenderer renderer, float collapsedMargins)
-
defineMarginValueForCollapse
private static float defineMarginValueForCollapse(IRenderer renderer, int property)
-
overrideModelMargin
private static void overrideModelMargin(IRenderer renderer, int property, float collapsedMargins)
-
hasPadding
private static boolean hasPadding(IRenderer renderer, int property)
-
-