summaryrefslogtreecommitdiff
path: root/libs
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
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')
-rw-r--r--libs/canvas/canvas/flag.h5
-rw-r--r--libs/canvas/flag.cc27
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