From 0c086b3e7b552e0f6b06c8696d7682d9d4bd91db Mon Sep 17 00:00:00 2001 From: Good Guy Date: Thu, 27 Dec 2018 14:10:42 -0700 Subject: [PATCH] drag+drop honours labels/plugins/autos, new drag icon, phantom keyframe fix --- cinelerra-5.1/cinelerra/edit.C | 9 - cinelerra-5.1/cinelerra/edit.h | 1 - cinelerra-5.1/cinelerra/edits.C | 3 +- cinelerra-5.1/cinelerra/edl.C | 97 +++++++ cinelerra-5.1/cinelerra/edl.h | 3 + cinelerra-5.1/cinelerra/mwindow.h | 6 +- cinelerra-5.1/cinelerra/mwindowedit.C | 239 +++++++++++++++--- cinelerra-5.1/cinelerra/plugin.C | 13 +- cinelerra-5.1/cinelerra/plugin.h | 1 + cinelerra-5.1/cinelerra/track.C | 53 ++-- cinelerra-5.1/cinelerra/track.h | 6 +- cinelerra-5.1/cinelerra/trackcanvas.C | 16 +- cinelerra-5.1/cinelerra/tracksedit.C | 34 --- .../plugins/theme_blond/data/clip_icon.png | Bin 1447 -> 994 bytes .../plugins/theme_blond_cv/data/clip_icon.png | Bin 1461 -> 994 bytes .../plugins/theme_blue/data/clip_icon.png | Bin 1458 -> 994 bytes .../plugins/theme_hulk/data/clip_icon.png | Bin 1457 -> 994 bytes .../plugins/theme_pinklady/data/clip_icon.png | Bin 1454 -> 994 bytes .../plugins/theme_suv/data/clip_icon.png | Bin 1409 -> 994 bytes .../plugins/theme_unflat/data/clip_icon.png | Bin 1397 -> 994 bytes 20 files changed, 361 insertions(+), 120 deletions(-) diff --git a/cinelerra-5.1/cinelerra/edit.C b/cinelerra-5.1/cinelerra/edit.C index 40e7151a..20e8b93b 100644 --- a/cinelerra-5.1/cinelerra/edit.C +++ b/cinelerra-5.1/cinelerra/edit.C @@ -242,15 +242,6 @@ int Edit::silence() asset || nested_edl : *((SEdit *)this)->get_text()) ? 0 : 1; } -void Edit::mute() -{ - if( track->data_type != TRACK_SUBTITLE ) { - asset = 0; - nested_edl = 0; - } - else - *((SEdit *)this)->get_text() = 0; -} void Edit::set_selected(int v) { diff --git a/cinelerra-5.1/cinelerra/edit.h b/cinelerra-5.1/cinelerra/edit.h index ffdd0fe4..ff045fd0 100644 --- a/cinelerra-5.1/cinelerra/edit.h +++ b/cinelerra-5.1/cinelerra/edit.h @@ -114,7 +114,6 @@ public: void detach_transition(); // Determine if silence depending on existance of asset or plugin title virtual int silence(); - void mute(); void set_selected(int v); // Media edit information diff --git a/cinelerra-5.1/cinelerra/edits.C b/cinelerra-5.1/cinelerra/edits.C index 765d657c..a38bef5a 100644 --- a/cinelerra-5.1/cinelerra/edits.C +++ b/cinelerra-5.1/cinelerra/edits.C @@ -646,8 +646,7 @@ void Edits::clear_recursive(int64_t start, int64_t end, { //printf("Edits::clear_recursive 1\n"); track->clear(start, end, - edit_edits, edit_labels, edit_plugins, edit_autos, 0, - trim_edits); + edit_edits, edit_labels, edit_plugins, edit_autos, trim_edits); } diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 1c0c77b1..5f23b1b1 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -794,6 +794,103 @@ int EDL::clear(double start, double end, return 0; } +void EDL::delete_edits(ArrayList *edits, int collapse) +{ + if( session->labels_follow_edits ) + delete_edit_labels(edits, collapse); + for( int i=0; isize(); ++i ) { + Edit *edit = edits->get(i); + Track *track = edit->track; + int64_t start = edit->startproject; + int end = start + edit->length; + track->clear(start, end, 1, 0, + session->plugins_follow_edits, + session->autos_follow_edits, 0); + if( !collapse ) + track->paste_silence(start, end, + session->plugins_follow_edits, + session->autos_follow_edits); + } + optimize(); +} + +class Range { +public: + static int cmp(Range *ap, Range *bp); + double start, end; + bool operator ==(Range &that) { return this->start == that.start; } + bool operator >(Range &that) { return this->start > that.start; } +}; +int Range::cmp(Range *ap, Range *bp) { + return ap->start < bp->start ? -1 : ap->start == bp->start ? 0 : 1; +} + +static void get_edit_regions(ArrayList *edits, ArrayList ®ions) +{ +// move edit inclusive labels by regions + for( int i=0; isize(); ++i ) { + Edit *edit = edits->get(i); + double pos = edit->track->from_units(edit->startproject); + double end = edit->track->from_units(edit->startproject + edit->length); + int n = regions.size(), k = n; + while( --k >= 0 ) { + Range &range = regions[k]; + if( pos >= range.end ) continue; + if( range.start >= end ) continue; + int expand = 0; + if( range.start > pos ) { range.start = pos; expand = 1; } + if( range.end < end ) { range.end = end; expand = 1; } + if( !expand ) break; + k = n; + } + if( k < 0 ) { + Range &range = regions.append(); + range.start = pos; range.end = end; + } + } + regions.sort(Range::cmp); +} + +void EDL::delete_edit_labels(ArrayList *edits, int collapse) +{ + ArrayList regions; + get_edit_regions(edits, regions); + int n = regions.size(), k = n; + while( --k >= 0 ) { + Range &range = regions[k]; + labels->clear(range.start, range.end, collapse); + } +} + +void EDL::move_edit_labels(ArrayList *edits, double dist) +{ + ArrayList regions; + get_edit_regions(edits, regions); + int n = regions.size(), k = n; + Labels moved(this, 0); + while( --k >= 0 ) { + Range &range = regions[k]; + Label *label = labels->label_of(range.start); + for( Label *next=0; label && label->position <= range.end; label=next ) { + next = label->next; + labels->remove_pointer(label); + label->position += dist; + moved.append(label); + } + Label *current = labels->first; + while( (label=moved.first) ) { + moved.remove_pointer(label); + while( current && current->position < label->position ) + current = current->next; + if( current && current->position == label->position ) { + delete label; continue; + } + labels->insert_before(current, label); + } + } +} + + void EDL::modify_edithandles(double oldposition, double newposition, int currentend, diff --git a/cinelerra-5.1/cinelerra/edl.h b/cinelerra-5.1/cinelerra/edl.h index 2cd5de8d..6ec34c8f 100644 --- a/cinelerra-5.1/cinelerra/edl.h +++ b/cinelerra-5.1/cinelerra/edl.h @@ -168,6 +168,9 @@ public: const char *get_folder_name(int no); int new_folder(const char *title, int is_clips); int delete_folder(const char *title); + void delete_edits(ArrayList*, int); + void delete_edit_labels(ArrayList *edits, int collapse); + void move_edit_labels(ArrayList *edits, double dist); void modify_edithandles(double oldposition, double newposition, diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h index bb02ba77..e11d3399 100644 --- a/cinelerra-5.1/cinelerra/mwindow.h +++ b/cinelerra-5.1/cinelerra/mwindow.h @@ -182,7 +182,9 @@ public: void update_vwindow(); // Fit selected time to horizontal display range void fit_selection(); - EDL *selected_edits_to_clip(int packed, double *start_position=0, Track **start_track=0); + EDL *selected_edits_to_clip(int packed, + double *start_position, Track **start_track, + int edit_labels, int edit_autos, int edit_plugins); void selected_edits_to_clipboard(int packed); // Fit selected autos to the vertical display range void fit_autos(int doall); @@ -403,7 +405,7 @@ public: void move_edits(ArrayList *edits, Track *track, double position, // 0 - old style (cut and insert elswhere), 1- new style - (clear and overwrite elsewere) int behaviour); - void move_group(EDL *group, Track *first_track, double position, int overwrite); + void move_group(EDL *group, Track *first_track, double position); // Move effect to position void move_effect(Plugin *plugin, Track *track, int64_t position); void move_effect(Plugin *plugin, PluginSet *plugin_set, int64_t position); diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index b38a563e..a1e3d438 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -41,6 +41,7 @@ #include "gwindow.h" #include "gwindowgui.h" #include "keyframe.h" +#include "keyframes.h" #include "language.h" #include "labels.h" #include "levelwindow.h" @@ -903,7 +904,9 @@ void MWindow::match_output_size(Track *track) } -EDL *MWindow::selected_edits_to_clip(int packed, double *start_position, Track **start_track) +EDL *MWindow::selected_edits_to_clip(int packed, + double *start_position, Track **start_track, + int edit_labels, int edit_autos, int edit_plugins) { double start = DBL_MAX, end = DBL_MIN; Track *first_track=0, *last_track = 0; @@ -945,28 +948,123 @@ EDL *MWindow::selected_edits_to_clip(int packed, double *start_position, Track * int64_t start_pos = track->to_units(start, 0); int64_t end_pos = track->to_units(end, 0); int64_t startproject = 0; - for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + Edit *edit = track->edits->first; + for( ; edit; edit=edit->next ) { + if( !edit->is_selected || edit->silence() ) continue; if( edit->startproject < start_pos ) continue; if( edit->startproject >= end_pos ) break; - if( !edit->is_selected || edit->silence() ) continue; + int64_t edit_start_pos = edit->startproject; + int64_t edit_end_pos = edit->startproject + edit->length; if( !new_track ) new_track = new_edl->add_new_track(track->data_type); - if( new_track ) { - if( !packed ) { - int64_t edit_position = edit->startproject - start_pos; - if( edit_position > startproject ) { - Edit *silence = new Edit(new_edl, new_track); - silence->startproject = startproject; - silence->length = edit_position - startproject; - new_track->edits->append(silence); - startproject = edit_position; + int64_t edit_pos = edit_start_pos - start_pos; + if( !packed ) { + if( edit_pos > startproject ) { + Edit *silence = new Edit(new_edl, new_track); + silence->startproject = startproject; + silence->length = edit_pos - startproject; + new_track->edits->append(silence); + startproject = edit_pos; + } + } + int64_t clip_start_pos = startproject; + Edit *clip_edit = new Edit(new_edl, new_track); + clip_edit->copy_from(edit); + clip_edit->startproject = startproject; + startproject += clip_edit->length; + new_track->edits->append(clip_edit); + if( edit_labels ) { + double edit_start = track->from_units(edit_start_pos); + double edit_end = track->from_units(edit_end_pos); + double clip_start = new_track->from_units(clip_start_pos); + Label *label = edl->labels->first; + for( ; label; label=label->next ) { + if( label->position < edit_start ) continue; + if( label->position >= edit_end ) break; + double clip_position = label->position - edit_start + clip_start; + Label *clip_label = new_edl->labels->first; + while( clip_label && clip_label->positionnext; + if( clip_label && clip_label->position == clip_position ) continue; + Label *new_label = new Label(new_edl, + new_edl->labels, clip_position, label->textstr); + new_edl->labels->insert_before(clip_label, new_label); + } + } + if( edit_autos ) { + Automation *automation = track->automation; + Automation *new_automation = new_track->automation; + for( int i=0; iautos[i]; + if( !autos ) continue; + Autos *new_autos = new_automation->autos[i]; + new_autos->default_auto->copy_from(autos->default_auto); + Auto *aut0 = autos->first; + for( ; aut0; aut0=aut0->next ) { + if( aut0->position < edit_start_pos ) continue; + if( aut0->position >= edit_end_pos ) break; + Auto *new_auto = new_autos->new_auto(); + new_auto->copy_from(aut0); + int64_t clip_position = aut0->position - edit_start_pos + clip_start_pos; + new_auto->position = clip_position; + new_autos->append(new_auto); + } + } + } + if( edit_plugins ) { + while( new_track->plugin_set.size() < track->plugin_set.size() ) + new_track->plugin_set.append(0); + for( int i=0; iplugin_set.total; ++i ) { + PluginSet *plugin_set = track->plugin_set[i]; + if( !plugin_set ) continue; + PluginSet *new_plugin_set = new_track->plugin_set[i]; + if( !new_plugin_set ) { + new_plugin_set = new PluginSet(new_edl, new_track); + new_track->plugin_set[i] = new_plugin_set; + } + Plugin *plugin = (Plugin*)plugin_set->first; + int64_t startplugin = 0; + for( ; plugin ; plugin=(Plugin*)plugin->next ) { + if( plugin->silence() ) continue; + int64_t plugin_start_pos = plugin->startproject; + int64_t plugin_end_pos = plugin_start_pos + plugin->length; + if( plugin_end_pos < start_pos ) continue; + if( plugin_start_pos > end_pos ) break; + if( plugin_start_pos < edit_start_pos ) + plugin_start_pos = edit_start_pos; + if( plugin_end_pos > edit_end_pos ) + plugin_end_pos = edit_end_pos; + if( plugin_start_pos >= plugin_end_pos ) continue; + int64_t plugin_pos = plugin_start_pos - start_pos; + if( plugin_pos > startplugin ) { + Plugin *silence = new Plugin(new_edl, new_track, ""); + silence->startproject = startplugin; + silence->length = plugin_pos - startplugin; + new_plugin_set->append(silence); + startplugin = plugin_pos; + } + Plugin *new_plugin = new Plugin(new_edl, new_track, plugin->title); + new_plugin->copy_base(plugin); + new_plugin->startproject = startplugin; + new_plugin->length = plugin_end_pos - plugin_start_pos; + startplugin += new_plugin->length; + new_plugin_set->append(new_plugin); + KeyFrames *keyframes = plugin->keyframes; + KeyFrames *new_keyframes = new_plugin->keyframes; + new_keyframes->default_auto->copy_from(keyframes->default_auto); + new_keyframes->default_auto->position = startplugin; + KeyFrame *keyframe = (KeyFrame*)keyframes->first; + for( ; keyframe; keyframe=(KeyFrame*)keyframe->next ) { + if( keyframe->position < edit_start_pos ) continue; + if( keyframe->position >= edit_end_pos ) break; + KeyFrame *clip_keyframe = new KeyFrame(new_edl, new_keyframes); + clip_keyframe->copy_from(keyframe); + int64_t clip_position = keyframe->position - start_pos; + clip_keyframe->position = clip_position; + new_keyframes->append(clip_keyframe); + } } } - Edit *clip_edit = new Edit(new_edl, new_track); - clip_edit->copy_from(edit); - clip_edit->startproject = startproject; - startproject += clip_edit->length; - new_track->edits->append(clip_edit); } } if( last_track == track ) break; @@ -976,7 +1074,10 @@ EDL *MWindow::selected_edits_to_clip(int packed, double *start_position, Track * void MWindow::selected_edits_to_clipboard(int packed) { - EDL *new_edl = MWindow::selected_edits_to_clip(packed); + EDL *new_edl = selected_edits_to_clip(packed, 0, 0, + edl->session->labels_follow_edits, + edl->session->autos_follow_edits, + edl->session->plugins_follow_edits); if( !new_edl ) return; double length = new_edl->tracks->total_length(); FileXML file; @@ -999,18 +1100,7 @@ void MWindow::delete_edits(ArrayList *edits, const char *msg, int collaps { if( !edits->size() ) return; undo->update_undo_before(); - for( Track *track=edl->tracks->first; track; track=track->next ) { - for( Edit *next=track->edits->first; next; ) { - Edit *edit = next; next = edit->next; - if( !edit->is_selected ) continue; - int64_t len = edit->length; - delete edit; - if( !collapse ) continue; - for( edit=next; edit; edit=edit->next ) - edit->startproject -= len; - } - } - edl->optimize(); + edl->delete_edits(edits, collapse); save_backup(); undo->update_undo_after(msg, LOAD_EDITS); @@ -1063,10 +1153,94 @@ void MWindow::move_edits(ArrayList *edits, gui->update(1, NORMAL_DRAW, 1, 0, 0, 0, 0); } -void MWindow::move_group(EDL *group, Track *first_track, double position, int overwrite) +void MWindow::move_group(EDL *group, Track *first_track, double position) { undo->update_undo_before(); - edl->tracks->move_group(group, first_track, position, overwrite); + if( edl->session->labels_follow_edits ) { + ArrayListedits; + edl->tracks->get_selected_edits(&edits); + double dist = position - session->drag_group_position; + edl->move_edit_labels(&edits, dist); + } + for( Track *track=edl->tracks->first; track; track=track->next ) { + if( !track->record ) continue; + Edit *edit = track->edits->first; + for( Edit *next=0; edit; edit=next ) { + next = edit->next; + if( !edit->is_selected ) continue; + edit->is_selected = 0; + edit->group_id = 0; + int64_t start = edit->startproject; + int64_t end = start + edit->length; + track->clear(start, end, 1, 0, + edl->session->plugins_follow_edits, + edl->session->autos_follow_edits, 0); + track->paste_silence(start, end, + edl->session->plugins_follow_edits, + edl->session->autos_follow_edits); + next = track->edits->first; + } + } + Track *src = group->tracks->first; + for( Track *track=first_track; track && src; track=track->next ) { + if( !track->record ) continue; + int64_t pos = track->to_units(position, 0); + for( Edit *edit=src->edits->first; edit; edit=edit->next ) { + if( edit->silence() ) continue; + int64_t start = pos + edit->startproject; + int64_t end = start + edit->length; + track->edits->clear(start, end); + Edit *dst = track->edits->insert_new_edit(start); + dst->copy_from(edit); + dst->startproject = start; + dst->is_selected = 1; + while( (dst=dst->next) != 0 ) + dst->startproject += edit->length; + } + if( edl->session->autos_follow_edits ) { + for( int i=0; iautomation->autos[i]; + if( !src_autos ) continue; + Autos *autos = track->automation->autos[i]; + for( Auto *aut0=src_autos->first; aut0; aut0=aut0->next ) { + int64_t position = pos + aut0->position; + autos->insert_auto(position, aut0); + } + } + } + if( edl->session->plugins_follow_edits ) { + for( int i=0; iplugin_set.size(); ++i ) { + PluginSet *plugin_set = src->plugin_set[i]; + if( !plugin_set ) continue; + while( track->plugin_set.size() < i ) + track->plugin_set.append(0); + PluginSet *dst_plugin_set = track->plugin_set[i]; + if( !dst_plugin_set ) { + dst_plugin_set = new PluginSet(edl, track); + track->plugin_set[i] = dst_plugin_set; + } + Plugin *plugin = (Plugin *)plugin_set->first; + for( ; plugin; plugin=(Plugin *)plugin->next ) { + int64_t start = pos + plugin->startproject; + int64_t end = start + plugin->length; + dst_plugin_set->clear(start, end, 1); + Plugin *dst = dst_plugin_set->insert_plugin( + plugin->title, start, end-start, + plugin->plugin_type, &plugin->shared_location, + (KeyFrame*)plugin->keyframes->default_auto, 0); + KeyFrame *keyframe = (KeyFrame*)plugin->keyframes->first; + for( ; keyframe; keyframe=(KeyFrame*)keyframe->next ) { + int64_t position = pos + keyframe->position; + dst->keyframes->insert_auto(position, keyframe); + } + } + } + } + track->optimize(); + src = src->next; + } + edl->tracks->clear_selected_edits(); + save_backup(); undo->update_undo_after(_("move group"), LOAD_ALL); restart_brender(); @@ -1674,7 +1848,6 @@ int MWindow::paste_edls(ArrayList *new_edls, int load_mode, current_position + length, 1, // edit edits edit_labels, edit_plugins, edit_autos, - 1, // convert units 0); // trim edits } //PRINT_TRACE diff --git a/cinelerra-5.1/cinelerra/plugin.C b/cinelerra-5.1/cinelerra/plugin.C index 25023190..b4c8e443 100644 --- a/cinelerra-5.1/cinelerra/plugin.C +++ b/cinelerra-5.1/cinelerra/plugin.C @@ -100,10 +100,7 @@ int Plugin::operator==(Edit& that) int Plugin::silence() { - if(plugin_type != PLUGIN_NONE) - return 0; - else - return 1; + return plugin_type == PLUGIN_NONE ? 1 : 0; } void Plugin::clear_keyframes(int64_t start, int64_t end) @@ -112,7 +109,7 @@ void Plugin::clear_keyframes(int64_t start, int64_t end) } -void Plugin::copy_from(Edit *edit) +void Plugin::copy_base(Edit *edit) { Plugin *plugin = (Plugin*)edit; @@ -129,8 +126,12 @@ void Plugin::copy_from(Edit *edit) // Should reconfigure this based on where the first track is now. this->shared_location = plugin->shared_location; strcpy(this->title, plugin->title); +} - copy_keyframes(plugin); +void Plugin::copy_from(Edit *edit) +{ + copy_base(edit); + copy_keyframes((Plugin*)edit); } void Plugin::copy_keyframes(Plugin *plugin) diff --git a/cinelerra-5.1/cinelerra/plugin.h b/cinelerra-5.1/cinelerra/plugin.h index 15aa75ce..220066cf 100644 --- a/cinelerra-5.1/cinelerra/plugin.h +++ b/cinelerra-5.1/cinelerra/plugin.h @@ -74,6 +74,7 @@ public: virtual int operator==(Plugin& that); virtual int operator==(Edit& that); + void copy_base(Edit *edit); virtual void copy_from(Edit *edit); diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index 4afeeab8..ddbc3837 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -1178,32 +1178,27 @@ int Track::blade(double position) int Track::clear(double start, double end, int edit_edits, int edit_labels, int edit_plugins, - int edit_autos, int convert_units, Edits *trim_edits) + int edit_autos, Edits *trim_edits) { -// Edits::move_auto calls this routine after the units are converted to the track -// format. -//printf("Track::clear 1 %d %d %d\n", edit_edits, edit_labels, edit_plugins); - if(convert_units) - { - start = to_units(start, 0); - end = to_units(end, 1); - } - - - if(edit_autos) - automation->clear((int64_t)start, (int64_t)end, 0, 1); + return clear(to_units(start, 0), to_units(end, 1), + edit_edits, edit_labels, edit_plugins, edit_autos, trim_edits); +} - if(edit_plugins) - { - for(int i = 0; i < plugin_set.total; i++) - { +int Track::clear(int64_t start, int64_t end, + int edit_edits, int edit_labels, int edit_plugins, + int edit_autos, Edits *trim_edits) +{ +//printf("Track::clear 1 %d %d %d\n", edit_edits, edit_labels, edit_plugins); + if( edit_autos ) + automation->clear(start, end, 0, 1); + if( edit_plugins ) { + for(int i = 0; i < plugin_set.total; i++) { if(!trim_edits || trim_edits == (Edits*)plugin_set.values[i]) - plugin_set.values[i]->clear((int64_t)start, (int64_t)end, edit_autos); + plugin_set.values[i]->clear(start, end, edit_autos); } } - - if(edit_edits) - edits->clear((int64_t)start, (int64_t)end); + if( edit_edits ) + edits->clear(start, end); return 0; } @@ -1275,13 +1270,17 @@ int Track::modify_pluginhandles(double oldposition, int Track::paste_silence(double start, double end, int edit_plugins, int edit_autos) { - int64_t start_i = to_units(start, 0); - int64_t end_i = to_units(end, 1); - - edits->paste_silence(start_i, end_i); - if(edit_autos) shift_keyframes(start_i, end_i - start_i); - if(edit_plugins) shift_effects(start_i, end_i - start_i, edit_autos); + return paste_silence(to_units(start, 0), to_units(end, 1), + edit_plugins, edit_autos); +} +int Track::paste_silence(int64_t start, int64_t end, int edit_plugins, int edit_autos) +{ + edits->paste_silence(start, end); + if( edit_autos ) + shift_keyframes(start, end - start); + if( edit_plugins ) + shift_effects(start, end - start, edit_autos); edits->optimize(); return 0; } diff --git a/cinelerra-5.1/cinelerra/track.h b/cinelerra-5.1/cinelerra/track.h index bb1081e7..e2326cbc 100644 --- a/cinelerra-5.1/cinelerra/track.h +++ b/cinelerra-5.1/cinelerra/track.h @@ -204,7 +204,10 @@ public: int blade(double position); int clear(double start, double end, int edit_edits, int edit_labels, int clear_plugins, - int edit_autos, int convert_units, Edits *trim_edits); + int edit_autos, Edits *trim_edits); + int clear(int64_t start, int64_t end, + int edit_edits, int edit_labels, int clear_plugins, + int edit_autos, Edits *trim_edits); // Returns the point to restart background rendering at. // -1 means nothing changed. void clear_automation(double selectionstart, double selectionend, @@ -238,6 +241,7 @@ public: int clear_labels, int clear_plugins, int edit_autos, double &distance); int paste_silence(double start, double end, int edit_plugins, int edit_autos); + int paste_silence(int64_t start, int64_t end, int edit_plugins, int edit_autos); virtual int select_translation(int cursor_x, int cursor_y) { return 0; }; // select video coordinates for frame virtual int update_translation(int cursor_x, int cursor_y, int shift_down) { return 0; }; // move video coordinates int select_auto(AutoConf *auto_conf, int cursor_x, int cursor_y); diff --git a/cinelerra-5.1/cinelerra/trackcanvas.C b/cinelerra-5.1/cinelerra/trackcanvas.C index e241b4d2..72c9d009 100644 --- a/cinelerra-5.1/cinelerra/trackcanvas.C +++ b/cinelerra-5.1/cinelerra/trackcanvas.C @@ -194,7 +194,7 @@ int TrackCanvas::drag_motion( drag_cursor_motion(cursor_x, cursor_y, over_track, over_edit, over_pluginset, over_plugin); } - if( over_track && !*over_track ) + if( over_track && !*over_track ) *over_track = pane->over_patchbay(); return 0; } @@ -524,7 +524,7 @@ int TrackCanvas::drag_stop(int *redraw) ret = test_track_group(drag_group, drop_track, new_pos); } if( ret ) - mwindow->move_group(drag_group, drop_track, new_pos, 1); + mwindow->move_group(drag_group, drop_track, new_pos); drag_group->remove_user(); mwindow->session->drag_group = 0; } @@ -2284,7 +2284,7 @@ void TrackCanvas::draw_keyframe_reticle() mwindow->session->drag_auto->autos->autoidx : -1; if( get_buttonpress() == LEFT_BUTTON && dragging && - keyframe_hairline == HAIRLINE_DRAGGING ) { + keyframe_hairline == HAIRLINE_DRAGGING ) { draw_hairline(mwindow->session->drag_auto, RED, 1); return; } @@ -3571,6 +3571,9 @@ int TrackCanvas::draw_hairline(Auto *auto_keyframe, int color, int show) calculate_viewport(track, view_start, unit_start, view_end, unit_end, yscale, center_pixel, zoom_sample, zoom_units); + if( auto_keyframe->position < unit_start || + auto_keyframe->position >= unit_end ) + return 0; double ax = 0, ay = 0; calculate_auto_position(&ax, &ay, 0, 0, 0, 0, @@ -4909,7 +4912,10 @@ int TrackCanvas::do_edits(int cursor_x, int cursor_y, int button_press, int drag double start_position = 0; mwindow->session->drag_group = mwindow->selected_edits_to_clip(0, &start_position, - &mwindow->session->drag_group_first_track); + &mwindow->session->drag_group_first_track, + mwindow->edl->session->labels_follow_edits, + mwindow->edl->session->autos_follow_edits, + mwindow->edl->session->plugins_follow_edits); if( mwindow->session->drag_group ) { mwindow->session->current_operation = DRAG_GROUP; mwindow->session->drag_group_position = start_position; @@ -5359,7 +5365,7 @@ void TrackCanvas::show_message(Auto *current, int show_curve_type, const char *f va_list ap; va_start(ap, fmt); vsnprintf(cp, ep-cp, fmt, ap); - va_end(ap); + va_end(ap); gui->show_message(string); } diff --git a/cinelerra-5.1/cinelerra/tracksedit.C b/cinelerra-5.1/cinelerra/tracksedit.C index d97800ce..c050f5f8 100644 --- a/cinelerra-5.1/cinelerra/tracksedit.C +++ b/cinelerra-5.1/cinelerra/tracksedit.C @@ -72,7 +72,6 @@ int Tracks::clear(double start, double end, int clear_plugins, int edit_autos) 1, // labels clear_plugins, // edit_plugins edit_autos, - 1, // convert_units 0); // trim_edits } } @@ -741,39 +740,6 @@ void Tracks::move_edits(ArrayList *edits, } } -void Tracks::move_group(EDL *group, Track *first_track, double position, int overwrite) -{ - for( Track *track=first; track; track=track->next ) { - if( !track->record ) continue; - for( Edit *edit=track->edits->first; edit; edit=edit->next ) { - if( !edit->is_selected ) continue; - edit->mute(); - edit->is_selected = 0; - edit->group_id = 0; - } - } - Track *src = group->tracks->first; - for( Track *track=first_track; track && src; track=track->next ) { - if( !track->record ) continue; - int64_t pos = track->to_units(position, 0); - for( Edit *edit=src->edits->first; edit; edit=edit->next ) { - if( edit->silence() ) continue; - int64_t start = pos + edit->startproject; - int64_t end = start + edit->length; - if( overwrite ) - track->edits->clear(start, end); - Edit *dst = track->edits->insert_new_edit(start); - dst->copy_from(edit); - dst->startproject = start; - dst->is_selected = 1; - while( (dst=dst->next) != 0 ) - dst->startproject += edit->length; - } - track->optimize(); - src = src->next; - } -} - void Tracks::move_effect(Plugin *plugin, Track *track, int64_t position) { Track *source_track = plugin->track; diff --git a/cinelerra-5.1/plugins/theme_blond/data/clip_icon.png b/cinelerra-5.1/plugins/theme_blond/data/clip_icon.png index a22851ff759d72a76ad2906349b31f6795fa6084..7eda3795b12608b83eb00a21e212baf312a3dd1f 100644 GIT binary patch delta 972 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 diff --git a/cinelerra-5.1/plugins/theme_blue/data/clip_icon.png b/cinelerra-5.1/plugins/theme_blue/data/clip_icon.png index bf69459dc08f47acc907c3e68b7ea248209ee812..7eda3795b12608b83eb00a21e212baf312a3dd1f 100644 GIT binary patch delta 972 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 delta 1439 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 diff --git a/cinelerra-5.1/plugins/theme_unflat/data/clip_icon.png b/cinelerra-5.1/plugins/theme_unflat/data/clip_icon.png index 7122770f646adfa784f8f1d8257ce5a87e910119..7eda3795b12608b83eb00a21e212baf312a3dd1f 100644 GIT binary patch delta 972 zcmey$^@x3fNlpinR(g8$%zH2dih1^v)|cB0Tro&6oq7#QGW{5zzft+U*cF=l96A;5S*B+;G#Ea_q(q^8EueJE~&-I zMVSR9nfZBy3=ELlbp@y`2&Bz9zo4=xGd-h(!P!~Cv81FZGpQ70hHh{M(D9Brnc1ld z86_nJR{HwMMXB|PC7ETZ$@#gt`FX`4&*YL~p=pPPAVr5`p zYVdS%49RGGJIg*>#8KkdeDfHgi)KGr(hQq+a!mWDdE_rc6JxYDcXqUQv|y9(u8?IL zrg@7diwiSlIV2_i;R?JUQ72~oXy?1NJI|i0ep6*{@$H>$ecHUr88?6GTQV(~SCz-W zmcwlJYSR_I3#!Qny^9Zddj!p@c3Xb+Sq#In#={qM_A^|T+ZAV8?t5wHhrer%{py}Nw2GMr&JZdrW%Ku%6>f7(p37d{@lB%^PfzGLw58G}r~ndgDi z--a-VvrGIw+B)Oc#@SEnr!1+Sq~{&Qz47@ZAy4l~i};?+oiTIv&2>v+J(>EPew;Y- zP4(^ZE7NM8PkYyM)^uvv?Cx6&pH%3+47k*{_}PsA>3adO9|N z)ndXH^~`l$39Le%)roz(giaX-TbeImj$xEzjAngp*zo!5)csp@ikY7+m2a$9KcM@- zCoqaza>f$xQ_~bzE|EU<&FWNz;!AhOKT~Jgu1$Eadg%Gu znTiTe-{&@5-e9w4V?y4}V@5g5na9sm9oY41_0I31XIe|LSwFrq4QJVZe`osvwWIIn zc(*gDFlRlN{V-!v`MV`do4jAt4xnkVYQ{=?)z#Ft>X{_?z9hd-$~iTuTT6(65%6r9(&n_@F50CZ?&ZDn6|Zf0y@bT4FKbYU-JY-w;`X=870 zE^uyVHVD6+0000UbVXQnL}7Gg0918lAWvg-ATu!_F*iCeH###gATls9Hws6eaTWjo z02_2gSad{Xb7OJ^?c_2_|d2DQHbGj?xv3~#n1iDE?K~!jg?V4X~ zQ&k+tKfil#+cB7>Wt$Fzn;H!!#t|__U3@V!B*w(>03kju;l&q{0&0kf8hv9Do{TY? zNYt1ZQN#ojGKpsL=RtH68Bjo}y2ja37|7bL?fLo87H36Z+_RN6`y{sy?ak@;dw;** z`JHoGp@z+yH-C$WL_}mQuo_qaw26q+-ditJRe?0{1F#d=WsFH}-MUq$-uExT8#iuj zab33$cuhoFW=*XR%04--s#{d`qyGN>^VQETo7=Q$(^B9K5m{FUjlQXvd>?qezrX(v zsF;hzVlBYibJf^XRP{69*=^gl<-AxdCaT&8tgE=6>wm0P)mMNQWy6LIQ6M2AiyFb4 zh@h%xRrN8?7_+ufjKSsF3#)3Mr>d(P#n==)pw~0Tthk9ck>2nm_uoFj@K}&tM_Wja2Wbi@!tAB1C39d@sp?iOPbs%8 zD$=$%&&sAdX4DonRl0pIBy6h~!6x8_W(hd+R@$>O8AAY)wkrNR_4955ioxRyot1737 ztEA5cdGDPr4jhh>%ej?wEcw=DdA7X%x_?uJOA{_T_q4Kepq*^i#dWVe<4y-Fkt>;s z!D|Q;DMxtxqRY1wCnt}$A61KONmLjL9{(nk}qaZML&gJl#5FZaNB>sC7 z3xbBGV5u^OZyEo=&V*trX;~vs1n?j=?y&!Kh=C(Ph7$oC5f%iC0M?^56^qNSe}BfQ zn#xWJdxl-UJ{jOx(j`|A03}^z``tN~3VcEiOS965}OG^*=rV zETyFYzm69x`#0aiS;P9drOy?URe$DBoaZX@=H@C5UvtyjtIQoro~ovSM*Pu#%rnM( z53H)Uk{KZBsp=;*p1C5hPnIuV-Uh^h#dQ{BlM5o!?G=l~wBtBifH&){$RgY0@%R}x zlgSW`Mo+2gQdRA?agJH%Yi}SBSf5Iz)CI_7GPy`3auB!+xUaqs-4}a-XItX&cmZnq zTW4oyljArq1M7h><$u53>=c0sV0%8Fe>Is*US4utv3YlOb=?c}0lh#6(9X?ev;>R+ kNnoF