diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2017-04-01 23:33:16 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2017-06-26 08:40:47 +1000 |
commit | 8538ba35fe29645e6cd263f7149eebcc4ab62873 (patch) | |
tree | a2005e6ee4c1c913a116baeb62c79634f182ca0b /libs/canvas | |
parent | c4e31fc32273a84c0436f32fce742ae21718b03c (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.cc | 20 |
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. |