X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_rulers.cc;h=c37d7d68d1cfffe804f2de14dd20c05c3177f1c6;hb=3162ffb4f418d85088d53d5e0a4a5d6ce7235e04;hp=5dfbb2a039774903814be5f93ac5f16151f0ff90;hpb=804da5653127aaedda057d3c683be5817f335fef;p=ardour.git diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 5dfbb2a039..c37d7d68d1 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -34,6 +34,7 @@ #include "gtk-custom-hruler.h" #include "gui_thread.h" #include "time_axis_view.h" +#include "editor_drag.h" #include "i18n.h" @@ -159,7 +160,6 @@ Editor::initialize_rulers () minsec_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); visible_timebars = 0; /*this will be changed below */ - ruler_pressed_button = 0; canvas_timebars_vsize = 0; } @@ -217,50 +217,37 @@ Editor::ruler_button_press (GdkEventButton* ev) return FALSE; } - ruler_pressed_button = ev->button; - // jlc: grab ev->window ? //Gtk::Main::grab_add (*minsec_ruler); Widget * grab_widget = 0; - if (smpte_ruler->is_realized() && ev->window == smpte_ruler->get_window()->gobj()) grab_widget = smpte_ruler; - else if (bbt_ruler->is_realized() && ev->window == bbt_ruler->get_window()->gobj()) grab_widget = bbt_ruler; - else if (frames_ruler->is_realized() && ev->window == frames_ruler->get_window()->gobj()) grab_widget = frames_ruler; - else if (minsec_ruler->is_realized() && ev->window == minsec_ruler->get_window()->gobj()) grab_widget = minsec_ruler; + if (smpte_ruler->is_realized() && ev->window == smpte_ruler->get_window()->gobj()) { + grab_widget = smpte_ruler; + } else if (bbt_ruler->is_realized() && ev->window == bbt_ruler->get_window()->gobj()) { + grab_widget = bbt_ruler; + } else if (frames_ruler->is_realized() && ev->window == frames_ruler->get_window()->gobj()) { + grab_widget = frames_ruler; + } else if (minsec_ruler->is_realized() && ev->window == minsec_ruler->get_window()->gobj()) { + grab_widget = minsec_ruler; + } if (grab_widget) { grab_widget->add_modal_grab (); ruler_grabbed_widget = grab_widget; } - gint x,y; - Gdk::ModifierType state; - - /* need to use the correct x,y, the event lies */ - time_canvas_event_box.get_window()->get_pointer (x, y, state); - - nframes64_t where = leftmost_frame + pixel_to_frame (x); - - switch (ev->button) { - case 1: + if (ev->button == 1) { // Since we will locate the playhead on button release, cancel any running // auditions. if (session->is_auditioning()) { session->cancel_audition (); } + /* playhead cursor */ - snap_to (where); - playhead_cursor->set_position (where); + assert (_drag == 0); + _drag = new CursorDrag (this, &playhead_cursor->canvas_item, false); + _drag->start_grab (reinterpret_cast (ev)); _dragging_playhead = true; - break; - - case 2: - /* edit point */ - snap_to (where); - break; - - default: - break; } return TRUE; @@ -269,46 +256,31 @@ Editor::ruler_button_press (GdkEventButton* ev) gint Editor::ruler_button_release (GdkEventButton* ev) { - gint x,y; - Gdk::ModifierType state; - - /* need to use the correct x,y, the event lies */ - time_canvas_event_box.get_window()->get_pointer (x, y, state); - - ruler_pressed_button = 0; - if (session == 0) { return FALSE; } - - stop_canvas_autoscroll(); - nframes64_t where = leftmost_frame + pixel_to_frame (x); + gint x,y; + Gdk::ModifierType state; - switch (ev->button) { - case 1: - /* transport playhead */ + if (_drag) { + _drag->end_grab (reinterpret_cast (ev)); + delete _drag; + _drag = 0; _dragging_playhead = false; - snap_to (where); - session->request_locate (where); - break; + } - case 2: - /* edit point */ - snap_to (where); - break; + if (ev->button == 3) { + /* need to use the correct x,y, the event lies */ + time_canvas_event_box.get_window()->get_pointer (x, y, state); - case 3: - /* popup menu */ + stop_canvas_autoscroll(); + + nframes64_t where = leftmost_frame + pixel_to_frame (x); snap_to (where); popup_ruler_menu (where); - - break; - default: - break; } - if (ruler_grabbed_widget) { ruler_grabbed_widget->remove_modal_grab(); ruler_grabbed_widget = 0; @@ -334,74 +306,14 @@ Editor::ruler_label_button_release (GdkEventButton* ev) gint Editor::ruler_mouse_motion (GdkEventMotion* ev) { - if (session == 0 || !ruler_pressed_button) { + if (session == 0) { return FALSE; } - double wcx=0,wcy=0; - double cx=0,cy=0; - - gint x,y; - Gdk::ModifierType state; - - /* need to use the correct x,y, the event lies */ - time_canvas_event_box.get_window()->get_pointer (x, y, state); - - - track_canvas->c2w (x, y, wcx, wcy); - track_canvas->w2c (wcx, wcy, cx, cy); - - nframes64_t where = leftmost_frame + pixel_to_frame (x); - - /// ripped from maybe_autoscroll, and adapted to work here - nframes64_t rightmost_frame = leftmost_frame + current_page_frames (); - - jack_nframes_t frame = pixel_to_frame (cx); - - if (autoscroll_timeout_tag < 0) { - if (frame > rightmost_frame) { - if (rightmost_frame < max_frames) { - start_canvas_autoscroll (1, 0); - } - } else if (frame < leftmost_frame) { - if (leftmost_frame > 0) { - start_canvas_autoscroll (-1, 0); - } - } - } else { - if (frame >= leftmost_frame && frame < rightmost_frame) { - stop_canvas_autoscroll (); - } - } - ////// - - snap_to (where); - - EditorCursor* cursor = 0; - - switch (ruler_pressed_button) { - case 1: - /* transport playhead */ - cursor = playhead_cursor; - break; - - case 2: - /* edit point */ - // EDIT CURSOR XXX do something useful - break; - - default: - break; + if (_drag) { + _drag->motion_handler (reinterpret_cast (ev), false); } - if (cursor) { - cursor->set_position (where); - - if (cursor == playhead_cursor) { - UpdateAllTransportClocks (cursor->current_frame); - } - } - return TRUE; } @@ -1065,7 +977,7 @@ Editor::set_smpte_ruler_scale (gdouble lower, gdouble upper) } gint -Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars) +Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) { nframes_t pos; nframes64_t spacer; @@ -1308,7 +1220,7 @@ Editor::compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper) } gint -Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars) +Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) { if (session == 0) { return 0; @@ -1780,7 +1692,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper } gint -Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars) +Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint /*maxchars*/) { nframes64_t mark_interval; nframes64_t pos; @@ -1944,7 +1856,7 @@ Editor::set_minsec_ruler_scale (gdouble lower, gdouble upper) } gint -Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars) +Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) { nframes64_t pos; nframes64_t spacer;