summaryrefslogtreecommitdiff
path: root/libs/canvas/flag.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-03-14 00:21:29 -0400
committerDavid Robillard <d@drobilla.net>2015-03-14 00:21:29 -0400
commit86c654132358b22f62a0672b11f436eb9123367e (patch)
tree6a16a25cd3880ece2ad568adb55084233abae95b /libs/canvas/flag.cc
parent700cb13b36699674741f2781eae73adb44dc0932 (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/canvas/flag.cc')
-rw-r--r--libs/canvas/flag.cc27
1 files changed, 22 insertions, 5 deletions
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