const struct cell_color *color)
{
cairo_new_path (xr->cairo);
- if (!xr->style->use_system_colors)
- xr_set_source_rgba (xr->cairo, color);
cairo_set_line_width (
xr->cairo,
xr_to_pt (style == RENDER_LINE_THICK ? XR_LINE_WIDTH * 2
: XR_LINE_WIDTH));
cairo_move_to (xr->cairo, xr_to_pt (x0), xr_to_pt (y0));
cairo_line_to (xr->cairo, xr_to_pt (x1), xr_to_pt (y1));
+
+ if (!xr->style->use_system_colors)
+ xr_set_source_rgba (xr->cairo, color);
+ if (style == RENDER_LINE_DASHED)
+ cairo_set_dash (xr->cairo, (double[]) { 2 }, 1, 0);
cairo_stroke (xr->cairo);
+ if (style == RENDER_LINE_DASHED)
+ cairo_set_dash (xr->cairo, NULL, 0, 0);
}
static void UNUSED
xr_layout_cell (xr, cell, bb, clip, &w, &h, &brk);
return brk;
}
+
+static void
+xrr_scale (void *xr_, double scale)
+{
+ struct xr_fsm *xr = xr_;
+ cairo_scale (xr->cairo, scale, scale);
+}
\f
static void
xr_clip (struct xr_fsm *xr, int clip[TABLE_N_AXES][2])
bb[X][1] == INT_MAX ? -1 : xr_to_pango (bb[X][1] - bb[X][0]));
pango_layout_set_wrap (layout, PANGO_WRAP_WORD);
+ int size[TABLE_N_AXES];
+ pango_layout_get_size (layout, &size[H], &size[V]);
+
if (clip[H][0] != clip[H][1])
{
cairo_save (xr->cairo);
xr_clip (xr, clip);
if (options & TAB_ROTATE)
{
+ int extra = bb[H][1] - bb[H][0] - size[V];
+ int halign_offset = extra > 0 ? extra / 2 : 0;
cairo_translate (xr->cairo,
- xr_to_pt (bb[H][0]),
+ xr_to_pt (bb[H][0] + halign_offset),
xr_to_pt (bb[V][1]));
cairo_rotate (xr->cairo, -M_PI_2);
}
cairo_restore (xr->cairo);
}
- int size[TABLE_N_AXES];
- pango_layout_get_size (layout, &size[H], &size[V]);
int w = pango_to_xr (size[X]);
int h = pango_to_xr (size[Y]);
if (w > *widthp)
*brk = bb[V][0];
*height = xr_layout_cell_text (xr, cell, bb, clip, width, brk);
}
-\f
-#if 0
-static bool
-xr_table_render (struct xr_render_fsm *fsm, struct xr_fsm *xr)
-{
- struct xr_table_state *ts = UP_CAST (fsm, struct xr_table_state, fsm);
-
- while (render_pager_has_next (ts->p))
- {
- int used;
-
- used = render_pager_draw_next (ts->p, xr->length);
- if (!used)
- {
- assert (xr->y > 0);
- return true;
- }
- else
- xr->y += used;
- }
- return false;
-}
-
-static void
-xr_table_destroy (struct xr_render_fsm *fsm)
-{
- struct xr_table_state *ts = UP_CAST (fsm, struct xr_table_state, fsm);
-
- render_pager_destroy (ts->p);
- free (ts);
-}
-
-static struct xr_render_fsm *
-xr_render_table (struct xr_fsm *xr, struct table_item *table_item)
-{
- struct xr_table_state *ts;
-
- ts = xmalloc (sizeof *ts);
- ts->fsm.render = xr_table_render;
- ts->fsm.destroy = xr_table_destroy;
-
- if (xr->y > 0)
- xr->y += xr->char_height;
-
- ts->p = render_pager_create (xr->params, table_item);
- table_item_unref (table_item);
-
- return &ts->fsm;
-}
-\f
-static bool
-xr_eject_render (struct xr_render_fsm *fsm UNUSED, struct xr_fsm *xr)
-{
- return xr->y > 0;
-}
-
-static void
-xr_eject_destroy (struct xr_render_fsm *fsm UNUSED)
-{
- /* Nothing to do. */
-}
-
-static struct xr_render_fsm *
-xr_render_eject (void)
-{
- static struct xr_render_fsm eject_renderer =
- {
- xr_eject_render,
- xr_eject_destroy
- };
-
- return &eject_renderer;
-}
-\f
-#define CHART_WIDTH 500
-#define CHART_HEIGHT 375
-
-static struct xr_render_fsm *
-xr_render_text (struct xr_fsm *xr, const struct text_item *text_item)
-{
- enum text_item_type type = text_item_get_type (text_item);
-
- switch (type)
- {
- case TEXT_ITEM_PAGE_TITLE:
- break;
-
- case TEXT_ITEM_EJECT_PAGE:
- if (xr->y > 0)
- return xr_render_eject ();
- break;
-
- default:
- return xr_render_table (
- xr, text_item_to_table_item (text_item_ref (text_item)));
- }
-
- return NULL;
-}
-#endif
#define CHART_WIDTH 500
#define CHART_HEIGHT 375
.adjust_break = xrr_adjust_break,
.draw_line = xrr_draw_line,
.draw_cell = xrr_draw_cell,
+ .scale = xrr_scale,
};
enum { LW = XR_LINE_WIDTH, LS = XR_LINE_SPACE };