summaryrefslogtreecommitdiff
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
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.
-rw-r--r--gtk2_ardour/patch_change.cc3
-rw-r--r--libs/canvas/canvas/flag.h5
-rw-r--r--libs/canvas/flag.cc27
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