X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvtrack.C;h=826144ad4121b2646d00a68d84914743be51e294;hp=c8a34e45931571fad1b4fc8d150571c3e663c367;hb=33aae273918725085d841a8af927bfccd2aa9364;hpb=a2ebbc5e88800bd740652a32285f8145a1acfdc6 diff --git a/cinelerra-5.1/cinelerra/vtrack.C b/cinelerra-5.1/cinelerra/vtrack.C index c8a34e45..826144ad 100644 --- a/cinelerra-5.1/cinelerra/vtrack.C +++ b/cinelerra-5.1/cinelerra/vtrack.C @@ -484,37 +484,48 @@ int VTrack::get_projection(float &in_x1, float &in_y1, float &in_x2, float &in_y -inline void addto_value(FloatAuto *fauto, float offset) +static inline void addto_value(FloatAuto *fauto, float offset) { fauto->set_value(fauto->get_value() + offset); } - -void VTrack::translate(float offset_x, float offset_y, int do_camera) +static inline void multiply_value(FloatAuto *fauto, float scale) { - int subscript; - if(do_camera) - subscript = AUTOMATION_CAMERA_X; - else - subscript = AUTOMATION_PROJECTOR_X; + fauto->set_value(fauto->get_value() * scale); +} -// Translate default keyframe - addto_value((FloatAuto*)automation->autos[subscript]->default_auto, offset_x); - addto_value((FloatAuto*)automation->autos[subscript + 1]->default_auto, offset_y); -// Translate everyone else - for(Auto *current = automation->autos[subscript]->first; - current; - current = NEXT) - { - addto_value((FloatAuto*)current, offset_x); - } +void VTrack::set_fauto_xy(int fauto, float x, float y) +{ +// set default keyframe + FloatAuto *xdft = (FloatAuto *)automation->autos[fauto+0]->default_auto; + FloatAuto *ydft = (FloatAuto *)automation->autos[fauto+1]->default_auto; + xdft->set_value(x); + ydft->set_value(y); +// set everyone else + FloatAuto *xauto = (FloatAuto *)automation->autos[fauto+0]->first; + FloatAuto *yauto = (FloatAuto *)automation->autos[fauto+1]->first; + for( ; xauto; xauto=(FloatAuto *)xauto->next ) xauto->set_value(x); + for( ; yauto; yauto=(FloatAuto *)yauto->next ) yauto->set_value(y); +} - for(Auto *current = automation->autos[subscript + 1]->first; - current; - current = NEXT) - { - addto_value((FloatAuto*)current, offset_y); +void VTrack::translate(int fauto, float dx, float dy, int all) +{ + if( all ) { + addto_value((FloatAuto*)automation->autos[fauto+0]->default_auto, dx); + addto_value((FloatAuto*)automation->autos[fauto+1]->default_auto, dy); + FloatAutos **fautos = (FloatAutos **)&automation->autos; + FloatAuto *xauto = (FloatAuto *)fautos[fauto+0]->first; + FloatAuto *yauto = (FloatAuto *)fautos[fauto+1]->first; + for( ; xauto; xauto=(FloatAuto *)xauto->next ) addto_value(xauto, dx); + for( ; yauto; yauto=(FloatAuto *)yauto->next ) addto_value(yauto, dy); + } + else { + FloatAutos **fautos = (FloatAutos **)&automation->autos; + FloatAuto *xauto = (FloatAuto *)fautos[fauto+0]->get_auto_for_editing(-1, 1); + FloatAuto *yauto = (FloatAuto *)fautos[fauto+1]->get_auto_for_editing(-1, 1); + addto_value(xauto, dx); + addto_value(yauto, dy); } }