add canvas rulers event dispatch and reinstate scrolling behaviour
This commit is contained in:
parent
590882f3c8
commit
ea355bfe15
@ -1413,6 +1413,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||
bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*);
|
||||
bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item *);
|
||||
|
||||
bool canvas_ruler_event (GdkEvent* event, ArdourCanvas::Item *, ItemType);
|
||||
bool canvas_tempo_bar_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool canvas_meter_bar_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool canvas_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
|
@ -162,6 +162,10 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
||||
bool
|
||||
Editor::canvas_scroll_event (GdkEventScroll *event)
|
||||
{
|
||||
if (h_scroll_group->covers (Duple (event->x, event->y))) {
|
||||
return canvas_ruler_event ((GdkEvent*) event, timecode_ruler, TimecodeRulerItem);
|
||||
}
|
||||
|
||||
_track_canvas->grab_focus();
|
||||
return track_canvas_scroll (event);
|
||||
}
|
||||
@ -979,6 +983,59 @@ Editor::canvas_meter_marker_event (GdkEvent *event, ArdourCanvas::Item* item, Me
|
||||
return typed_event (item, event, MeterMarkerItem);
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::canvas_ruler_event (GdkEvent *event, ArdourCanvas::Item* item, ItemType type)
|
||||
{
|
||||
framepos_t xdelta;
|
||||
bool handled = false;
|
||||
|
||||
if (event->type == GDK_SCROLL) {
|
||||
|
||||
/* scroll events in the rulers are handled a little differently from
|
||||
scrolling elsewhere in the canvas.
|
||||
*/
|
||||
|
||||
switch (event->scroll.direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
temporal_zoom_step (false);
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_DOWN:
|
||||
temporal_zoom_step (true);
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_LEFT:
|
||||
xdelta = (current_page_samples() / 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_samples() / 2);
|
||||
if (max_framepos - xdelta > leftmost_frame) {
|
||||
reset_x_origin (leftmost_frame + xdelta);
|
||||
} else {
|
||||
reset_x_origin (max_framepos - current_page_samples());
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* what? */
|
||||
break;
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
return typed_event (item, event, type);
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
|
||||
{
|
||||
|
@ -56,7 +56,11 @@ enum ItemType {
|
||||
StartCrossFadeItem,
|
||||
EndCrossFadeItem,
|
||||
CrossfadeViewItem,
|
||||
|
||||
TimecodeRulerItem,
|
||||
MinsecRulerItem,
|
||||
BBTRulerItem,
|
||||
SamplesRulerItem,
|
||||
|
||||
/* don't remove this */
|
||||
|
||||
NoItem
|
||||
|
@ -164,10 +164,12 @@ Editor::initialize_rulers ()
|
||||
lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START));
|
||||
lab_children.push_back (Element(videotl_label, PACK_SHRINK, PACK_START));
|
||||
|
||||
// timecode_ruler->Event.connect (...);
|
||||
// samples_ruler->Event.connect (...);
|
||||
// bbt_ruler->Event.connect (...);
|
||||
// minsec_ruler->Event.connect (...);
|
||||
/* 1 event handler to bind them all ... */
|
||||
|
||||
timecode_ruler->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_event), timecode_ruler, TimecodeRulerItem));
|
||||
minsec_ruler->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_event), minsec_ruler, MinsecRulerItem));
|
||||
bbt_ruler->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_event), bbt_ruler, BBTRulerItem));
|
||||
samples_ruler->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_event), samples_ruler, SamplesRulerItem));
|
||||
|
||||
visible_timebars = 0; /*this will be changed below */
|
||||
}
|
||||
|
@ -167,5 +167,9 @@ setup_gtk_ardour_enums ()
|
||||
REGISTER_ENUM (StartCrossFadeItem);
|
||||
REGISTER_ENUM (EndCrossFadeItem);
|
||||
REGISTER_ENUM (CrossfadeViewItem);
|
||||
REGISTER_ENUM (TimecodeRulerItem);
|
||||
REGISTER_ENUM (MinsecRulerItem);
|
||||
REGISTER_ENUM (BBTRulerItem);
|
||||
REGISTER_ENUM (SamplesRulerItem);
|
||||
REGISTER (item_type);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user