summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-01-20 12:08:58 +0100
committerPaul Davis <paul@linuxaudiosystems.com>2017-02-01 21:58:20 +0100
commite616324683b33d7e911745a19cf202d1f609dfc4 (patch)
tree65633d97e6458db3c3c2205731c5ca96258ef639 /libs
parent52718b341163dab439596049392b9c80fb8635ec (diff)
add basic data members and methods for adding an explicit size allocation for Canvas::Item
Diffstat (limited to 'libs')
-rw-r--r--libs/canvas/canvas/item.h14
-rw-r--r--libs/canvas/item.cc14
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<std::string, void *> _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;
}