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_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*);
|
||||||
bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item *);
|
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_tempo_bar_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||||
bool canvas_meter_bar_event (GdkEvent* event, ArdourCanvas::Item*);
|
bool canvas_meter_bar_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||||
bool canvas_marker_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
|
bool
|
||||||
Editor::canvas_scroll_event (GdkEventScroll *event)
|
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();
|
_track_canvas->grab_focus();
|
||||||
return track_canvas_scroll (event);
|
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);
|
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
|
bool
|
||||||
Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
|
Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
|
||||||
{
|
{
|
||||||
|
|
|
@ -56,7 +56,11 @@ enum ItemType {
|
||||||
StartCrossFadeItem,
|
StartCrossFadeItem,
|
||||||
EndCrossFadeItem,
|
EndCrossFadeItem,
|
||||||
CrossfadeViewItem,
|
CrossfadeViewItem,
|
||||||
|
TimecodeRulerItem,
|
||||||
|
MinsecRulerItem,
|
||||||
|
BBTRulerItem,
|
||||||
|
SamplesRulerItem,
|
||||||
|
|
||||||
/* don't remove this */
|
/* don't remove this */
|
||||||
|
|
||||||
NoItem
|
NoItem
|
||||||
|
|
|
@ -164,10 +164,12 @@ Editor::initialize_rulers ()
|
||||||
lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START));
|
lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START));
|
||||||
lab_children.push_back (Element(videotl_label, PACK_SHRINK, PACK_START));
|
lab_children.push_back (Element(videotl_label, PACK_SHRINK, PACK_START));
|
||||||
|
|
||||||
// timecode_ruler->Event.connect (...);
|
/* 1 event handler to bind them all ... */
|
||||||
// samples_ruler->Event.connect (...);
|
|
||||||
// bbt_ruler->Event.connect (...);
|
timecode_ruler->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_event), timecode_ruler, TimecodeRulerItem));
|
||||||
// minsec_ruler->Event.connect (...);
|
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 */
|
visible_timebars = 0; /*this will be changed below */
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,5 +167,9 @@ setup_gtk_ardour_enums ()
|
||||||
REGISTER_ENUM (StartCrossFadeItem);
|
REGISTER_ENUM (StartCrossFadeItem);
|
||||||
REGISTER_ENUM (EndCrossFadeItem);
|
REGISTER_ENUM (EndCrossFadeItem);
|
||||||
REGISTER_ENUM (CrossfadeViewItem);
|
REGISTER_ENUM (CrossfadeViewItem);
|
||||||
|
REGISTER_ENUM (TimecodeRulerItem);
|
||||||
|
REGISTER_ENUM (MinsecRulerItem);
|
||||||
|
REGISTER_ENUM (BBTRulerItem);
|
||||||
|
REGISTER_ENUM (SamplesRulerItem);
|
||||||
REGISTER (item_type);
|
REGISTER (item_type);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user