Some cleanups to ruler drags.
git-svn-id: svn://localhost/ardour2/branches/3.0@5185 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3f261ac90c
commit
b192de88b6
@ -696,7 +696,6 @@ class Editor : public PublicEditor
|
|||||||
gint ruler_mouse_motion (GdkEventMotion*);
|
gint ruler_mouse_motion (GdkEventMotion*);
|
||||||
bool ruler_scroll (GdkEventScroll* event);
|
bool ruler_scroll (GdkEventScroll* event);
|
||||||
|
|
||||||
gint ruler_pressed_button;
|
|
||||||
Gtk::Widget * ruler_grabbed_widget;
|
Gtk::Widget * ruler_grabbed_widget;
|
||||||
|
|
||||||
void initialize_rulers ();
|
void initialize_rulers ();
|
||||||
|
@ -602,6 +602,8 @@ Editor::autoscroll_canvas ()
|
|||||||
double new_pixel;
|
double new_pixel;
|
||||||
double target_pixel;
|
double target_pixel;
|
||||||
|
|
||||||
|
assert (_drag);
|
||||||
|
|
||||||
if (autoscroll_x_distance != 0) {
|
if (autoscroll_x_distance != 0) {
|
||||||
if (autoscroll_x > 0) {
|
if (autoscroll_x > 0) {
|
||||||
autoscroll_x_distance = (unit_to_frame (_drag->current_pointer_x()) - (leftmost_frame + current_page_frames())) / 3;
|
autoscroll_x_distance = (unit_to_frame (_drag->current_pointer_x()) - (leftmost_frame + current_page_frames())) / 3;
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "gtk-custom-hruler.h"
|
#include "gtk-custom-hruler.h"
|
||||||
#include "gui_thread.h"
|
#include "gui_thread.h"
|
||||||
#include "time_axis_view.h"
|
#include "time_axis_view.h"
|
||||||
|
#include "editor_drag.h"
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
@ -159,7 +160,6 @@ Editor::initialize_rulers ()
|
|||||||
minsec_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll));
|
minsec_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll));
|
||||||
|
|
||||||
visible_timebars = 0; /*this will be changed below */
|
visible_timebars = 0; /*this will be changed below */
|
||||||
ruler_pressed_button = 0;
|
|
||||||
canvas_timebars_vsize = 0;
|
canvas_timebars_vsize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,50 +217,37 @@ Editor::ruler_button_press (GdkEventButton* ev)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ruler_pressed_button = ev->button;
|
|
||||||
|
|
||||||
// jlc: grab ev->window ?
|
// jlc: grab ev->window ?
|
||||||
//Gtk::Main::grab_add (*minsec_ruler);
|
//Gtk::Main::grab_add (*minsec_ruler);
|
||||||
Widget * grab_widget = 0;
|
Widget * grab_widget = 0;
|
||||||
|
|
||||||
if (smpte_ruler->is_realized() && ev->window == smpte_ruler->get_window()->gobj()) grab_widget = smpte_ruler;
|
if (smpte_ruler->is_realized() && ev->window == smpte_ruler->get_window()->gobj()) {
|
||||||
else if (bbt_ruler->is_realized() && ev->window == bbt_ruler->get_window()->gobj()) grab_widget = bbt_ruler;
|
grab_widget = smpte_ruler;
|
||||||
else if (frames_ruler->is_realized() && ev->window == frames_ruler->get_window()->gobj()) grab_widget = frames_ruler;
|
} else if (bbt_ruler->is_realized() && ev->window == bbt_ruler->get_window()->gobj()) {
|
||||||
else if (minsec_ruler->is_realized() && ev->window == minsec_ruler->get_window()->gobj()) grab_widget = minsec_ruler;
|
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) {
|
if (grab_widget) {
|
||||||
grab_widget->add_modal_grab ();
|
grab_widget->add_modal_grab ();
|
||||||
ruler_grabbed_widget = grab_widget;
|
ruler_grabbed_widget = grab_widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint x,y;
|
if (ev->button == 1) {
|
||||||
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:
|
|
||||||
// Since we will locate the playhead on button release, cancel any running
|
// Since we will locate the playhead on button release, cancel any running
|
||||||
// auditions.
|
// auditions.
|
||||||
if (session->is_auditioning()) {
|
if (session->is_auditioning()) {
|
||||||
session->cancel_audition ();
|
session->cancel_audition ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* playhead cursor */
|
/* playhead cursor */
|
||||||
snap_to (where);
|
assert (_drag == 0);
|
||||||
playhead_cursor->set_position (where);
|
_drag = new CursorDrag (this, &playhead_cursor->canvas_item, false);
|
||||||
|
_drag->start_grab (reinterpret_cast<GdkEvent *> (ev));
|
||||||
_dragging_playhead = true;
|
_dragging_playhead = true;
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
/* edit point */
|
|
||||||
snap_to (where);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -269,46 +256,31 @@ Editor::ruler_button_press (GdkEventButton* ev)
|
|||||||
gint
|
gint
|
||||||
Editor::ruler_button_release (GdkEventButton* ev)
|
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) {
|
if (session == 0) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gint x,y;
|
||||||
|
Gdk::ModifierType state;
|
||||||
|
|
||||||
|
if (_drag) {
|
||||||
|
_drag->end_grab (reinterpret_cast<GdkEvent*> (ev));
|
||||||
|
delete _drag;
|
||||||
|
_drag = 0;
|
||||||
|
_dragging_playhead = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
stop_canvas_autoscroll();
|
stop_canvas_autoscroll();
|
||||||
|
|
||||||
nframes64_t where = leftmost_frame + pixel_to_frame (x);
|
nframes64_t where = leftmost_frame + pixel_to_frame (x);
|
||||||
|
|
||||||
switch (ev->button) {
|
|
||||||
case 1:
|
|
||||||
/* transport playhead */
|
|
||||||
_dragging_playhead = false;
|
|
||||||
snap_to (where);
|
|
||||||
session->request_locate (where);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
/* edit point */
|
|
||||||
snap_to (where);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
/* popup menu */
|
|
||||||
snap_to (where);
|
snap_to (where);
|
||||||
popup_ruler_menu (where);
|
popup_ruler_menu (where);
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ruler_grabbed_widget) {
|
if (ruler_grabbed_widget) {
|
||||||
ruler_grabbed_widget->remove_modal_grab();
|
ruler_grabbed_widget->remove_modal_grab();
|
||||||
ruler_grabbed_widget = 0;
|
ruler_grabbed_widget = 0;
|
||||||
@ -334,72 +306,12 @@ Editor::ruler_label_button_release (GdkEventButton* ev)
|
|||||||
gint
|
gint
|
||||||
Editor::ruler_mouse_motion (GdkEventMotion* ev)
|
Editor::ruler_mouse_motion (GdkEventMotion* ev)
|
||||||
{
|
{
|
||||||
if (session == 0 || !ruler_pressed_button) {
|
if (session == 0) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
double wcx=0,wcy=0;
|
if (_drag) {
|
||||||
double cx=0,cy=0;
|
_drag->motion_handler (reinterpret_cast<GdkEvent*> (ev), false);
|
||||||
|
|
||||||
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 (cursor) {
|
|
||||||
cursor->set_position (where);
|
|
||||||
|
|
||||||
if (cursor == playhead_cursor) {
|
|
||||||
UpdateAllTransportClocks (cursor->current_frame);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
Loading…
Reference in New Issue
Block a user