package Ġme . anno . ui . editor . cut ting Ċ Ċ import Ġme . anno . config . Default Style Ċ import Ġme . anno . objects . Transform Ċ import Ġme . anno . objects . Video Ċ import Ġme . anno . studio . re ms . Rem s Studio Ċ import Ġme . anno . ui . editor . Timeline Panel Ċ import Ġorg . j om l . Vector 4 f Ċ Ċ class ĠLayer View Computer ( val Ġview : ĠLayer View ) Ġ{ ĊĊĠĠĠ Ġvar Ġis Calcul ating Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġcalculated : ĠList < Transform > ĊĊĠĠĠ Ġfun Ġcalculate Solution ( x 0 : ĠInt , Ġy 0 : ĠInt , Ġx 1 : ĠInt , Ġy 1 : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġis Calcul ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview . needs Update Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= ĠLayer Stripe Solution ( x 0 , Ġy 0 , Ġx 1 , Ġy 1 , ĠTimeline Panel . central Time ) ĊĠĠĠĠĠĠĠ Ġval Ġstri pes Ġ= Ġsolution . lines ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠRem s Studio . root ĊĊĠĠĠĠĠĠĠ Ġval Ġtransforms Ġ= Ġview . find Elements () ĊĊĠĠĠĠĠĠĠ Ġ// Ġload Ġall Ġmet as ĊĠĠĠĠĠĠĠ Ġfor Ġ( transform Ġin Ġtransforms ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transform Ġis ĠVideo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform . update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform . forced Meta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . calculated Ġ= Ġtransforms ĊĊĠĠĠĠĠĠĠ Ġval Ġtimeline Slot Ġ= Ġview . timeline Slot ĊĠĠĠĠĠĠĠ Ġval Ġdrawn Ġ= Ġtransforms . filter Ġ{ Ġit . timeline Slot . value Ġ== Ġtimeline Slot Ġ}. reversed () ĊĠĠĠĠĠĠĠ Ġview . draw n Ġ= Ġdrawn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( draw n . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute ( x 0 , Ġx 1 , Ġroot , Ġtransforms , Ġdrawn , Ġstri pes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( list Ġin Ġstri pes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . remove If Ġ{ Ġ! it . needs Draw n () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . solution Ġ= Ġsolution ĊĠĠĠĠĠĠĠ Ġview . invalidate Drawing () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute ( ĊĠĠĠĠĠĠĠ Ġx 0 : ĠInt , Ġx 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġroot : ĠTransform , Ġtransforms : ĠList < Transform >, Ġdrawn : ĠList < Transform >, ĊĠĠĠĠĠĠĠ Ġstri pes : ĠArray < ArrayList < Gradient >> ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstep Size Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġleft Time Ġ= Ġview . getTime At ( x 0 . toFloat ()) ĊĠĠĠĠĠĠĠ Ġval Ġdt Ġ= ĠTimeline Panel . dt Half Length Ġ* Ġ 2 . 0 Ġ/ Ġview . w ĊĠĠĠĠĠĠĠ Ġval Ġwhite Ġ= ĠDefault Style . white 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġtransforms . size ĊĊĠĠĠĠĠĠĠ Ġ// Ġhash maps Ġare Ġslower , Ġbut Ġthread Ġsafe ĊĠĠĠĠĠĠĠ Ġval Ġlocal Time Ġ= ĠDouble Array ( size ) ĊĠĠĠĠĠĠĠ Ġval Ġlocal Color Ġ= ĠArray ( size ) Ġ{ ĠVector 4 f () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġparent Indices Ġ= ĠInt Array ( size ) ĊĠĠĠĠĠĠĠ Ġval Ġtransform Map Ġ= ĠHashMap < Transform , ĠInt >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtransforms . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Map [ transforms [ i ]] Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġtransforms . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Indices [ i ] Ġ= Ġtransform Map [ transforms [ i ]. parent ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdrawn Indices Ġ= Ġdrawn . map Ġ{ Ġtransform Map [ it ] !! Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġx 0 Ġuntil Ġx 1 Ġstep Ġstep Size ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġx Ġ- Ġx 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglobal Time Ġ= Ġleft Time Ġ+ Ġi Ġ* Ġdt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Time Ġ= Ġroot . getLocal Time ( global Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Time [ 0 ] Ġ= Ġroot Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Color [ 0 ] Ġ= Ġroot . getLocal Color ( white , Ġroot Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġparent Indices [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransform Ġ= Ġtransforms [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Time Ġ= Ġlocal Time [ parent ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Time I Ġ= Ġtransform . getLocal Time ( parent Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Time [ index ] Ġ= Ġlocal Time I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Color [ index ] Ġ= Ġtransform . getLocal Color ( local Color [ parent ], Ġlocal Time I , Ġlocal Color [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr s @ Ġfor Ġ( index Ġin Ġdrawn Indices ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtr Ġ= Ġtransforms [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġlocal Color [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġlocal Time [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( process ( x , Ġstep Size , Ġtr , Ġcolor , Ġtime , Ġstri pes , Ġline Index )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġbreak @ trs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 Ġ-> Ġline Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess ( ĊĠĠĠĠĠĠĠ Ġx : ĠInt , Ġstep Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġtr : ĠTransform , Ġcolor : ĠVector 4 f , Ġtime : ĠDouble , ĊĠĠĠĠĠĠĠ Ġstri pes : ĠArray < ArrayList < Gradient >>, Ġline Index : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġcolor . w Ġ* Ġview . alpha Multiplier ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! tr . isVisible ( time )) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ>= ĠLayer View . min Alpha ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor . w Ġ= Ġalpha ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġstri pes [ line Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ> ĠLayer View . min Alpha ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ+= ĠGradient ( tr , Ġx , Ġx , Ġcolor , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Ġelse Ġnot Ġworth Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġlist . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last . owner Ġ=== Ġtr Ġ&& Ġlast . x 1 Ġ+ Ġstep Size Ġ>= Ġx Ġ&& Ġlast . is Linear ( x , Ġstep Size , Ġcolor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast . set End ( x , Ġstep Size , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ+= ĠGradient ( tr , Ġx Ġ- Ġstep Size Ġ+ Ġ 1 , Ġx , Ġcolor , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Index Ġ+ Ġ 1 Ġ>= ĠLayer View . max Lines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĊĠĠĠ Ġ} Ċ Ċ }