diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2017-04-01 23:02:49 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2017-06-26 08:40:47 +1000 |
commit | c4e31fc32273a84c0436f32fce742ae21718b03c (patch) | |
tree | 3fac41d0063c4dc43112e1a65b43ede9b03f72aa /libs/canvas/canvas | |
parent | 265f52535a73d996de0e6a61a5b30070c6226cf8 (diff) |
Add an optional ArdourCanvas::Item::prepare_for_render interface
Called when an item has requested a redraw and intersects with visible
canvas area.
Also add Canvas::prepare_for_render that will call Item::prepare_for_render for
items visible on the canvas.
Diffstat (limited to 'libs/canvas/canvas')
-rw-r--r-- | libs/canvas/canvas/canvas.h | 4 | ||||
-rw-r--r-- | libs/canvas/canvas/container.h | 6 | ||||
-rw-r--r-- | libs/canvas/canvas/item.h | 8 |
3 files changed, 18 insertions, 0 deletions
diff --git a/libs/canvas/canvas/canvas.h b/libs/canvas/canvas/canvas.h index 2f506fc3c0..cb4f6dd70c 100644 --- a/libs/canvas/canvas/canvas.h +++ b/libs/canvas/canvas/canvas.h @@ -87,6 +87,8 @@ public: void render (Rect const &, Cairo::RefPtr<Cairo::Context> const &) const; + void prepare_for_render (Rect const &) const; + /** @return root group */ Item* root () { return &_root; @@ -214,6 +216,8 @@ public: Canvas::render (rect, ctx); } + void prepare_for_render () const; + uint32_t background_color() { return Canvas::background_color (); } protected: diff --git a/libs/canvas/canvas/container.h b/libs/canvas/canvas/container.h index f95f2f9e2b..4f2fad8f60 100644 --- a/libs/canvas/canvas/container.h +++ b/libs/canvas/canvas/container.h @@ -53,6 +53,12 @@ public: * (just call Item::render_children()). It can be overridden as necessary. */ void render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const; + + /** The prepare_for_render() method is likely to be identical in all + * containers (just call Item::prepare_for_render_children()). It can be + * overridden as necessary. + */ + void prepare_for_render (Rect const & area) const; }; } diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index 02f84a62ee..4088011a01 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -75,6 +75,13 @@ public: */ virtual void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const = 0; + /** Item has changed will be rendered in next render pass so give item a + * chance to perhaps schedule work in another thread etc. + * + * @param area Area to draw, in **window** coordinates + */ + virtual void prepare_for_render (Rect const & area) const { } + /** Adds one or more items to the vector @param items based on their * covering @param point which is in **window** coordinates * @@ -309,6 +316,7 @@ protected: void add_child_bounding_boxes (bool include_hidden = false) const; void render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const; + void prepare_for_render_children (Rect const & area) const; Duple scroll_offset() const; Duple position_offset() const; |