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 | |
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')
-rw-r--r-- | gtk2_ardour/editor.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 36 | ||||
-rw-r--r-- | gtk2_ardour/region_view.cc | 11 |
4 files changed, 50 insertions, 2 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index b86fa6a779..8f954895df 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -750,6 +750,7 @@ Editor::Editor () _popup_region_menu_item = 0; _show_marker_lines = false; + _over_region_trim_target = false; constructed = true; instant_save (); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 2b08569220..10a6b57e34 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1430,6 +1430,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD friend class EditorRegions; ArdourCanvas::Item *last_item_entered; + /** true if the mouse is over a place where region trim can happen */ + bool _over_region_trim_target; /* non-public event handlers */ @@ -2097,6 +2099,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::MenuItem& action_menu_item (std::string const &); void action_pre_activated (Glib::RefPtr<Gtk::Action> const &); + void set_canvas_cursor_for_region_view (double, RegionView *); + friend class Drag; friend class RegionDrag; friend class RegionMoveDrag; 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); + } +} diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index 755281a119..9601c69318 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -679,8 +679,19 @@ RegionView::update_coverage_frames (LayerDisplay d) if (frame_handle_start) { frame_handle_start->raise_to_top (); + } + + if (frame_handle_end) { frame_handle_end->raise_to_top (); } + + if (name_highlight) { + name_highlight->raise_to_top (); + } + + if (name_pixbuf) { + name_pixbuf->raise_to_top (); + } } void |