From e616324683b33d7e911745a19cf202d1f609dfc4 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 20 Jan 2017 12:08:58 +0100 Subject: [PATCH] add basic data members and methods for adding an explicit size allocation for Canvas::Item --- libs/canvas/canvas/item.h | 14 +++++++++++++- libs/canvas/item.cc | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index 517b4401ba..a480ec38a1 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -136,7 +136,18 @@ public: ScrollGroup* scroll_parent() const { return _scroll_parent; } - Rect bounding_box () const; + /* item implementations can override this if they need to */ + virtual Rect size_request() const { return bounding_box (true); } + void size_allocate (Rect const&); + + /** bounding box is the public API to get the size of the item. + If @param for_own_purposes is false, then it will return the + allocated bounding box (if there is one) in preference to the + one that would naturally be computed by the item. + */ + Rect bounding_box (bool for_own_purposes = false) const; + Rect allocation() const { return _allocation; } + Coord height() const; Coord width() const; @@ -281,6 +292,7 @@ protected: mutable Rect _bounding_box; /** true if _bounding_box might be out of date, false if its definitely not */ mutable bool _bounding_box_dirty; + Rect _allocation; /* XXX: this is a bit grubby */ std::map _data; diff --git a/libs/canvas/item.cc b/libs/canvas/item.cc index 06ad24f2e6..589f1214b7 100644 --- a/libs/canvas/item.cc +++ b/libs/canvas/item.cc @@ -571,9 +571,15 @@ Item::grab_focus () /* XXX */ } +void +Item::size_allocate (Rect const & r) +{ + _allocation = r; +} + /** @return Bounding box in this item's coordinates */ ArdourCanvas::Rect -Item::bounding_box () const +Item::bounding_box (bool for_own_purposes) const { if (_bounding_box_dirty) { compute_bounding_box (); @@ -581,6 +587,12 @@ Item::bounding_box () const add_child_bounding_boxes (); } + if (!for_own_purposes) { + if (_allocation) { + return _allocation; + } + } + return _bounding_box; } -- 2.30.2