Allow Lua bindings up to 10 args
[ardour.git] / libs / canvas / flag.cc
index 87c3cc281c86043fdf075f21497d67b2df8d9974..b00426ff9220a91281c02a6c02858682834a5d5d 100644 (file)
@@ -43,7 +43,7 @@ Flag::Flag (Item* parent, Distance height, Color outline_color, Color fill_color
        setup (height, position);
 }
 
-void 
+void
 Flag::setup (Distance height, Duple position)
 {
        _text = new Text (this);
@@ -72,12 +72,19 @@ Flag::set_font_description (Pango::FontDescription font_description)
 void
 Flag::set_text (string const & text)
 {
-       _text->set (text);
-       boost::optional<Rect> bbox = _text->bounding_box ();
+       if (text == _text->text()) {
+               return;
+       } else if (text.empty ()) {
+               _text->set (" ");
+       } else {
+               _text->set (text);
+       }
+
+       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());
                _text->set_position (Duple (5, h - flag_size.y + 2));
@@ -94,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));
                }
@@ -108,7 +115,16 @@ Flag::covers (Duple const & point) const
 {
        if (_rectangle) {
                return _rectangle->covers (point);
-       } 
+       }
 
        return false;
 }
+
+double
+Flag::width () const
+{
+       Rect bbox = _text->bounding_box ();
+       assert (bbox);
+
+       return bbox.width() + 10;
+}