X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcairo-chart.c;h=6625452122a9590c35b9f6cc06f7ac43d365a0c5;hb=d9c6597d5b7a0fb3211d5ba0696b0c9681c776c0;hp=81c770354cea82380ba4fc1128431bd662d77618;hpb=b961c772eaaead1cea1c2bd892089546e0e3f471;p=pspp diff --git a/src/output/cairo-chart.c b/src/output/cairo-chart.c index 81c770354c..6625452122 100644 --- a/src/output/cairo-chart.c +++ b/src/output/cairo-chart.c @@ -46,13 +46,14 @@ void xrchart_geometry_init (cairo_t *cr, struct xrchart_geometry *geom, double width, double length) { - /* Set default chartetry. */ + /* Set default chart geometry. */ geom->axis[SCALE_ORDINATE].data_max = 0.900 * length; - geom->axis[SCALE_ABSCISSA].data_max = 0.800 * width; geom->axis[SCALE_ORDINATE].data_min = 0.120 * length; + geom->axis[SCALE_ABSCISSA].data_min = 0.150 * width; - geom->abscissa_top = 0.070 * length; - geom->ordinate_right = 0.120 * width; + geom->axis[SCALE_ABSCISSA].data_max = 0.800 * width; + geom->abscissa_bottom = 0.070 * length; + geom->ordinate_left = 0.050 * width; geom->title_bottom = 0.920 * length; geom->legend_left = 0.810 * width; geom->legend_right = width; @@ -317,15 +318,18 @@ xrchart_write_scale (cairo_t *cr, struct xrchart_geometry *geom, const double tick_interval = chart_rounded_tick ((smax - smin) / (double) ticks); - geom->axis[orient].max = ceil (smax / tick_interval) * tick_interval; - geom->axis[orient].min = floor (smin / tick_interval) * tick_interval; + int upper = ceil (smax / tick_interval); + int lower = floor (smin / tick_interval); + + geom->axis[orient].max = tick_interval * upper; + geom->axis[orient].min = tick_interval * lower; geom->axis[orient].scale = (fabs (geom->axis[orient].data_max - geom->axis[orient].data_min) / fabs (geom->axis[orient].max - geom->axis[orient].min)); - for (s = 0 ; s < (geom->axis[orient].max - geom->axis[orient].min) / tick_interval; ++s) + for (s = 0 ; s < upper - lower; ++s) { - double pos = s * tick_interval + geom->axis[orient].min; + double pos = (s + lower) * tick_interval; draw_tick (cr, geom, orient, s * tick_interval * geom->axis[orient].scale, "%g", pos); } @@ -352,7 +356,7 @@ void xrchart_write_xlabel (cairo_t *cr, const struct xrchart_geometry *geom, const char *label) { - cairo_move_to (cr, geom->axis[SCALE_ABSCISSA].data_min, geom->abscissa_top); + cairo_move_to (cr, geom->axis[SCALE_ABSCISSA].data_min, geom->abscissa_bottom); xrchart_label (cr, 'l', 't', geom->font_size, label); } @@ -362,9 +366,9 @@ xrchart_write_ylabel (cairo_t *cr, const struct xrchart_geometry *geom, const char *label) { cairo_save (cr); - cairo_translate (cr, -geom->axis[SCALE_ORDINATE].data_min, -geom->ordinate_right); - cairo_move_to (cr, 0, 0); + cairo_translate (cr, geom->ordinate_left, geom->axis[SCALE_ORDINATE].data_min); cairo_rotate (cr, M_PI / 2.0); + xrchart_label (cr, 'l', 'x', geom->font_size, label); cairo_restore (cr); }