diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index e49b936448..8069785d14 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -193,8 +193,10 @@ Editor::initialize_canvas () mapping_cursor->set_fill (false); mapping_cursor->set_outline (true); mapping_cursor->set_outline_color (0xff0000ff); - mapping_cursor->set_radius (timebar_height); + mapping_cursor->set_radius (timebar_height/2); mapping_cursor->set_arc (360); + mapping_cursor->set_ignore_events (true); + mapping_cursor->set_center (ArdourCanvas::Duple (35., timebar_height/2.0)); // x is arbitrary at this time mapping_cursor->hide (); range_marker_bar = new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); @@ -257,7 +259,7 @@ Editor::initialize_canvas () transport_punchout_line->hide(); tempo_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), tempo_bar, TempoBarItem, "tempo bar")); - mapping_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), tempo_bar, MappingBarItem, "mapping bar")); + mapping_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), mapping_bar, MappingBarItem, "mapping bar")); meter_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), meter_bar, MeterBarItem, "meter bar")); marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), marker_bar, MarkerBarItem, "marker bar")); cd_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), cd_marker_bar, CdMarkerBarItem, "cd marker bar")); diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index c305ab4a28..66923f875a 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -1072,18 +1072,18 @@ Editor::canvas_ruler_bar_event (GdkEvent *event, ArdourCanvas::Item* item, ItemT /* XXX consolidate with Editor::canvas_ruler_event ? */ switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - item->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod (color_name, "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - item->set_fill_color (UIConfiguration::instance().color_mod (color_name, "marker bar")); - } - break; - default: - break; + case GDK_ENTER_NOTIFY: + if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { + item->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod (color_name, "marker bar")).lighter(0.20).color()); + } + break; + case GDK_LEAVE_NOTIFY: + if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { + item->set_fill_color (UIConfiguration::instance().color_mod (color_name, "marker bar")); + } + break; + default: + break; }; return typed_event (item, event, type); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index e1780e6f8f..15074dd26e 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1987,6 +1987,10 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ choose_canvas_cursor_on_entry (item_type); switch (item_type) { + case MappingBarItem: + mapping_cursor->show (); + break; + case ControlPointItem: if (mouse_mode == MouseDraw || mouse_mode == MouseObject || mouse_mode == MouseContent) { cp = static_cast(item->get_data ("control_point")); @@ -2132,6 +2136,10 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type) } switch (item_type) { + case MappingBarItem: + mapping_cursor->hide (); + break; + case ControlPointItem: _verbose_cursor->hide (); break; @@ -2280,7 +2288,7 @@ Editor::scrub (samplepos_t sample, double current_x) } bool -Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from_autoscroll) +Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, bool from_autoscroll) { _last_motion_y = event->motion.y; @@ -2334,6 +2342,11 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from timepos_t t (where); snap_to_with_modifier (t, event); set_snapped_cursor_position (t); + + if (item == mapping_bar) { + double const new_pos = sample_to_pixel_unrounded (where); + mapping_cursor->set_center (ArdourCanvas::Duple (new_pos, mapping_cursor->center().y)); + } } if (!peaks_visible) {