diff options
-rw-r--r-- | gtk2_ardour/patch_change.cc | 3 | ||||
-rw-r--r-- | libs/canvas/canvas/flag.h | 5 | ||||
-rw-r--r-- | libs/canvas/flag.cc | 27 |
3 files changed, 27 insertions, 8 deletions
diff --git a/gtk2_ardour/patch_change.cc b/gtk2_ardour/patch_change.cc index bde5b4bf25..601011d017 100644 --- a/gtk2_ardour/patch_change.cc +++ b/gtk2_ardour/patch_change.cc @@ -60,7 +60,8 @@ PatchChange::PatchChange(MidiRegionView& region, height, ARDOUR_UI::config()->color ("midi patch change outline"), ARDOUR_UI::config()->color_mod ("midi patch change fill", "midi patch change fill"), - ArdourCanvas::Duple (x, y)); + ArdourCanvas::Duple (x, y), + true); CANVAS_DEBUG_NAME (_flag, text); 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 |