mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 03:36:32 +01:00
forward scroll events from track control headers to the canvas, to get consistent scroll behaviour (whatever that behaviour is)
This commit is contained in:
parent
95f2b4ba17
commit
d36afa6b8b
6 changed files with 25 additions and 63 deletions
|
|
@ -495,11 +495,9 @@ Editor::Editor ()
|
||||||
controls_layout.add (*h);
|
controls_layout.add (*h);
|
||||||
|
|
||||||
controls_layout.set_name ("EditControlsBase");
|
controls_layout.set_name ("EditControlsBase");
|
||||||
controls_layout.add_events (Gdk::SCROLL_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_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.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_release));
|
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;
|
_cursors = new MouseCursors;
|
||||||
|
|
||||||
|
|
@ -3878,26 +3876,14 @@ Editor::transport_punch_location()
|
||||||
bool
|
bool
|
||||||
Editor::control_layout_scroll (GdkEventScroll* ev)
|
Editor::control_layout_scroll (GdkEventScroll* ev)
|
||||||
{
|
{
|
||||||
if (Keyboard::some_magic_widget_has_focus()) {
|
/* Just forward to the normal canvas scroll method. The coordinate
|
||||||
return false;
|
systems are different but since the canvas is always larger than the
|
||||||
}
|
track headers, and aligned with the trackview area, this will work.
|
||||||
|
|
||||||
switch (ev->direction) {
|
In the not too distant future this layout is going away anyway and
|
||||||
case GDK_SCROLL_UP:
|
headers will be on the canvas.
|
||||||
scroll_tracks_up_line ();
|
*/
|
||||||
return true;
|
return canvas_scroll_event (ev);
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_SCROLL_DOWN:
|
|
||||||
scroll_tracks_down_line ();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/* no left/right handling yet */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -1402,6 +1402,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
|
|
||||||
/* Canvas event handlers */
|
/* Canvas event handlers */
|
||||||
|
|
||||||
|
bool canvas_scroll_event (GdkEventScroll* event);
|
||||||
bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
|
bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
|
||||||
bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
|
bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
|
||||||
bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
|
bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
|
||||||
|
|
@ -1458,7 +1459,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
|
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||||
bool track_canvas_scroll (GdkEventScroll* event);
|
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_press_event (GdkEventButton* event);
|
||||||
bool track_canvas_button_release_event (GdkEventButton* event);
|
bool track_canvas_button_release_event (GdkEventButton* event);
|
||||||
bool track_canvas_motion_notify_event (GdkEventMotion* event);
|
bool track_canvas_motion_notify_event (GdkEventMotion* event);
|
||||||
|
|
|
||||||
|
|
@ -236,7 +236,7 @@ Editor::initialize_canvas ()
|
||||||
handlers.
|
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_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_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));
|
_track_canvas->signal_button_release_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_release_event));
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,10 @@ using Gtkmm2ext::Keyboard;
|
||||||
bool
|
bool
|
||||||
Editor::track_canvas_scroll (GdkEventScroll* ev)
|
Editor::track_canvas_scroll (GdkEventScroll* ev)
|
||||||
{
|
{
|
||||||
|
if (Keyboard::some_magic_widget_has_focus()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
framepos_t xdelta;
|
framepos_t xdelta;
|
||||||
int direction = ev->direction;
|
int direction = ev->direction;
|
||||||
|
|
||||||
|
|
@ -156,7 +160,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Editor::track_canvas_scroll_event (GdkEventScroll *event)
|
Editor::canvas_scroll_event (GdkEventScroll *event)
|
||||||
{
|
{
|
||||||
_track_canvas->grab_focus();
|
_track_canvas->grab_focus();
|
||||||
return track_canvas_scroll (event);
|
return track_canvas_scroll (event);
|
||||||
|
|
@ -1010,7 +1014,7 @@ Editor::canvas_note_event (GdkEvent *event, ArdourCanvas::Item* item)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Editor::canvas_drop_zone_event (GdkEvent* event)
|
Editor::canvas_drop_zone_event (GdkEvent* /*event*/)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -318,6 +318,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
|
||||||
|
|
||||||
virtual void reset_focus () = 0;
|
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_control_point_event (GdkEvent* event, ArdourCanvas::Item*, ControlPoint*) = 0;
|
||||||
virtual bool canvas_line_event (GdkEvent* event, ArdourCanvas::Item*, AutomationLine*) = 0;
|
virtual bool canvas_line_event (GdkEvent* event, ArdourCanvas::Item*, AutomationLine*) = 0;
|
||||||
virtual bool canvas_selection_rect_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
|
virtual bool canvas_selection_rect_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
|
||||||
|
|
|
||||||
|
|
@ -287,43 +287,14 @@ TimeAxisView::show_at (double y, int& nth, VBox *parent)
|
||||||
bool
|
bool
|
||||||
TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
|
TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
|
||||||
{
|
{
|
||||||
switch (ev->direction) {
|
/* Just forward to the normal canvas scroll method. The coordinate
|
||||||
case GDK_SCROLL_UP:
|
systems are different but since the canvas is always larger than the
|
||||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
|
track headers, and aligned with the trackview area, this will work.
|
||||||
/* 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;
|
|
||||||
|
|
||||||
case GDK_SCROLL_DOWN:
|
In the not too distant future this layout is going away anyway and
|
||||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
|
headers will be on the canvas.
|
||||||
/* See Editor::_stepping_axis_view for notes on this hack */
|
*/
|
||||||
Editor& e = dynamic_cast<Editor&> (_editor);
|
return _editor.canvas_scroll_event (ev);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue