diff options
author | David Robillard <d@drobilla.net> | 2015-03-14 00:21:29 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2015-03-14 00:21:29 -0400 |
commit | 86c654132358b22f62a0672b11f436eb9123367e (patch) | |
tree | 6a16a25cd3880ece2ad568adb55084233abae95b /libs | |
parent | 700cb13b36699674741f2781eae73adb44dc0932 (diff) |
Move PC flags to avoid obscuring region name.
Fixes bug #6179. Top vs. bottom seems pretty arbitrary to me, and this solves
the obscuring issue (which is quite common since there are often PC events at
the start of MIDI files), so bottom it is.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/canvas/canvas/flag.h | 5 | ||||
-rw-r--r-- | libs/canvas/flag.cc | 27 |
2 files changed, 25 insertions, 7 deletions
diff --git a/libs/canvas/canvas/flag.h b/libs/canvas/canvas/flag.h index 19a302b4b6..82f257b7d2 100644 --- a/libs/canvas/canvas/flag.h +++ b/libs/canvas/canvas/flag.h @@ -32,8 +32,8 @@ class Rectangle; class LIBCANVAS_API Flag : public Container { public: - Flag (Canvas *, Distance, Color, Color, Duple); - Flag (Item*, Distance, Color, Color, Duple); + Flag (Canvas *, Distance, Color, Color, Duple, bool invert=false); + Flag (Item*, Distance, Color, Color, Duple, bool invert=false); void set_text (std::string const &); void set_height (Distance); @@ -50,6 +50,7 @@ private: Text* _text; Line* _line; Rectangle* _rectangle; + bool _invert; }; } diff --git a/libs/canvas/flag.cc b/libs/canvas/flag.cc index 7425166043..87c3cc281c 100644 --- a/libs/canvas/flag.cc +++ b/libs/canvas/flag.cc @@ -25,18 +25,20 @@ using namespace std; using namespace ArdourCanvas; -Flag::Flag (Canvas* canvas, Distance height, Color outline_color, Color fill_color, Duple position) +Flag::Flag (Canvas* canvas, Distance height, Color outline_color, Color fill_color, Duple position, bool invert) : Container (canvas) , _outline_color (outline_color) , _fill_color (fill_color) + , _invert (invert) { setup (height, position); } -Flag::Flag (Item* parent, Distance height, Color outline_color, Color fill_color, Duple position) +Flag::Flag (Item* parent, Distance height, Color outline_color, Color fill_color, Duple position, bool invert) : Container (parent) , _outline_color (outline_color) , _fill_color (fill_color) + , _invert (invert) { setup (height, position); } @@ -50,7 +52,6 @@ Flag::setup (Distance height, Duple position) _line = new Line (this); _line->set_outline_color (_outline_color); - set_height (height); _rectangle = new Rectangle (this); _rectangle->set_outline_color (_outline_color); @@ -58,6 +59,7 @@ Flag::setup (Distance height, Duple position) _text->raise_to_top (); + set_height (height); set_position (position); } @@ -76,14 +78,29 @@ Flag::set_text (string const & text) Duple flag_size (bbox.get().width() + 10, bbox.get().height() + 4); - _text->set_position (Duple (5, 2)); - _rectangle->set (Rect (0, 0, flag_size.x, flag_size.y)); + if (_invert) { + const Distance h = fabs(_line->y1() - _line->y0()); + _text->set_position (Duple (5, h - flag_size.y + 2)); + _rectangle->set (Rect (0, h - flag_size.y, flag_size.x, h)); + } else { + _text->set_position (Duple (5, 2)); + _rectangle->set (Rect (0, 0, flag_size.x, flag_size.y)); + } } void Flag::set_height (Distance h) { _line->set (Duple (0, 0), Duple (0, h)); + + if (_invert) { + boost::optional<Rect> bbox = _text->bounding_box (); + if (bbox) { + Duple flag_size (bbox.get().width() + 10, bbox.get().height() + 4); + _rectangle->set (Rect (0, h - flag_size.y, flag_size.x, h)); + _text->set_position (Duple (5, h - flag_size.y + 2)); + } + } } bool |