X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Fflag.cc;h=25f1893366a2748a4c7f8c0de09d4448cc69d9d2;hb=e44ae422ebb5c1b18cc03cb2254e3cf3308565e0;hp=87c3cc281c86043fdf075f21497d67b2df8d9974;hpb=91fac4c96dc6210dcc056da70dc608700d7eb570;p=ardour.git diff --git a/libs/canvas/flag.cc b/libs/canvas/flag.cc index 87c3cc281c..25f1893366 100644 --- a/libs/canvas/flag.cc +++ b/libs/canvas/flag.cc @@ -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) @@ -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 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 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; +}