#define _ISOC99_SOURCE /* for round() */
#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE /* for asprintf() */
#include "acre.h"
#include "xmalloc.h"
/* Data for drawing. */
cairo_t *cr;
+ PangoFontDescription *font;
/* Total size including labels. */
int width;
_draw_title_and_labels (acre_t *acre)
{
cairo_t *cr = acre->cr;
- PangoFontDescription *acre_font, *title_font;
+ PangoFontDescription *title_font;
PangoLayout *title_layout, *x_axis_layout, *y_axis_layout;
int title_width, title_height;
int x_axis_width, x_axis_height;
cairo_save (cr);
- acre_font = pango_font_description_new ();
- pango_font_description_set_family (acre_font, ACRE_FONT_FAMILY);
- pango_font_description_set_absolute_size (acre_font,
+ acre->font = pango_font_description_new ();
+ pango_font_description_set_family (acre->font, ACRE_FONT_FAMILY);
+ pango_font_description_set_absolute_size (acre->font,
ACRE_FONT_SIZE * PANGO_SCALE);
title_font = pango_font_description_new ();
pango_layout_set_alignment (title_layout, PANGO_ALIGN_CENTER);
x_axis_layout = pango_cairo_create_layout (cr);
- pango_layout_set_font_description (x_axis_layout, acre_font);
+ pango_layout_set_font_description (x_axis_layout, acre->font);
pango_layout_set_text (x_axis_layout, acre->x_axis.label, -1);
pango_layout_set_alignment (x_axis_layout, PANGO_ALIGN_CENTER);
y_axis_layout = pango_cairo_create_layout (cr);
- pango_layout_set_font_description (y_axis_layout, acre_font);
+ pango_layout_set_font_description (y_axis_layout, acre->font);
pango_layout_set_text (y_axis_layout, acre->y_axis.label, -1);
pango_layout_set_alignment (y_axis_layout, PANGO_ALIGN_CENTER);
cairo_move_to (cr, x, acre->y_axis.min);
cairo_save (cr);
{
- cairo_identity_matrix (cr);
- cairo_rel_line_to (cr, 0, 0.5);
- cairo_rel_line_to (cr, 0, -ACRE_TICK_SIZE-0.5);
- cairo_set_line_width (cr, 1.0);
- cairo_stroke (cr);
+ /* tick */
+ cairo_save (cr);
+ {
+ cairo_identity_matrix (cr);
+ cairo_rel_line_to (cr, 0, 0.5);
+ cairo_rel_line_to (cr, 0, -ACRE_TICK_SIZE-0.5);
+ cairo_set_line_width (cr, 1.0);
+ cairo_stroke (cr);
+ }
+ cairo_restore (cr);
+
+ /* label */
+ cairo_save (cr);
+ {
+ PangoLayout *layout;
+ char *label;
+ int width, height;
+ layout = pango_cairo_create_layout (cr);
+ pango_layout_set_font_description (layout, acre->font);
+ asprintf (&label, "%g", x);
+ pango_layout_set_text (layout, label, -1);
+ free (label);
+ pango_layout_set_alignment (layout,
+ PANGO_ALIGN_CENTER);
+ cairo_move_to (cr, x, acre->y_axis.min);
+ cairo_identity_matrix (cr);
+ pango_layout_get_pixel_size (layout, &width, &height);
+ cairo_rel_move_to (cr, -width / 2, 2);
+ pango_cairo_show_layout (cr, layout);
+ }
+ cairo_restore (cr);
}
cairo_restore (cr);
x += step;
cairo_move_to (cr, acre->x_axis.min, y);
cairo_save (cr);
{
- cairo_identity_matrix (cr);
- cairo_rel_line_to (cr, -0.5, 0);
- cairo_rel_line_to (cr, ACRE_TICK_SIZE+0.5, 0);
- cairo_set_line_width (cr, 1.0);
- cairo_stroke (cr);
+ /* tick */
+ cairo_save (cr);
+ {
+ cairo_identity_matrix (cr);
+ cairo_rel_line_to (cr, -0.5, 0);
+ cairo_rel_line_to (cr, ACRE_TICK_SIZE+0.5, 0);
+ cairo_set_line_width (cr, 1.0);
+ cairo_stroke (cr);
+ }
+ cairo_restore (cr);
+
+ /* label */
+ cairo_save (cr);
+ {
+ PangoLayout *layout;
+ char *label;
+ int width, height;
+ layout = pango_cairo_create_layout (cr);
+ pango_layout_set_font_description (layout, acre->font);
+ asprintf (&label, "%g", y);
+ pango_layout_set_text (layout, label, -1);
+ free (label);
+ pango_layout_set_alignment (layout,
+ PANGO_ALIGN_CENTER);
+ cairo_move_to (cr, acre->x_axis.min, y);
+ cairo_identity_matrix (cr);
+ pango_layout_get_pixel_size (layout, &width, &height);
+ cairo_rel_move_to (cr, -width-2, -height/2);
+ pango_cairo_show_layout (cr, layout);
+ }
+ cairo_restore (cr);
}
cairo_restore (cr);
y += step;