Lua Script Example to toggle monitor section
[ardour.git] / libs / canvas / flag.cc
index d0ce5af2b13c582218368e19aa61cb58f6dcfd6e..25f1893366a2748a4c7f8c0de09d4448cc69d9d2 100644 (file)
@@ -25,7 +25,7 @@
 using namespace std;
 using namespace ArdourCanvas;
 
-Flag::Flag (Canvas* canvas, Distance height, Color outline_color, Color fill_color, Duple position, bool invert)
+Flag::Flag (Canvas* canvas, Distance height, Gtkmm2ext::Color outline_color, Gtkmm2ext::Color fill_color, Duple position, bool invert)
        : Container (canvas)
        , _outline_color (outline_color)
        , _fill_color (fill_color)
@@ -34,7 +34,7 @@ Flag::Flag (Canvas* canvas, Distance height, Color outline_color, Color fill_col
        setup (height, position);
 }
 
-Flag::Flag (Item* parent, Distance height, Color outline_color, Color fill_color, Duple position, bool invert)
+Flag::Flag (Item* parent, Distance height, Gtkmm2ext::Color outline_color, Gtkmm2ext::Color fill_color, Duple position, bool invert)
        : Container (parent)
        , _outline_color (outline_color)
        , _fill_color (fill_color)
@@ -72,15 +72,18 @@ Flag::set_font_description (Pango::FontDescription font_description)
 void
 Flag::set_text (string const & text)
 {
-       if (text.empty ()) {
+       if (text == _text->text()) {
+               return;
+       } else if (text.empty ()) {
                _text->set (" ");
        } else {
                _text->set (text);
        }
-       boost::optional<Rect> bbox = _text->bounding_box ();
+
+       Rect bbox = _text->bounding_box ();
        assert (bbox);
 
-       Duple flag_size (bbox.get().width() + 10, bbox.get().height() + 4);
+       Duple flag_size (bbox.width() + 10, bbox.height() + 4);
 
        if (_invert) {
                const Distance h = fabs(_line->y1() - _line->y0());
@@ -98,9 +101,9 @@ Flag::set_height (Distance h)
        _line->set (Duple (0, 0), Duple (0, h));
 
        if (_invert) {
-               boost::optional<Rect> bbox = _text->bounding_box ();
+               Rect bbox = _text->bounding_box ();
                if (bbox) {
-                       Duple flag_size (bbox.get().width() + 10, bbox.get().height() + 4);
+                       Duple flag_size (bbox.width() + 10, bbox.height() + 4);
                        _rectangle->set (Rect (0, h - flag_size.y, flag_size.x, h));
                        _text->set_position (Duple (5, h - flag_size.y + 2));
                }
@@ -116,3 +119,12 @@ Flag::covers (Duple const & point) const
 
        return false;
 }
+
+double
+Flag::width () const
+{
+       Rect bbox = _text->bounding_box ();
+       assert (bbox);
+
+       return bbox.width() + 10;
+}