Mercurial > MadButterfly
diff src/redraw_man.c @ 841:ce6cd06adccf
Fix error on area of cached coords and draw on right canvas.
When zerioing, zeroing_coord() does not compute area of a cached coord
and its descendant coords. It is fixed by eliminate empty areas of
descendants and with special case of first non-empty area.
In previous version, it always draw on canvas of root coord. It is fixed.
Known issues:
- It can not translate position of a pointer to a cached coord and
descendants correctly.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 17 Sep 2010 16:26:14 +0800 |
parents | 048cc704bef7 |
children | 33fd5fdc8b48 6eaeec6806f2 |
line wrap: on
line diff
--- a/src/redraw_man.c Fri Sep 17 12:21:36 2010 +0800 +++ b/src/redraw_man.c Fri Sep 17 16:26:14 2010 +0800 @@ -1544,6 +1544,17 @@ area = coord_get_pcache_area(cur); } else area = coord_get_area(cur); + + if(area->w == 0 && area->h == 0) + continue; + + if(min_x == max_x && min_y == max_y) { + min_x = area->x; + max_x = area->x + area->w; + min_y = area->y; + max_y = area->y + area->h; + continue; + } if(area->x < min_x) min_x = area->x; @@ -2031,28 +2042,28 @@ mbe_set_line_width(cr, shape->stroke_width); } -static void fill_path_preserve(redraw_man_t *rdman) { - mbe_fill_preserve(rdman->cr); +static void fill_path_preserve(redraw_man_t *rdman, mbe_t *cr) { + mbe_fill_preserve(cr); } -static void fill_path(redraw_man_t *rdman) { - mbe_fill(rdman->cr); +static void fill_path(redraw_man_t *rdman, mbe_t *cr) { + mbe_fill(cr); } -static void stroke_path(redraw_man_t *rdman) { - mbe_stroke(rdman->cr); +static void stroke_path(redraw_man_t *rdman, mbe_t *cr) { + mbe_stroke(cr); } #else static void set_shape_stroke_param(shape_t *shape, mbe_t *cr) { } -static void fill_path_preserve(redraw_man_t *rdman) { +static void fill_path_preserve(redraw_man_t *rdman, mbe_t *cr) { } -static void fill_path(redraw_man_t *rdman) { +static void fill_path(redraw_man_t *rdman, mbe_t *cr) { } -static void stroke_path(redraw_man_t *rdman) { +static void stroke_path(redraw_man_t *rdman, mbe_t *cr) { } #endif @@ -2094,16 +2105,16 @@ if(shape->fill) { fill->prepare(fill, cr); if(shape->stroke) - fill_path_preserve(rdman); + fill_path_preserve(rdman, cr); else - fill_path(rdman); + fill_path(rdman, cr); } stroke = shape->stroke; if(stroke) { stroke->prepare(stroke, cr); set_shape_stroke_param(shape, cr); - stroke_path(rdman); + stroke_path(rdman, cr); } } }