summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-07-07 07:05:27 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-07-07 07:05:44 -0400
commit779fe6c08291a2c041ec9558c5351c23de576238 (patch)
treef65bef43069a5453a4503df3e4c9d2cd5db4d0b4 /gtk2_ardour
parent7ec397c0198674de782bfac083e59e3dc8390eb7 (diff)
add functionality for cut tool
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.h9
-rw-r--r--gtk2_ardour/editor_drag.cc21
-rw-r--r--gtk2_ardour/editor_drag.h10
-rw-r--r--gtk2_ardour/editor_keys.cc2
-rw-r--r--gtk2_ardour/editor_mouse.cc19
-rw-r--r--gtk2_ardour/public_editor.h1
6 files changed, 56 insertions, 6 deletions
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 3875c4d0b8..eca9714b01 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -470,6 +470,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void metric_get_samples (std::vector<ArdourCanvas::Ruler::Mark>&, gdouble, gdouble, gint);
void metric_get_minsec (std::vector<ArdourCanvas::Ruler::Mark>&, gdouble, gdouble, gint);
+ /* editing operations that need to be public */
+ void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false);
+ void split_region ();
+ void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
+
protected:
void map_transport_state ();
void map_position_change (framepos_t);
@@ -625,7 +630,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void hide_marker (ArdourCanvas::Item*, GdkEvent*);
void clear_marker_display ();
- void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false);
void mouse_add_new_range (framepos_t);
bool choose_new_marker_name(std::string &name);
void update_cd_marker_display ();
@@ -1135,7 +1139,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void lower_region_to_bottom ();
void split_regions_at (framepos_t, RegionSelection&);
void split_region_at_transients ();
- void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
void crop_region_to_selection ();
void crop_region_to (framepos_t start, framepos_t end);
void set_sync_point (framepos_t, const RegionSelection&);
@@ -1187,8 +1190,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void reset_focus ();
- void split_region ();
-
void delete_ ();
void cut ();
void copy ();
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index f852981487..ca41fa35ce 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -5447,3 +5447,24 @@ CrossfadeEdgeDrag::aborted (bool)
}
}
+RegionCutDrag::RegionCutDrag (Editor* e, ArdourCanvas::Item* item)
+ : Drag (e, item, true)
+{
+
+}
+
+void
+RegionCutDrag::motion (GdkEvent*, bool)
+{
+}
+
+void
+RegionCutDrag::finished (GdkEvent*, bool)
+{
+ _editor->split_region ();
+}
+
+void
+RegionCutDrag::aborted (bool)
+{
+}
diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h
index d9eda5685a..b704b0f357 100644
--- a/gtk2_ardour/editor_drag.h
+++ b/gtk2_ardour/editor_drag.h
@@ -440,6 +440,16 @@ private:
};
+/** "Drag" to cut a region (action only on button release) */
+class RegionCutDrag : public Drag
+{
+ public:
+ RegionCutDrag (Editor*, ArdourCanvas::Item*);
+ void motion (GdkEvent*, bool);
+ void finished (GdkEvent*, bool);
+ void aborted (bool);
+};
+
/** Drags to create regions */
class RegionCreateDrag : public Drag
{
diff --git a/gtk2_ardour/editor_keys.cc b/gtk2_ardour/editor_keys.cc
index 34847bbfe4..2acc8a0a86 100644
--- a/gtk2_ardour/editor_keys.cc
+++ b/gtk2_ardour/editor_keys.cc
@@ -40,7 +40,7 @@ using namespace PBD;
using namespace Editing;
void
-Editor::keyboard_selection_finish (bool add)
+Editor::keyboard_selection_finish (bool /*add*/)
{
if (_session) {
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 9586b9f8e1..b4050f45b6 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -240,7 +240,7 @@ Editor::set_mouse_mode (MouseMode m, bool force)
break;
case MouseCut:
- act = ActionManager::get_action (X_("MouseCut"), X_("set-mouse-mode-cut"));
+ act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-cut"));
break;
case MouseObject:
@@ -854,6 +854,23 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
}
break;
+ case MouseCut:
+ switch (item_type) {
+ case RegionItem:
+ case FadeInHandleItem:
+ case FadeOutHandleItem:
+ case LeftFrameHandle:
+ case RightFrameHandle:
+ case FeatureLineItem:
+ case RegionViewNameHighlight:
+ case RegionViewName:
+ _drags->set (new RegionCutDrag (this, item), event, current_canvas_cursor);
+ break;
+ default:
+ break;
+ }
+ break;
+
case MouseObject:
switch (item_type) {
case NoteItem:
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 722f5e2f2b..fe34289c40 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -295,6 +295,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual void update_tearoff_visibility () = 0;
virtual framepos_t get_preferred_edit_position (bool ignore_playhead = false, bool from_context_menu = false) = 0;
virtual void toggle_meter_updating() = 0;
+ virtual void split_region () = 0;
virtual void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false) = 0;
virtual void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false) = 0;
virtual void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>) = 0;