mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-20 13:46:30 +01:00
scroll events on rulers/time canvas now control zoom/scrolling
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2814 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
95f823b02a
commit
a29a7b7bef
4 changed files with 115 additions and 25 deletions
|
|
@ -580,6 +580,7 @@ class Editor : public PublicEditor
|
|||
gint ruler_button_press (GdkEventButton*);
|
||||
gint ruler_button_release (GdkEventButton*);
|
||||
gint ruler_mouse_motion (GdkEventMotion*);
|
||||
bool ruler_scroll (GdkEventScroll* event);
|
||||
|
||||
gint ruler_pressed_button;
|
||||
Gtk::Widget * ruler_grabbed_widget;
|
||||
|
|
@ -1279,12 +1280,15 @@ class Editor : public PublicEditor
|
|||
|
||||
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool track_canvas_scroll (GdkEventScroll* event);
|
||||
bool time_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);
|
||||
|
||||
bool time_canvas_scroll_event (GdkEventScroll* event);
|
||||
|
||||
Gtk::Allocation canvas_allocation;
|
||||
bool canvas_idle_queued;
|
||||
void track_canvas_allocate (Gtk::Allocation alloc);
|
||||
|
|
|
|||
|
|
@ -102,6 +102,9 @@ Editor::initialize_canvas ()
|
|||
track_canvas.signal_button_press_event().connect (mem_fun (*this, &Editor::track_canvas_button_press_event));
|
||||
track_canvas.signal_button_release_event().connect (mem_fun (*this, &Editor::track_canvas_button_release_event));
|
||||
|
||||
/* just scroll stuff for the timecanvas */
|
||||
time_canvas.signal_scroll_event().connect (mem_fun (*this, &Editor::time_canvas_scroll_event));
|
||||
|
||||
track_canvas.set_name ("EditorMainCanvas");
|
||||
track_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK|Gdk::SCROLL_MASK);
|
||||
track_canvas.signal_leave_notify_event().connect (mem_fun(*this, &Editor::left_track_canvas));
|
||||
|
|
|
|||
|
|
@ -157,6 +157,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_scroll_event (GdkEventScroll *event)
|
||||
{
|
||||
|
|
@ -165,6 +166,58 @@ Editor::track_canvas_scroll_event (GdkEventScroll *event)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::time_canvas_scroll (GdkEventScroll* ev)
|
||||
{
|
||||
int x, y;
|
||||
double wx, wy;
|
||||
nframes_t xdelta;
|
||||
int direction = ev->direction;
|
||||
|
||||
retry:
|
||||
switch (direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
temporal_zoom_step (true);
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_DOWN:
|
||||
temporal_zoom_step (false);
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_LEFT:
|
||||
xdelta = (current_page_frames() / 2);
|
||||
if (leftmost_frame > xdelta) {
|
||||
reset_x_origin (leftmost_frame - xdelta);
|
||||
} else {
|
||||
reset_x_origin (0);
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_RIGHT:
|
||||
xdelta = (current_page_frames() / 2);
|
||||
if (max_frames - xdelta > leftmost_frame) {
|
||||
reset_x_origin (leftmost_frame + xdelta);
|
||||
} else {
|
||||
reset_x_origin (max_frames - current_page_frames());
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* what? */
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::time_canvas_scroll_event (GdkEventScroll *event)
|
||||
{
|
||||
time_canvas.grab_focus();
|
||||
time_canvas_scroll (event);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_button_press_event (GdkEventButton *event)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -99,30 +99,56 @@ Editor::initialize_rulers ()
|
|||
ruler_shown[ruler_metric_frames] = false;
|
||||
ruler_shown[ruler_metric_minsec] = false;
|
||||
|
||||
smpte_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
bbt_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
frames_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
minsec_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
|
||||
smpte_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release));
|
||||
bbt_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release));
|
||||
frames_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release));
|
||||
minsec_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release));
|
||||
|
||||
smpte_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press));
|
||||
bbt_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press));
|
||||
frames_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press));
|
||||
minsec_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press));
|
||||
|
||||
smpte_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
bbt_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
frames_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
minsec_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
|
||||
visible_timebars = 7; /* 4 here, 3 in time_canvas */
|
||||
ruler_pressed_button = 0;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::ruler_scroll (GdkEventScroll* event)
|
||||
{
|
||||
nframes_t xdelta;
|
||||
int direction = event->direction;
|
||||
bool handled = false;
|
||||
|
||||
switch (direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
temporal_zoom_step (true);
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_DOWN:
|
||||
temporal_zoom_step (false);
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_LEFT:
|
||||
xdelta = (current_page_frames() / 2);
|
||||
if (leftmost_frame > xdelta) {
|
||||
reset_x_origin (leftmost_frame - xdelta);
|
||||
} else {
|
||||
reset_x_origin (0);
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_RIGHT:
|
||||
xdelta = (current_page_frames() / 2);
|
||||
if (max_frames - xdelta > leftmost_frame) {
|
||||
reset_x_origin (leftmost_frame + xdelta);
|
||||
} else {
|
||||
reset_x_origin (max_frames - current_page_frames());
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* what? */
|
||||
break;
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
|
||||
gint
|
||||
Editor::ruler_button_press (GdkEventButton* ev)
|
||||
|
|
@ -621,11 +647,10 @@ Editor::update_ruler_visibility ()
|
|||
minsec_ruler->set_size_request (-1, (int)timebar_height);
|
||||
gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]);
|
||||
|
||||
|
||||
smpte_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
bbt_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
frames_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
minsec_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
smpte_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
|
||||
bbt_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
|
||||
frames_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
|
||||
minsec_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
|
||||
|
||||
smpte_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release));
|
||||
bbt_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release));
|
||||
|
|
@ -642,6 +667,11 @@ Editor::update_ruler_visibility ()
|
|||
frames_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
minsec_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion));
|
||||
|
||||
smpte_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll));
|
||||
bbt_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll));
|
||||
frames_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll));
|
||||
minsec_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll));
|
||||
|
||||
ruler_children.insert (canvaspos, Element(*_ruler_separator, PACK_SHRINK, PACK_START));
|
||||
|
||||
if (ruler_shown[ruler_metric_minsec]) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue