summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
3a0fcbc)
There. I think I'm done making the ticks and frame look nice now.
I'm totally happy with the result.
* nice-looking pixel-snapped ticks we want to expand the range
* slightly. */
static void
* 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);
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.
/* We expand the range by the ratio of the pixel step to the floor
* of the pixel_step.
- /* 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,
* sizes for the ticks will be integers.
*/
_expand_range_for_width (&acre->x_axis.min,