X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_keyboard.cc;h=e9082445c441b40e1bf69d4d2da2ba82b4cb0635;hb=4e4cb140a0713cabec624f13e86eaf9b375ab6c5;hp=782ddb6b85b49427718d97d18eff5200f9534f29;hpb=c38fdbc64c73c686f9f55729b352f8d0f4c09070;p=ardour.git diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc index 782ddb6b85..e9082445c4 100644 --- a/gtk2_ardour/editor_keyboard.cc +++ b/gtk2_ardour/editor_keyboard.cc @@ -15,31 +15,31 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include +#include +#include #include "editor.h" -#include "regionview.h" +#include "region_view.h" #include "selection.h" +#include "i18n.h" + void Editor::kbd_driver (sigc::slot theslot, bool use_track_canvas, bool use_time_canvas, bool can_select) { gint x, y; - double dx, dy; + double worldx, worldy; GdkEvent ev; - GdkModifierType mask; - GdkWindow evw (track_canvas->get_window().get_pointer (x, y, mask)); + Gdk::ModifierType mask; + Glib::RefPtr evw = track_canvas.get_window()->get_pointer (x, y, mask); bool doit = false; - if (use_track_canvas && gdk_window_get_pointer (track_canvas_event_box.get_window()->gobj(), - &x, &y, &mask)) { + if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask) != 0) { doit = true; - - } else if (use_time_canvas && gdk_window_get_pointer (time_canvas_event_box.get_window()->gobj(), - &x, &y, &mask)) { + } else if (use_time_canvas && time_canvas_event_box.get_window()->get_pointer(x, y, mask)!= 0) { doit = true; } @@ -49,11 +49,13 @@ Editor::kbd_driver (sigc::slot theslot, bool use_track_canvas, b selection->set (entered_regionview); } - gnome_canvas_window_to_world (GNOME_CANVAS(track_gnome_canvas), x, y, &dx, &dy); + track_canvas.window_to_world (x, y, worldx, worldy); + worldx += horizontal_adjustment.get_value(); + worldy += vertical_adjustment.get_value(); ev.type = GDK_BUTTON_PRESS; - ev.button.x = dx; - ev.button.y = dy; + ev.button.x = worldx; + ev.button.y = worldy; ev.button.state = 0; /* XXX correct? */ theslot (&ev); @@ -76,13 +78,13 @@ Editor::kbd_set_edit_cursor () void Editor::kbd_do_split (GdkEvent* ev) { - jack_nframes_t where = event_frame (ev); + nframes_t where = event_frame (ev); if (entered_regionview) { - if (selection->audio_regions.find (entered_regionview) != selection->audio_regions.end()) { - split_regions_at (where, selection->audio_regions); + if (selection->regions.contains (entered_regionview)) { + split_regions_at (where, selection->regions); } else { - AudioRegionSelection s; + RegionSelection s; s.add (entered_regionview); split_regions_at (where, s); } @@ -95,6 +97,38 @@ Editor::kbd_split () kbd_driver (mem_fun(*this, &Editor::kbd_do_split), true, true, false); } +void +Editor::kbd_mute_unmute_region () +{ + if (entered_regionview) { + begin_reversible_command (_("mute region")); + XMLNode &before = entered_regionview->region()->playlist()->get_state(); + + entered_regionview->region()->set_muted (!entered_regionview->region()->muted()); + + XMLNode &after = entered_regionview->region()->playlist()->get_state(); + session->add_command (new MementoCommand(*(entered_regionview->region()->playlist()), &before, &after)); + commit_reversible_command(); + } +} + +void +Editor::kbd_set_sync_position () +{ + kbd_driver (mem_fun(*this, &Editor::kbd_do_set_sync_position), true, true, false); +} + +void +Editor::kbd_do_set_sync_position (GdkEvent* ev) +{ + nframes_t where = event_frame (ev); + snap_to (where); + + if (entered_regionview) { + set_a_regions_sync_position (entered_regionview->region(), where); + } +} + void Editor::kbd_do_align (GdkEvent* ev, ARDOUR::RegionPoint what) {