summaryrefslogtreecommitdiff
path: root/libs/canvas
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2017-04-01 23:33:16 +1000
committerTim Mayberry <mojofunk@gmail.com>2017-06-26 08:40:47 +1000
commit8538ba35fe29645e6cd263f7149eebcc4ab62873 (patch)
treea2005e6ee4c1c913a116baeb62c79634f182ca0b /libs/canvas
parentc4e31fc32273a84c0436f32fce742ae21718b03c (diff)
Only call Gtk::Widget::queue_draw_area in canvas when item and visible area intersect
Refactor GtkCanvas::request_redraw to use Rect::intersection
Diffstat (limited to 'libs/canvas')
-rw-r--r--libs/canvas/canvas.cc20
1 files changed, 10 insertions, 10 deletions
diff --git a/libs/canvas/canvas.cc b/libs/canvas/canvas.cc
index baa10f9cf7..7415478b60 100644
--- a/libs/canvas/canvas.cc
+++ b/libs/canvas/canvas.cc
@@ -1197,19 +1197,19 @@ GtkCanvas::request_redraw (Rect const & request)
return;
}
- Rect real_area;
-
- Coord const w = width ();
- Coord const h = height ();
-
/* clamp area requested to actual visible window */
- real_area.x0 = max (0.0, min (w, request.x0));
- real_area.x1 = max (0.0, min (w, request.x1));
- real_area.y0 = max (0.0, min (h, request.y0));
- real_area.y1 = max (0.0, min (h, request.y1));
+ Rect real_area = request.intersection (visible_area());
+
+ if (real_area) {
+ if (real_area.width () && real_area.height ()) {
+ // Item intersects with visible canvas area
+ queue_draw_area (real_area.x0, real_area.y0, real_area.width(), real_area.height());
+ }
- queue_draw_area (real_area.x0, real_area.y0, real_area.width(), real_area.height());
+ } else {
+ // Item does not intersect with visible canvas area
+ }
}
/** Called to request that we try to get a particular size for ourselves.