* amount for the major ticks (see _step_for_range). To get
* nice-looking pixel-snapped ticks we want to expand the range
* slightly. */
-static double
-_expand_range (double data_range, int pixel_size)
+static void
+_expand_range_for_width (double *axis_min, double *axis_max, int pixel_size)
{
- double step, pixel_step;
+ double range, new_range, step, pixel_step;
- step = _step_for_range (data_range);
- pixel_step = step * pixel_size / data_range;
+ range = *axis_max - *axis_min;
+
+ step = _step_for_range (range);
+ pixel_step = step * pixel_size / range;
/* We expand the range by the ratio of the pixel step to the floor
* of the pixel_step.
*/
- return data_range * pixel_step / floor (pixel_step);
+ new_range = range * pixel_step / floor (pixel_step);
+
+ /* And spread the increase out on either side of the range. */
+ *axis_min -= (new_range - range) / 2.0;
+ *axis_max += (new_range - range) / 2.0;
}
/* Setup a transformation in acre->cr such that data values plotted
{
unsigned int d, i;
acre_data_t *data;
- double x_range, new_x_range, x_adjust;
- double y_range, new_y_range, y_adjust;
+ double x_adjust, y_adjust;
cairo_t *cr = acre->cr;
/* First, simply find the extrema of the data. */
/* Next, increase the axis ranges just enough so that the step
* sizes for the ticks will be integers.
*/
- x_range = acre->x_axis.max - acre->x_axis.min;
- new_x_range = _expand_range (x_range, acre->chart.width);
-
- y_range = acre->y_axis.max - acre->y_axis.min;
- new_y_range = _expand_range (y_range, acre->chart.height);
-
- /* And spread the increase out on either side of the range. */
- acre->x_axis.min -= (new_x_range - x_range) / 2.0;
- acre->x_axis.max += (new_x_range - x_range) / 2.0;
+ _expand_range_for_width (&acre->x_axis.min,
+ &acre->x_axis.max,
+ acre->chart.width);
- acre->y_axis.min -= (new_y_range - y_range) / 2.0;
- acre->y_axis.max += (new_y_range - y_range) / 2.0;
+ _expand_range_for_width (&acre->y_axis.min,
+ &acre->y_axis.max,
+ acre->chart.height);
/* Finally, we also translate the axis ranges slightly so that the
* ticks land on half-integer device-pixel positions.