}
void
-xrchart_label (cairo_t *cr, int horz_justify, int vert_justify,
- double font_size, const char *string)
+xrchart_label_rotate (cairo_t *cr, int horz_justify, int vert_justify,
+ double font_size, const char *string, double angle)
{
PangoFontDescription *desc;
PangoLayout *layout;
pango_font_description_set_absolute_size (desc, font_size * PANGO_SCALE);
cairo_save (cr);
+ cairo_rotate (cr, angle);
cairo_get_current_point (cr, &x, &y);
cairo_translate (cr, x, y);
cairo_move_to (cr, 0, 0);
pango_font_description_free (desc);
}
+void
+xrchart_label (cairo_t *cr, int horz_justify, int vert_justify,
+ double font_size, const char *string)
+{
+ xrchart_label_rotate (cr, horz_justify, vert_justify, font_size, string, 0);
+}
+
+
/* Draw a tick mark at position
If label is non null, then print it at the tick mark
*/
static void
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
+ bool rotated,
double position,
const char *s);
void
draw_tick (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
+ bool rotated,
double position,
const char *label, ...)
{
if (fabs (position) < DBL_EPSILON)
position = 0;
- draw_tick_internal (cr, geom, orientation, position, s);
+ draw_tick_internal (cr, geom, orientation, rotated, position, s);
free (s);
va_end (ap);
}
static void
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
+ bool rotated,
double position,
const char *s)
{
cairo_move_to (cr, x, y);
if (orientation == SCALE_ABSCISSA)
- xrchart_label (cr, 'c', 't', geom->font_size, s);
+ {
+ if ( rotated)
+ xrchart_label_rotate (cr, 'l', 'c', geom->font_size, s, -G_PI_4);
+ else
+ xrchart_label (cr, 'c', 't', geom->font_size, s);
+ }
else if (orientation == SCALE_ORDINATE)
{
if (fabs (position) < DBL_EPSILON)
for (s = 0 ; s < upper - lower; ++s)
{
double pos = (s + lower) * tick_interval;
- draw_tick (cr, geom, orient,
+ draw_tick (cr, geom, orient, false,
s * tick_interval * geom->axis[orient].scale, "%g", pos);
}
}
void xrchart_label (cairo_t *, int horz_justify, int vert_justify,
double font_size, const char *);
+void xrchart_label_rotate (cairo_t *cr, int horz_justify, int vert_justify,
+ double font_size, const char *string, double angle);
+
+
/* Draw a tick mark at position
If label is non zero, then print it at the tick mark
*/
void draw_tick (cairo_t *, const struct xrchart_geometry *,
- enum tick_orientation orientation, double position,
+ enum tick_orientation orientation,
+ bool rotated,
+ double position,
const char *label, ...)
- PRINTF_FORMAT (5, 6);
+ PRINTF_FORMAT (6, 7);
/* Write the title on a chart*/