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
  • Field Details

    • LINE_SEPARATOR

      protected static final String LINE_SEPARATOR
    • _element

      private Element _element
    • _x

      private int _x
    • _y

      private int _y
    • _absY

      private int _absY
    • _absX

      private int _absX
    • _contentWidth

      private int _contentWidth
      Box width.
    • _rightMBP

      private int _rightMBP
    • _leftMBP

      private int _leftMBP
    • _height

      private int _height
      Box height.
    • _layer

      private Layer _layer
    • _containingLayer

      private Layer _containingLayer
    • _parent

      private Box _parent
    • _boxes

      private List<Box> _boxes
    • _tx

      private int _tx
      Keeps track of the start of childrens containing block.
    • _ty

      private int _ty
    • _style

      private CalculatedStyle _style
    • _containingBlock

      private Box _containingBlock
    • _relativeOffset

      private Dimension _relativeOffset
    • _paintingInfo

      private PaintingInfo _paintingInfo
    • _workingMargin

      private RectPropertySet _workingMargin
    • _index

      private int _index
    • _pseudoElementOrClass

      private String _pseudoElementOrClass
    • _anonymous

      private boolean _anonymous
    • _absoluteClipBox

      private Area _absoluteClipBox
    • _clipBoxCalculated

      private boolean _clipBoxCalculated
    • _accessibilityObject

      private Object _accessibilityObject
    • NOTHING

      public static final int NOTHING
      See Also:
    • FLUX

      public static final int FLUX
      See Also:
    • CHILDREN_FLUX

      public static final int CHILDREN_FLUX
      See Also:
    • DONE

      public static final int DONE
      See Also:
    • _state

      private int _state
    • DUMP_RENDER

      public static final int DUMP_RENDER
      See Also:
    • DUMP_LAYOUT

      public static final int DUMP_LAYOUT
      See Also:
  • Constructor Details

    • Box

      protected Box()
  • Method Details

    • 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
    • getClipParent

      private Box getClipParent()
    • getParentClipBox

      public Rectangle getParentClipBox(RenderingContext c, Layer layer)
      Gets the layer relative clip for the parent box. See getClipBox(RenderingContext, Layer)
    • calcClipBox

      private Rectangle calcClipBox(RenderingContext c, Layer 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.
    • calcAbsoluteClipBox

      private Area calcAbsoluteClipBox(CssContext c)
    • 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()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • addChildForLayout

      public void addChildForLayout(LayoutContext c, Box child)
    • addChild

      public void addChild(Box child)
    • addAllChildren

      public void addAllChildren(List<Box> children)
    • 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()
    • getPrevious

      protected Box getPrevious(Box child)
    • getNext

      protected Box getNext(Box child)
    • 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 with removeChild(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)
    • getChildIterator

      public Iterator<Box> getChildIterator()
    • getChildren

      public List<Box> getChildren()
    • 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()
      Specified by:
      getStyle in interface Styleable
    • setStyle

      public void setStyle(CalculatedStyle style)
      Specified by:
      setStyle in interface Styleable
    • 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)
    • isPaintsRootElementBackground

      private boolean isPaintsRootElementBackground()
    • 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)
    • paintRootElementBackground

      private void paintRootElementBackground(RenderingContext c, PaintingInfo pI)
    • 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)
    • getElementBoxes

      public List<Box> getElementBoxes(Element elem)
    • reset

      public void reset(LayoutContext c)
      Responsible for resetting the state of the box before a repeat call to BlockBox.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.

      See Layer.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:
      getElement in interface Styleable
    • setElement

      public void setElement(Element element)
      Specified by:
      setElement in interface Styleable
    • 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)
    • ensureWorkingMargin

      private void ensureWorkingMargin(CssContext cssContext)
    • 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)
    • moveIfGreater

      protected void moveIfGreater(Dimension result, Dimension test)
    • getIndex

      protected int getIndex()
      The zero based index of this child amongst its fellow children of its parent.
    • setIndex

      protected void setIndex(int index)
      See getIndex() Must make sure this is correct when removing children/rearranging children.
    • getPseudoElementOrClass

      public String getPseudoElementOrClass()
      Specified by:
      getPseudoElementOrClass in interface Styleable
    • 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()
    • setPaintingInfo

      private void setPaintingInfo(PaintingInfo paintingInfo)
    • 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

      private void exportPageBoxText(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.
    • ancestors

      public List<Box> ancestors()
      Get all ancestors, up until the root box.
    • 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.