X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpatchbay.C;h=fb0339a95be3c9be82aaed956df8bbb1fc3fabce;hp=3292eeb5543911fe576d85f51b266b77d4de1e75;hb=84ac8a2bb3357c04a3f67cf763b0f61ddbbd021d;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/patchbay.C b/cinelerra-5.1/cinelerra/patchbay.C index 3292eeb5..fb0339a9 100644 --- a/cinelerra-5.1/cinelerra/patchbay.C +++ b/cinelerra-5.1/cinelerra/patchbay.C @@ -283,6 +283,7 @@ int PatchBay::cursor_motion_event() track; track = track->next) { + if( track->is_hidden() ) continue; int y = track->y_pixel - mwindow->edl->local_session->track_start[pane->number]; int h = track->vertical_span(mwindow->theme); if(cursor_y >= y && cursor_y < y + h) @@ -301,16 +302,16 @@ int PatchBay::cursor_motion_event() } break; case Tracks::RECORD: - if(track->record != new_status) + if(track->armed != new_status) { - track->record = new_status; + track->armed = new_status; update_gui = 1; } break; case Tracks::GANG: - if(track->gang != new_status) + if(track->ganged != new_status) { - track->gang = new_status; + track->ganged = new_status; update_gui = 1; } break; @@ -451,10 +452,9 @@ int PatchBay::update() // Every patch has a GUI regardless of whether or not it is visible. // Make sure GUI's are allocated for every patch and deleted for non-existant // patches. - for(Track *current = mwindow->edl->tracks->first; - current; - current = NEXT, patch_count++) + for(Track *current = mwindow->edl->tracks->first; current; current = NEXT) { + if( current->is_hidden() ) continue; PatchGUI *patchgui = 0; int y = current->y_pixel; y -= mwindow->edl->local_session->track_start[pane->number]; @@ -502,6 +502,7 @@ int PatchBay::update() patches.append(patchgui); patchgui->create_objects(); } + ++patch_count; } while(patches.total > patch_count) @@ -514,52 +515,30 @@ int PatchBay::update() return 0; } -void PatchBay::synchronize_faders(float change, int data_type, Track *skip) +void PatchBay::synchronize_faders(float dv, int data_type, Track *skip, int edge, int span) { - for(Track *current = mwindow->edl->tracks->first; - current; - current = NEXT) - { - if(current->data_type == data_type && - current->gang && - current->record && - current != skip) - { - FloatAutos *fade_autos = (FloatAutos*)current->automation->autos[AUTOMATION_FADE]; - double position = mwindow->edl->local_session->get_selectionstart(1); - - - FloatAuto *keyframe = (FloatAuto*)fade_autos->get_auto_for_editing(position); - - float new_value = keyframe->get_value() + change; - if(data_type == TRACK_AUDIO) - CLAMP(new_value, - mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_AUDIO_FADE], - mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_AUDIO_FADE]); - else - CLAMP(new_value, - mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_VIDEO_FADE], - mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_VIDEO_FADE]); - - keyframe->set_value(new_value); - - PatchGUI *patch = get_patch_of(current); - if(patch) patch->update(patch->x, patch->y); - } + for( Track *current=mwindow->edl->tracks->first; current; current=NEXT ) { + if( current == skip ) continue; + if( skip && !current->armed_gang(skip) ) continue; + if( current->data_type != data_type ) continue; + if( !current->is_armed() ) continue; + FloatAutos *fade_autos = (FloatAutos*)current->automation->autos[AUTOMATION_FADE]; + double position = mwindow->edl->local_session->get_selectionstart(1); + FloatAuto *float_auto = (FloatAuto*)fade_autos->get_auto_for_editing(position); + int64_t pos = float_auto->position; + float_auto->bump_update(pos, dv, edge, span); + PatchGUI *patch = get_patch_of(current); + if( patch ) patch->update(patch->x, patch->y); } } void PatchBay::synchronize_nudge(int64_t value, Track *skip) { - for(Track *current = mwindow->edl->tracks->first; - current; - current = NEXT) - { - if(current->data_type == skip->data_type && - current->gang && - current->record && - current != skip) - { + Track *current = mwindow->edl->tracks->first; + for( ; current; current = NEXT ) { + if( current->data_type == skip->data_type && + current->armed_gang(skip) && current->is_armed() && + current != skip ) { current->nudge = value; PatchGUI *patch = get_patch_of(current); if(patch) patch->update(patch->x, patch->y);