diff options
author | Carl Hetherington <carl@carlh.net> | 2010-07-09 00:57:22 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-07-09 00:57:22 +0000 |
commit | 01c78d5620bc08e0c101415ef1f34ed856d9a41f (patch) | |
tree | 81d56bbba2b825c96701a9be84597d460ee7e03e | |
parent | 4dc475776deb5e1074977d767099471919c0ddfc (diff) |
Give internal edit mode its own cursor. Deselect everything when entering internal edit, and don't allow region selection during internal edit.
git-svn-id: svn://localhost/ardour2/branches/3.0@7396 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/editor.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 22 |
3 files changed, 24 insertions, 10 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index e11029589d..d1260011ef 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -215,6 +215,7 @@ Gdk::Cursor* Editor::right_side_trim_cursor = 0; Gdk::Cursor* Editor::fade_in_cursor = 0; Gdk::Cursor* Editor::fade_out_cursor = 0; Gdk::Cursor* Editor::grabber_cursor = 0; +Gdk::Cursor* Editor::grabber_note_cursor = 0; Gdk::Cursor* Editor::grabber_edit_point_cursor = 0; Gdk::Cursor* Editor::zoom_cursor = 0; Gdk::Cursor* Editor::time_fx_cursor = 0; @@ -1238,6 +1239,11 @@ Editor::build_cursors () grabber_cursor = new Gdk::Cursor (HAND2); { + Glib::RefPtr<Gdk::Pixbuf> grabber_note_pixbuf (::get_icon ("grabber_note")); + grabber_note_cursor = new Gdk::Cursor (Gdk::Display::get_default(), grabber_note_pixbuf, 5, 10); + } + + { Glib::RefPtr<Gdk::Pixbuf> grabber_edit_point_pixbuf (::get_icon ("grabber_edit_point")); grabber_edit_point_cursor = new Gdk::Cursor (Gdk::Display::get_default(), grabber_edit_point_pixbuf, 5, 17); } @@ -1505,7 +1511,10 @@ Editor::build_track_region_context_menu (nframes64_t frame) boost::shared_ptr<Track> tr; boost::shared_ptr<Playlist> pl; - if ((tr = rtv->track()) && ((pl = tr->playlist()))) { + /* Don't offer a region submenu if we are in internal edit mode, as we don't select regions in this + mode and so offering region context is somewhat confusing. + */ + if ((tr = rtv->track()) && ((pl = tr->playlist())) && !internal_editing()) { Playlist::RegionList* regions = pl->regions_at ((nframes64_t) floor ( (double)frame * tr->speed())); if (selection->regions.size() > 1) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 44e7289f6d..57d648be4c 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -464,6 +464,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD static Gdk::Cursor* fade_out_cursor; static Gdk::Cursor* selector_cursor; static Gdk::Cursor* grabber_cursor; + static Gdk::Cursor* grabber_note_cursor; static Gdk::Cursor* grabber_edit_point_cursor; static Gdk::Cursor* zoom_cursor; static Gdk::Cursor* time_fx_cursor; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 68d9230028..378a8ecf32 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -177,7 +177,7 @@ Editor::which_grabber_cursor () break; case MouseObject: - c = grabber_cursor; + c = grabber_note_cursor; break; case MouseTimeFX: @@ -427,6 +427,10 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp region alignment. note: not dbl-click or triple-click + + Also note that there is no region selection in internal edit mode, otherwise + for operations operating on the selection (e.g. cut) it is not obvious whether + to cut notes or regions. */ if (((mouse_mode != MouseObject) && @@ -435,8 +439,8 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp (mouse_mode != MouseTimeFX || item_type != RegionItem) && (mouse_mode != MouseGain) && (mouse_mode != MouseRange)) || - - ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) { + ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3) || + internal_editing()) { return; } @@ -460,7 +464,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp switch (item_type) { case RegionItem: - if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { + if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { set_selected_regionview_from_click (press, op, true); } else if (event->type == GDK_BUTTON_PRESS) { selection->clear_tracks (); @@ -469,14 +473,13 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) { clicked_selection = select_range_around_region (selection->regions.front()); } - break; case RegionViewNameHighlight: case RegionViewName: case LeftFrameHandle: case RightFrameHandle: - if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { + if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { set_selected_regionview_from_click (press, op, true); } else if (event->type == GDK_BUTTON_PRESS) { set_selected_track_as_side_effect (); @@ -2662,9 +2665,10 @@ Editor::set_internal_edit (bool yn) } } - for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { - (*i)->hide_selection (); - } + /* deselect everything to avoid confusion when e.g. we can't now cut a previously selected + region because cut means "cut note" rather than "cut region". + */ + selection->clear (); start_step_editing (); set_canvas_cursor (); |