Towards a consistent render() API.
[ardour.git] / libs / canvas / flag.cc
index d0ce5af2b13c582218368e19aa61cb58f6dcfd6e..b00426ff9220a91281c02a6c02858682834a5d5d 100644 (file)
@@ -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;
+}