X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mouse.cc;h=2733280dac6b4afe5b5ddd8c89b935aa2b26a451;hb=d08e3b94c5ef75ce5d4d28f3636faa8af4661e17;hp=a689553e6782af7738484ce23d8bf8cad87a3b3f;hpb=0a19ce6f1c8859f02920e14bf0cbef4e526a1f78;p=ardour.git diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index a689553e67..2733280dac 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -27,12 +27,14 @@ #include "pbd/error.h" #include "pbd/enumwriter.h" -#include -#include #include "pbd/memento_command.h" #include "pbd/basename.h" #include "pbd/stateful_diff_command.h" +#include "gtkmm2ext/bindings.h" +#include "gtkmm2ext/utils.h" +#include "gtkmm2ext/tearoff.h" + #include "ardour_ui.h" #include "actions.h" #include "canvas-note.h" @@ -74,6 +76,7 @@ #include "ardour/region_factory.h" #include "ardour/source_factory.h" #include "ardour/session.h" +#include "ardour/operations.h" #include @@ -377,9 +380,6 @@ Editor::mouse_mode_toggled (MouseMode m) show the object (region) selection. */ - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { - (*i)->set_should_show_selection (true); - } for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->hide_selection (); } @@ -735,9 +735,16 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT break; case RegionViewNameHighlight: + if (!clicked_regionview->region()->locked()) { + RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); + _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event); + return true; + } + break; + case LeftFrameHandle: case RightFrameHandle: - if (!clicked_regionview->region()->locked()) { + if (!internal_editing() && !clicked_regionview->region()->locked()) { RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event); return true; @@ -820,8 +827,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT /* click on a normal region view */ if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) { add_region_copy_drag (item, event, clicked_regionview); - } - else if (Keyboard::the_keyboard().key_is_down (GDK_b)) { + } else if (Keyboard::the_keyboard().key_is_down (GDK_b)) { add_region_brush_drag (item, event, clicked_regionview); } else { add_region_drag (item, event, clicked_regionview); @@ -837,7 +843,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT case RegionViewNameHighlight: case LeftFrameHandle: case RightFrameHandle: - if (!internal_editing () && !clicked_regionview->region()->locked()) { + if (!clicked_regionview->region()->locked()) { RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event); return true; @@ -1065,6 +1071,10 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT switch (item_type) { case RegionViewNameHighlight: + _drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event); + return true; + break; + case LeftFrameHandle: case RightFrameHandle: if (!internal_editing ()) { @@ -1092,7 +1102,7 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT case MouseZoom: if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) { - temporal_zoom_session(); + temporal_zoom_to_frame (false, event_frame (event)); } else { temporal_zoom_to_frame (true, event_frame(event)); } @@ -1160,6 +1170,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp break; default: + return button_press_dispatch (&event->button); break; } @@ -1167,6 +1178,26 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp return false; } +bool +Editor::button_press_dispatch (GdkEventButton* ev) +{ + /* this function is intended only for buttons 4 and above. + */ + + Gtkmm2ext::MouseButton b (ev->state, ev->button); + return button_bindings->activate (b, Gtkmm2ext::Bindings::Press); +} + +bool +Editor::button_release_dispatch (GdkEventButton* ev) +{ + /* this function is intended only for buttons 4 and above. + */ + + Gtkmm2ext::MouseButton b (ev->state, ev->button); + return button_bindings->activate (b, Gtkmm2ext::Bindings::Release); +} + bool Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) { @@ -1453,7 +1484,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT break; case MouseAudition: - set_canvas_cursor (current_canvas_cursor); + set_canvas_cursor (current_canvas_cursor); if (scrubbing_direction == 0) { /* no drag, just a click */ switch (item_type) { @@ -1580,7 +1611,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; case RegionViewNameHighlight: - if (is_drawable() && mouse_mode == MouseObject && !internal_editing() && entered_regionview) { + if (is_drawable() && mouse_mode == MouseObject && entered_regionview) { set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview); _over_region_trim_target = true; } @@ -1705,8 +1736,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; case FeatureLineItem: { - ArdourCanvas::SimpleLine *line = dynamic_cast (item); - line->property_color_rgba() = 0xFF0000FF; + ArdourCanvas::Line *line = dynamic_cast (item); + line->property_fill_color_rgba() = 0xFF0000FF; } break; case SelectionItem: @@ -1865,8 +1896,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; case FeatureLineItem: { - ArdourCanvas::SimpleLine *line = dynamic_cast (item); - line->property_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();; + ArdourCanvas::Line *line = dynamic_cast (item); + line->property_fill_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();; } break; @@ -1919,7 +1950,7 @@ Editor::scrub (framepos_t frame, double current_x) scrub_reverse_distance = 0; delta = 0.01 * (last_scrub_x - current_x); - _session->request_transport_speed (_session->transport_speed() - delta); + _session->request_transport_speed_nonzero (_session->transport_speed() - delta); } } else { @@ -1938,7 +1969,7 @@ Editor::scrub (framepos_t frame, double current_x) scrub_reverse_distance = 0; delta = 0.01 * (current_x - last_scrub_x); - _session->request_transport_speed (_session->transport_speed() + delta); + _session->request_transport_speed_nonzero (_session->transport_speed() + delta); } } @@ -2150,7 +2181,7 @@ Editor::show_verbose_time_cursor (framepos_t frame, double offset, double xpos, { char buf[128]; Timecode::Time timecode; - BBT_Time bbt; + Timecode::BBT_Time bbt; int hours, mins; framepos_t frame_rate; float secs; @@ -2207,8 +2238,8 @@ Editor::show_verbose_duration_cursor (framepos_t start, framepos_t end, double o { char buf[128]; Timecode::Time timecode; - BBT_Time sbbt; - BBT_Time ebbt; + Timecode::BBT_Time sbbt; + Timecode::BBT_Time ebbt; int hours, mins; framepos_t distance, frame_rate; float secs; @@ -2247,7 +2278,7 @@ Editor::show_verbose_duration_cursor (framepos_t start, framepos_t end, double o ebbt.ticks -= sbbt.ticks; } else { ebbt.beats--; - ebbt.ticks = int(Meter::ticks_per_beat) + ebbt.ticks - sbbt.ticks; + ebbt.ticks = int(Timecode::BBT_Time::ticks_per_beat) + ebbt.ticks - sbbt.ticks; } snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, ebbt.bars, ebbt.beats, ebbt.ticks); @@ -2468,7 +2499,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, framepos_t pos) double speed = rtv->track()->speed(); playlist->clear_changes (); - boost::shared_ptr new_region (RegionFactory::create (rv->region())); + boost::shared_ptr new_region (RegionFactory::create (rv->region(), true)); playlist->add_region (new_region, (framepos_t) (pos * speed)); _session->add_command (new StatefulDiffCommand (playlist)); @@ -2540,7 +2571,7 @@ Editor::add_region_brush_drag (ArdourCanvas::Item* item, GdkEvent* event, Region RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), true, false)); - begin_reversible_command (_("Drag region brush")); + begin_reversible_command (Operations::drag_region_brush); } /** Start a grab where a time range is selected, track(s) are selected, and the @@ -2581,7 +2612,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event) creating the new region and another for moving it. */ - begin_reversible_command (_("selection grab")); + begin_reversible_command (Operations::selection_grab); boost::shared_ptr playlist = clicked_axisview->playlist(); @@ -2627,10 +2658,9 @@ Editor::set_internal_edit (bool yn) ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Draw/Edit MIDI Notes")); mouse_mode_toggled (mouse_mode); - /* 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 (); + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + (*i)->enter_internal_edit_mode (); + } } else { @@ -2638,6 +2668,10 @@ Editor::set_internal_edit (bool yn) mouse_select_button.get_image ()->show (); ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Select/Move Ranges")); mouse_mode_toggled (mouse_mode); // sets cursor + + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + (*i)->leave_internal_edit_mode (); + } } }