STYLES[TABLE_VERT][0]: style of line from left of BB to its center.
STYLES[TABLE_VERT][1]: style of line from right of BB to its center. */
void (*draw_line) (void *aux, int bb[TABLE_N_AXES][2],
- enum render_line_style styles[TABLE_N_AXES][2]);
+ enum render_line_style styles[TABLE_N_AXES][2],
+ struct cell_color colors[TABLE_N_AXES][2]);
/* Draws CELL within bounding box BB. CLIP is the same as BB (the common
case) or a subregion enclosed by BB. In the latter case only the part
of the cell that lies within CLIP should actually be drawn, although BB
- should used to determine the layout of the cell. */
- void (*draw_cell) (void *aux, const struct table_cell *cell,
- int bb[TABLE_N_AXES][2], int clip[TABLE_N_AXES][2]);
+ should used to determine the layout of the cell.
+
+ The text in the cell needs to be vertically offset VALIGN_OFFSET units
+ from the top of the bounding box. This handles vertical alignment with
+ the cell. (The caller doesn't just reduce the bounding box size because
+ that would prevent the implementation from filling the entire cell with
+ the background color.) The implementation must handle horizontal
+ alignment itself. */
+ void (*draw_cell) (void *aux, const struct table_cell *cell, int color_idx,
+ int bb[TABLE_N_AXES][2], int valign_offset,
+ int spill[TABLE_N_AXES][2],
+ int clip[TABLE_N_AXES][2]);
/* Auxiliary data passed to each of the above functions. */
void *aux;
points.) */
int min_break[TABLE_N_AXES];
+ /* True if the driver supports cell margins. (If false, the rendering
+ engine will insert a small space betweeen adjacent cells that don't have
+ an intervening rule.) */
bool supports_margins;
+
+ /* True if the local language has a right-to-left direction, otherwise
+ false. (Use render_direction_rtl() to find out.) */
+ bool rtl;
};
/* An iterator for breaking render_pages into smaller chunks. */