From 917de2bab458d51b4149a1b794cbb1b6b9562171 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Tue, 22 Jun 2010 23:36:47 +0200 Subject: Initial Cairo rendering commit: solid shapes, gradients, opacity and patterns (bzr r9508.1.1) --- src/display/sodipodi-ctrlrect.cpp | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index dcd6dc0a6..09bfde6fb 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -18,7 +18,7 @@ #include "display-forward.h" #include "sp-canvas-util.h" #include "sodipodi-ctrlrect.h" -#include "libnr/nr-pixops.h" +#include "display/inkscape-cairo.h" /* * Currently we do not have point method, as it should always be painted @@ -84,7 +84,7 @@ static void sp_ctrlrect_destroy(GtkObject *object) (* GTK_OBJECT_CLASS(parent_class)->destroy)(object); } } - +#if 0 /* FIXME: use definitions from somewhere else */ #define RGBA_R(v) ((v) >> 24) #define RGBA_G(v) (((v) >> 16) & 0xff) @@ -154,6 +154,7 @@ static void sp_ctrlrect_area(SPCanvasBuf *buf, gint xs, gint ys, gint xe, gint y } } } +#endif static void sp_ctrlrect_render(SPCanvasItem *item, SPCanvasBuf *buf) { @@ -189,13 +190,38 @@ void CtrlRect::init() void CtrlRect::render(SPCanvasBuf *buf) { + static double const dashes[2] = {4.0, 4.0}; + if ((_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) && (_area.x0 < buf->rect.x1) && (_area.y0 < buf->rect.y1) && ((_area.x1 + _shadow_size) >= buf->rect.x0) && - ((_area.y1 + _shadow_size) >= buf->rect.y0)) { - sp_canvas_prepare_buffer(buf); + ((_area.y1 + _shadow_size) >= buf->rect.y0)) + { + cairo_save(buf->ct); + cairo_translate(buf->ct, -buf->rect.x0, -buf->rect.y0); + cairo_set_line_width(buf->ct, 1); + if (_dashed) cairo_set_dash(buf->ct, dashes, 2, 0); + cairo_rectangle(buf->ct, 0.5 + _area.x0, 0.5 + _area.y0, + _area.x1 - _area.x0, _area.y1 - _area.y0); + if (_has_fill) { + ink_cairo_set_source_rgba32(buf->ct, _fill_color); + cairo_fill_preserve(buf->ct); + } + ink_cairo_set_source_rgba32(buf->ct, _border_color); + cairo_stroke(buf->ct); + + if (_shadow_size > 0) { + ink_cairo_set_source_rgba32(buf->ct, _shadow_color); + cairo_rectangle(buf->ct, 1 + _area.x1, _area.y0 + _shadow_size, + _shadow_size, _area.y1 - _area.y0 + 1); // right shadow + cairo_rectangle(buf->ct, _area.x0 + _shadow_size, 1 + _area.y1, + _area.x1 - _area.x0 - _shadow_size + 1, _shadow_size); + cairo_fill(buf->ct); + } + cairo_restore(buf->ct); +#if 0 /* Top */ sp_ctrlrect_hline(buf, _area.y0, _area.x0, _area.x1, _border_color, _dashed); /* Bottom */ @@ -217,6 +243,7 @@ void CtrlRect::render(SPCanvasBuf *buf) sp_ctrlrect_area(buf, _area.x0 + 1, _area.y0 + 1, _area.x1 - 1, _area.y1 - 1, _fill_color); } +#endif } } -- cgit v1.2.3 From 13b15b7b977eecbededd1734f5ab001f0c44d21f Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Wed, 30 Jun 2010 00:41:48 +0200 Subject: Consolidate Cairo utils in display/cairo-utils.h. Fix icons harder. (bzr r9508.1.8) --- src/display/sodipodi-ctrlrect.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index 09bfde6fb..2ebf310c7 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -18,7 +18,7 @@ #include "display-forward.h" #include "sp-canvas-util.h" #include "sodipodi-ctrlrect.h" -#include "display/inkscape-cairo.h" +#include "display/cairo-utils.h" /* * Currently we do not have point method, as it should always be painted -- cgit v1.2.3 From 32cbae2ea15712efd9a36f43f7690268c1767e52 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sun, 3 Jul 2011 11:43:53 +0100 Subject: GTK+ cleanup: gtk_type_class (bzr r10407) --- src/display/sodipodi-ctrlrect.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index 592d45bc0..b516456e9 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -64,7 +64,7 @@ static void sp_ctrlrect_class_init(SPCtrlRectClass *c) GtkObjectClass *object_class = (GtkObjectClass *) c; SPCanvasItemClass *item_class = (SPCanvasItemClass *) c; - parent_class = (SPCanvasItemClass*) gtk_type_class(sp_canvas_item_get_type()); + parent_class = (SPCanvasItemClass*) g_type_class_peek_parent(c); object_class->destroy = sp_ctrlrect_destroy; -- cgit v1.2.3 From 61752bf47e94af5a5290fd48a8587dfa6ecca5cc Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sat, 23 Jul 2011 14:20:33 +0200 Subject: remove obsolete code because changed to cairo (bzr r10494) --- src/display/sodipodi-ctrlrect.cpp | 93 --------------------------------------- 1 file changed, 93 deletions(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index b516456e9..2379fcefd 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -83,77 +83,7 @@ static void sp_ctrlrect_destroy(GtkObject *object) (* GTK_OBJECT_CLASS(parent_class)->destroy)(object); } } -#if 0 -/* FIXME: use definitions from somewhere else */ -#define RGBA_R(v) ((v) >> 24) -#define RGBA_G(v) (((v) >> 16) & 0xff) -#define RGBA_B(v) (((v) >> 8) & 0xff) -#define RGBA_A(v) ((v) & 0xff) - -static void sp_ctrlrect_hline(SPCanvasBuf *buf, gint y, gint xs, gint xe, guint32 rgba, guint dashed) -{ - if (y >= buf->rect.y0 && y < buf->rect.y1) { - guint const r = RGBA_R(rgba); - guint const g = RGBA_G(rgba); - guint const b = RGBA_B(rgba); - guint const a = RGBA_A(rgba); - gint const x0 = MAX(buf->rect.x0, xs); - gint const x1 = MIN(buf->rect.x1, xe + 1); - guchar *p = buf->buf + (y - buf->rect.y0) * buf->buf_rowstride + (x0 - buf->rect.x0) * 4; - for (gint x = x0; x < x1; x++) { - if (!dashed || ((x / DASH_LENGTH) % 2)) { - p[0] = INK_COMPOSE(r, a, p[0]); - p[1] = INK_COMPOSE(g, a, p[1]); - p[2] = INK_COMPOSE(b, a, p[2]); - } - p += 4; - } - } -} -static void sp_ctrlrect_vline(SPCanvasBuf *buf, gint x, gint ys, gint ye, guint32 rgba, guint dashed) -{ - if (x >= buf->rect.x0 && x < buf->rect.x1) { - guint const r = RGBA_R(rgba); - guint const g = RGBA_G(rgba); - guint const b = RGBA_B(rgba); - guint const a = RGBA_A(rgba); - gint const y0 = MAX(buf->rect.y0, ys); - gint const y1 = MIN(buf->rect.y1, ye + 1); - guchar *p = buf->buf + (y0 - buf->rect.y0) * buf->buf_rowstride + (x - buf->rect.x0) * 4; - for (gint y = y0; y < y1; y++) { - if (!dashed || ((y / DASH_LENGTH) % 2)) { - p[0] = INK_COMPOSE(r, a, p[0]); - p[1] = INK_COMPOSE(g, a, p[1]); - p[2] = INK_COMPOSE(b, a, p[2]); - } - p += buf->buf_rowstride; - } - } -} - -/** Fills the pixels in [xs, xe)*[ys,ye) clipped to the tile with rgb * a. */ -static void sp_ctrlrect_area(SPCanvasBuf *buf, gint xs, gint ys, gint xe, gint ye, guint32 rgba) -{ - guint const r = RGBA_R(rgba); - guint const g = RGBA_G(rgba); - guint const b = RGBA_B(rgba); - guint const a = RGBA_A(rgba); - gint const x0 = MAX(buf->rect.x0, xs); - gint const x1 = MIN(buf->rect.x1, xe + 1); - gint const y0 = MAX(buf->rect.y0, ys); - gint const y1 = MIN(buf->rect.y1, ye + 1); - for (gint y = y0; y < y1; y++) { - guchar *p = buf->buf + (y - buf->rect.y0) * buf->buf_rowstride + (x0 - buf->rect.x0) * 4; - for (gint x = x0; x < x1; x++) { - p[0] = INK_COMPOSE(r, a, p[0]); - p[1] = INK_COMPOSE(g, a, p[1]); - p[2] = INK_COMPOSE(b, a, p[2]); - p += 4; - } - } -} -#endif static void sp_ctrlrect_render(SPCanvasItem *item, SPCanvasBuf *buf) { @@ -220,29 +150,6 @@ void CtrlRect::render(SPCanvasBuf *buf) cairo_fill(buf->ct); } cairo_restore(buf->ct); -#if 0 - /* Top */ - sp_ctrlrect_hline(buf, _area.y0, _area.x0, _area.x1, _border_color, _dashed); - /* Bottom */ - sp_ctrlrect_hline(buf, _area.y1, _area.x0, _area.x1, _border_color, _dashed); - /* Left */ - sp_ctrlrect_vline(buf, _area.x0, _area.y0 + 1, _area.y1 - 1, _border_color, _dashed); - /* Right */ - sp_ctrlrect_vline(buf, _area.x1, _area.y0 + 1, _area.y1 - 1, _border_color, _dashed); - if (_shadow_size > 0) { - /* Right shadow */ - sp_ctrlrect_area(buf, _area.x1 + 1, _area.y0 + _shadow_size, - _area.x1 + _shadow_size, _area.y1 + _shadow_size, _shadow_color); - /* Bottom shadow */ - sp_ctrlrect_area(buf, _area.x0 + _shadow_size, _area.y1 + 1, - _area.x1, _area.y1 + _shadow_size, _shadow_color); - } - if (_has_fill) { - /* Fill */ - sp_ctrlrect_area(buf, _area.x0 + 1, _area.y0 + 1, - _area.x1 - 1, _area.y1 - 1, _fill_color); - } -#endif } } -- cgit v1.2.3 From 31ae7c8ea53c651ddcaf9c4b73ecc3fd9e8c8eef Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sat, 23 Jul 2011 15:40:39 +0200 Subject: NRRectL -> 2geom (bzr r10495) --- src/display/sodipodi-ctrlrect.cpp | 181 ++++++++++++++++++++------------------ 1 file changed, 94 insertions(+), 87 deletions(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index 2379fcefd..b4539841b 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -15,8 +15,8 @@ * */ -#include "sp-canvas-util.h" #include "sodipodi-ctrlrect.h" +#include "sp-canvas-util.h" #include "display/cairo-utils.h" /* @@ -104,8 +104,7 @@ void CtrlRect::init() _dashed = false; _shadow = 0; - _area.x0 = _area.y0 = 0; - _area.x1 = _area.y1 = 0; + _area = Geom::OptIntRect(); _rect = Geom::Rect(Geom::Point(0,0),Geom::Point(0,0)); @@ -119,20 +118,25 @@ void CtrlRect::init() void CtrlRect::render(SPCanvasBuf *buf) { + using Geom::X; + using Geom::Y; + static double const dashes[2] = {4.0, 4.0}; - if ((_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) && - (_area.x0 < buf->rect.x1) && - (_area.y0 < buf->rect.y1) && - ((_area.x1 + _shadow_size) >= buf->rect.x0) && - ((_area.y1 + _shadow_size) >= buf->rect.y0)) + if (!_area) { + return; + } + Geom::IntRect area = *_area; + Geom::IntRect area_w_shadow (area[X].min(), area[Y].min(), + area[X].max() + _shadow_size, area[Y].max() + _shadow_size); + if ( area_w_shadow.intersects(buf->rect) ) { cairo_save(buf->ct); cairo_translate(buf->ct, -buf->rect.x0, -buf->rect.y0); cairo_set_line_width(buf->ct, 1); if (_dashed) cairo_set_dash(buf->ct, dashes, 2, 0); - cairo_rectangle(buf->ct, 0.5 + _area.x0, 0.5 + _area.y0, - _area.x1 - _area.x0, _area.y1 - _area.y0); + cairo_rectangle(buf->ct, 0.5 + area[X].min(), 0.5 + area[Y].min(), + area[X].max() - area[X].min(), area[Y].max() - area[Y].min()); if (_has_fill) { ink_cairo_set_source_rgba32(buf->ct, _fill_color); @@ -143,10 +147,10 @@ void CtrlRect::render(SPCanvasBuf *buf) if (_shadow_size > 0) { ink_cairo_set_source_rgba32(buf->ct, _shadow_color); - cairo_rectangle(buf->ct, 1 + _area.x1, _area.y0 + _shadow_size, - _shadow_size, _area.y1 - _area.y0 + 1); // right shadow - cairo_rectangle(buf->ct, _area.x0 + _shadow_size, 1 + _area.y1, - _area.x1 - _area.x0 - _shadow_size + 1, _shadow_size); + cairo_rectangle(buf->ct, 1 + area[X].max(), area[Y].min() + _shadow_size, + _shadow_size, area[Y].max() - area[Y].min() + 1); // right shadow + cairo_rectangle(buf->ct, area[X].min() + _shadow_size, 1 + area[Y].max(), + area[X].max() - area[X].min() - _shadow_size + 1, _shadow_size); cairo_fill(buf->ct); } cairo_restore(buf->ct); @@ -156,145 +160,148 @@ void CtrlRect::render(SPCanvasBuf *buf) void CtrlRect::update(Geom::Affine const &affine, unsigned int flags) { + using Geom::X; + using Geom::Y; + if (((SPCanvasItemClass *) parent_class)->update) { ((SPCanvasItemClass *) parent_class)->update(this, affine, flags); } sp_canvas_item_reset_bounds(this); - NRRectL _area_old; - _area_old.x0 = _area.x0; - _area_old.x1 = _area.x1; - _area_old.y0 = _area.y0; - _area_old.y1 = _area.y1; - Geom::Rect bbox(_rect.min() * affine, _rect.max() * affine); - _area.x0 = (int) floor(bbox.min()[Geom::X] + 0.5); - _area.y0 = (int) floor(bbox.min()[Geom::Y] + 0.5); - _area.x1 = (int) floor(bbox.max()[Geom::X] + 0.5); - _area.y1 = (int) floor(bbox.max()[Geom::Y] + 0.5); + Geom::OptIntRect _area_old = _area; + Geom::IntRect area ( (int) floor(bbox.min()[Geom::X] + 0.5), + (int) floor(bbox.min()[Geom::Y] + 0.5), + (int) floor(bbox.max()[Geom::X] + 0.5), + (int) floor(bbox.max()[Geom::Y] + 0.5) ); + _area = area; + Geom::IntRect area_old(0,0,0,0); + if (_area_old) { // this weird construction is because the code below assumes _area_old to be 'valid' + area_old = *_area_old; + } gint _shadow_size_old = _shadow_size; _shadow_size = _shadow; // FIXME: we don't process a possible change in _has_fill if (_has_fill) { - if (_area_old.x0 != 0 || _area_old.x1 != 0 || _area_old.y0 != 0 || _area_old.y1 != 0) { + if (_area_old) { sp_canvas_request_redraw(canvas, - _area_old.x0 - 1, _area_old.y0 - 1, - _area_old.x1 + _shadow_size + 1, _area_old.y1 + _shadow_size + 1); + area_old[X].min() - 1, area_old[Y].min() - 1, + area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); } - if (_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) { + if (_area) { sp_canvas_request_redraw(canvas, - _area.x0 - 1, _area.y0 - 1, - _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1); + area[X].min() - 1, area[Y].min() - 1, + area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } } else { // clear box, be smart about what part of the frame to redraw /* Top */ - if (_area.y0 != _area_old.y0) { // different level, redraw fully old and new - if (_area_old.x0 != _area_old.x1) + if (area[Y].min() != area_old[Y].min()) { // different level, redraw fully old and new + if (area_old[X].min() != area_old[X].max()) sp_canvas_request_redraw(canvas, - _area_old.x0 - 1, _area_old.y0 - 1, - _area_old.x1 + 1, _area_old.y0 + 1); + area_old[X].min() - 1, area_old[Y].min() - 1, + area_old[X].max() + 1, area_old[Y].min() + 1); - if (_area.x0 != _area.x1) + if (area[X].min() != area[X].max()) sp_canvas_request_redraw(canvas, - _area.x0 - 1, _area.y0 - 1, - _area.x1 + 1, _area.y0 + 1); + area[X].min() - 1, area[Y].min() - 1, + area[X].max() + 1, area[Y].min() + 1); } else { // same level, redraw only the ends - if (_area.x0 != _area_old.x0) { + if (area[X].min() != area_old[X].min()) { sp_canvas_request_redraw(canvas, - MIN(_area_old.x0,_area.x0) - 1, _area.y0 - 1, - MAX(_area_old.x0,_area.x0) + 1, _area.y0 + 1); + MIN(area_old[X].min(),area[X].min()) - 1, area[Y].min() - 1, + MAX(area_old[X].min(),area[X].min()) + 1, area[Y].min() + 1); } - if (_area.x1 != _area_old.x1) { + if (area[X].max() != area_old[X].max()) { sp_canvas_request_redraw(canvas, - MIN(_area_old.x1,_area.x1) - 1, _area.y0 - 1, - MAX(_area_old.x1,_area.x1) + 1, _area.y0 + 1); + MIN(area_old[X].max(),area[X].max()) - 1, area[Y].min() - 1, + MAX(area_old[X].max(),area[X].max()) + 1, area[Y].min() + 1); } } /* Left */ - if (_area.x0 != _area_old.x0) { // different level, redraw fully old and new - if (_area_old.y0 != _area_old.y1) + if (area[X].min() != area_old[X].min()) { // different level, redraw fully old and new + if (area_old[Y].min() != area_old[Y].max()) sp_canvas_request_redraw(canvas, - _area_old.x0 - 1, _area_old.y0 - 1, - _area_old.x0 + 1, _area_old.y1 + 1); + area_old[X].min() - 1, area_old[Y].min() - 1, + area_old[X].min() + 1, area_old[Y].max() + 1); - if (_area.y0 != _area.y1) + if (area[Y].min() != area[Y].max()) sp_canvas_request_redraw(canvas, - _area.x0 - 1, _area.y0 - 1, - _area.x0 + 1, _area.y1 + 1); + area[X].min() - 1, area[Y].min() - 1, + area[X].min() + 1, area[Y].max() + 1); } else { // same level, redraw only the ends - if (_area.y0 != _area_old.y0) { + if (area[Y].min() != area_old[Y].min()) { sp_canvas_request_redraw(canvas, - _area.x0 - 1, MIN(_area_old.y0,_area.y0) - 1, - _area.x0 + 1, MAX(_area_old.y0,_area.y0) + 1); + area[X].min() - 1, MIN(area_old[Y].min(),area[Y].min()) - 1, + area[X].min() + 1, MAX(area_old[Y].min(),area[Y].min()) + 1); } - if (_area.y1 != _area_old.y1) { + if (area[Y].max() != area_old[Y].max()) { sp_canvas_request_redraw(canvas, - _area.x0 - 1, MIN(_area_old.y1,_area.y1) - 1, - _area.x0 + 1, MAX(_area_old.y1,_area.y1) + 1); + area[X].min() - 1, MIN(area_old[Y].max(),area[Y].max()) - 1, + area[X].min() + 1, MAX(area_old[Y].max(),area[Y].max()) + 1); } } /* Right */ - if (_area.x1 != _area_old.x1 || _shadow_size_old != _shadow_size) { - if (_area_old.y0 != _area_old.y1) + if (area[X].max() != area_old[X].max() || _shadow_size_old != _shadow_size) { + if (area_old[Y].min() != area_old[Y].max()) sp_canvas_request_redraw(canvas, - _area_old.x1 - 1, _area_old.y0 - 1, - _area_old.x1 + _shadow_size + 1, _area_old.y1 + _shadow_size + 1); + area_old[X].max() - 1, area_old[Y].min() - 1, + area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); - if (_area.y0 != _area.y1) + if (area[Y].min() != area[Y].max()) sp_canvas_request_redraw(canvas, - _area.x1 - 1, _area.y0 - 1, - _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1); + area[X].max() - 1, area[Y].min() - 1, + area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } else { // same level, redraw only the ends - if (_area.y0 != _area_old.y0) { + if (area[Y].min() != area_old[Y].min()) { sp_canvas_request_redraw(canvas, - _area.x1 - 1, MIN(_area_old.y0,_area.y0) - 1, - _area.x1 + _shadow_size + 1, MAX(_area_old.y0,_area.y0) + _shadow_size + 1); + area[X].max() - 1, MIN(area_old[Y].min(),area[Y].min()) - 1, + area[X].max() + _shadow_size + 1, MAX(area_old[Y].min(),area[Y].min()) + _shadow_size + 1); } - if (_area.y1 != _area_old.y1) { + if (area[Y].max() != area_old[Y].max()) { sp_canvas_request_redraw(canvas, - _area.x1 - 1, MIN(_area_old.y1,_area.y1) - 1, - _area.x1 + _shadow_size + 1, MAX(_area_old.y1,_area.y1) + _shadow_size + 1); + area[X].max() - 1, MIN(area_old[Y].max(),area[Y].max()) - 1, + area[X].max() + _shadow_size + 1, MAX(area_old[Y].max(),area[Y].max()) + _shadow_size + 1); } } /* Bottom */ - if (_area.y1 != _area_old.y1 || _shadow_size_old != _shadow_size) { - if (_area_old.x0 != _area_old.x1) + if (area[Y].max() != area_old[Y].max() || _shadow_size_old != _shadow_size) { + if (area_old[X].min() != area_old[X].max()) sp_canvas_request_redraw(canvas, - _area_old.x0 - 1, _area_old.y1 - 1, - _area_old.x1 + _shadow_size + 1, _area_old.y1 + _shadow_size + 1); + area_old[X].min() - 1, area_old[Y].max() - 1, + area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); - if (_area.x0 != _area.x1) + if (area[X].min() != area[X].max()) sp_canvas_request_redraw(canvas, - _area.x0 - 1, _area.y1 - 1, - _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1); + area[X].min() - 1, area[Y].max() - 1, + area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } else { // same level, redraw only the ends - if (_area.x0 != _area_old.x0) { + if (area[X].min() != area_old[X].min()) { sp_canvas_request_redraw(canvas, - MIN(_area_old.x0,_area.x0) - 1, _area.y1 - 1, - MAX(_area_old.x0,_area.x0) + _shadow_size + 1, _area.y1 + _shadow_size + 1); + MIN(area_old[X].min(),area[X].min()) - 1, area[Y].max() - 1, + MAX(area_old[X].min(),area[X].min()) + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } - if (_area.x1 != _area_old.x1) { + if (area[X].max() != area_old[X].max()) { sp_canvas_request_redraw(canvas, - MIN(_area_old.x1,_area.x1) - 1, _area.y1 - 1, - MAX(_area_old.x1,_area.x1) + _shadow_size + 1, _area.y1 + _shadow_size + 1); + MIN(area_old[X].max(),area[X].max()) - 1, area[Y].max() - 1, + MAX(area_old[X].max(),area[X].max()) + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } } } // update SPCanvasItem box - if (_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) { - x1 = _area.x0 - 1; - y1 = _area.y0 - 1; - x2 = _area.x1 + _shadow_size + 1; - y2 = _area.y1 + _shadow_size + 1; + if (_area) { + x1 = area[X].min() - 1; + y1 = area[Y].min() - 1; + x2 = area[X].max() + _shadow_size + 1; + y2 = area[Y].max() + _shadow_size + 1; } } -- cgit v1.2.3 From 2eb1f16b8a4ae20fe6360d8c99ade7e3721d891d Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sun, 24 Jul 2011 21:11:02 +0200 Subject: fix page shadow rendering bug introduced in r10495 (bzr r10501) --- src/display/sodipodi-ctrlrect.cpp | 139 ++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 73 deletions(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index b4539841b..b696e5e6c 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -104,7 +104,7 @@ void CtrlRect::init() _dashed = false; _shadow = 0; - _area = Geom::OptIntRect(); + _area = Geom::IntRect(0,0,0,0); _rect = Geom::Rect(Geom::Point(0,0),Geom::Point(0,0)); @@ -123,20 +123,18 @@ void CtrlRect::render(SPCanvasBuf *buf) static double const dashes[2] = {4.0, 4.0}; - if (!_area) { - return; - } - Geom::IntRect area = *_area; - Geom::IntRect area_w_shadow (area[X].min(), area[Y].min(), - area[X].max() + _shadow_size, area[Y].max() + _shadow_size); - if ( area_w_shadow.intersects(buf->rect) ) + if ((_area[X].min() != 0 || _area[X].max() != 0 || _area[Y].min() != 0 || _area[Y].max() != 0) && + (_area[X].min() < buf->rect.x1) && + (_area[Y].min() < buf->rect.y1) && + ((_area[X].max() + _shadow_size) >= buf->rect.x0) && + ((_area[Y].max() + _shadow_size) >= buf->rect.y0) ) { cairo_save(buf->ct); cairo_translate(buf->ct, -buf->rect.x0, -buf->rect.y0); cairo_set_line_width(buf->ct, 1); if (_dashed) cairo_set_dash(buf->ct, dashes, 2, 0); - cairo_rectangle(buf->ct, 0.5 + area[X].min(), 0.5 + area[Y].min(), - area[X].max() - area[X].min(), area[Y].max() - area[Y].min()); + cairo_rectangle(buf->ct, 0.5 + _area[X].min(), 0.5 + _area[Y].min(), + _area[X].max() - _area[X].min(), _area[Y].max() - _area[Y].min()); if (_has_fill) { ink_cairo_set_source_rgba32(buf->ct, _fill_color); @@ -147,10 +145,10 @@ void CtrlRect::render(SPCanvasBuf *buf) if (_shadow_size > 0) { ink_cairo_set_source_rgba32(buf->ct, _shadow_color); - cairo_rectangle(buf->ct, 1 + area[X].max(), area[Y].min() + _shadow_size, - _shadow_size, area[Y].max() - area[Y].min() + 1); // right shadow - cairo_rectangle(buf->ct, area[X].min() + _shadow_size, 1 + area[Y].max(), - area[X].max() - area[X].min() - _shadow_size + 1, _shadow_size); + cairo_rectangle(buf->ct, 1 + _area[X].max(), _area[Y].min() + _shadow_size, + _shadow_size, _area[Y].max() - _area[Y].min() + 1); // right shadow + cairo_rectangle(buf->ct, _area[X].min() + _shadow_size, 1 + _area[Y].max(), + _area[X].max() - _area[X].min() - _shadow_size + 1, _shadow_size); cairo_fill(buf->ct); } cairo_restore(buf->ct); @@ -171,137 +169,132 @@ void CtrlRect::update(Geom::Affine const &affine, unsigned int flags) Geom::Rect bbox(_rect.min() * affine, _rect.max() * affine); - Geom::OptIntRect _area_old = _area; - Geom::IntRect area ( (int) floor(bbox.min()[Geom::X] + 0.5), - (int) floor(bbox.min()[Geom::Y] + 0.5), - (int) floor(bbox.max()[Geom::X] + 0.5), - (int) floor(bbox.max()[Geom::Y] + 0.5) ); - _area = area; - Geom::IntRect area_old(0,0,0,0); - if (_area_old) { // this weird construction is because the code below assumes _area_old to be 'valid' - area_old = *_area_old; - } + Geom::IntRect area_old = _area; + _area = Geom::IntRect( (int) floor(bbox.min()[Geom::X] + 0.5), + (int) floor(bbox.min()[Geom::Y] + 0.5), + (int) floor(bbox.max()[Geom::X] + 0.5), + (int) floor(bbox.max()[Geom::Y] + 0.5) ); gint _shadow_size_old = _shadow_size; _shadow_size = _shadow; // FIXME: we don't process a possible change in _has_fill if (_has_fill) { - if (_area_old) { + if (area_old[X].min() != 0 || area_old[X].max() != 0 || area_old[Y].min() != 0 || area_old[Y].max() != 0) { sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].min() - 1, area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); } - if (_area) { + if (_area[X].min() != 0 || _area[X].max() != 0 || _area[Y].min() != 0 || _area[Y].max() != 0) { sp_canvas_request_redraw(canvas, - area[X].min() - 1, area[Y].min() - 1, - area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); + _area[X].min() - 1, _area[Y].min() - 1, + _area[X].max() + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); } } else { // clear box, be smart about what part of the frame to redraw /* Top */ - if (area[Y].min() != area_old[Y].min()) { // different level, redraw fully old and new + if (_area[Y].min() != area_old[Y].min()) { // different level, redraw fully old and new if (area_old[X].min() != area_old[X].max()) sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].min() - 1, area_old[X].max() + 1, area_old[Y].min() + 1); - if (area[X].min() != area[X].max()) + if (_area[X].min() != _area[X].max()) sp_canvas_request_redraw(canvas, - area[X].min() - 1, area[Y].min() - 1, - area[X].max() + 1, area[Y].min() + 1); + _area[X].min() - 1, _area[Y].min() - 1, + _area[X].max() + 1, _area[Y].min() + 1); } else { // same level, redraw only the ends - if (area[X].min() != area_old[X].min()) { + if (_area[X].min() != area_old[X].min()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].min(),area[X].min()) - 1, area[Y].min() - 1, - MAX(area_old[X].min(),area[X].min()) + 1, area[Y].min() + 1); + MIN(area_old[X].min(),_area[X].min()) - 1, _area[Y].min() - 1, + MAX(area_old[X].min(),_area[X].min()) + 1, _area[Y].min() + 1); } - if (area[X].max() != area_old[X].max()) { + if (_area[X].max() != area_old[X].max()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].max(),area[X].max()) - 1, area[Y].min() - 1, - MAX(area_old[X].max(),area[X].max()) + 1, area[Y].min() + 1); + MIN(area_old[X].max(),_area[X].max()) - 1, _area[Y].min() - 1, + MAX(area_old[X].max(),_area[X].max()) + 1, _area[Y].min() + 1); } } /* Left */ - if (area[X].min() != area_old[X].min()) { // different level, redraw fully old and new + if (_area[X].min() != area_old[X].min()) { // different level, redraw fully old and new if (area_old[Y].min() != area_old[Y].max()) sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].min() - 1, area_old[X].min() + 1, area_old[Y].max() + 1); - if (area[Y].min() != area[Y].max()) + if (_area[Y].min() != _area[Y].max()) sp_canvas_request_redraw(canvas, - area[X].min() - 1, area[Y].min() - 1, - area[X].min() + 1, area[Y].max() + 1); + _area[X].min() - 1, _area[Y].min() - 1, + _area[X].min() + 1, _area[Y].max() + 1); } else { // same level, redraw only the ends - if (area[Y].min() != area_old[Y].min()) { + if (_area[Y].min() != area_old[Y].min()) { sp_canvas_request_redraw(canvas, - area[X].min() - 1, MIN(area_old[Y].min(),area[Y].min()) - 1, - area[X].min() + 1, MAX(area_old[Y].min(),area[Y].min()) + 1); + _area[X].min() - 1, MIN(area_old[Y].min(),_area[Y].min()) - 1, + _area[X].min() + 1, MAX(area_old[Y].min(),_area[Y].min()) + 1); } - if (area[Y].max() != area_old[Y].max()) { + if (_area[Y].max() != area_old[Y].max()) { sp_canvas_request_redraw(canvas, - area[X].min() - 1, MIN(area_old[Y].max(),area[Y].max()) - 1, - area[X].min() + 1, MAX(area_old[Y].max(),area[Y].max()) + 1); + _area[X].min() - 1, MIN(area_old[Y].max(),_area[Y].max()) - 1, + _area[X].min() + 1, MAX(area_old[Y].max(),_area[Y].max()) + 1); } } /* Right */ - if (area[X].max() != area_old[X].max() || _shadow_size_old != _shadow_size) { + if (_area[X].max() != area_old[X].max() || _shadow_size_old != _shadow_size) { if (area_old[Y].min() != area_old[Y].max()) sp_canvas_request_redraw(canvas, area_old[X].max() - 1, area_old[Y].min() - 1, area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); - if (area[Y].min() != area[Y].max()) + if (_area[Y].min() != _area[Y].max()) sp_canvas_request_redraw(canvas, - area[X].max() - 1, area[Y].min() - 1, - area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); + _area[X].max() - 1, _area[Y].min() - 1, + _area[X].max() + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); } else { // same level, redraw only the ends - if (area[Y].min() != area_old[Y].min()) { + if (_area[Y].min() != area_old[Y].min()) { sp_canvas_request_redraw(canvas, - area[X].max() - 1, MIN(area_old[Y].min(),area[Y].min()) - 1, - area[X].max() + _shadow_size + 1, MAX(area_old[Y].min(),area[Y].min()) + _shadow_size + 1); + _area[X].max() - 1, MIN(area_old[Y].min(),_area[Y].min()) - 1, + _area[X].max() + _shadow_size + 1, MAX(area_old[Y].min(),_area[Y].min()) + _shadow_size + 1); } - if (area[Y].max() != area_old[Y].max()) { + if (_area[Y].max() != area_old[Y].max()) { sp_canvas_request_redraw(canvas, - area[X].max() - 1, MIN(area_old[Y].max(),area[Y].max()) - 1, - area[X].max() + _shadow_size + 1, MAX(area_old[Y].max(),area[Y].max()) + _shadow_size + 1); + _area[X].max() - 1, MIN(area_old[Y].max(),_area[Y].max()) - 1, + _area[X].max() + _shadow_size + 1, MAX(area_old[Y].max(),_area[Y].max()) + _shadow_size + 1); } } /* Bottom */ - if (area[Y].max() != area_old[Y].max() || _shadow_size_old != _shadow_size) { + if (_area[Y].max() != area_old[Y].max() || _shadow_size_old != _shadow_size) { if (area_old[X].min() != area_old[X].max()) sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].max() - 1, area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); - if (area[X].min() != area[X].max()) + if (_area[X].min() != _area[X].max()) sp_canvas_request_redraw(canvas, - area[X].min() - 1, area[Y].max() - 1, - area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); + _area[X].min() - 1, _area[Y].max() - 1, + _area[X].max() + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); } else { // same level, redraw only the ends - if (area[X].min() != area_old[X].min()) { + if (_area[X].min() != area_old[X].min()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].min(),area[X].min()) - 1, area[Y].max() - 1, - MAX(area_old[X].min(),area[X].min()) + _shadow_size + 1, area[Y].max() + _shadow_size + 1); + MIN(area_old[X].min(),_area[X].min()) - 1, _area[Y].max() - 1, + MAX(area_old[X].min(),_area[X].min()) + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); } - if (area[X].max() != area_old[X].max()) { + if (_area[X].max() != area_old[X].max()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].max(),area[X].max()) - 1, area[Y].max() - 1, - MAX(area_old[X].max(),area[X].max()) + _shadow_size + 1, area[Y].max() + _shadow_size + 1); + MIN(area_old[X].max(),_area[X].max()) - 1, _area[Y].max() - 1, + MAX(area_old[X].max(),_area[X].max()) + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); } } } // update SPCanvasItem box - if (_area) { - x1 = area[X].min() - 1; - y1 = area[Y].min() - 1; - x2 = area[X].max() + _shadow_size + 1; - y2 = area[Y].max() + _shadow_size + 1; + if (_area[X].min() != 0 || _area[X].max() != 0 || _area[Y].min() != 0 || _area[Y].max() != 0) { + x1 = _area[X].min() - 1; + y1 = _area[Y].min() - 1; + x2 = _area[X].max() + _shadow_size + 1; + y2 = _area[Y].max() + _shadow_size + 1; } } -- cgit v1.2.3 From 8b4525894a9dddb99556fb17a698b8131641aad0 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Mon, 25 Jul 2011 02:02:24 +0200 Subject: Revert workarounds from 10501 - no longer necessary (bzr r10503) --- src/display/sodipodi-ctrlrect.cpp | 139 ++++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 66 deletions(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index b696e5e6c..b4539841b 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -104,7 +104,7 @@ void CtrlRect::init() _dashed = false; _shadow = 0; - _area = Geom::IntRect(0,0,0,0); + _area = Geom::OptIntRect(); _rect = Geom::Rect(Geom::Point(0,0),Geom::Point(0,0)); @@ -123,18 +123,20 @@ void CtrlRect::render(SPCanvasBuf *buf) static double const dashes[2] = {4.0, 4.0}; - if ((_area[X].min() != 0 || _area[X].max() != 0 || _area[Y].min() != 0 || _area[Y].max() != 0) && - (_area[X].min() < buf->rect.x1) && - (_area[Y].min() < buf->rect.y1) && - ((_area[X].max() + _shadow_size) >= buf->rect.x0) && - ((_area[Y].max() + _shadow_size) >= buf->rect.y0) ) + if (!_area) { + return; + } + Geom::IntRect area = *_area; + Geom::IntRect area_w_shadow (area[X].min(), area[Y].min(), + area[X].max() + _shadow_size, area[Y].max() + _shadow_size); + if ( area_w_shadow.intersects(buf->rect) ) { cairo_save(buf->ct); cairo_translate(buf->ct, -buf->rect.x0, -buf->rect.y0); cairo_set_line_width(buf->ct, 1); if (_dashed) cairo_set_dash(buf->ct, dashes, 2, 0); - cairo_rectangle(buf->ct, 0.5 + _area[X].min(), 0.5 + _area[Y].min(), - _area[X].max() - _area[X].min(), _area[Y].max() - _area[Y].min()); + cairo_rectangle(buf->ct, 0.5 + area[X].min(), 0.5 + area[Y].min(), + area[X].max() - area[X].min(), area[Y].max() - area[Y].min()); if (_has_fill) { ink_cairo_set_source_rgba32(buf->ct, _fill_color); @@ -145,10 +147,10 @@ void CtrlRect::render(SPCanvasBuf *buf) if (_shadow_size > 0) { ink_cairo_set_source_rgba32(buf->ct, _shadow_color); - cairo_rectangle(buf->ct, 1 + _area[X].max(), _area[Y].min() + _shadow_size, - _shadow_size, _area[Y].max() - _area[Y].min() + 1); // right shadow - cairo_rectangle(buf->ct, _area[X].min() + _shadow_size, 1 + _area[Y].max(), - _area[X].max() - _area[X].min() - _shadow_size + 1, _shadow_size); + cairo_rectangle(buf->ct, 1 + area[X].max(), area[Y].min() + _shadow_size, + _shadow_size, area[Y].max() - area[Y].min() + 1); // right shadow + cairo_rectangle(buf->ct, area[X].min() + _shadow_size, 1 + area[Y].max(), + area[X].max() - area[X].min() - _shadow_size + 1, _shadow_size); cairo_fill(buf->ct); } cairo_restore(buf->ct); @@ -169,132 +171,137 @@ void CtrlRect::update(Geom::Affine const &affine, unsigned int flags) Geom::Rect bbox(_rect.min() * affine, _rect.max() * affine); - Geom::IntRect area_old = _area; - _area = Geom::IntRect( (int) floor(bbox.min()[Geom::X] + 0.5), - (int) floor(bbox.min()[Geom::Y] + 0.5), - (int) floor(bbox.max()[Geom::X] + 0.5), - (int) floor(bbox.max()[Geom::Y] + 0.5) ); + Geom::OptIntRect _area_old = _area; + Geom::IntRect area ( (int) floor(bbox.min()[Geom::X] + 0.5), + (int) floor(bbox.min()[Geom::Y] + 0.5), + (int) floor(bbox.max()[Geom::X] + 0.5), + (int) floor(bbox.max()[Geom::Y] + 0.5) ); + _area = area; + Geom::IntRect area_old(0,0,0,0); + if (_area_old) { // this weird construction is because the code below assumes _area_old to be 'valid' + area_old = *_area_old; + } gint _shadow_size_old = _shadow_size; _shadow_size = _shadow; // FIXME: we don't process a possible change in _has_fill if (_has_fill) { - if (area_old[X].min() != 0 || area_old[X].max() != 0 || area_old[Y].min() != 0 || area_old[Y].max() != 0) { + if (_area_old) { sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].min() - 1, area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); } - if (_area[X].min() != 0 || _area[X].max() != 0 || _area[Y].min() != 0 || _area[Y].max() != 0) { + if (_area) { sp_canvas_request_redraw(canvas, - _area[X].min() - 1, _area[Y].min() - 1, - _area[X].max() + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); + area[X].min() - 1, area[Y].min() - 1, + area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } } else { // clear box, be smart about what part of the frame to redraw /* Top */ - if (_area[Y].min() != area_old[Y].min()) { // different level, redraw fully old and new + if (area[Y].min() != area_old[Y].min()) { // different level, redraw fully old and new if (area_old[X].min() != area_old[X].max()) sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].min() - 1, area_old[X].max() + 1, area_old[Y].min() + 1); - if (_area[X].min() != _area[X].max()) + if (area[X].min() != area[X].max()) sp_canvas_request_redraw(canvas, - _area[X].min() - 1, _area[Y].min() - 1, - _area[X].max() + 1, _area[Y].min() + 1); + area[X].min() - 1, area[Y].min() - 1, + area[X].max() + 1, area[Y].min() + 1); } else { // same level, redraw only the ends - if (_area[X].min() != area_old[X].min()) { + if (area[X].min() != area_old[X].min()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].min(),_area[X].min()) - 1, _area[Y].min() - 1, - MAX(area_old[X].min(),_area[X].min()) + 1, _area[Y].min() + 1); + MIN(area_old[X].min(),area[X].min()) - 1, area[Y].min() - 1, + MAX(area_old[X].min(),area[X].min()) + 1, area[Y].min() + 1); } - if (_area[X].max() != area_old[X].max()) { + if (area[X].max() != area_old[X].max()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].max(),_area[X].max()) - 1, _area[Y].min() - 1, - MAX(area_old[X].max(),_area[X].max()) + 1, _area[Y].min() + 1); + MIN(area_old[X].max(),area[X].max()) - 1, area[Y].min() - 1, + MAX(area_old[X].max(),area[X].max()) + 1, area[Y].min() + 1); } } /* Left */ - if (_area[X].min() != area_old[X].min()) { // different level, redraw fully old and new + if (area[X].min() != area_old[X].min()) { // different level, redraw fully old and new if (area_old[Y].min() != area_old[Y].max()) sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].min() - 1, area_old[X].min() + 1, area_old[Y].max() + 1); - if (_area[Y].min() != _area[Y].max()) + if (area[Y].min() != area[Y].max()) sp_canvas_request_redraw(canvas, - _area[X].min() - 1, _area[Y].min() - 1, - _area[X].min() + 1, _area[Y].max() + 1); + area[X].min() - 1, area[Y].min() - 1, + area[X].min() + 1, area[Y].max() + 1); } else { // same level, redraw only the ends - if (_area[Y].min() != area_old[Y].min()) { + if (area[Y].min() != area_old[Y].min()) { sp_canvas_request_redraw(canvas, - _area[X].min() - 1, MIN(area_old[Y].min(),_area[Y].min()) - 1, - _area[X].min() + 1, MAX(area_old[Y].min(),_area[Y].min()) + 1); + area[X].min() - 1, MIN(area_old[Y].min(),area[Y].min()) - 1, + area[X].min() + 1, MAX(area_old[Y].min(),area[Y].min()) + 1); } - if (_area[Y].max() != area_old[Y].max()) { + if (area[Y].max() != area_old[Y].max()) { sp_canvas_request_redraw(canvas, - _area[X].min() - 1, MIN(area_old[Y].max(),_area[Y].max()) - 1, - _area[X].min() + 1, MAX(area_old[Y].max(),_area[Y].max()) + 1); + area[X].min() - 1, MIN(area_old[Y].max(),area[Y].max()) - 1, + area[X].min() + 1, MAX(area_old[Y].max(),area[Y].max()) + 1); } } /* Right */ - if (_area[X].max() != area_old[X].max() || _shadow_size_old != _shadow_size) { + if (area[X].max() != area_old[X].max() || _shadow_size_old != _shadow_size) { if (area_old[Y].min() != area_old[Y].max()) sp_canvas_request_redraw(canvas, area_old[X].max() - 1, area_old[Y].min() - 1, area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); - if (_area[Y].min() != _area[Y].max()) + if (area[Y].min() != area[Y].max()) sp_canvas_request_redraw(canvas, - _area[X].max() - 1, _area[Y].min() - 1, - _area[X].max() + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); + area[X].max() - 1, area[Y].min() - 1, + area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } else { // same level, redraw only the ends - if (_area[Y].min() != area_old[Y].min()) { + if (area[Y].min() != area_old[Y].min()) { sp_canvas_request_redraw(canvas, - _area[X].max() - 1, MIN(area_old[Y].min(),_area[Y].min()) - 1, - _area[X].max() + _shadow_size + 1, MAX(area_old[Y].min(),_area[Y].min()) + _shadow_size + 1); + area[X].max() - 1, MIN(area_old[Y].min(),area[Y].min()) - 1, + area[X].max() + _shadow_size + 1, MAX(area_old[Y].min(),area[Y].min()) + _shadow_size + 1); } - if (_area[Y].max() != area_old[Y].max()) { + if (area[Y].max() != area_old[Y].max()) { sp_canvas_request_redraw(canvas, - _area[X].max() - 1, MIN(area_old[Y].max(),_area[Y].max()) - 1, - _area[X].max() + _shadow_size + 1, MAX(area_old[Y].max(),_area[Y].max()) + _shadow_size + 1); + area[X].max() - 1, MIN(area_old[Y].max(),area[Y].max()) - 1, + area[X].max() + _shadow_size + 1, MAX(area_old[Y].max(),area[Y].max()) + _shadow_size + 1); } } /* Bottom */ - if (_area[Y].max() != area_old[Y].max() || _shadow_size_old != _shadow_size) { + if (area[Y].max() != area_old[Y].max() || _shadow_size_old != _shadow_size) { if (area_old[X].min() != area_old[X].max()) sp_canvas_request_redraw(canvas, area_old[X].min() - 1, area_old[Y].max() - 1, area_old[X].max() + _shadow_size + 1, area_old[Y].max() + _shadow_size + 1); - if (_area[X].min() != _area[X].max()) + if (area[X].min() != area[X].max()) sp_canvas_request_redraw(canvas, - _area[X].min() - 1, _area[Y].max() - 1, - _area[X].max() + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); + area[X].min() - 1, area[Y].max() - 1, + area[X].max() + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } else { // same level, redraw only the ends - if (_area[X].min() != area_old[X].min()) { + if (area[X].min() != area_old[X].min()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].min(),_area[X].min()) - 1, _area[Y].max() - 1, - MAX(area_old[X].min(),_area[X].min()) + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); + MIN(area_old[X].min(),area[X].min()) - 1, area[Y].max() - 1, + MAX(area_old[X].min(),area[X].min()) + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } - if (_area[X].max() != area_old[X].max()) { + if (area[X].max() != area_old[X].max()) { sp_canvas_request_redraw(canvas, - MIN(area_old[X].max(),_area[X].max()) - 1, _area[Y].max() - 1, - MAX(area_old[X].max(),_area[X].max()) + _shadow_size + 1, _area[Y].max() + _shadow_size + 1); + MIN(area_old[X].max(),area[X].max()) - 1, area[Y].max() - 1, + MAX(area_old[X].max(),area[X].max()) + _shadow_size + 1, area[Y].max() + _shadow_size + 1); } } } // update SPCanvasItem box - if (_area[X].min() != 0 || _area[X].max() != 0 || _area[Y].min() != 0 || _area[Y].max() != 0) { - x1 = _area[X].min() - 1; - y1 = _area[Y].min() - 1; - x2 = _area[X].max() + _shadow_size + 1; - y2 = _area[Y].max() + _shadow_size + 1; + if (_area) { + x1 = area[X].min() - 1; + y1 = area[Y].min() - 1; + x2 = area[X].max() + _shadow_size + 1; + y2 = area[Y].max() + _shadow_size + 1; } } -- cgit v1.2.3 From ac0bc3b7583e5b45ed6ec97923170a77b5648d2e Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 27 Aug 2011 14:36:15 +0200 Subject: Update 2Geom. Remove all use of NRRectL. (bzr r10582.1.3) --- src/display/sodipodi-ctrlrect.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/display/sodipodi-ctrlrect.cpp') diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index b4539841b..c0e08c00a 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -132,7 +132,7 @@ void CtrlRect::render(SPCanvasBuf *buf) if ( area_w_shadow.intersects(buf->rect) ) { cairo_save(buf->ct); - cairo_translate(buf->ct, -buf->rect.x0, -buf->rect.y0); + cairo_translate(buf->ct, -buf->rect.left(), -buf->rect.top()); cairo_set_line_width(buf->ct, 1); if (_dashed) cairo_set_dash(buf->ct, dashes, 2, 0); cairo_rectangle(buf->ct, 0.5 + area[X].min(), 0.5 + area[Y].min(), -- cgit v1.2.3