- bb[H][0] += xr->cell_margin;
- bb[H][1] -= xr->cell_margin;
- if (bb[H][0] >= bb[H][1])
- return;
- xr_layout_cell (xr, cell, footnote_idx, bb, clip, &w, &h, &brk);
+ cairo_save (xr->cairo);
+ int bg_clip[TABLE_N_AXES][2];
+ for (int axis = 0; axis < TABLE_N_AXES; axis++)
+ {
+ bg_clip[axis][0] = clip[axis][0];
+ if (bb[axis][0] == clip[axis][0])
+ bg_clip[axis][0] -= spill[axis][0];
+
+ bg_clip[axis][1] = clip[axis][1];
+ if (bb[axis][1] == clip[axis][1])
+ bg_clip[axis][1] += spill[axis][1];
+ }
+ xr_clip (xr, bg_clip);
+ cairo_set_source_rgb (xr->cairo,
+ cell->style->bg.r / 255.,
+ cell->style->bg.g / 255.,
+ cell->style->bg.b / 255.);
+ fill_rectangle (xr,
+ bb[H][0] - spill[H][0],
+ bb[V][0] - spill[V][0],
+ bb[H][1] + spill[H][1],
+ bb[V][1] + spill[V][1]);
+ cairo_restore (xr->cairo);
+
+ cairo_save (xr->cairo);
+ cairo_set_source_rgb (xr->cairo,
+ cell->style->fg.r / 255.,
+ cell->style->fg.g / 255.,
+ cell->style->fg.b / 255.);
+
+ for (int axis = 0; axis < TABLE_N_AXES; axis++)
+ {
+ bb[axis][0] += px_to_xr (cell->style->margin[axis][0]);
+ bb[axis][1] -= px_to_xr (cell->style->margin[axis][1]);
+ }
+ if (bb[H][0] < bb[H][1] && bb[V][0] < bb[V][1])
+ xr_layout_cell (xr, cell, bb, clip, &w, &h, &brk);
+ cairo_restore (xr->cairo);