The base class for all layout boxes.
HexaPDF uses the following box model:
Each box can specify a width and height. Padding and border are inside, the margin outside of this rectangle.
If width or height is set to zero, they are determined automatically during layouting.
The height of the box, including padding and/or borders.
The width of the box, including padding and/or borders.
Public Class Methods
true, the width and height are
taken to mean the content width and height and the style's padding and
border are removed from them appropriately.
Since the final location of the box is not known beforehand, the drawing operations inside the block should draw inside the rectangle (0, 0, #content_width, #content_height) - note that the width and height of the box may not be known beforehand.
Public Instance Methods
The height of the content box, i.e. without padding and/or borders.
The width of the content box, i.e. without padding and/or borders.
Draws the content of the box onto the canvas at the position (x, y).
The coordinate system is translated so that the origin is at the bottom left corner of the **content box** during the drawing operations.
The block specified when creating the box is invoked with the canvas and
the box as arguments. Subclasses can specify an on-demand drawing method by
setting the +@draw_block+ instance variable to
nil or a valid
block. This is useful to avoid unnecessary set-up operations when the block
true if no drawing operations are performed.
Fits the box into the Frame and returns
true if fitting was successful.
The default implementation uses the whole available space for width and height if they were initially set to 0. Otherwise the specified dimensions are used.
Tries to split the box into two, the first of which needs to fit into the available space, and returns the parts as array.
In many cases the first box in the list will be this box, meaning that even
when fit fails, a part of the box may
still fit. Note that fit may not be
called if the first box is this box since it is assumed that it is already
fitted. If not even a part of this box fits into the available space,
nil should be returned as the first array element.
Possible return values:
The box fully fits into the available space.
- [nil, self]
The box can't be split or no part of the box fits into the available space.
- [self, new_box]
A part of the box fits and a new box is returned for the rest.
This default implementation provides no splitting functionality.