fix crash when copy'ing latent plugins
[ardour.git] / libs / canvas / item.cc
index ab8764a97a9677ad5ac138d4d85c27e054b83bb3..dc82245ecb3ccaa4a4484933c45a331220a90ab2 100644 (file)
@@ -18,7 +18,7 @@
 */
 
 #include "pbd/compose.h"
-#include "pbd/stacktrace.h"
+#include "pbd/demangle.h"
 #include "pbd/convert.h"
 
 #include "ardour/utils.h"
@@ -46,7 +46,7 @@ Item::Item (Canvas* canvas)
        , _ignore_events (false)
 {
        DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
-}      
+}
 
 Item::Item (Item* parent)
        : Fill (*this)
@@ -66,7 +66,7 @@ Item::Item (Item* parent)
        }
 
        find_scroll_parent ();
-}      
+}
 
 Item::Item (Item* parent, Duple const& p)
        : Fill (*this)
@@ -88,7 +88,7 @@ Item::Item (Item* parent, Duple const& p)
 
        find_scroll_parent ();
 
-}      
+}
 
 Item::~Item ()
 {
@@ -126,9 +126,9 @@ Item::canvas_origin () const
 }
 
 Duple
-Item::window_origin () const 
+Item::window_origin () const
 {
-       /* This is slightly subtle. Our _position is in the coordinate space of 
+       /* This is slightly subtle. Our _position is in the coordinate space of
           our parent. So to find out where that is in window coordinates, we
           have to ask our parent.
        */
@@ -150,7 +150,7 @@ Item::scroll_offset () const
 {
        if (_scroll_parent) {
                return _scroll_parent->scroll_offset();
-       } 
+       }
        return Duple (0,0);
 }
 
@@ -196,7 +196,7 @@ void
 Item::item_to_canvas (Coord& x, Coord& y) const
 {
        Duple d = item_to_canvas (Duple (x, y));
-               
+
        x = d.x;
        y = d.y;
 }
@@ -268,16 +268,16 @@ Item::set_position (Duple p)
                 */
                pre_change_parent_bounding_box = item_to_parent (bbox.get());
        }
-       
+
        _position = p;
 
        /* only update canvas and parent if visible. Otherwise, this
           will be done when ::show() is called.
        */
-       
+
        if (visible()) {
                _canvas->item_moved (this, pre_change_parent_bounding_box);
-               
+
 
                if (_parent) {
                        _parent->child_changed ();
@@ -347,7 +347,7 @@ Item::hide ()
                        }
                }
 
-               
+
                propagate_show_hide ();
        }
 }
@@ -376,11 +376,11 @@ void
 Item::propagate_show_hide ()
 {
        /* bounding box may have changed while we were hidden */
-       
+
        if (_parent) {
                _parent->child_changed ();
        }
-       
+
        _canvas->item_shown_or_hidden (this);
 }
 
@@ -450,7 +450,7 @@ Item::find_scroll_parent ()
                }
                i = i->parent();
        }
-       
+
        _scroll_parent = const_cast<ScrollGroup*> (last_scroll_group);
 }
 
@@ -461,7 +461,7 @@ Item::common_ancestor_within (uint32_t limit, const Item& other) const
        uint32_t d2 = other.depth();
        const Item* i1 = this;
        const Item* i2 = &other;
-       
+
        /* move towards root until we are at the same level
           for both items
        */
@@ -502,7 +502,7 @@ Item::common_ancestor_within (uint32_t limit, const Item& other) const
                        return false;
                }
        }
-       
+
        return true;
 }
 
@@ -544,7 +544,7 @@ Item::closest_ancestor_with (const Item& other) const
                        i2 = i2->parent ();
                }
        }
-       
+
        return i1;
 }
 
@@ -583,7 +583,7 @@ Item::bounding_box () const
 }
 
 Coord
-Item::height () const 
+Item::height () const
 {
        boost::optional<ArdourCanvas::Rect> bb  = bounding_box();
 
@@ -594,7 +594,7 @@ Item::height () const
 }
 
 Coord
-Item::width () const 
+Item::width () const
 {
        boost::optional<ArdourCanvas::Rect> bb = bounding_box();
 
@@ -611,7 +611,7 @@ Item::redraw () const
        if (visible() && _bounding_box && _canvas) {
                _canvas->request_redraw (item_to_window (_bounding_box.get()));
        }
-}      
+}
 
 void
 Item::begin_change ()
@@ -624,7 +624,7 @@ Item::end_change ()
 {
        if (visible()) {
                _canvas->item_changed (this, _pre_change_bounding_box);
-               
+
                if (_parent) {
                        _parent->child_changed ();
                }
@@ -677,7 +677,7 @@ Item::get_data (string const & key) const
        if (i == _data.end ()) {
                return 0;
        }
-       
+
        return i->second;
 }
 
@@ -688,7 +688,7 @@ Item::set_ignore_events (bool ignore)
 }
 
 std::string
-Item::whatami () const 
+Item::whatami () const
 {
        std::string type = demangle (typeid (*this).name());
        return type.substr (type.find_last_of (':') + 1);
@@ -738,14 +738,14 @@ Item::render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context)
 
 #ifdef CANVAS_DEBUG
        if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
-               cerr << string_compose ("%1%7 %2 @ %7 render %5 @ %6 %3 items out of %4\n", 
+               cerr << string_compose ("%1%7 %2 @ %7 render %5 @ %6 %3 items out of %4\n",
                                        _canvas->render_indent(), (name.empty() ? string ("[unnamed]") : name), items.size(), _items.size(), area, _position, this,
                                        whatami());
        }
 #endif
 
        ++render_depth;
-               
+
        for (std::vector<Item*>::const_iterator i = items.begin(); i != items.end(); ++i) {
 
                if (!(*i)->visible ()) {
@@ -756,7 +756,7 @@ Item::render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context)
 #endif
                        continue;
                }
-               
+
                boost::optional<Rect> item_bbox = (*i)->bounding_box ();
 
                if (!item_bbox) {
@@ -767,10 +767,10 @@ Item::render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context)
 #endif
                        continue;
                }
-               
+
                Rect item = (*i)->item_to_window (item_bbox.get(), false);
                boost::optional<Rect> d = item.intersection (area);
-               
+
                if (d) {
                        Rect draw = d.get();
                        if (draw.width() && draw.height()) {
@@ -778,7 +778,7 @@ Item::render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context)
                                if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
                                        if (dynamic_cast<Container*>(*i) == 0) {
                                                cerr << _canvas->render_indent() << "render "
-                                                    << ' ' 
+                                                    << ' '
                                                     << (*i)
                                                     << ' '
                                                     << (*i)->whatami()
@@ -786,11 +786,11 @@ Item::render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context)
                                                     << (*i)->name
                                                     << " item "
                                                     << item_bbox.get()
-                                                    << " window = " 
+                                                    << " window = "
                                                     << item
                                                     << " intersect = "
                                                     << draw
-                                                    << " @ " 
+                                                    << " @ "
                                                     << _position
                                                     << endl;
                                        }
@@ -891,7 +891,7 @@ Item::remove (Item* i)
        _items.remove (i);
        invalidate_lut ();
        _bounding_box_dirty = true;
-       
+
        end_change ();
 }
 
@@ -925,7 +925,7 @@ Item::clear_items (bool with_delete)
 
                _items.erase (i);
                item->unparent ();
-               
+
                if (with_delete) {
                        delete item;
                }
@@ -1069,7 +1069,7 @@ Item::dump (ostream& o) const
 
        o << _canvas->indent() << whatami() << ' ' << this << " self-Visible ? " << self_visible() << " visible ? " << visible();
        o << " @ " << position();
-       
+
 #ifdef CANVAS_DEBUG
        if (!name.empty()) {
                o << ' ' << name;
@@ -1093,25 +1093,25 @@ Item::dump (ostream& o) const
                o << " Items: " << _items.size();
                o << " Self-Visible ? " << self_visible();
                o << " Visible ? " << visible();
-               
+
                boost::optional<Rect> bb = bounding_box();
-               
+
                if (bb) {
                        o << endl << _canvas->indent() << "  bbox: " << bb.get();
                        o << endl << _canvas->indent() << "  CANVAS bbox: " << item_to_canvas (bb.get());
                } else {
                        o << "  bbox unset";
                }
-               
+
                o << endl;
 #endif
-               
+
                ArdourCanvas::dump_depth++;
-               
+
                for (list<Item*>::const_iterator i = _items.begin(); i != _items.end(); ++i) {
                        o << **i;
                }
-               
+
                ArdourCanvas::dump_depth--;
        }
 }