[Summary] Refactored CUT tool

[Details] CUT tool will be activated only above region. Otherwise (above empty canvas) it will perform like ObjectTool
[Reviewed by QA] IMaximenko
This commit is contained in:
GZharun 2015-02-15 20:31:34 +02:00
parent 11e2381924
commit 4bbfb3b324
4 changed files with 52 additions and 19 deletions

View file

@ -885,7 +885,18 @@ Editor::set_entered_regionview (RegionView* rv)
if (entered_regionview != 0) {
entered_regionview->entered (internal_editing ());
}
if (mouse_mode == MouseCut) {
Gdk::Cursor* cursor = which_mode_cursor ();
set_canvas_cursor (cursor);
}
} else {
if (mouse_mode == MouseCut) {
Gdk::Cursor* cursor = which_mode_cursor ();
set_canvas_cursor (cursor);
}
}
if (!_all_region_actions_sensitized && _last_region_menu_was_main) {
/* This RegionView entry might have changed what region actions
@ -4839,12 +4850,12 @@ Editor::get_regions_from_selection_and_mouse (framepos_t pos)
{
RegionSelection regions;
regions = selection->regions;
if (entered_regionview ) {
regions.add (entered_regionview);
if (selection->selected (entered_regionview) ) {
regions = selection->regions;
}
regions.add (entered_regionview);
// Greg Zharun: Waves Tracks PRD does not say this.
// So let's skip this.
//if ( regions.empty() ) {

View file

@ -1223,9 +1223,13 @@ Editor::which_mode_cursor () const
break;
case MouseCut:
mode_cursor = _cursors->scissors;
break;
if (entered_regionview) {
mode_cursor = _cursors->scissors;
} else {
mode_cursor = which_grabber_cursor();
}
break;
case MouseObject:
/* don't use mode cursor, pick a grabber cursor based on the item */
break;

View file

@ -5752,6 +5752,9 @@ RegionCutDrag::finished (GdkEvent*, bool)
return;
}
// clear selection before cutting
_editor->get_selection().clear_regions();
_editor->split_regions_at (pos, rs);
}

View file

@ -926,16 +926,31 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case RegionItem:
case FadeInHandleItem:
case FadeOutHandleItem:
case LeftFrameHandle:
case RightFrameHandle:
case FeatureLineItem:
case RegionViewNameHighlight:
case RegionViewName:
case StreamItem:
case AutomationTrackItem:
_drags->set (new RegionCutDrag (this, item, canvas_event_sample (event)), event, current_canvas_cursor);
if (entered_regionview) {
_drags->set (new RegionCutDrag (this, item, canvas_event_sample (event)), event, current_canvas_cursor);
}
return true;
break;
case StreamItem:
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::PrimaryModifier) &&
!Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier) ) {
selection->clear_regions();
selection->clear_time ();
selection->clear_points ();
selection->clear_lines ();
}
_drags->set (new EditorRubberbandSelectDrag (this, item), event);
break;
case LeftFrameHandle:
case RightFrameHandle:
case FeatureLineItem:
case AutomationTrackItem:
default:
break;
}
@ -1898,7 +1913,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case SelectionItem:
break;
default:
break;
}
@ -1962,9 +1977,9 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
if (rect) {
rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_InactiveFadeHandle());
}
}
break;
}
break;
case AutomationTrackItem:
break;