diff --git a/libs/canvas/canvas/grid.h b/libs/canvas/canvas/grid.h index c77b539652..c2a87f5dad 100644 --- a/libs/canvas/canvas/grid.h +++ b/libs/canvas/canvas/grid.h @@ -61,7 +61,7 @@ public: double top_padding, right_padding, bottom_padding, left_padding; double top_margin, right_margin, bottom_margin, left_margin; - void child_changed (); + void child_changed (bool bbox_changed); private: struct ChildInfo { Item* item; diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index 07c4292d72..1e83bb60c1 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -226,7 +226,7 @@ public: void raise_child_to_top (Item *); void raise_child (Item *, int); void lower_child_to_bottom (Item *); - virtual void child_changed (); + virtual void child_changed (bool bbox_changed); static int default_items_per_cell; diff --git a/libs/canvas/grid.cc b/libs/canvas/grid.cc index 10ab212496..0955f76f70 100644 --- a/libs/canvas/grid.cc +++ b/libs/canvas/grid.cc @@ -353,11 +353,11 @@ Grid::place (Item* i, double x, double y, double col_span, double row_span) } void -Grid::child_changed () +Grid::child_changed (bool bbox_changed) { /* catch visibility and size changes */ - Item::child_changed (); + Item::child_changed (bbox_changed); reposition_children (); } diff --git a/libs/canvas/item.cc b/libs/canvas/item.cc index 9c7555c149..ebe0b9168f 100644 --- a/libs/canvas/item.cc +++ b/libs/canvas/item.cc @@ -278,9 +278,8 @@ Item::set_position (Duple p) if (visible()) { _canvas->item_moved (this, pre_change_parent_bounding_box); - if (_parent) { - _parent->child_changed (); + _parent->child_changed (false); } } } @@ -378,7 +377,7 @@ Item::propagate_show_hide () /* bounding box may have changed while we were hidden */ if (_parent) { - _parent->child_changed (); + _parent->child_changed (false); } _canvas->item_shown_or_hidden (this); @@ -640,7 +639,7 @@ Item::end_change () _canvas->item_changed (this, _pre_change_bounding_box); if (_parent) { - _parent->child_changed (); + _parent->child_changed (_pre_change_bounding_box != _bounding_box); } } } @@ -1061,13 +1060,13 @@ Item::invalidate_lut () const } void -Item::child_changed () +Item::child_changed (bool bbox_changed) { invalidate_lut (); - _bounding_box_dirty = true; + _bounding_box_dirty = bbox_changed; if (_parent) { - _parent->child_changed (); + _parent->child_changed (bbox_changed); } }