return -1;
}
-
void TrackCanvas::draw(int mode, int hide_cursor)
{
const int debug = 0;
case Autos::AUTOMATION_TYPE_FLOAT: {
Automation automation(0, track);
int grouptype = automation.autogrouptype(i, track);
+ if( buttonpress && i == AUTOMATION_SPEED ) {
+ mwindow->speed_before();
+ }
+
if(draw) // Do dropshadow
result = do_float_autos(track, autos,
cursor_x, cursor_y, draw,
buttonpress, 1, 1, MDGREY,
auto_keyframe, grouptype);
-
result = do_float_autos(track, autos,
cursor_x, cursor_y, draw, buttonpress,
0, 0, GWindowGUI::auto_colors[i],
auto_keyframe, grouptype);
+
+ if( !result && buttonpress && i == AUTOMATION_SPEED )
+ mwindow->speed_after(-1);
+ int current_grouptype = mwindow->edl->local_session->zoombar_showautotype;
+ if( result && buttonpress && grouptype != current_grouptype ) {
+ mwindow->edl->local_session->zoombar_showautotype = grouptype;
+ mwindow->gui->zoombar->update_autozoom();
+ }
break; }
case Autos::AUTOMATION_TYPE_INT: {
-int TrackCanvas::cursor_motion_event()
+int TrackCanvas::cursor_update(int in_motion)
{
int result = 0;
int cursor_x = 0;
int new_cursor = 0;
int rerender = 0;
double position = 0.;
-//printf("TrackCanvas::cursor_motion_event %d\n", __LINE__);
+//printf("TrackCanvas::cursor_update %d\n", __LINE__);
// Default cursor
switch(mwindow->edl->session->editing_mode)
case DRAG_PROJECTOR_Z:
if(active) rerender = update_overlay =
update_drag_floatauto(get_cursor_x(), get_cursor_y());
+ if( rerender && mwindow->session->current_operation == DRAG_SPEED )
+ mwindow->speed_after(!in_motion ? 1 : 0);
break;
case DRAG_PLAY:
position = mwindow->edl->align_to_frame(position, 0);
position = MAX(position, 0);
+ double start = mwindow->edl->local_session->get_selectionstart(1);
+ double end = mwindow->edl->local_session->get_selectionend(1);
if(position < selection_midpoint) {
mwindow->edl->local_session->set_selectionend(selection_midpoint);
mwindow->edl->local_session->set_selectionstart(position);
- // Que the CWindow
- gui->unlock_window();
- mwindow->cwindow->update(1, 0, 0, 0, 1);
- gui->lock_window("TrackCanvas::cursor_motion_event 1");
- // Update the faders
- mwindow->update_plugin_guis();
- gui->update_patchbay();
}
else {
mwindow->edl->local_session->set_selectionstart(selection_midpoint);
mwindow->edl->local_session->set_selectionend(position);
- // Don't que the CWindow
}
+ // Que the CWindow
+ gui->unlock_window();
+ int dir =
+ start != mwindow->edl->local_session->get_selectionstart(1) ? 1 :
+ end != mwindow->edl->local_session->get_selectionend(1) ? -1 : 0;
+ mwindow->cwindow->update(dir, 0, 0, 0, 1);
+ gui->lock_window("TrackCanvas::cursor_update 1");
+ // Update the faders
+ mwindow->update_plugin_guis();
+ gui->update_patchbay();
timebar_position = mwindow->edl->local_session->get_selectionend(1);
for(int i = 0; i < TOTAL_PANES; i++)
if(gui->pane[i]) gui->pane[i]->canvas->timebar_position = position;
-//printf("TrackCanvas::cursor_motion_event %d %d %p %p\n", __LINE__, pane->number, pane, pane->timebar);
+//printf("TrackCanvas::cursor_update %d %d %p %p\n", __LINE__, pane->number, pane, pane->timebar);
gui->update_timebar(0);
// Update cursor
if(do_transitions(get_cursor_x(), get_cursor_y(),
break;
}
-//printf("TrackCanvas::cursor_motion_event 1\n");
+//printf("TrackCanvas::cursor_update 1\n");
if(update_cursor && new_cursor != get_cursor())
{
set_cursor(new_cursor, 0, 1);
}
-//printf("TrackCanvas::cursor_motion_event 1 %d\n", rerender);
+//printf("TrackCanvas::cursor_update 1 %d\n", rerender);
if(rerender && render_timer->get_difference() > 0.25 ) {
render_timer->update();
mwindow->restart_brender();
mwindow->update_plugin_guis();
gui->unlock_window();
mwindow->cwindow->update(1, 0, 0, 0, 1);
- gui->lock_window("TrackCanvas::cursor_motion_event 2");
+ gui->lock_window("TrackCanvas::cursor_update 2");
}
if(rerender) {
// Update faders
gui->draw_overlays(1);
}
-//printf("TrackCanvas::cursor_motion_event %d\n", __LINE__);
+//printf("TrackCanvas::cursor_update %d\n", __LINE__);
return result;
}
+int TrackCanvas::cursor_motion_event()
+{
+ return cursor_update(1);
+}
+
void TrackCanvas::start_dragscroll()
{
if(!drag_scroll) {
int TrackCanvas::button_release_event()
{
- int redraw = 0, update_overlay = 0, result = 0;
+ int redraw = -1, update_overlay = 0;
+ int result = 0, load_flags = 0;
// printf("TrackCanvas::button_release_event %d\n",
// mwindow->session->current_operation);
result = 1;
break;
- case DRAG_FADE:
case DRAG_SPEED:
+ redraw = FORCE_REDRAW;
+ load_flags |= LOAD_EDITS;
+ case DRAG_FADE:
// delete the drag_auto_gang first and remove out of order keys
synchronize_autos(0, 0, 0, -1);
case DRAG_CZOOM:
case DRAG_PROJECTOR_Y:
case DRAG_PROJECTOR_Z:
case DRAG_PLUGINKEY:
+ load_flags |= LOAD_AUTOMATION;
mwindow->session->current_operation = NO_OPERATION;
mwindow->session->drag_handle = 0;
// Remove any out-of-order keyframe
update_overlay = 1;
}
-
- mwindow->undo->update_undo_after(_("keyframe"), LOAD_AUTOMATION);
+ mwindow->undo->update_undo_after(_("keyframe"), load_flags);
result = 1;
break;
}
if (result)
- cursor_motion_event();
+ cursor_update(0);
if(update_overlay) {
gui->draw_overlays(1);
}
- if(redraw) {
- gui->draw_canvas(NORMAL_DRAW, 0);
+ if(redraw >= 0) {
+ gui->draw_canvas(redraw, 0);
+ gui->flash_canvas(1);
}
return result;
}
int64_t track_x, track_y, track_w, track_h;
track_dimensions(track, track_x, track_y, track_w, track_h);
- if(button_press && get_buttonpress() == RIGHT_BUTTON &&
- cursor_y >= track_y && cursor_y < track_y + track_h) {
- gui->edit_menu->update(track, 0);
+ if( button_press && get_buttonpress() == RIGHT_BUTTON &&
+ cursor_y >= track_y && cursor_y < track_y + track_h) {
+ double pos = mwindow->edl->get_cursor_position(cursor_x, pane->number);
+ int64_t position = track->to_units(pos, 0);
+ gui->edit_menu->update(track, track->edits->editof(position, PLAY_FORWARD, 0));
gui->edit_menu->activate_menu();
result = 1;
}
mwindow->session->trim_edits = 0;
if(is_event_win() && cursor_inside()) {
-// double position = (double)cursor_x *
-// mwindow->edl->local_session->zoom_sample /
-// mwindow->edl->session->sample_rate +
-// (double)mwindow->edl->local_session->view_start[pane->number] *
-// mwindow->edl->local_session->zoom_sample /
-// mwindow->edl->session->sample_rate;
+// double position = mwindow->edl->get_cursor_position(cursor_x, pane->number);
result = 1;
if(!active) {
activate();
}
- if( get_buttonpress() == LEFT_BUTTON &&
- gui->mbuttons->transport->engine->command->command != STOP ) {
- gui->unlock_window();
- gui->mbuttons->transport->handle_transport(STOP, 1, 0, 0);
- gui->lock_window("TrackCanvas::button_press_event");
+ if( get_buttonpress() == LEFT_BUTTON ) {
+ gui->stop_transport("TrackCanvas::button_press_event");
}
int update_overlay = 0, update_cursor = 0, rerender = 0;
// Test handles only and select a region
case EDITING_IBEAM: {
- double position = (double)cursor_x *
- mwindow->edl->local_session->zoom_sample /
- mwindow->edl->session->sample_rate +
- (double)mwindow->edl->local_session->view_start[pane->number] *
- mwindow->edl->local_session->zoom_sample /
- mwindow->edl->session->sample_rate;
+ double position = mwindow->edl->get_cursor_position(cursor_x, pane->number);
//printf("TrackCanvas::button_press_event %d\n", position);
if( do_transitions(cursor_x, cursor_y,