X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=acre.c;h=e91248c77e92c4a5d960d9b41d27db3ad5b8f376;hb=3a0fcbced3dfbdaef697f47219e5308df0210c5a;hp=6cd3a0b3c309fef4d49d5bffc05601e76f520e99;hpb=4a5a4c8bad866e53298a1cdf47104c2711c139df;p=acre diff --git a/acre.c b/acre.c index 6cd3a0b..e91248c 100644 --- a/acre.c +++ b/acre.c @@ -334,7 +334,7 @@ _draw_title_and_labels (acre_t *acre) /* For a given axis range, compute a step size (in data space) to * generate a suitable number of ticks (5 or so). */ static double -_step_for_range (double range) +_step_for_range (double range, int *minor_divisions) { double step, scale_factor; @@ -350,15 +350,21 @@ _step_for_range (double range) * 10). The threshold values between these are computed * logarithmically. */ if (step < 3.535533905932738) { - if (step < 1.58113883008419) + if (step < 1.58113883008419) { step = 1.0; - else + *minor_divisions = 4; + } else { step = 2.5; + *minor_divisions = 5; + } } else { - if (step < 7.071067811865475) + if (step < 7.071067811865475) { step = 5.0; - else + *minor_divisions = 5; + } else { step = 10.0; + *minor_divisions = 4; + } } /* Un-normalize and we now have the data value that we want to @@ -374,11 +380,12 @@ static void _expand_range_for_width (double *axis_min, double *axis_max, int pixel_size) { double range, new_range, step, pixel_step; + int minor_divisions; range = *axis_max - *axis_min; - step = _step_for_range (range); - pixel_step = step * pixel_size / range; + step = _step_for_range (range, &minor_divisions); + pixel_step = step * pixel_size / range / minor_divisions; /* We expand the range by the ratio of the pixel step to the floor * of the pixel_step. @@ -512,13 +519,13 @@ _draw_ticks (acre_t *acre, { cairo_t *cr = acre->cr; double t, step, sub_step; - int minor_divisions = 5; + int minor_divisions; cairo_save (cr); _set_transform_to_data_space (acre); - step = _step_for_range (axis_max - axis_min); + step = _step_for_range (axis_max - axis_min, &minor_divisions); sub_step = step / minor_divisions; for (t = (floor (axis_min / sub_step) + 1) * sub_step;