X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=acre.c;h=12be71d249952421f0fb17caa956e3cd74377a0f;hb=af6a6a5cafbbbbb1d5e1cffcab4c5903853d9758;hp=e91248c77e92c4a5d960d9b41d27db3ad5b8f376;hpb=3a0fcbced3dfbdaef697f47219e5308df0210c5a;p=acre diff --git a/acre.c b/acre.c index e91248c..12be71d 100644 --- a/acre.c +++ b/acre.c @@ -160,7 +160,7 @@ acre_add_data (acre_t *acre, acre_data_t *data) #define ACRE_FONT_FAMILY "sans" #define ACRE_FONT_SIZE 12 -#define ACRE_TITLE_FONT_SIZE 32 +#define ACRE_TITLE_FONT_SIZE 20 #define ACRE_PAD (ACRE_FONT_SIZE) #define ACRE_TICK_MAJOR_SIZE 6 #define ACRE_TICK_MINOR_SIZE 3 @@ -377,15 +377,17 @@ _step_for_range (double range, int *minor_divisions) * nice-looking pixel-snapped ticks we want to expand the range * slightly. */ static void -_expand_range_for_width (double *axis_min, double *axis_max, int pixel_size) +_expand_range_for_width (double *axis_min, double *axis_max, int pixel_range) { - double range, new_range, step, pixel_step; + double range, new_range, step, step_minor, pixel_step; int minor_divisions; range = *axis_max - *axis_min; step = _step_for_range (range, &minor_divisions); - pixel_step = step * pixel_size / range / minor_divisions; + step_minor = step / minor_divisions; + + pixel_step = step_minor * (pixel_range / range); /* We expand the range by the ratio of the pixel step to the floor * of the pixel_step. @@ -443,7 +445,24 @@ _compute_axis_ranges (acre_t *acre) } } - /* Next, increase the axis ranges just enough so that the step + /* Next, we want to ensure that the data never collides with the + * ticks. So we expand each axis on its minimum side as needed. */ + cairo_save (cr); + { + double x, y; + + _set_transform_to_data_space (acre); + + x = ACRE_TICK_MAJOR_SIZE + 2.0; + y = ACRE_TICK_MAJOR_SIZE + 2.0; + cairo_device_to_user_distance (cr, &x, &y); + + acre->x_axis.min -= x; + acre->y_axis.min += y; + } + cairo_restore (cr); + + /* Then, increase the axis ranges just enough so that the step * sizes for the ticks will be integers. */ _expand_range_for_width (&acre->x_axis.min, @@ -483,6 +502,16 @@ _draw_data (acre_t *acre) cairo_t *cr = acre->cr; unsigned int d, i; acre_data_t *data; +#define NUM_COLORS 3 + struct { + double r; + double g; + double b; + } colors [NUM_COLORS] = { + {1, 0, 0}, + {0, 1, 0}, + {0, 0, 1} + }; cairo_save (cr); @@ -491,6 +520,11 @@ _draw_data (acre_t *acre) _set_transform_to_data_space (acre); for (d = 0; d < acre->num_data; d++) { + int color = d % NUM_COLORS; + cairo_set_source_rgb (cr, + colors[color].r, + colors[color].g, + colors[color].b); data = acre->data[d]; cairo_new_path (cr); for (i = 0; i < data->num_points; i++) { @@ -533,7 +567,7 @@ _draw_ticks (acre_t *acre, t += sub_step) { int tick_size; - if (fabs((t / step) - (int) (t / step)) < 0.5 * (sub_step / step)) + if (fabs((t / step) - round (t / step)) < 0.5 * (sub_step / step)) tick_size = ACRE_TICK_MAJOR_SIZE; else tick_size = ACRE_TICK_MINOR_SIZE;