X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrackcanvas.C;h=2edb89bea19dd64f2d3f42e918e36059739b3975;hp=35c773b084501bf451c3da5b05dcde58b60efcc2;hb=7e5a0760f40ff787cc3d93cb7768a901ebe52809;hpb=60f8df69db9ddd8148bfc41a17bb0955b52a45e6 diff --git a/cinelerra-5.1/cinelerra/trackcanvas.C b/cinelerra-5.1/cinelerra/trackcanvas.C index 35c773b0..2edb89be 100644 --- a/cinelerra-5.1/cinelerra/trackcanvas.C +++ b/cinelerra-5.1/cinelerra/trackcanvas.C @@ -642,7 +642,6 @@ int64_t TrackCanvas::drop_plugin_position(PluginSet *plugin_set, Plugin *moved_p return -1; } - void TrackCanvas::draw(int mode, int hide_cursor) { const int debug = 0; @@ -2046,16 +2045,27 @@ int TrackCanvas::do_keyframes(int cursor_x, 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: { @@ -3902,7 +3912,7 @@ void TrackCanvas::update_drag_caption() -int TrackCanvas::cursor_motion_event() +int TrackCanvas::cursor_update(int in_motion) { int result = 0; int cursor_x = 0; @@ -3915,7 +3925,7 @@ int TrackCanvas::cursor_motion_event() 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) @@ -3978,6 +3988,8 @@ int TrackCanvas::cursor_motion_event() 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: @@ -4027,22 +4039,26 @@ int TrackCanvas::cursor_motion_event() 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); @@ -4074,7 +4090,7 @@ int TrackCanvas::cursor_motion_event() 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(), @@ -4092,13 +4108,13 @@ int TrackCanvas::cursor_motion_event() 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(); @@ -4106,7 +4122,7 @@ int TrackCanvas::cursor_motion_event() 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 @@ -4137,10 +4153,15 @@ int TrackCanvas::cursor_motion_event() 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) { @@ -4240,7 +4261,8 @@ int TrackCanvas::repeat_event(int64_t duration) 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); @@ -4274,8 +4296,10 @@ int TrackCanvas::button_release_event() 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: @@ -4292,6 +4316,7 @@ int TrackCanvas::button_release_event() 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 @@ -4302,8 +4327,7 @@ int TrackCanvas::button_release_event() update_overlay = 1; } - - mwindow->undo->update_undo_after(_("keyframe"), LOAD_AUTOMATION); + mwindow->undo->update_undo_after(_("keyframe"), load_flags); result = 1; break; @@ -4330,13 +4354,14 @@ int TrackCanvas::button_release_event() } 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; } @@ -4545,9 +4570,11 @@ int TrackCanvas::do_tracks(int cursor_x, int cursor_y, int button_press) 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; } @@ -4810,12 +4837,7 @@ int TrackCanvas::button_press_event() 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) { @@ -4895,12 +4917,7 @@ int TrackCanvas::button_press_event() // 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,