Package com.openhtmltopdf.render
Class Box
- java.lang.Object
-
- com.openhtmltopdf.render.Box
-
- All Implemented Interfaces:
Styleable,DisplayListItem
- Direct Known Subclasses:
BlockBox,InlineLayoutBox,LineBox
public abstract class Box extends Object implements Styleable, DisplayListItem
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classBox.ChildIteratorOfType<T>
-
Field Summary
Fields Modifier and Type Field Description static intCHILDREN_FLUXstatic intDONEstatic intDUMP_LAYOUTstatic intDUMP_RENDERstatic intFLUXprotected static StringLINE_SEPARATORstatic intNOTHING
-
Constructor Summary
Constructors Modifier Constructor Description protectedBox()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddAllChildren(List<Box> children)voidaddChild(Box child)voidaddChildForLayout(LayoutContext c, Box child)voidanalyzePageBreaks(LayoutContext c, ContentLimitContainer container)List<Box>ancestors()Get all ancestors, up until the root box.List<Box>ancestorsWhile(Predicate<Box> predicate)Creates a list of ancestors by walking up the chain of parent, grandparent, etc.abstract voidcalcCanvasLocation()voidcalcChildLocations()protected voidcalcChildPaintingInfo(CssContext c, PaintingInfo result, boolean useCache)PaintingInfocalcPaintingInfo(CssContext c, boolean useCache)voidcollectText(RenderingContext c, StringBuilder buffer)voidconnectChildrenToCurrentLayer(LayoutContext c)booleancrossesPageBreak(LayoutContext c)Whether this box would cross a page break.voiddetach(LayoutContext c)abstract Stringdump(LayoutContext c, String indent, int which)protected voiddumpBoxes(LayoutContext c, String indent, List<Box> boxes, int which, StringBuilder result)protected voidexportPageBoxText(RenderingContext c, Writer writer, int yPos)voidexportText(RenderingContext c, Writer writer)Boxfind(CssContext cssCtx, int absX, int absY, boolean findAnonymous)BoxfindAncestor(Predicate<Box> predicate)Walks up the ancestor tree to the root testing ancestors agains the predicate.voidfindColumnBreakOpportunities(FlowingColumnContainerBox.ColumnBreakStore store)Recursive method to find column break opportunities.voidforcePageBreakAfter(LayoutContext c, IdentValue pageBreakValue)Forces a page break after this box.intforcePageBreakBefore(LayoutContext c, IdentValue pageBreakValue, boolean pendingPageName)intforcePageBreakBefore(LayoutContext c, IdentValue pageBreakValue, boolean pendingPageName, int absY)AreagetAbsoluteClipBox(CssContext c)Returns the absolute (ie transformed if needed) clip area for this box.intgetAbsX()intgetAbsY()ObjectgetAccessibilityObject()BorderPropertySetgetBorder(CssContext cssCtx)RectanglegetBorderBox(CssContext c)Only to be called after layout, due to double use of getHeight().intgetBorderBoxHeight(CssContext c)intgetBorderBoxWidth(CssContext c)RectanglegetBorderEdge(int left, int top, CssContext cssCtx)intgetBorderSides()BoxDimensionsgetBoxDimensions()BoxgetChild(int i)intgetChildCount()Iterator<Box>getChildIterator()<T> Iterator<T>getChildIteratorOfType(Class<T> type)Returns an iterator of boxes cast to type.List<Box>getChildren()RectanglegetChildrenClipEdge(CssContext c)RectanglegetClipBox(RenderingContext c, Layer layer)Gets the combined clip of this box relative to the containing layer.BoxgetContainingBlock()protected intgetContainingBlockWidth()LayergetContainingLayer()RectanglegetContentAreaEdge(int left, int top, CssContext cssCtx)intgetContentWidth()BoxgetDocumentParent()FSColorgetEffBackgroundColor(RenderingContext c)intgetEffectiveWidth()ElementgetElement()List<Box>getElementBoxes(Element elem)intgetHeight()Uh oh! This refers to content height during layout but total height after layout!protected intgetIndex()The zero based index of this child amongst its fellow children of its parent.LayergetLayer()intgetLeftMBP()RectPropertySetgetMargin(CssContext cssContext)intgetMarginBorderPadding(CssContext cssCtx, int which)RectanglegetMarginEdge(int left, int top, CssContext cssCtx, int tx, int ty)RectanglegetMarginEdge(CssContext cssCtx, int tx, int ty)protected BoxgetNext(Box child)BoxgetNextSibling()RectPropertySetgetPadding(CssContext cssCtx)RectanglegetPaddingEdge(int left, int top, CssContext cssCtx)protected intgetPaddingWidth(CssContext cssCtx)RectanglegetPaintingBorderEdge(CssContext cssCtx)RectanglegetPaintingClipEdge(CssContext cssCtx)PaintingInfogetPaintingInfo()RectanglegetPaintingPaddingEdge(CssContext cssCtx)BoxgetParent()RectanglegetParentClipBox(RenderingContext c, Layer layer)Gets the layer relative clip for the parent box.protected BoxgetPrevious(Box child)BoxgetPreviousSibling()StringgetPseudoElementOrClass()DimensiongetRelativeOffset()intgetRightMBP()intgetState()CalculatedStylegetStyle()protected RectPropertySetgetStyleMargin(CssContext cssContext)protected RectPropertySetgetStyleMargin(CssContext cssContext, boolean useCache)intgetTx()intgetTy()intgetWidth()intgetX()intgetY()booleanhasNonTextContent(CssContext c)booleanhasRootElementBackground(RenderingContext c)If the html or body box have a background return true.voidinitContainingLayer(LayoutContext c)booleanintersects(CssContext cssCtx, Shape clip)NOTE: This method does not consider any children of this box but does consider the transformation matrix of the containing layer.booleanisAnonymous()booleanisBody()booleanisContainedInMarginBox()booleanisFirstChild()Is this box the first child of its parent?booleanisInDocumentFlow()protected booleanisInitialContainingBlock()protected booleanisInlineBlock()protected booleanisMarginAreaRoot()booleanisRoot()booleanisStyled()booleanisTerminalColumnBreak()Is this box unbreakable in regards to column break opportunities?protected voidmoveIfGreater(Dimension result, Dimension test)voidpaintBackground(RenderingContext c)voidpaintBorder(RenderingContext c)voidpaintRootElementBackground(RenderingContext c)DimensionpositionRelative(CssContext cssCtx)voidremoveAllChildren()booleanremoveChild(int index)Removes child by index and adjusts the index of subsequent children.booleanremoveChild(Box target)Removes a child box if it is indeed a child and adjusts the index of subsequent children.voidreset(LayoutContext c)Responsible for resetting the state of the box before a repeat call toBlockBox.layout(LayoutContext)or other layout methods.protected voidresetChildren(LayoutContext c)voidresetChildren(LayoutContext c, int start, int end)protected voidresetTopMargin(CssContext cssContext)BoxrootBox()Returns the highest ancestor box.voidsetAbsX(int absX)voidsetAbsY(int absY)voidsetAccessiblityObject(Object object)voidsetAnonymous(boolean anonymous)protected voidsetBorderBoxHeight(CssContext c, int h)voidsetBorderBoxWidth(CssContext c, int borderBoxWidth)voidsetBoxDimensions(BoxDimensions dimensions)voidsetContainingBlock(Box containingBlock)voidsetContainingLayer(Layer containingLayer)voidsetContentWidth(int contentWidth)voidsetElement(Element element)voidsetHeight(int height)Uh oh! This refers to content height during layout but total height after layout!protected voidsetIndex(int index)SeegetIndex()Must make sure this is correct when removing children/rearranging children.voidsetLayer(Layer layer)voidsetLeftMBP(int leftMBP)voidsetMarginBottom(CssContext cssContext, int marginBottom)voidsetMarginLeft(CssContext cssContext, int marginLeft)voidsetMarginRight(CssContext cssContext, int marginRight)voidsetMarginTop(CssContext cssContext, int marginTop)voidsetParent(Box box)voidsetPseudoElementOrClass(String pseudoElementOrClass)voidsetRelativeOffset(Dimension relativeOffset)voidsetRightMBP(int rightMBP)voidsetState(int state)voidsetStyle(CalculatedStyle style)voidsetTx(int tx)voidsetTy(int ty)voidsetX(int x)voidsetY(int y)static StringstateToString(int state)StringtoString()
-
-
-
Field Detail
-
LINE_SEPARATOR
protected static final String LINE_SEPARATOR
-
NOTHING
public static final int NOTHING
- See Also:
- Constant Field Values
-
FLUX
public static final int FLUX
- See Also:
- Constant Field Values
-
CHILDREN_FLUX
public static final int CHILDREN_FLUX
- See Also:
- Constant Field Values
-
DONE
public static final int DONE
- See Also:
- Constant Field Values
-
DUMP_RENDER
public static final int DUMP_RENDER
- See Also:
- Constant Field Values
-
DUMP_LAYOUT
public static final int DUMP_LAYOUT
- See Also:
- Constant Field Values
-
-
Method Detail
-
getClipBox
public Rectangle getClipBox(RenderingContext c, Layer layer)
Gets the combined clip of this box relative to the containing layer. The returned clip is in document coordinate space (not transformed in any way). For example, if we have the following nesting: overflow hidden := transformed box := overflow hidden := overflow hidden := overflow visible this function called on the overflow visible box will return the combined clip of its two immediate ancestors in document coordinate space. It stops at the transformed box because the transform triggers a layer. Currently this method is used for getting the clip to apply to a float, which are nested in layers but taken out of the default block list and therefore clip stack. Since it is only used for floats, the result is not cached. Revisit this decision if using for every box. There are several other clip methods available: +getChildrenClipEdge(CssContext)- gets the local clip for a single box. +getParentClipBox(RenderingContext, Layer)- gets the layer relative clip for the parent box. +getAbsoluteClipBox(CssContext)- gets the absolute clip box in document coordinates
-
getParentClipBox
public Rectangle getParentClipBox(RenderingContext c, Layer layer)
Gets the layer relative clip for the parent box. SeegetClipBox(RenderingContext, Layer)
-
getAbsoluteClipBox
public Area getAbsoluteClipBox(CssContext c)
Returns the absolute (ie transformed if needed) clip area for this box. Cached as this will be needed on every box to check if the clip area is inside a page.
-
dump
public abstract String dump(LayoutContext c, String indent, int which)
-
dumpBoxes
protected void dumpBoxes(LayoutContext c, String indent, List<Box> boxes, int which, StringBuilder result)
-
getWidth
public int getWidth()
-
addChildForLayout
public void addChildForLayout(LayoutContext c, Box child)
-
addChild
public void addChild(Box child)
-
removeAllChildren
public void removeAllChildren()
-
removeChild
public boolean removeChild(Box target)
Removes a child box if it is indeed a child and adjusts the index of subsequent children. Returns whether this was a child.
-
getPreviousSibling
public Box getPreviousSibling()
-
getNextSibling
public Box getNextSibling()
-
removeChild
public boolean removeChild(int index)
Removes child by index and adjusts the index of subsequent children. Returns true if this box has children, throws if the index is out-of-bounds.
IMPORTANT: This method must be kept in sync withremoveChild(Box)
-
setParent
public void setParent(Box box)
-
getParent
public Box getParent()
-
getDocumentParent
public Box getDocumentParent()
-
getChildCount
public int getChildCount()
-
getChild
public Box getChild(int i)
-
getChildIteratorOfType
public <T> Iterator<T> getChildIteratorOfType(Class<T> type)
Returns an iterator of boxes cast to type. If a box is not of type, an error will be logged and null will be returned for that box. Therefore, this method should only be used when it is certain all children are of a particular type. Eg: TableBox has children only of type TableSectionBox.
-
getState
public int getState()
-
setState
public void setState(int state)
-
stateToString
public static String stateToString(int state)
-
getStyle
public final CalculatedStyle getStyle()
-
setStyle
public void setStyle(CalculatedStyle style)
-
getContainingBlock
public Box getContainingBlock()
-
setContainingBlock
public void setContainingBlock(Box containingBlock)
-
getMarginEdge
public Rectangle getMarginEdge(int left, int top, CssContext cssCtx, int tx, int ty)
-
getMarginEdge
public Rectangle getMarginEdge(CssContext cssCtx, int tx, int ty)
-
getPaintingBorderEdge
public Rectangle getPaintingBorderEdge(CssContext cssCtx)
-
getPaintingPaddingEdge
public Rectangle getPaintingPaddingEdge(CssContext cssCtx)
-
getPaintingClipEdge
public Rectangle getPaintingClipEdge(CssContext cssCtx)
-
getChildrenClipEdge
public Rectangle getChildrenClipEdge(CssContext c)
-
intersects
public boolean intersects(CssContext cssCtx, Shape clip)
NOTE: This method does not consider any children of this box but does consider the transformation matrix of the containing layer.
-
getBorderEdge
public Rectangle getBorderEdge(int left, int top, CssContext cssCtx)
-
getPaddingEdge
public Rectangle getPaddingEdge(int left, int top, CssContext cssCtx)
-
getPaddingWidth
protected int getPaddingWidth(CssContext cssCtx)
-
getContentAreaEdge
public Rectangle getContentAreaEdge(int left, int top, CssContext cssCtx)
-
getLayer
public Layer getLayer()
-
setLayer
public void setLayer(Layer layer)
-
positionRelative
public Dimension positionRelative(CssContext cssCtx)
-
isInlineBlock
protected boolean isInlineBlock()
-
setAbsY
public void setAbsY(int absY)
-
getAbsY
public int getAbsY()
-
setAbsX
public void setAbsX(int absX)
-
getAbsX
public int getAbsX()
-
isStyled
public boolean isStyled()
-
getBorderSides
public int getBorderSides()
-
paintBorder
public void paintBorder(RenderingContext c)
-
paintBackground
public void paintBackground(RenderingContext c)
-
hasNonTextContent
public boolean hasNonTextContent(CssContext c)
-
setAccessiblityObject
public void setAccessiblityObject(Object object)
-
getAccessibilityObject
public Object getAccessibilityObject()
-
paintRootElementBackground
public void paintRootElementBackground(RenderingContext c)
-
hasRootElementBackground
public boolean hasRootElementBackground(RenderingContext c)
If the html or body box have a background return true.
-
getContainingLayer
public Layer getContainingLayer()
-
setContainingLayer
public void setContainingLayer(Layer containingLayer)
-
initContainingLayer
public void initContainingLayer(LayoutContext c)
-
connectChildrenToCurrentLayer
public void connectChildrenToCurrentLayer(LayoutContext c)
-
reset
public void reset(LayoutContext c)
Responsible for resetting the state of the box before a repeat call toBlockBox.layout(LayoutContext)or other layout methods.
Any layout operation that is not idempotent MUST be reset in this method. Layout may be called several times on the one box.
-
detach
public void detach(LayoutContext c)
-
resetChildren
public void resetChildren(LayoutContext c, int start, int end)
-
resetChildren
protected void resetChildren(LayoutContext c)
-
calcCanvasLocation
public abstract void calcCanvasLocation()
-
calcChildLocations
public void calcChildLocations()
-
forcePageBreakBefore
public int forcePageBreakBefore(LayoutContext c, IdentValue pageBreakValue, boolean pendingPageName)
-
forcePageBreakBefore
public int forcePageBreakBefore(LayoutContext c, IdentValue pageBreakValue, boolean pendingPageName, int absY)
-
forcePageBreakAfter
public void forcePageBreakAfter(LayoutContext c, IdentValue pageBreakValue)
Forces a page break after this box.
-
crossesPageBreak
public boolean crossesPageBreak(LayoutContext c)
Whether this box would cross a page break.
SeeLayer.crossesPageBreak(LayoutContext, int, int)for extra info.
-
getRelativeOffset
public Dimension getRelativeOffset()
-
setRelativeOffset
public void setRelativeOffset(Dimension relativeOffset)
-
find
public Box find(CssContext cssCtx, int absX, int absY, boolean findAnonymous)
-
isRoot
public boolean isRoot()
-
isBody
public boolean isBody()
-
getElement
public Element getElement()
- Specified by:
getElementin interfaceStyleable
-
setElement
public void setElement(Element element)
- Specified by:
setElementin interfaceStyleable
-
setMarginTop
public void setMarginTop(CssContext cssContext, int marginTop)
-
setMarginBottom
public void setMarginBottom(CssContext cssContext, int marginBottom)
-
setMarginLeft
public void setMarginLeft(CssContext cssContext, int marginLeft)
-
setMarginRight
public void setMarginRight(CssContext cssContext, int marginRight)
-
getMargin
public RectPropertySet getMargin(CssContext cssContext)
-
getStyleMargin
protected RectPropertySet getStyleMargin(CssContext cssContext)
-
getStyleMargin
protected RectPropertySet getStyleMargin(CssContext cssContext, boolean useCache)
-
getPadding
public RectPropertySet getPadding(CssContext cssCtx)
-
getBorder
public BorderPropertySet getBorder(CssContext cssCtx)
-
getContainingBlockWidth
protected int getContainingBlockWidth()
-
resetTopMargin
protected void resetTopMargin(CssContext cssContext)
-
calcPaintingInfo
public PaintingInfo calcPaintingInfo(CssContext c, boolean useCache)
-
calcChildPaintingInfo
protected void calcChildPaintingInfo(CssContext c, PaintingInfo result, boolean useCache)
-
getMarginBorderPadding
public int getMarginBorderPadding(CssContext cssCtx, int which)
-
getIndex
protected int getIndex()
The zero based index of this child amongst its fellow children of its parent.
-
setIndex
protected void setIndex(int index)
SeegetIndex()Must make sure this is correct when removing children/rearranging children.
-
getPseudoElementOrClass
public String getPseudoElementOrClass()
- Specified by:
getPseudoElementOrClassin interfaceStyleable
-
setPseudoElementOrClass
public void setPseudoElementOrClass(String pseudoElementOrClass)
-
setX
public void setX(int x)
-
getX
public int getX()
-
setY
public void setY(int y)
-
getY
public int getY()
-
setTy
public void setTy(int ty)
-
getTy
public int getTy()
-
setTx
public void setTx(int tx)
-
getTx
public int getTx()
-
setRightMBP
public void setRightMBP(int rightMBP)
-
getRightMBP
public int getRightMBP()
-
setLeftMBP
public void setLeftMBP(int leftMBP)
-
getLeftMBP
public int getLeftMBP()
-
setHeight
public void setHeight(int height)
Uh oh! This refers to content height during layout but total height after layout!
-
getHeight
public int getHeight()
Uh oh! This refers to content height during layout but total height after layout!
-
setBorderBoxHeight
protected void setBorderBoxHeight(CssContext c, int h)
-
getBorderBoxHeight
public int getBorderBoxHeight(CssContext c)
-
getBorderBox
public Rectangle getBorderBox(CssContext c)
Only to be called after layout, due to double use of getHeight().
-
setContentWidth
public void setContentWidth(int contentWidth)
-
getContentWidth
public int getContentWidth()
-
getBorderBoxWidth
public int getBorderBoxWidth(CssContext c)
-
setBorderBoxWidth
public void setBorderBoxWidth(CssContext c, int borderBoxWidth)
-
getPaintingInfo
public PaintingInfo getPaintingInfo()
-
isAnonymous
public boolean isAnonymous()
-
setAnonymous
public void setAnonymous(boolean anonymous)
-
getBoxDimensions
public BoxDimensions getBoxDimensions()
-
setBoxDimensions
public void setBoxDimensions(BoxDimensions dimensions)
-
collectText
public void collectText(RenderingContext c, StringBuilder buffer)
-
exportText
public void exportText(RenderingContext c, Writer writer) throws IOException
- Throws:
IOException
-
exportPageBoxText
protected void exportPageBoxText(RenderingContext c, Writer writer, int yPos) throws IOException
- Throws:
IOException
-
isInDocumentFlow
public boolean isInDocumentFlow()
-
analyzePageBreaks
public void analyzePageBreaks(LayoutContext c, ContentLimitContainer container)
-
getEffBackgroundColor
public FSColor getEffBackgroundColor(RenderingContext c)
-
isMarginAreaRoot
protected boolean isMarginAreaRoot()
-
isContainedInMarginBox
public boolean isContainedInMarginBox()
-
getEffectiveWidth
public int getEffectiveWidth()
-
isInitialContainingBlock
protected boolean isInitialContainingBlock()
-
isFirstChild
public boolean isFirstChild()
Is this box the first child of its parent?
-
isTerminalColumnBreak
public boolean isTerminalColumnBreak()
Is this box unbreakable in regards to column break opportunities?
-
ancestorsWhile
public List<Box> ancestorsWhile(Predicate<Box> predicate)
Creates a list of ancestors by walking up the chain of parent, grandparent, etc. Stops when the provided predicate returns false or the root box otherwise.
-
findAncestor
public Box findAncestor(Predicate<Box> predicate)
Walks up the ancestor tree to the root testing ancestors agains the predicate. NOTE: Does not test against the current box (this).- Returns:
- the box for which predicate returned true or null if none found.
-
rootBox
public Box rootBox()
Returns the highest ancestor box. May be current box (this).
-
findColumnBreakOpportunities
public void findColumnBreakOpportunities(FlowingColumnContainerBox.ColumnBreakStore store)
Recursive method to find column break opportunities.- Parameters:
store- - use to report break opportunities.
-
-