diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2008-12-12 22:04:22 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2008-12-12 22:04:22 +0000 |
commit | f03a87a132feb525a743de675d0439e981ab329a (patch) | |
tree | 995f4bcb7deb66ebe75924d90ce1727d230bed8e | |
parent | bc89fe0147c04b67141936d109c00dfd4d69cc4b (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.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/canvas-flag.h | 53 | ||||
-rw-r--r-- | gtk2_ardour/canvas-program-change.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/canvas-program-change.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 13 |
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; |