controls_layout.add (*h);
controls_layout.set_name ("EditControlsBase");
- controls_layout.add_events (Gdk::SCROLL_MASK);
- controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
-
- controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
+ controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::SCROLL_MASK);
controls_layout.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_release));
+ controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
_cursors = new MouseCursors;
bool
Editor::control_layout_scroll (GdkEventScroll* ev)
{
- if (Keyboard::some_magic_widget_has_focus()) {
- return false;
- }
-
- switch (ev->direction) {
- case GDK_SCROLL_UP:
- scroll_tracks_up_line ();
- return true;
- break;
+ /* Just forward to the normal canvas scroll method. The coordinate
+ systems are different but since the canvas is always larger than the
+ track headers, and aligned with the trackview area, this will work.
- case GDK_SCROLL_DOWN:
- scroll_tracks_down_line ();
- return true;
-
- default:
- /* no left/right handling yet */
- break;
- }
-
- return false;
+ In the not too distant future this layout is going away anyway and
+ headers will be on the canvas.
+ */
+ return canvas_scroll_event (ev);
}
void
/* Canvas event handlers */
+ bool canvas_scroll_event (GdkEventScroll* event);
bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
bool track_canvas_scroll (GdkEventScroll* event);
- bool track_canvas_scroll_event (GdkEventScroll* event);
bool track_canvas_button_press_event (GdkEventButton* event);
bool track_canvas_button_release_event (GdkEventButton* event);
bool track_canvas_motion_notify_event (GdkEventMotion* event);
handlers.
*/
- _track_canvas->signal_scroll_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_scroll_event));
+ _track_canvas->signal_scroll_event().connect (sigc::mem_fun (*this, &Editor::canvas_scroll_event));
_track_canvas->signal_motion_notify_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_motion_notify_event));
_track_canvas->signal_button_press_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_press_event));
_track_canvas->signal_button_release_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_release_event));
bool
Editor::track_canvas_scroll (GdkEventScroll* ev)
{
+ if (Keyboard::some_magic_widget_has_focus()) {
+ return false;
+ }
+
framepos_t xdelta;
int direction = ev->direction;
}
bool
-Editor::track_canvas_scroll_event (GdkEventScroll *event)
+Editor::canvas_scroll_event (GdkEventScroll *event)
{
_track_canvas->grab_focus();
return track_canvas_scroll (event);
}
bool
-Editor::canvas_drop_zone_event (GdkEvent* event)
+Editor::canvas_drop_zone_event (GdkEvent* /*event*/)
{
return true;
}
virtual void reset_focus () = 0;
+ virtual bool canvas_scroll_event (GdkEventScroll* event) = 0;
virtual bool canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item*, ControlPoint*) = 0;
virtual bool canvas_line_event (GdkEvent* event, ArdourCanvas::Item*, AutomationLine*) = 0;
virtual bool canvas_selection_rect_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
bool
TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
{
- switch (ev->direction) {
- case GDK_SCROLL_UP:
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
- /* See Editor::_stepping_axis_view for notes on this hack */
- Editor& e = dynamic_cast<Editor&> (_editor);
- if (!e.stepping_axis_view ()) {
- e.set_stepping_axis_view (this);
- }
- e.stepping_axis_view()->step_height (false);
- return true;
- } else if (Keyboard::no_modifiers_active (ev->state)) {
- _editor.scroll_up_one_track();
- return true;
- }
- break;
+ /* Just forward to the normal canvas scroll method. The coordinate
+ systems are different but since the canvas is always larger than the
+ track headers, and aligned with the trackview area, this will work.
- case GDK_SCROLL_DOWN:
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
- /* See Editor::_stepping_axis_view for notes on this hack */
- Editor& e = dynamic_cast<Editor&> (_editor);
- if (!e.stepping_axis_view ()) {
- e.set_stepping_axis_view (this);
- }
- e.stepping_axis_view()->step_height (true);
- return true;
- } else if (Keyboard::no_modifiers_active (ev->state)) {
- _editor.scroll_down_one_track();
- return true;
- }
- break;
-
- default:
- /* no handling for left/right, yet */
- break;
- }
-
- return false;
+ In the not too distant future this layout is going away anyway and
+ headers will be on the canvas.
+ */
+ return _editor.canvas_scroll_event (ev);
}
bool