summaryrefslogtreecommitdiff
path: root/gtk2_ardour/canvas-program-change.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/canvas-program-change.cc')
-rw-r--r--gtk2_ardour/canvas-program-change.cc58
1 files changed, 58 insertions, 0 deletions
diff --git a/gtk2_ardour/canvas-program-change.cc b/gtk2_ardour/canvas-program-change.cc
new file mode 100644
index 0000000000..5883dd5b86
--- /dev/null
+++ b/gtk2_ardour/canvas-program-change.cc
@@ -0,0 +1,58 @@
+#include "canvas-program-change.h"
+#include <iostream>
+
+using namespace ArdourCanvas;
+using namespace std;
+
+CanvasProgramChange::CanvasProgramChange(
+ MidiRegionView& region,
+ Group& parent,
+ boost::shared_ptr<MIDI::Event> event,
+ double height,
+ double x,
+ double y)
+ : Group(parent, x, y),
+ _region(region),
+ _event(event),
+ _text(0),
+ _line(0),
+ _rect(0),
+ _widget(0)
+{
+ _text = new Text(*this);
+ ostringstream pgm(ios::ate);
+ pgm << int(event->pgm_number());
+ _text->property_text() = pgm.str();
+ _text->property_justification() = Gtk::JUSTIFY_CENTER;
+ _text->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiProgramChangeOutline.get();
+ double flagwidth = _text->property_text_width() + 10.0;
+ double flagheight = _text->property_text_height() + 3.0;
+ _text->property_x() = flagwidth / 2.0;
+ _text->property_y() = flagheight / 2.0;
+ _text->show();
+ _line = new SimpleLine(*this, 0.0, 0.0, 0.0, height);
+ _line->property_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiProgramChangeOutline.get();
+ _rect = new SimpleRect(*this, 0.0, 0.0, flagwidth, flagheight);
+ _rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiProgramChangeOutline.get();
+ _rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiProgramChangeFill.get();
+ _text->lower_to_bottom();
+ _text->raise(2);
+ assert(_widget == 0);
+ assert(_text != 0);
+ assert(_line != 0);
+ assert(_rect != 0);
+}
+
+CanvasProgramChange::~CanvasProgramChange()
+{
+ if(_line)
+ delete _line;
+ if(_rect)
+ delete _rect;
+ if(_text)
+ delete _text;
+ if(_widget)
+ delete _widget;
+}
+
+