X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindowedit.C;h=0e4121b121ae18e17b414cedc264912507ac5cc0;hp=85b5f7439b1e94918e04d4955f3fb3e23b4c64cd;hb=3ac72077bee819333ea9e8c3c3307b529ecf3647;hpb=ea0dfe3cd57bb60ef824cd0d3512fcd251020c76 diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index 85b5f743..0e4121b1 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -512,11 +512,14 @@ void MWindow::crop_video() void MWindow::cut() { - undo->update_undo_before(); - double start = edl->local_session->get_selectionstart(); double end = edl->local_session->get_selectionend(); + cut(start, end); +} +void MWindow::cut(double start, double end, double new_position) +{ + undo->update_undo_before(); copy(start, end); edl->clear(start, end, edl->session->labels_follow_edits, @@ -527,7 +530,10 @@ void MWindow::cut() edl->optimize(); save_backup(); undo->update_undo_after(_("cut"), LOAD_EDITS | LOAD_TIMEBAR); - + if( new_position >= 0 ) { + edl->local_session->set_selectionstart(new_position); + edl->local_session->set_selectionend(new_position); + } restart_brender(); update_plugin_guis(); gui->update(1, 2, 1, 1, 1, 1, 0); @@ -536,6 +542,42 @@ void MWindow::cut() send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1); } +void MWindow::snap_left_edit() +{ + double start_pos = edl->local_session->get_selectionstart(1); + double position = edl->prev_edit(start_pos); + if( position < start_pos ) + cut(position, start_pos, position); +} + +void MWindow::snap_right_edit() +{ + double end_pos = edl->local_session->get_selectionend(1); + double position = edl->next_edit(end_pos); + if( end_pos < position ) + cut(end_pos, position, end_pos); +} + +void MWindow::snap_left_label() +{ + double start_pos = edl->local_session->get_selectionstart(1); + Label *left_label = edl->labels->prev_label(start_pos); + if( !left_label ) return; + double position = left_label->position; + if( position < start_pos ) + cut(position, start_pos, position); +} + +void MWindow::snap_right_label() +{ + double end_pos = edl->local_session->get_selectionend(1); + Label *right_label = edl->labels->next_label(end_pos); + if( !right_label ) return; + double position = right_label->position; + if( end_pos < position ) + cut(end_pos, position, end_pos); +} + int MWindow::cut_automation() { undo->update_undo_before(); @@ -2274,14 +2316,16 @@ void MWindow::remap_audio(int pattern) } } -void MWindow::set_proxy(int use_scaler, int new_scale, - ArrayList *orig_assets, ArrayList *proxy_assets) +void MWindow::set_proxy(int use_scaler, int new_scale, int auto_scale, + ArrayList *orig_assets, + ArrayList *proxy_assets) { int orig_use_scaler = edl->session->proxy_use_scaler; int orig_scale = edl->session->proxy_scale; // rescale to full size asset in read_frame edl->session->proxy_use_scaler = use_scaler; edl->session->proxy_scale = new_scale; + edl->session->proxy_auto_scale = auto_scale; if( use_scaler ) { for( int i=0; isize(); ++i ) { @@ -2320,8 +2364,39 @@ void MWindow::set_proxy(int use_scaler, int new_scale, } // change original assets to proxy assets - for( int i=0; isize(); i++ ) { + int awindow_folder = use_scaler || new_scale != 1 ? AW_PROXY_FOLDER : AW_MEDIA_FOLDER; + for( int i=0,n=proxy_assets->size(); iassets->update((Asset *)proxy_assets->get(i)); + proxy_asset->awindow_folder = awindow_folder; +// replace track contents + for( Track *track = edl->tracks->first; track; track = track->next ) { + if( track->data_type != TRACK_VIDEO ) continue; + for( Edit *edit = track->edits->first; edit; edit = edit->next ) { + if( !edit->asset ) continue; + if( !strcmp(edit->asset->path, orig_assets->get(i)->path) ) { + edit->asset = proxy_asset; + } + } + } + } +} + +void MWindow::add_proxy(int use_scaler, + ArrayList *orig_assets, + ArrayList *proxy_assets) +{ + if( use_scaler ) { + for( int i=0,n=proxy_assets->size(); iget(i); + proxy_asset->width = orig_assets->get(i)->get_w(); + proxy_asset->height = orig_assets->get(i)->get_h(); + } + } + +// change original assets to proxy assets + for( int i=0,n=proxy_assets->size(); iassets->update((Asset *)proxy_assets->get(i)); + proxy_asset->awindow_folder = AW_PROXY_FOLDER; // replace track contents for( Track *track = edl->tracks->first; track; track = track->next ) { if( track->data_type != TRACK_VIDEO ) continue;