summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-12-12 22:04:22 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-12-12 22:04:22 +0000
commitf03a87a132feb525a743de675d0439e981ab329a (patch)
tree995f4bcb7deb66ebe75924d90ce1727d230bed8e
parentbc89fe0147c04b67141936d109c00dfd4d69cc4b (diff)
* Prepared CanvasFlag (and thus ChanvasProgramChange) to be able to receive Scroll wheel events
* made changes in editor_canvas_events.cc to forward events to CanvasFlag (against pauls advice), but IMHO it doesnt add complexity to it since it only adds a few trivial lines which do the same which has already been done for CanvasNote and thus shouldnt complicate the merge in any way git-svn-id: svn://localhost/ardour2/branches/3.0@4314 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/canvas-flag.cc10
-rw-r--r--gtk2_ardour/canvas-flag.h53
-rw-r--r--gtk2_ardour/canvas-program-change.cc19
-rw-r--r--gtk2_ardour/canvas-program-change.h2
-rw-r--r--gtk2_ardour/editor_canvas_events.cc13
5 files changed, 91 insertions, 6 deletions
diff --git a/gtk2_ardour/canvas-flag.cc b/gtk2_ardour/canvas-flag.cc
index c40bf45648..a4eee41227 100644
--- a/gtk2_ardour/canvas-flag.cc
+++ b/gtk2_ardour/canvas-flag.cc
@@ -30,7 +30,7 @@ CanvasFlag::set_text(string& a_text)
{
delete_allocated_objects();
- _text = new Text(*this, 0.0, 0.0, Glib::ustring(a_text));
+ _text = new CanvasFlagText(*this, 0.0, 0.0, Glib::ustring(a_text));
_text->property_justification() = Gtk::JUSTIFY_CENTER;
_text->property_fill_color_rgba() = _outline_color_rgba;
double flagwidth = _text->property_text_width() + 10.0;
@@ -40,7 +40,7 @@ CanvasFlag::set_text(string& a_text)
_text->show();
_line = new SimpleLine(*this, 0.0, 0.0, 0.0, _height);
_line->property_color_rgba() = _outline_color_rgba;
- _rect = new SimpleRect(*this, 0.0, 0.0, flagwidth, flagheight);
+ _rect = new CanvasFlagRect(*this, 0.0, 0.0, flagwidth, flagheight);
_rect->property_outline_color_rgba() = _outline_color_rgba;
_rect->property_fill_color_rgba() = _fill_color_rgba;
_text->lower_to_bottom();
@@ -52,3 +52,9 @@ CanvasFlag::~CanvasFlag()
delete_allocated_objects();
}
+bool
+CanvasFlag::on_event(GdkEvent* ev)
+{
+ cerr << "CanvasFlag::on_event(GdkEvent* ev)" << endl;
+ return false;
+}
diff --git a/gtk2_ardour/canvas-flag.h b/gtk2_ardour/canvas-flag.h
index 23fba78fee..0f45667614 100644
--- a/gtk2_ardour/canvas-flag.h
+++ b/gtk2_ardour/canvas-flag.h
@@ -15,6 +15,9 @@ class MidiRegionView;
namespace Gnome {
namespace Canvas {
+class CanvasFlagRect;
+class CanvasFlagText;
+
class CanvasFlag : public Group
{
public:
@@ -35,13 +38,15 @@ public:
, _line(0)
, _rect(0)
{}
-
+
virtual ~CanvasFlag();
+ virtual bool on_event(GdkEvent* ev);
+
void set_text(string& a_text);
protected:
- Text* _text;
+ CanvasFlagText* _text;
double _height;
guint _outline_color_rgba;
guint _fill_color_rgba;
@@ -51,9 +56,51 @@ private:
MidiRegionView& _region;
SimpleLine* _line;
- SimpleRect* _rect;
+ CanvasFlagRect* _rect;
+};
+
+class CanvasFlagText: public Text
+{
+public:
+ CanvasFlagText(Group& parent, double x, double y, const Glib::ustring& text)
+ : Text(parent, x, y, text) {
+ _parent = dynamic_cast<CanvasFlag*>(&parent);
+;
+ }
+
+ virtual bool on_event(GdkEvent* ev) {
+ if(_parent) {
+ return _parent->on_event(ev);
+ } else {
+ return false;
+ }
+ }
+
+private:
+ CanvasFlag* _parent;
};
+class CanvasFlagRect: public SimpleRect
+{
+public:
+ CanvasFlagRect(Group& parent, double x1, double y1, double x2, double y2)
+ : SimpleRect(parent, x1, y1, x2, y2) {
+ _parent = dynamic_cast<CanvasFlag*>(&parent);
+ }
+
+ virtual bool on_event(GdkEvent* ev) {
+ if(_parent) {
+ return _parent->on_event(ev);
+ } else {
+ return false;
+ }
+ }
+
+private:
+ CanvasFlag* _parent;
+};
+
+
} // namespace Canvas
} // namespace Gnome
diff --git a/gtk2_ardour/canvas-program-change.cc b/gtk2_ardour/canvas-program-change.cc
index 7b3fb302bd..61d043e184 100644
--- a/gtk2_ardour/canvas-program-change.cc
+++ b/gtk2_ardour/canvas-program-change.cc
@@ -29,3 +29,22 @@ CanvasProgramChange::~CanvasProgramChange()
{
}
+bool
+CanvasProgramChange::on_event(GdkEvent* ev)
+{
+ cerr << "CanvasProgramChange::on_event(GdkEvent* ev) type " << ev->type << endl;
+ switch (ev->type) {
+ case GDK_SCROLL:
+ if (ev->scroll.direction == GDK_SCROLL_UP) {
+ cerr << "increasing program" << endl;
+ return true;
+ } else if (ev->scroll.direction == GDK_SCROLL_DOWN) {
+ cerr << "decreasing program" << endl;
+ return true;
+ }
+ default:
+ break;
+ }
+
+ return false;
+}
diff --git a/gtk2_ardour/canvas-program-change.h b/gtk2_ardour/canvas-program-change.h
index 9c6d7bcdff..cfe73052d0 100644
--- a/gtk2_ardour/canvas-program-change.h
+++ b/gtk2_ardour/canvas-program-change.h
@@ -22,6 +22,8 @@ public:
virtual ~CanvasProgramChange();
+ virtual bool on_event(GdkEvent* ev);
+
private:
};
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index a9c0bf17a9..f821220cf3 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -41,6 +41,7 @@
#include "canvas_impl.h"
#include "simplerect.h"
#include "canvas-note-event.h"
+#include "canvas-program-change.h"
#include "i18n.h"
@@ -58,7 +59,9 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
double wx, wy;
nframes64_t xdelta;
int direction = ev->direction;
- CanvasNoteEvent *midi_event = dynamic_cast<CanvasNoteEvent *>(track_canvas->get_item_at(ev->x, ev->y));
+ CanvasNoteEvent *midi_event = dynamic_cast<CanvasNoteEvent *>(track_canvas->get_item_at(ev->x, ev->y));
+ CanvasFlagRect *flag_rect = dynamic_cast<CanvasFlagRect *>(track_canvas->get_item_at(ev->x, ev->y));
+ CanvasFlagText *flag_text = dynamic_cast<CanvasFlagText *>(track_canvas->get_item_at(ev->x, ev->y));
retry:
switch (direction) {
@@ -97,6 +100,10 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
} else {
if(midi_event) {
return midi_event->on_event(reinterpret_cast<GdkEvent *>(ev));
+ } else if (flag_rect) {
+ return flag_rect->on_event(reinterpret_cast<GdkEvent *>(ev));
+ } else if (flag_text) {
+ return flag_text->on_event(reinterpret_cast<GdkEvent *>(ev));
}
scroll_tracks_up_line ();
return true;
@@ -133,6 +140,10 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
} else {
if(midi_event) {
return midi_event->on_event(reinterpret_cast<GdkEvent *>(ev));
+ } else if (flag_rect) {
+ return flag_rect->on_event(reinterpret_cast<GdkEvent *>(ev));
+ } else if (flag_text) {
+ return flag_text->on_event(reinterpret_cast<GdkEvent *>(ev));
}
scroll_tracks_down_line ();
return true;