diff options
author | Carl Hetherington <carl@carlh.net> | 2010-11-15 19:00:31 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-11-15 19:00:31 +0000 |
commit | f237b2e23b012e8dc00bd03a575267cf603087f4 (patch) | |
tree | d614360b782841e5e0b0f557f6df689df9e4d1ca /gtk2_ardour/editor_mouse.cc | |
parent | b21f4cab02a158d7cd580b51d02e8ae49c472316 (diff) |
Present trim cursors over region view name bar.
git-svn-id: svn://localhost/ardour2/branches/3.0@8041 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_mouse.cc')
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index a056b2dddc..5c7f03ec37 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1576,7 +1576,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case RegionViewNameHighlight: if (is_drawable() && mouse_mode == MouseObject && !internal_editing()) { - set_canvas_cursor (trimmer_cursor); + set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview); + _over_region_trim_target = true; } break; @@ -1636,7 +1637,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) { if (mouse_mode == MouseObject && is_drawable()) { - set_canvas_cursor (trimmer_cursor); + set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview); + _over_region_trim_target = true; } } break; @@ -1791,6 +1793,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case MarkerViewHandleEndItem: #endif + _over_region_trim_target = false; + if (is_drawable()) { set_canvas_cursor (current_canvas_cursor); } @@ -1811,6 +1815,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case RegionViewName: /* see enter_handler() for notes */ + _over_region_trim_target = false; + if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) { if (is_drawable() && mouse_mode == MouseObject) { set_canvas_cursor (current_canvas_cursor); @@ -2007,6 +2013,10 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from set_canvas_cursor (); } + if (_over_region_trim_target) { + set_canvas_cursor_for_region_view (event->motion.x, entered_regionview); + } + bool handled = false; if (_drags->active ()) { handled = _drags->motion_handler (event, from_autoscroll); @@ -2704,3 +2714,25 @@ Editor::remove_midi_note (ArdourCanvas::Item* item, GdkEvent *) e->region_view().delete_note (e->note ()); } + +void +Editor::set_canvas_cursor_for_region_view (double x, RegionView* rv) +{ + ArdourCanvas::Group* g = rv->get_canvas_group (); + ArdourCanvas::Group* p = g->get_parent_group (); + + /* Compute x in region view parent coordinates */ + double dy = 0; + p->w2i (x, dy); + + double x1, x2, y1, y2; + g->get_bounds (x1, y1, x2, y2); + + double const h = (x1 + x2) / 2; + + if (x1 < x && x <= h) { + set_canvas_cursor (left_side_trim_cursor); + } else if (h < x && x <= x2) { + set_canvas_cursor (right_side_trim_cursor); + } +} |