Class PagedBoxCollector
- java.lang.Object
-
- com.openhtmltopdf.render.displaylist.PagedBoxCollector
-
public class PagedBoxCollector extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
PagedBoxCollector.AddBlockToShadowPage
private static class
PagedBoxCollector.AddFloatToShadowPage
private static class
PagedBoxCollector.AddInlineToShadowPage
private static interface
PagedBoxCollector.AddToShadowPage
The joys of lambda style programming in Java 6! Provides a method to add a box to a shadow page if it is determined to sit on a particular shadow page.private static class
PagedBoxCollector.FourPoint
static class
PagedBoxCollector.PageFinder
static class
PagedBoxCollector.PageInfo
static class
PagedBoxCollector.PageResult
-
Field Summary
Fields Modifier and Type Field Description private PagedBoxCollector.PageFinder
finder
static int
PAGE_ALL
Add collected boxes to all pages, including inserted shadow pages.static int
PAGE_BASE_ONLY
Add collected items to base page only, ignoring inserted shadow pages.private java.util.List<PageBox>
pages
private java.util.List<PagedBoxCollector.PageResult>
result
private int
startPage
-
Constructor Summary
Constructors Constructor Description PagedBoxCollector(java.util.List<PageBox> pages, int minPage, int maxPage)
A more efficient paged box collector that can only find boxes on pages minPage to maxPage inclusive.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addBlock(Box container, PagedBoxCollector.PageResult pageResult)
Adds block box to appropriate flat box lists.private void
addBlockToAll(CssContext c, Layer layer, Box container, int pgStart, int pgEnd, java.awt.Shape ourClip, java.util.List<PagedBoxCollector.PageResult> clipPages, boolean includeShadowPages)
private void
addBlockToShadowPage(CssContext c, Layer layer, Box container, int pgStart, int pgEnd, java.awt.Shape ourClip, java.util.List<PagedBoxCollector.PageResult> clipPages, int shadowPageNumber)
private void
addBoxToShadowPages(CssContext c, Box container, int pageNumber, PagedBoxCollector.PageResult pageResult, java.awt.Shape ourClip, java.util.List<PagedBoxCollector.PageResult> clipPages, Layer layer, PagedBoxCollector.AddToShadowPage addToMethod)
Adds box to inserted shadow pages as needed.private void
addLineBoxToAll(CssContext c, Layer layer, LineBox container, int basePageNumber, boolean includeShadowPages)
Adds a line box to the base page if needed and any shadow pages as needed.private void
addLineBoxToShadowPage(CssContext c, Layer layer, LineBox container, int basePageNumber, int shadowPageNumber)
private void
addTableHeaderFooter(CssContext c, Layer layer, Box container, int shadowPageNumber)
private static java.awt.Rectangle
applyOverflowClip(java.awt.Rectangle bounds, java.awt.geom.Area overflowClip)
private boolean
boxIntersects(CssContext c, java.awt.Shape clip, Box box, java.awt.Rectangle boxBounds)
void
collect(CssContext c, Layer layer)
void
collect(CssContext c, Layer layer, Box container, int shadowPageNumber)
The main box collection method.void
collect(CssContext c, Layer layer, Box container, int pgStart, int pgEnd, int shadowPageNumber)
void
collectFloats(CssContext c, Layer layer)
private void
collectInline(CssContext c, Layer layer)
static java.awt.Rectangle
findAdjustedBoundsForBorderBox(CssContext c, Box container, java.util.List<PageBox> pages)
Finds the document coordinates border box bounds of a box adjusted for transform and clipped according to overflow hidden.static java.awt.Rectangle
findAdjustedBoundsForContentBox(CssContext c, Box container)
Finds the document coordinates content box bounds of a box adjusted for transform and clipped according to overflow hidden.protected int
findEndPage(CssContext c, Box container, java.awt.geom.AffineTransform transform)
static int
findEndPage(CssContext c, Box container, java.util.List<PageBox> pages)
protected int
findEndPage(CssContext c, java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
static java.util.List<PagedBoxCollector.PageInfo>
findLayerPages(CssContext c, Layer layer, java.util.List<PageBox> pages)
Returns the pages a layer appears on including inserted overflow pages.static java.awt.Rectangle
findLayerRect(CssContext c, Layer layer)
static int
findPageForY(CssContext c, double y, java.util.List<PageBox> pages)
protected int
findStartPage(CssContext c, Box container, java.awt.geom.AffineTransform transform)
static int
findStartPage(CssContext c, Box container, java.util.List<PageBox> pages)
protected int
findStartPage(CssContext c, java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
private static java.awt.Rectangle
getBoxRect(CssContext c, Box container)
private static PagedBoxCollector.FourPoint
getCornersFromTransformedBounds(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
protected int
getMaxPageNumber()
private static double
getMaxX(PagedBoxCollector.FourPoint corners)
private static double
getMaxXFromTransformedBox(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
There is a matrix in effect.private static double
getMaxY(PagedBoxCollector.FourPoint corners)
private static double
getMaxYFromTransformedBox(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
There is a matrix in effect, we have to apply it to the box bounds before checking what page(s) it sits on.protected int
getMinPageNumber()
private static double
getMinX(PagedBoxCollector.FourPoint corners)
private static double
getMinY(PagedBoxCollector.FourPoint corners)
private static double
getMinYFromTransformedBox(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
There is a matrix in effect, we have to apply it to the box bounds before checking what page(s) it sits on.private PagedBoxCollector.PageResult
getOrCreateShadowPage(PagedBoxCollector.PageResult basePage, int shadowPageNumber)
Inserts shadow pages as needed.protected PageBox
getPageBox(int pageNo)
protected PagedBoxCollector.PageResult
getPageResult(int pageNo)
static int
getShadowPageForBounds(CssContext c, java.awt.Rectangle bounds, PageBox page)
protected int
getValidMaxPageNumber(int pageNo)
protected int
getValidMinPageNumber(int pageNo)
private boolean
intersectsAggregateBounds(CssContext c, java.awt.Shape clip, Box box)
private boolean
intersectsAny(CssContext c, java.awt.Shape clip, Box master, Box container)
private boolean
intersectsBorderBoxBounds(CssContext c, java.awt.Shape clip, Box box)
Returns whether a box (out to the outside edge of border) is partially or fully in a clip shape.private static void
transformBounds(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
-
-
-
Field Detail
-
result
private final java.util.List<PagedBoxCollector.PageResult> result
-
pages
private final java.util.List<PageBox> pages
-
finder
private final PagedBoxCollector.PageFinder finder
-
startPage
private final int startPage
-
PAGE_BASE_ONLY
public static final int PAGE_BASE_ONLY
Add collected items to base page only, ignoring inserted shadow pages.- See Also:
- Constant Field Values
-
PAGE_ALL
public static final int PAGE_ALL
Add collected boxes to all pages, including inserted shadow pages.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
PagedBoxCollector
public PagedBoxCollector(java.util.List<PageBox> pages, int minPage, int maxPage)
A more efficient paged box collector that can only find boxes on pages minPage to maxPage inclusive.
-
-
Method Detail
-
collect
public void collect(CssContext c, Layer layer)
-
collectInline
private void collectInline(CssContext c, Layer layer)
-
collectFloats
public void collectFloats(CssContext c, Layer layer)
-
collect
public void collect(CssContext c, Layer layer, Box container, int shadowPageNumber)
The main box collection method. This method works recursively to add all the boxes (inlines and blocks separately) owned by this layer to their respective flat page display lists. It also adds clip and setClip operations where needed to clip content inoverflow:hidden
blocks.- Parameters:
c
-layer
-container
-
-
collect
public void collect(CssContext c, Layer layer, Box container, int pgStart, int pgEnd, int shadowPageNumber)
-
addBlockToAll
private void addBlockToAll(CssContext c, Layer layer, Box container, int pgStart, int pgEnd, java.awt.Shape ourClip, java.util.List<PagedBoxCollector.PageResult> clipPages, boolean includeShadowPages)
-
addBlockToShadowPage
private void addBlockToShadowPage(CssContext c, Layer layer, Box container, int pgStart, int pgEnd, java.awt.Shape ourClip, java.util.List<PagedBoxCollector.PageResult> clipPages, int shadowPageNumber)
-
addLineBoxToShadowPage
private void addLineBoxToShadowPage(CssContext c, Layer layer, LineBox container, int basePageNumber, int shadowPageNumber)
-
addLineBoxToAll
private void addLineBoxToAll(CssContext c, Layer layer, LineBox container, int basePageNumber, boolean includeShadowPages)
Adds a line box to the base page if needed and any shadow pages as needed.
-
getOrCreateShadowPage
private PagedBoxCollector.PageResult getOrCreateShadowPage(PagedBoxCollector.PageResult basePage, int shadowPageNumber)
Inserts shadow pages as needed.
-
addBoxToShadowPages
private void addBoxToShadowPages(CssContext c, Box container, int pageNumber, PagedBoxCollector.PageResult pageResult, java.awt.Shape ourClip, java.util.List<PagedBoxCollector.PageResult> clipPages, Layer layer, PagedBoxCollector.AddToShadowPage addToMethod)
Adds box to inserted shadow pages as needed.
-
addTableHeaderFooter
private void addTableHeaderFooter(CssContext c, Layer layer, Box container, int shadowPageNumber)
-
addBlock
private void addBlock(Box container, PagedBoxCollector.PageResult pageResult)
Adds block box to appropriate flat box lists.
-
intersectsAggregateBounds
private boolean intersectsAggregateBounds(CssContext c, java.awt.Shape clip, Box box)
-
intersectsBorderBoxBounds
private boolean intersectsBorderBoxBounds(CssContext c, java.awt.Shape clip, Box box)
Returns whether a box (out to the outside edge of border) is partially or fully in a clip shape. This should give us the painting bounds of the box itself, although child boxes can overflow.
-
boxIntersects
private boolean boxIntersects(CssContext c, java.awt.Shape clip, Box box, java.awt.Rectangle boxBounds)
-
intersectsAny
private boolean intersectsAny(CssContext c, java.awt.Shape clip, Box master, Box container)
-
getCornersFromTransformedBounds
private static PagedBoxCollector.FourPoint getCornersFromTransformedBounds(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
-
getMinYFromTransformedBox
private static double getMinYFromTransformedBox(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
There is a matrix in effect, we have to apply it to the box bounds before checking what page(s) it sits on. To do this we transform the four corners of the box.
-
getMaxYFromTransformedBox
private static double getMaxYFromTransformedBox(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
There is a matrix in effect, we have to apply it to the box bounds before checking what page(s) it sits on. To do this we transform the four corners of the box.
-
getMaxXFromTransformedBox
private static double getMaxXFromTransformedBox(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
There is a matrix in effect. We need the max x to see how many shadow pages need creating.
-
findPageForY
public static int findPageForY(CssContext c, double y, java.util.List<PageBox> pages)
-
getShadowPageForBounds
public static int getShadowPageForBounds(CssContext c, java.awt.Rectangle bounds, PageBox page)
-
findAdjustedBoundsForBorderBox
public static java.awt.Rectangle findAdjustedBoundsForBorderBox(CssContext c, Box container, java.util.List<PageBox> pages)
Finds the document coordinates border box bounds of a box adjusted for transform and clipped according to overflow hidden.
-
findAdjustedBoundsForContentBox
public static java.awt.Rectangle findAdjustedBoundsForContentBox(CssContext c, Box container)
Finds the document coordinates content box bounds of a box adjusted for transform and clipped according to overflow hidden.
-
findStartPage
protected int findStartPage(CssContext c, java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
-
findEndPage
protected int findEndPage(CssContext c, java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
-
findStartPage
protected int findStartPage(CssContext c, Box container, java.awt.geom.AffineTransform transform)
-
findEndPage
protected int findEndPage(CssContext c, Box container, java.awt.geom.AffineTransform transform)
-
getPageResult
protected PagedBoxCollector.PageResult getPageResult(int pageNo)
-
getMaxPageNumber
protected int getMaxPageNumber()
-
getMinPageNumber
protected int getMinPageNumber()
-
getValidMinPageNumber
protected int getValidMinPageNumber(int pageNo)
-
getValidMaxPageNumber
protected int getValidMaxPageNumber(int pageNo)
-
getPageBox
protected PageBox getPageBox(int pageNo)
-
getBoxRect
private static java.awt.Rectangle getBoxRect(CssContext c, Box container)
-
findLayerRect
public static java.awt.Rectangle findLayerRect(CssContext c, Layer layer)
-
getMinY
private static double getMinY(PagedBoxCollector.FourPoint corners)
-
getMinX
private static double getMinX(PagedBoxCollector.FourPoint corners)
-
getMaxY
private static double getMaxY(PagedBoxCollector.FourPoint corners)
-
getMaxX
private static double getMaxX(PagedBoxCollector.FourPoint corners)
-
transformBounds
private static void transformBounds(java.awt.Rectangle bounds, java.awt.geom.AffineTransform transform)
-
applyOverflowClip
private static java.awt.Rectangle applyOverflowClip(java.awt.Rectangle bounds, java.awt.geom.Area overflowClip)
-
findLayerPages
public static java.util.List<PagedBoxCollector.PageInfo> findLayerPages(CssContext c, Layer layer, java.util.List<PageBox> pages)
Returns the pages a layer appears on including inserted overflow pages. Takes into account any transform and overflow hidden clipping.
-
findStartPage
public static int findStartPage(CssContext c, Box container, java.util.List<PageBox> pages)
- Returns:
- 0 based page number of start of container paint area (including overflow)
-
findEndPage
public static int findEndPage(CssContext c, Box container, java.util.List<PageBox> pages)
- Returns:
- 0 based page number of end of container paint area (including overflow)
-
-