X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindowedit.C;h=458ced964e8f3418505b7d27ccf19adb80662dd0;hb=83b70dd60863377cb281e6be5206304e10373e30;hp=7b359ce2d817bb5672049bf4ea03a2c4f6143acd;hpb=0678b17975f50a831fb8a1cda6baaa961e3b6de7;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index 7b359ce2..458ced96 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -426,11 +426,11 @@ void MWindow::clear_select() gui->draw_overlays(1); } -void MWindow::select_edits() +void MWindow::select_edits(int v) { double start = edl->local_session->get_selectionstart(); double end = edl->local_session->get_selectionend(); - edl->tracks->select_edits(start, end); + edl->tracks->select_edits(start, end, v); gui->draw_overlays(1); } @@ -779,7 +779,7 @@ void MWindow::insert_effects_canvas(Track *dest_track, double start, double leng ArrayList shared_locations; PluginSet *pluginset = session->pluginset_highlighted; - int gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0; + int gang = edl->local_session->gang_tracks != GANG_NONE ? 1 : 0; int data_type = dest_track->data_type; int first_track = 1; @@ -841,8 +841,8 @@ void MWindow::insert_effect(char *title, SharedLocation *shared_location, SharedLocation shared_location_local; shared_location_local.copy_from(shared_location); int first_track = 1; - double start_pos = edl->local_session->get_selectionstart(1); - double end_pos = edl->local_session->get_selectionend(1); + double start_pos = edl->local_session->get_selectionstart(); + double end_pos = edl->local_session->get_selectionend(); for( ; current; current=NEXT ) { if( current->data_type != data_type ) continue; if( !current->is_armed() ) continue; @@ -960,6 +960,34 @@ void MWindow::finish_modify_handles() cwindow->update(1, 0, 0, 0, 1); } +int MWindow::modify_transnhandles() +{ + gui->reset_default_message(); + gui->default_message(); + Transition *transition = session->drag_transition; + if( !transition ) return 1; + int64_t length = transition->length; + Track *track = transition->edit->track; + int64_t start_pos = track->to_units(session->drag_start, 0); + int64_t end_pos = track->to_units(session->drag_position, 0); + length += end_pos - start_pos; + if( length < 0 ) length = 0; + if( length == transition->length ) return 0; + + undo_before(); + transition->length = length; + undo_after(_("trans handle"), LOAD_EDITS); + + save_backup(); + restart_brender(); + sync_parameters(CHANGE_EDL); + update_plugin_guis(); + gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0); + cwindow->update(1, 0, 0, 0, 1); + + return 0; +} + void MWindow::match_output_size(Track *track) { undo_before(); @@ -1164,10 +1192,10 @@ void MWindow::move_plugins_down(PluginSet *plugin_set) sync_parameters(CHANGE_EDL); } -void MWindow::move_track_down(Track *track) +void MWindow::roll_track_down(Track *track) { undo_before(); - edl->tracks->move_track_down(track); + edl->tracks->roll_track_down(track); save_backup(); undo_after(_("move track down"), LOAD_ALL); @@ -1177,10 +1205,10 @@ void MWindow::move_track_down(Track *track) save_backup(); } -void MWindow::move_tracks_down() +void MWindow::roll_tracks_down() { undo_before(); - edl->tracks->move_tracks_down(); + edl->tracks->roll_tracks_down(); save_backup(); undo_after(_("move tracks down"), LOAD_ALL); @@ -1190,10 +1218,10 @@ void MWindow::move_tracks_down() save_backup(); } -void MWindow::move_track_up(Track *track) +void MWindow::roll_track_up(Track *track) { undo_before(); - edl->tracks->move_track_up(track); + edl->tracks->roll_track_up(track); save_backup(); undo_after(_("move track up"), LOAD_ALL); restart_brender(); @@ -1202,10 +1230,10 @@ void MWindow::move_track_up(Track *track) save_backup(); } -void MWindow::move_tracks_up() +void MWindow::roll_tracks_up() { undo_before(); - edl->tracks->move_tracks_up(); + edl->tracks->roll_tracks_up(); save_backup(); undo_after(_("move tracks up"), LOAD_ALL); restart_brender(); @@ -1214,10 +1242,10 @@ void MWindow::move_tracks_up() } -void MWindow::swap_track_down(Track *track) +void MWindow::move_track_down(Track *track) { undo_before(); - edl->tracks->swap_track_down(track); + edl->tracks->move_track_down(track); save_backup(); undo_after(_("swap track down"), LOAD_ALL); @@ -1227,10 +1255,10 @@ void MWindow::swap_track_down(Track *track) save_backup(); } -void MWindow::swap_tracks_down() +void MWindow::move_tracks_down() { undo_before(); - edl->tracks->swap_tracks_down(); + edl->tracks->move_tracks_down(); save_backup(); undo_after(_("swap tracks down"), LOAD_ALL); @@ -1240,10 +1268,10 @@ void MWindow::swap_tracks_down() save_backup(); } -void MWindow::swap_track_up(Track *track) +void MWindow::move_track_up(Track *track) { undo_before(); - edl->tracks->swap_track_up(track); + edl->tracks->move_track_up(track); save_backup(); undo_after(_("swap track up"), LOAD_ALL); restart_brender(); @@ -1252,10 +1280,10 @@ void MWindow::swap_track_up(Track *track) save_backup(); } -void MWindow::swap_tracks_up() +void MWindow::move_tracks_up() { undo_before(); - edl->tracks->swap_tracks_up(); + edl->tracks->move_tracks_up(); save_backup(); undo_after(_("swap tracks up"), LOAD_ALL); restart_brender(); @@ -1562,7 +1590,7 @@ int MWindow::paste_edls(ArrayList *new_edls, int load_mode, // Delete current project if( load_mode == LOADMODE_REPLACE || load_mode == LOADMODE_REPLACE_CONCATENATE ) { - reset_caches(); + reset_caches(1); edl->save_defaults(defaults); hide_plugins(); edl->Garbage::remove_user(); @@ -2602,56 +2630,46 @@ int MWindow::normalize_speed(EDL *old_edl, EDL *new_edl, int edit_speed) old_speed = (FloatAuto *)old_speed->next; new_speed = (FloatAuto *)new_speed->next; } + if( !old_speed && !new_speed ) continue; + result = 1; if( edit_speed ) { Autos *old_autos = old_track->automation->autos[AUTOMATION_SPEED]; Autos *new_autos = new_track->automation->autos[AUTOMATION_SPEED]; Auto *old_auto = old_autos ? old_autos->first : 0; - Auto *new_auto = new_autos ? new_autos->first : 0; - while( old_auto && new_auto ) { + for( ; old_auto; old_auto=old_auto->next ) { + Auto *new_auto = new_autos->get_auto(old_auto->orig_id); + if( !new_auto ) continue; int64_t auto_pos = old_auto->position; - if( old_speed || new_speed ) { - double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD); - auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); - result = 1; - } + double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD); + auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); new_auto->position = auto_pos; - old_auto = old_auto->next; - new_auto = new_auto->next; } } Edit *old_edit = old_track->edits->first; - Edit *new_edit = new_track->edits->first; - while( old_edit && new_edit ) { + for( ; old_edit; old_edit=old_edit->next ) { + Edit *new_edit = new_track->edits->get_edit(old_edit->orig_id); + if( !new_edit ) continue; int64_t edit_start = old_edit->startproject; int64_t edit_end = edit_start + old_edit->length; - if( old_speed || new_speed ) { - double orig_start = old_speeds->automation_integral(0, edit_start, PLAY_FORWARD); - double orig_end = old_speeds->automation_integral(0, edit_end, PLAY_FORWARD); - edit_start = new_track->frame_align(new_speeds->speed_position(orig_start), 1); - edit_end = new_track->frame_align(new_speeds->speed_position(orig_end), 1); - result = 1; - } + double orig_start = old_speeds->automation_integral(0, edit_start, PLAY_FORWARD); + double orig_end = old_speeds->automation_integral(0, edit_end, PLAY_FORWARD); + edit_start = new_track->frame_align(new_speeds->speed_position(orig_start), 1); + edit_end = new_track->frame_align(new_speeds->speed_position(orig_end), 1); new_edit->startproject = edit_start; new_edit->length = edit_end - edit_start; - old_edit = old_edit->next; - new_edit = new_edit->next; } if( first_track && old_track->is_armed() ) { - if( edit_labels ) { - Labels *old_labels = old_edl->labels; - Labels *new_labels = new_edl->labels; - Label *old_label = old_labels ? old_labels->first : 0; - Label *new_label = new_labels ? new_labels->first : 0; - while( old_label && new_label ) { + Labels *old_labels = old_edl->labels; + Labels *new_labels = new_edl->labels; + if( edit_labels && old_labels && new_labels ) { + Label *old_label = old_labels->first; + for( ; old_label; old_label=old_label->next ) { + Label *new_label = new_labels->get_label(old_label->orig_id); + if( !new_label ) continue; int64_t label_pos = old_track->to_units(old_label->position, 1); - if( old_speed || new_speed ) { - double orig_pos = old_speeds->automation_integral(0, label_pos, PLAY_FORWARD); - label_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); - result = 1; - } + double orig_pos = old_speeds->automation_integral(0, label_pos, PLAY_FORWARD); + label_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); new_label->position = new_track->from_units(label_pos); - old_label = old_label->next; - new_label = new_label->next; } } first_track = 0; @@ -2662,59 +2680,54 @@ int MWindow::normalize_speed(EDL *old_edl, EDL *new_edl, int edit_speed) int n = bmin(old_size, new_size); for( int i=0; iplugin_set[i]; - Plugin *old_plugin = (Plugin *)(old_plugin_set ? old_plugin_set->first : 0); + if( !old_plugin_set ) continue; PluginSet *new_plugin_set = new_track->plugin_set[i]; - Plugin *new_plugin = (Plugin *)(new_plugin_set ? new_plugin_set->first : 0); - while( old_plugin && new_plugin ) { + if( !new_plugin_set ) continue; + Plugin *old_plugin = (Plugin *)old_plugin_set->first; + for( ; old_plugin; old_plugin=(Plugin *)old_plugin->next ) { + Plugin *new_plugin = (Plugin *)new_plugin_set->get_edit(old_plugin->orig_id); + if( !new_plugin ) continue; int64_t plugin_start = old_plugin->startproject; int64_t plugin_end = plugin_start + old_plugin->length; - if( old_speed || new_speed ) { - double orig_start = old_speeds->automation_integral(0, plugin_start, PLAY_FORWARD); - double orig_end = old_speeds->automation_integral(0, plugin_end, PLAY_FORWARD); - plugin_start = new_track->frame_align(new_speeds->speed_position(orig_start), 1); - plugin_end = new_track->frame_align(new_speeds->speed_position(orig_end), 1); - result = 1; - } + double orig_start = old_speeds->automation_integral(0, plugin_start, PLAY_FORWARD); + double orig_end = old_speeds->automation_integral(0, plugin_end, PLAY_FORWARD); + plugin_start = new_track->frame_align(new_speeds->speed_position(orig_start), 1); + plugin_end = new_track->frame_align(new_speeds->speed_position(orig_end), 1); new_plugin->startproject = plugin_start; new_plugin->length = plugin_end - plugin_start; if( edit_autos ) { KeyFrames *old_keyframes = old_plugin->keyframes; - Auto *old_auto = old_keyframes ? old_keyframes->first : 0; + if( !old_keyframes ) continue; KeyFrames *new_keyframes = new_plugin->keyframes; - Auto *new_auto = new_keyframes ? new_keyframes->first : 0; - while( old_auto && new_auto ) { + if( !new_keyframes ) continue; + Auto *old_auto = old_keyframes->first; + for( ; old_auto; old_auto=old_auto->next ) { + Auto *new_auto = new_keyframes->get_auto(old_auto->orig_id); + if( !new_auto ) continue; int64_t auto_pos = old_auto->position; - if( old_speed || new_speed ) { - double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD); - auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); - result = 1; - } + double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD); + auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); new_auto->position = auto_pos; old_auto = old_auto->next; - new_auto = new_auto->next; } } - old_plugin = (Plugin *)old_plugin->next; - new_plugin = (Plugin *)new_plugin->next; } } } if( edit_autos ) { // speed must be last for( int i=0; iautomation->autos[i]; + if( !old_autos ) continue; Autos *new_autos = new_track->automation->autos[i]; - Auto *old_auto = old_autos ? old_autos->first : 0; - Auto *new_auto = new_autos ? new_autos->first : 0; - while( old_auto && new_auto ) { + if( !new_autos ) continue; + Auto *old_auto = old_autos->first; + for( ; old_auto; old_auto=old_auto->next ) { + Auto *new_auto = new_autos->get_auto(old_auto->orig_id); + if( !new_auto ) continue; int64_t auto_pos = old_auto->position; - if( old_speed || new_speed ) { - double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD); - auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); - result = 1; - } + double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD); + auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1); new_auto->position = auto_pos; - old_auto = old_auto->next; - new_auto = new_auto->next; } } } @@ -2856,6 +2869,10 @@ int MWindow::masters_to_mixers() for( ; track && !track->master; track=track->next ) mixer_last = track; Track *next_track = track; + if( !master_track->armed ) { + master_track = next_track; + continue; + } Mixer *master_mixer = 0; for( int i=0, n=edl->mixers.size(); iindex_in(edl->mixers[i]) >= 0 ) {