/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠAnt on ĠTr ush kov Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġapp . the le ma . ui Ċ Ċ import Ġapp . the le ma . g 2 d . Batch Ċ import Ġapp . the le ma . math . MATH Ċ import Ġapp . the le ma . math . Rectangle Ċ import Ġapp . the le ma . math . Vec 2 Ċ import Ġapp . the le ma . utils . Color Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min ĊĊ Ċ /** ĠA Ġgroup Ġthat Ġscroll s Ġa Ġchild Ġcom . ks df v . the le ma . studio . widget Ġusing Ġscroll bars Ġand / or Ġmouse Ġor Ġtouch Ġdragging . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe Ġcom . ks df v . the le ma . studio . widget Ġis Ġsized Ġto Ġits Ġpreferred Ġsize . ĠIf Ġthe Ġcom . ks df v . the le ma . studio . widget 's Ġpreferred Ġwidth Ġor Ġheight Ġis Ġless Ġthan Ġthe Ġsize Ġof Ġthis Ġscroll Ġpane , Ċ Ġ* Ġit Ġis Ġset Ġto Ġthe Ġsize Ġof Ġthis Ġscroll Ġpane . ĠScroll bars Ġappear Ġwhen Ġthe Ġcom . ks df v . the le ma . studio . widget Ġis Ġlarger Ġthan Ġthe Ġscroll Ġpane . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe Ġscroll Ġpane 's Ġpreferred Ġsize Ġis Ġthat Ġof Ġthe Ġchild Ġcom . ks df v . the le ma . studio . widget . ĠAt Ġthis Ġsize , Ġthe Ġchild Ġcom . ks df v . the le ma . studio . widget Ġwill Ġnot Ġneed Ġto Ġscroll , Ġso Ġthe Ċ Ġ* Ġscroll Ġpane Ġis Ġtypically Ġsized Ġby Ġignoring Ġthe Ġpreferred Ġsize Ġin Ġone Ġor Ġboth Ġdirections . Ċ Ġ* Ġ@ author Ġm zech ner , ĠN athan ĠS weet Ċ Ġ*/ Ċ open Ġclass ĠScroll Pane Ġ( ĊĠĠĠ Ġwidget : ĠActor ? Ġ= Ġnull , ĊĠĠĠ Ġfocus On Mouse Enter : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġstyle : ĠScroll Pane Style Ġ= ĠScroll Pane Style () Ċ ) Ġ: ĠWidget Group () Ġ{ ĊĠĠĠ Ġvar Ġstyle : ĠScroll Pane Style Ġ= Ġstyle ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Hierarchy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġwidget : ĠActor ? Ġ= Ġnull ĊĠĠĠ Ġval Ġh Scroll Bounds Ġ= ĠRectangle () ĊĠĠĠ Ġval Ġv Scroll Bounds Ġ= ĠRectangle () ĊĠĠĠ Ġval Ġh Kn ob Bounds Ġ= ĠRectangle () ĊĠĠĠ Ġval Ġv Kn ob Bounds Ġ= ĠRectangle () ĊĠĠĠ Ġprivate Ġval Ġwidget Area Bounds Ġ= ĠRectangle () ĊĠĠĠ Ġprivate Ġval Ġwidget Cull ing Area Ġ= ĠRectangle () ĊĠĠĠ Ġprivate Ġval Ġf lick Scroll Listener : ĠActor Gesture Listener ĊĠĠĠ Ġvar Ġscroll X Ġ= Ġfalse ĊĠĠĠ Ġvar Ġscroll Y Ġ= Ġfalse ĊĠĠĠ Ġvar Ġv Scroll On Right Ġ= Ġtrue ĊĠĠĠ Ġvar Ġh Scroll On Bottom Ġ= Ġtrue ĊĠĠĠ Ġvar Ġamount X Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġamount Y Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġvisual Amount X Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġvisual Amount Y Ġ= Ġ 0 f ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġmaximum Ġscroll Ġvalue Ġin Ġthe Ġx Ġdirection . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġmax X Ġ= Ġ 0 f ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġmaximum Ġscroll Ġvalue Ġin Ġthe Ġy Ġdirection . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġmax Y Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġtouch Scroll H Ġ= Ġfalse ĊĠĠĠ Ġvar Ġtouch Scroll V Ġ= Ġfalse ĊĠĠĠ Ġval Ġlast Point Ġ= ĠVec 2 () ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġwidth Ġof Ġthe Ġsc rolled Ġviewport . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġscroll Width Ġ= Ġ 0 f ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġheight Ġof Ġthe Ġsc rolled Ġviewport . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġscroll Height Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĠWhen Ġtrue Ġthe Ġscroll bars Ġdon 't Ġreduce Ġthe Ġscroll able Ġsize Ġand Ġfade Ġout Ġafter Ġsome Ġtime Ġof Ġnot Ġbeing Ġused . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġfade ScrollBar s Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! value ) Ġfade Alpha Ġ= Ġfade Alpha Seconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsmooth Scrolling Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĠWhen Ġfalse , Ġthe Ġscroll Ġbars Ġdon 't Ġrespond Ġto Ġtouch Ġor Ġmouse Ġevents . ĠDefault Ġis Ġtrue . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġscroll Bar Touch Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġfade Alpha Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġfade Alpha Seconds Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġfade Delay Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġfade Delay Seconds Ġ= Ġ 1 f ĊĊĠĠĠ Ġ/** ĠWhen Ġtrue Ġ( default ) Ġand Ġf lick Ġscrolling Ġbegins , Ġ[ is Cancel Touch Focus ] Ġis Ġcalled . ĠThis Ġcauses Ġany Ġwidgets Ġinside Ġthe ĊĠĠĠĠ Ġ* Ġscroll pane Ġthat Ġhave Ġreceived Ġtouch Down Ġto Ġreceive Ġtouch Up Ġwhen Ġf lick Ġscrolling Ġbegins . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġis Cancel Touch Focus Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġf lick Scroll Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value ) Ġadd Listener ( f lick Scroll Listener ) Ġelse Ġremove Listener ( f lick Scroll Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĠGets Ġthe Ġf lick Ġscroll Ġx Ġvelocity . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġvelocity X Ġ= Ġ 0 f ĊĠĠĠ Ġ/** ĠGets Ġthe Ġf lick Ġscroll Ġy Ġvelocity . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġvelocity Y Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġfl ing Timer Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġover scroll X Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġover scroll Y Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĠFor Ġf lick Ġscroll , Ġsets Ġthe Ġamount Ġof Ġtime Ġin Ġseconds Ġthat Ġa Ġfl ing Ġwill Ġcontinue Ġto Ġscroll . ĠDefault Ġis Ġ 1 . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġfl ing Time Ġ= Ġ 1 f ĊĊĠĠĠ Ġvar Ġover scroll Distance Ġ= Ġ 5 0 f ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġover scroll Speed Min Ġ= Ġ 3 0 f ĊĠĠĠ Ġprivate Ġvar Ġover scroll Speed Max Ġ= Ġ 2 0 0 f ĊĠĠĠ Ġvar Ġis Force Scroll X Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġis Force Scroll Y Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġis Scrolling Disabled X Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Scrolling Disabled Y Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĠFor Ġf lick Ġscroll , Ġprevents Ġscrolling Ġout Ġof Ġthe Ġcom . ks df v . the le ma . studio . widget 's Ġbounds . ĠDefault Ġis Ġtrue . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġis Clamp Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĠWhen Ġfalse Ġ( the Ġdefault ), Ġthe Ġcom . ks df v . the le ma . studio . widget Ġis Ġcli pped Ġso Ġit Ġis Ġnot Ġdrawn Ġunder Ġthe Ġscroll bars . ĠWhen Ġtrue , Ġthe Ġcom . ks df v . the le ma . studio . widget Ġis Ġcli pped ĊĠĠĠĠ Ġ* Ġto Ġthe Ġentire Ġscroll Ġpane Ġbounds Ġand Ġthe Ġscroll bars Ġare Ġdrawn Ġon Ġtop Ġof Ġthe Ġcom . ks df v . the le ma . studio . widget . ĠIf Ġ[ fade ScrollBar s ] ĊĠĠĠĠ Ġ* Ġis Ġtrue , Ġthe Ġscroll Ġbars Ġare Ġalways Ġdrawn Ġon Ġtop . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġscroll bars On Top Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠIf Ġtrue , Ġthe Ġscroll Ġkn obs Ġare Ġsized Ġbased Ġon Ġ[ getMax X ] Ġor Ġ[ getMax Y ]. ĠIf Ġfalse , Ġthe Ġscroll Ġkn obs Ġare Ġsized ĊĠĠĠĠ Ġ* Ġbased Ġon Ġ[ Drawable . getMin Width ] Ġor Ġ[ Drawable . getMin Height ]. ĠDefault Ġis Ġtrue . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġvariable Size Kn obs Ġ= Ġtrue ĊĠĠĠ Ġvar Ġdragging Pointer Ġ= Ġ- 1 ĊĊĠĠĠ Ġ/** ĠShows Ġor Ġhide s Ġthe Ġscroll bars Ġfor Ġwhen Ġusing Ġ[ fade ScrollBar s ]. Ġ Ġ*/ ĊĠĠĠ Ġfun Ġset Scroll bars Visible ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade Alpha Ġ= Ġfade Alpha Seconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade Delay Ġ= Ġfade Delay Seconds ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade Alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade Delay Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCancel s Ġthe Ġstage 's Ġtouch Ġfocus Ġfor Ġall Ġlisteners Ġexcept Ġthis Ġscroll Ġpane 's Ġf lick Ġscroll Ġlistener . ĠThis Ġcauses Ġany Ġwidgets ĊĠĠĠĠ Ġ* Ġinside Ġthe Ġscroll pane Ġthat Ġhave Ġreceived Ġtouch Down Ġto Ġreceive Ġtouch Up . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Cancel Touch Focus ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcancel Touch Focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstage Ġ= Ġh ud ĊĠĠĠĠĠĠĠ Ġstage ?. cancel Touch Focus Except ( f lick Scroll Listener , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠIf Ġcurrently Ġscrolling Ġby Ġtracking Ġa Ġtouch Ġdown , Ġstop Ġscrolling . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġdragging Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġtouch Scroll H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtouch Scroll V Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġf lick Scroll Listener . gesture Detector . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclamp () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Clamp ) Ġreturn ĊĠĠĠĠĠĠĠ Ġscroll X ( if Ġ( over scroll X ) ĠM ATH . clamp ( amount X , Ġ- over scroll Distance , Ġmax X Ġ+ Ġover scroll Distance ) Ġelse ĠM ATH . clamp ( amount X , Ġ 0 f , Ġmax X )) ĊĠĠĠĠĠĠĠ Ġscroll Y ( if Ġ( over scroll Y ) ĠM ATH . clamp ( amount Y , Ġ- over scroll Distance , Ġmax Y Ġ+ Ġover scroll Distance ) Ġelse ĠM ATH . clamp ( amount Y , Ġ 0 f , Ġmax Y )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġact ( delta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . act ( delta ) ĊĠĠĠĠĠĠĠ Ġval Ġp anning Ġ= Ġf lick Scroll Listener . gesture Detector . is P anning ĊĠĠĠĠĠĠĠ Ġvar Ġanim ating Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( fade Alpha Ġ> Ġ 0 Ġ&& Ġfade ScrollBar s Ġ&& Ġ! p anning Ġ&& Ġ! touch Scroll H Ġ&& Ġ! touch Scroll V ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade Delay Ġ-= Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fade Delay Ġ<= Ġ 0 ) Ġfade Alpha Ġ= Ġmax ( 0 f , Ġfade Alpha Ġ- Ġdelta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( fl ing Timer Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġfl ing Timer Ġ/ Ġfl ing Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount X Ġ-= Ġvelocity X Ġ* Ġalpha Ġ* Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Y Ġ-= Ġvelocity Y Ġ* Ġalpha Ġ* Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclamp () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġfl ing Ġif Ġhit Ġover scroll Ġdistance . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount X Ġ== Ġ- over scroll Distance ) Ġvelocity X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount X Ġ>= Ġmax X Ġ+ Ġover scroll Distance ) Ġvelocity X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ== Ġ- over scroll Distance ) Ġvelocity Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ>= Ġmax Y Ġ+ Ġover scroll Distance ) Ġvelocity Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Timer Ġ-= Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl ing Timer Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( smooth Scrolling Ġ&& Ġfl ing Timer Ġ<= Ġ 0 Ġ&& Ġ! p anning Ġ&& Ġ Ġ// Ċ // ĠScroll Ġsmooth ly Ġwhen Ġgrab bing Ġthe Ġscrollbar Ġif Ġone Ġpixel Ġof Ġscrollbar Ġmovement Ġis Ġ> Ġ 1 0 % Ġof Ġthe Ġscroll Ġarea . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ((! touch Scroll H Ġ|| Ġscroll X Ġ&& Ġmax X Ġ/ Ġ( h Scroll Bounds . width Ġ- Ġh Kn ob Bounds . width ) Ġ> Ġscroll Width Ġ* Ġ 0 . 1 f ) Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ(! touch Scroll V Ġ|| Ġscroll Y Ġ&& Ġmax Y Ġ/ Ġ( v Scroll Bounds . height Ġ- Ġv Kn ob Bounds . height ) Ġ> Ġscroll Height Ġ* Ġ 0 . 1 f )) Ġ// ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visual Amount X Ġ!= Ġamount X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visual Amount X Ġ< Ġamount X ) Ġvisual Scroll X ( min ( amount X , Ġvisual Amount X Ġ+ Ġmax ( 2 0 0 Ġ* Ġdelta , Ġ( amount X Ġ- Ġvisual Amount X ) Ġ* Ġ 7 Ġ* Ġdelta ))) Ġelse Ġvisual Scroll X ( max ( amount X , Ġvisual Amount X Ġ- Ġmax ( 2 0 0 Ġ* Ġdelta , Ġ( visual Amount X Ġ- Ġamount X ) Ġ* Ġ 7 Ġ* Ġdelta ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visual Amount Y Ġ!= Ġamount Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visual Amount Y Ġ< Ġamount Y ) Ġvisual Scroll Y ( min ( amount Y , Ġvisual Amount Y Ġ+ Ġmax ( 2 0 0 Ġ* Ġdelta , Ġ( amount Y Ġ- Ġvisual Amount Y ) Ġ* Ġ 7 Ġ* Ġdelta ))) Ġelse Ġvisual Scroll Y ( max ( amount Y , Ġvisual Amount Y Ġ- Ġmax ( 2 0 0 Ġ* Ġdelta , Ġ( visual Amount Y Ġ- Ġamount Y ) Ġ* Ġ 7 Ġ* Ġdelta ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visual Amount X Ġ!= Ġamount X ) Ġvisual Scroll X ( amount X ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visual Amount Y Ġ!= Ġamount Y ) Ġvisual Scroll Y ( amount Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! p anning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( over scroll X Ġ&& Ġscroll X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount X Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount X Ġ+= Ġ(( over scroll Speed Min Ġ+ Ġ( over scroll Speed Max Ġ- Ġover scroll Speed Min ) Ġ* Ġ- amount X Ġ/ Ġover scroll Distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġdelta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount X Ġ> Ġ 0 ) Ġscroll X ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( amount X Ġ> Ġmax X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount X Ġ-= Ġ( over scroll Speed Min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( over scroll Speed Max Ġ- Ġover scroll Speed Min ) Ġ* Ġ-( max X Ġ- Ġamount X ) Ġ/ Ġover scroll Distance ) Ġ* Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount X Ġ< Ġmax X ) Ġscroll X ( max X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( over scroll Y Ġ&& Ġscroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Y Ġ+= Ġ(( over scroll Speed Min Ġ+ Ġ( over scroll Speed Max Ġ- Ġover scroll Speed Min ) Ġ* Ġ- amount Y Ġ/ Ġover scroll Distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġdelta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ> Ġ 0 ) Ġscroll Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( amount Y Ġ> Ġmax Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Y Ġ-= Ġ( over scroll Speed Min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( over scroll Speed Max Ġ- Ġover scroll Speed Min ) Ġ* Ġ-( max Y Ġ- Ġamount Y ) Ġ/ Ġover scroll Distance ) Ġ* Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ< Ġmax Y ) Ġscroll Y ( max Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbg Ġ= Ġstyle . background ĊĠĠĠĠĠĠĠ Ġval Ġh Scroll Kn ob Ġ= Ġstyle . h Scroll Kn ob ĊĠĠĠĠĠĠĠ Ġval Ġv Scroll Kn ob Ġ= Ġstyle . v Scroll Kn ob ĊĠĠĠĠĠĠĠ Ġvar Ġbg Left Width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġbg Right Width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġbg Top Height Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġbg Bottom Height Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġif Ġ( bg Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Left Width Ġ= Ġbg . left Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Right Width Ġ= Ġbg . right Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Top Height Ġ= Ġbg . top Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Bottom Height Ġ= Ġbg . bottom Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġvar Ġscrollbar Height Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġif Ġ( h Scroll Kn ob Ġ!= Ġnull ) Ġscrollbar Height Ġ= Ġh Scroll Kn ob . min Height ĊĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġscrollbar Height Ġ= Ġmax ( scrollbar Height , Ġstyle . h Scroll !!. min Height ) ĊĠĠĠĠĠĠĠ Ġvar Ġscrollbar Width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġif Ġ( v Scroll Kn ob Ġ!= Ġnull ) Ġscrollbar Width Ġ= Ġv Scroll Kn ob . min Width ĊĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Ġ!= Ġnull ) Ġscrollbar Width Ġ= Ġmax ( scrollbar Width , Ġstyle . v Scroll !!. min Width ) ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġavailable Ġspace Ġsize Ġby Ġsubtract ing Ġbackground 's Ġpadded Ġarea . ĊĠĠĠĠĠĠĠ Ġscroll Width Ġ= Ġwidth Ġ- Ġbg Left Width Ġ- Ġbg Right Width ĊĠĠĠĠĠĠĠ Ġscroll Height Ġ= Ġheight Ġ- Ġbg Top Height Ġ- Ġbg Bottom Height ĊĠĠĠĠĠĠĠ Ġif Ġ( widget Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġcom . ks df v . the le ma . studio . widget 's Ġdesired Ġwidth . ĊĠĠĠĠĠĠĠ Ġvar Ġwidget Width : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġwidget Height : ĠFloat ĊĠĠĠĠĠĠĠ Ġif Ġ( widget Ġis ĠLayout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġwidget Ġas ĠLayout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Width Ġ= Ġlayout . pref Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Height Ġ= Ġlayout . pref Height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Width Ġ= Ġwidget !!. width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Height Ġ= Ġwidget !!. height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġif Ġhorizontal / vertical Ġscroll bars Ġare Ġneeded . ĊĠĠĠĠĠĠĠ Ġscroll X Ġ= Ġis Force Scroll X Ġ|| Ġwidget Width Ġ> Ġscroll Width Ġ&& Ġ! is Scrolling Disabled X ĊĠĠĠĠĠĠĠ Ġscroll Y Ġ= Ġis Force Scroll Y Ġ|| Ġwidget Height Ġ> Ġscroll Height Ġ&& Ġ! is Scrolling Disabled Y ĊĠĠĠĠĠĠĠ Ġval Ġfade Ġ= Ġfade ScrollBar s ĊĠĠĠĠĠĠĠ Ġif Ġ(! fade ) Ġ{ Ġ// ĠCheck Ġagain , Ġnow Ġtaking Ġinto Ġaccount Ġthe Ġarea Ġthat 's Ġtaken Ġup Ġby Ġany Ġenabled Ġscroll bars . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Width Ġ-= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! scroll X Ġ&& Ġwidget Width Ġ> Ġscroll Width Ġ&& Ġ! is Scrolling Disabled X ) Ġscroll X Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Height Ġ-= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! scroll Y Ġ&& Ġwidget Height Ġ> Ġscroll Height Ġ&& Ġ! is Scrolling Disabled Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Y Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Width Ġ-= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġbounds Ġof Ġthe Ġscroll able Ġarea Ġfor Ġthe Ġcom . ks df v . the le ma . studio . widget . ĊĠĠĠĠĠĠĠ Ġwidget Area Bounds . set ( bg Left Width , Ġbg Bottom Height , Ġscroll Width , Ġscroll Height ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fade ) Ġ{ Ġ// ĠMake Ġsure Ġcom . ks df v . the le ma . studio . widget Ġis Ġdrawn Ġunder Ġf ading Ġscroll bars . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X Ġ&& Ġscroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Height Ġ-= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Width Ġ-= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll bars On Top ) Ġ{ Ġ// ĠMake Ġsure Ġcom . ks df v . the le ma . studio . widget Ġis Ġdrawn Ġunder Ġnon - f ading Ġscroll bars . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X ) Ġwidget Area Bounds . height Ġ+= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Y ) Ġwidget Area Bounds . width Ġ+= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ĠOffset Ġcom . ks df v . the le ma . studio . widget Ġarea Ġy Ġfor Ġhorizontal Ġscrollbar Ġat Ġbottom . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X Ġ&& Ġh Scroll On Bottom ) Ġwidget Area Bounds . y Ġ+= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOffset Ġcom . ks df v . the le ma . studio . widget Ġarea Ġx Ġfor Ġvertical Ġscrollbar Ġat Ġleft . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Y Ġ&& Ġ! v Scroll On Right ) Ġwidget Area Bounds . x Ġ+= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġcom . ks df v . the le ma . studio . widget Ġis Ġsmaller Ġthan Ġthe Ġavailable Ġspace , Ġmake Ġit Ġtake Ġup Ġthe Ġavailable Ġspace . ĊĠĠĠĠĠĠĠ Ġwidget Width Ġ= Ġif Ġ( is Scrolling Disabled X ) Ġscroll Width Ġelse Ġmax ( scroll Width , Ġwidget Width ) ĊĠĠĠĠĠĠĠ Ġwidget Height Ġ= Ġif Ġ( is Scrolling Disabled Y ) Ġscroll Height Ġelse Ġmax ( scroll Height , Ġwidget Height ) ĊĠĠĠĠĠĠĠ Ġmax X Ġ= Ġwidget Width Ġ- Ġscroll Width ĊĠĠĠĠĠĠĠ Ġmax Y Ġ= Ġwidget Height Ġ- Ġscroll Height ĊĠĠĠĠĠĠĠ Ġif Ġ( fade ) Ġ{ Ġ// ĠMake Ġsure Ġcom . ks df v . the le ma . studio . widget Ġis Ġdrawn Ġunder Ġf ading Ġscroll bars . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X Ġ&& Ġscroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Y Ġ-= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax X Ġ-= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscroll X ( MATH . clamp ( amount X , Ġ 0 f , Ġmax X )) ĊĠĠĠĠĠĠĠ Ġscroll Y ( MATH . clamp ( amount Y , Ġ 0 f , Ġmax Y )) ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġbounds Ġand Ġscroll Ġkn ob Ġsizes Ġif Ġscroll bars Ġare Ġneeded . ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h Scroll Kn ob Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Scroll Height Ġ= Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġstyle . h Scroll !!. min Height Ġelse Ġh Scroll Kn ob . min Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcorner Ġgap Ġwhere Ġthe Ġtwo Ġscroll Ġbars Ġintersect Ġmight Ġhave Ġto Ġflip Ġfrom Ġright Ġto Ġleft . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds X Ġ= Ġif Ġ( v Scroll On Right ) Ġbg Left Width Ġelse Ġbg Left Width Ġ+ Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠScroll bar Ġon Ġthe Ġtop Ġor Ġbottom . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Y Ġ= Ġif Ġ( h Scroll On Bottom ) Ġbg Bottom Height Ġelse Ġheight Ġ- Ġbg Top Height Ġ- Ġh Scroll Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Scroll Bounds . set ( bounds X , Ġbounds Y , Ġscroll Width , Ġh Scroll Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variable Size Kn obs ) Ġh Kn ob Bounds . width Ġ= Ġmax ( h Scroll Kn ob . min Width , Ġ( h Scroll Bounds . width Ġ* Ġscroll Width Ġ/ Ġwidget Width )) Ġelse Ġh Kn ob Bounds . width Ġ= Ġh Scroll Kn ob . min Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h Kn ob Bounds . width Ġ> Ġwidget Width ) Ġh Kn ob Bounds . width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Kn ob Bounds . height Ġ= Ġh Scroll Kn ob . min Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Kn ob Bounds . x Ġ= Ġh Scroll Bounds . x Ġ+ Ġ(( h Scroll Bounds . width Ġ- Ġh Kn ob Bounds . width ) Ġ* Ġscroll Percent X ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Kn ob Bounds . y Ġ= Ġh Scroll Bounds . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Scroll Bounds . set ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Kn ob Bounds . set ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Scroll Kn ob Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Scroll Width Ġ= Ġif Ġ( style . v Scroll Ġ!= Ġnull ) Ġstyle . v Scroll !!. min Width Ġelse Ġv Scroll Kn ob . min Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġsmall Ġgap Ġwhere Ġthe Ġtwo Ġscroll Ġbars Ġintersect Ġmight Ġhave Ġto Ġflip Ġfrom Ġbottom Ġto Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds X : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Y : ĠFloat Ġ= Ġif Ġ( h Scroll On Bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġbg Top Height Ġ- Ġscroll Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg Bottom Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbar Ġon Ġthe Ġleft Ġor Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds X Ġ= Ġif Ġ( v Scroll On Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġbg Right Width Ġ- Ġv Scroll Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg Left Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Scroll Bounds . set ( bounds X , Ġbounds Y , Ġv Scroll Width , Ġscroll Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Kn ob Bounds . width Ġ= Ġv Scroll Kn ob . min Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variable Size Kn obs ) Ġv Kn ob Bounds . height Ġ= Ġmax ( v Scroll Kn ob . min Height , Ġ( v Scroll Bounds . height Ġ* Ġscroll Height Ġ/ Ġwidget Height )) Ġelse Ġv Kn ob Bounds . height Ġ= Ġv Scroll Kn ob . min Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Kn ob Bounds . height Ġ> Ġwidget Height ) Ġv Kn ob Bounds . height Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Scroll On Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Kn ob Bounds . x Ġ= Ġwidth Ġ- Ġbg Right Width Ġ- Ġv Scroll Kn ob . min Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Kn ob Bounds . x Ġ= Ġbg Left Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Kn ob Bounds . y Ġ= Ġv Scroll Bounds . y Ġ+ Ġ(( v Scroll Bounds . height Ġ- Ġv Kn ob Bounds . height ) Ġ* Ġ( 1 Ġ- Ġscroll Percent Y )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Scroll Bounds . set ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Kn ob Bounds . set ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Widget Position () ĊĠĠĠĠĠĠĠ Ġif Ġ( widget Ġis ĠLayout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget !!. setSize ( widget Width , Ġwidget Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( widget Ġas ĠLayout ). validate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Widget Position () Ġ{ Ġ// ĠCalculate Ġthe Ġcom . ks df v . the le ma . studio . widget 's Ġposition Ġdepending Ġon Ġthe Ġscroll Ġstate Ġand Ġavailable Ġcom . ks df v . the le ma . studio . widget Ġarea . ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġwidget Area Bounds . y ĊĠĠĠĠĠĠĠ Ġif Ġ(! scroll Y ) Ġy Ġ-= Ġmax Y Ġelse Ġy Ġ-= Ġ( max Y - visual Amount Y ) ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġwidget Area Bounds . x ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll X ) Ġx Ġ-= Ġvisual Amount X ĊĠĠĠĠĠĠĠ Ġif Ġ(! fade ScrollBar s Ġ&& Ġscroll bars On Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X Ġ&& Ġh Scroll On Bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscrollbar Height Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Kn ob Ġ!= Ġnull ) Ġscrollbar Height Ġ= Ġstyle . h Scroll Kn ob !!. min Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġscrollbar Height Ġ= Ġmax ( scrollbar Height , Ġstyle . h Scroll !!. min Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Y Ġ&& Ġ! v Scroll On Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscrollbar Width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Kn ob Ġ!= Ġnull ) Ġscrollbar Width Ġ= Ġstyle . h Scroll Kn ob !!. min Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġscrollbar Width Ġ= Ġmax ( scrollbar Width , Ġstyle . h Scroll !!. min Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwidget !!. setPosition ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġif Ġ( widget Ġis ĠC ull able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Cull ing Area . x Ġ= Ġwidget Area Bounds . x Ġ- Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Cull ing Area . y Ġ= Ġwidget Area Bounds . y Ġ- Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Cull ing Area . width Ġ= Ġwidget Area Bounds . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Cull ing Area . height Ġ= Ġwidget Area Bounds . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( widget Ġas ĠC ull able ). c ull ing Area Ġ= Ġwidget Cull ing Area ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( batch : ĠBatch , Ġparent Alpha : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( widget Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġvalidate () ĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġtransform Ġfor Ġthis Ġgroup . ĊĠĠĠĠĠĠĠ Ġapply Transform ( batch , Ġcompute Transform ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll X ) Ġh Kn ob Bounds . x Ġ= Ġh Scroll Bounds . x Ġ+ Ġ(( h Scroll Bounds . width Ġ- Ġh Kn ob Bounds . width ) Ġ* Ġvisual Scroll Percent X ). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Y ) Ġv Kn ob Bounds . y Ġ= Ġv Scroll Bounds . y Ġ+ Ġ(( v Scroll Bounds . height Ġ- Ġv Kn ob Bounds . height ) Ġ* Ġ( 1 Ġ- Ġvisual Scroll Percent Y )). toInt () ĊĠĠĠĠĠĠĠ Ġupdate Widget Position () ĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġbackground Ġn ine patch . ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġbatch . set Mul Alpha ( color , Ġparent Alpha ) ĊĠĠĠĠĠĠĠ Ġif Ġ( style . background Ġ!= Ġnull ) Ġstyle . background !!. draw ( batch , Ġ 0 f , Ġ 0 f , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġbatch . flush () ĊĠĠĠĠĠĠĠ Ġclip Area ( widget Area Bounds . x , Ġwidget Area Bounds . y , Ġwidget Area Bounds . width , Ġwidget Area Bounds . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Children ( batch , Ġparent Alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch . flush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠRender Ġscroll bars Ġand Ġkn obs Ġon Ġtop Ġif Ġthey Ġwill Ġbe Ġvisible ĊĠĠĠĠĠĠĠ Ġvar Ġalpha Ġ= ĠColor . get Alpha ( color ) Ġ* Ġparent Alpha ĊĠĠĠĠĠĠĠ Ġif Ġ( fade ScrollBar s ) Ġalpha Ġ*= ĠInterpol ation . fade . apply ( fade Alpha Ġ/ Ġfade Alpha Seconds ) ĊĠĠĠĠĠĠĠ Ġbatch . set Mul Alpha ( color , Ġparent Alpha ) ĊĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch . color Ġ= ĠColor . mul Alpha ( color , Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ScrollBar s ( batch ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreset Transform ( batch ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠR enders Ġthe Ġscroll bars Ġafter Ġthe Ġchildren Ġhave Ġbeen Ġdrawn . ĠIf Ġthe Ġscroll bars Ġfa ded Ġout , Ġa Ġis Ġzero Ġand Ġrendering Ġcan Ġbe ĊĠĠĠĠ Ġ* Ġskipped . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġdraw ScrollBar s ( batch : ĠBatch ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġscroll X Ġ&& Ġh Kn ob Bounds . width Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġscroll Y Ġ&& Ġv Kn ob Bounds . height Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ&& Ġy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . corner Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . corner !!. draw ( batch , Ġh Scroll Bounds . x Ġ+ Ġh Scroll Bounds . width , Ġh Scroll Bounds . y , Ġv Scroll Bounds . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Scroll Bounds . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġstyle . h Scroll !!. draw ( batch , Ġh Scroll Bounds . x , Ġh Scroll Bounds . y , Ġh Scroll Bounds . width , Ġh Scroll Bounds . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Kn ob Ġ!= Ġnull ) Ġstyle . h Scroll Kn ob !!. draw ( batch , Ġh Kn ob Bounds . x , Ġh Kn ob Bounds . y , Ġh Kn ob Bounds . width , Ġh Kn ob Bounds . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Ġ!= Ġnull ) Ġstyle . v Scroll !!. draw ( batch , Ġv Scroll Bounds . x , Ġv Scroll Bounds . y , Ġv Scroll Bounds . width , Ġv Scroll Bounds . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Kn ob Ġ!= Ġnull ) Ġstyle . v Scroll Kn ob !!. draw ( batch , Ġv Kn ob Bounds . x , Ġv Kn ob Bounds . y , Ġv Kn ob Bounds . width , Ġv Kn ob Bounds . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGenerate Ġfl ing Ġgesture . ĊĠĠĠĠ Ġ* Ġ@ param Ġfl ing Time ĠTime Ġin Ġseconds Ġfor Ġwhich Ġyou Ġwant Ġto Ġfl ing Ġlast . ĊĠĠĠĠ Ġ* Ġ@ param Ġvelocity X ĠVe locity Ġfor Ġhorizontal Ġdirection . ĊĠĠĠĠ Ġ* Ġ@ param Ġvelocity Y ĠVe locity Ġfor Ġvertical Ġdirection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfl ing ( fl ing Time : ĠFloat , Ġvelocity X : ĠFloat , Ġvelocity Y : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfl ing Timer Ġ= Ġfl ing Time ĊĠĠĠĠĠĠĠ Ġthis . velocity X Ġ= Ġvelocity X ĊĠĠĠĠĠĠĠ Ġthis . velocity Y Ġ= Ġvelocity Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpref Width : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( widget Ġis ĠLayout ) Ġwidth Ġ= Ġ( widget Ġas ĠLayout ). pref Width Ġelse Ġif Ġ( widget Ġ!= Ġnull ) Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidget !!. width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Ġ= Ġstyle . background ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background Ġ!= Ġnull ) Ġwidth Ġ= Ġmax ( width Ġ+ Ġbackground . left Width Ġ+ Ġbackground . right Width , Ġbackground . min Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscrollbar Width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Kn ob Ġ!= Ġnull ) Ġscrollbar Width Ġ= Ġstyle . v Scroll Kn ob !!. min Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Ġ!= Ġnull ) Ġscrollbar Width Ġ= Ġmax ( scrollbar Width , Ġstyle . v Scroll !!. min Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ+= Ġscrollbar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpref Height : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( widget Ġis ĠLayout ) Ġheight Ġ= Ġ( widget Ġas ĠLayout ). pref Height Ġelse Ġif Ġ( widget Ġ!= Ġnull ) Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġwidget !!. height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Ġ= Ġstyle . background ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background Ġ!= Ġnull ) Ġheight Ġ= Ġmax ( height Ġ+ Ġbackground . top Height Ġ+ Ġbackground . bottom Height , Ġbackground . min Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscrollbar Height Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Kn ob Ġ!= Ġnull ) Ġscrollbar Height Ġ= Ġstyle . h Scroll Kn ob !!. min Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġscrollbar Height Ġ= Ġmax ( scrollbar Height , Ġstyle . h Scroll !!. min Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ+= Ġscrollbar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġval ĠminWidth : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 f ĊĊĠĠĠ Ġoverride Ġval ĠminHeight : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġactor Ġembedded Ġin Ġthis Ġscroll Ġpane , Ġor Ġnull . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĠSets Ġthe Ġ[ Actor ] Ġembedded Ġin Ġthis Ġscroll Ġpane . ĊĠĠĠĠ Ġ* Ġ@ param Ġactor ĠMay Ġbe Ġnull Ġto Ġremove Ġany Ġcurrent Ġactor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġactor : ĠActor ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwidget ĊĠĠĠĠĠĠĠ Ġset ( actor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (!( widget Ġ=== Ġthis )) Ġ{ Ġ" com . ks df v . the le ma . studio . widget Ġcannot Ġbe Ġthe ĠScroll Pane ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( widget Ġ!= Ġnull ) Ġsuper . remove Actor ( widget !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Ġ= Ġactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( widget Ġ!= Ġnull ) Ġsuper . add Actor ( widget !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated (" Use Ġ{@ link Ġ# set Actor ( Actor )}. Ġ") ĊĠĠĠ Ġfun Ġset Widget ( actor : ĠActor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . actor Ġ= Ġactor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated (" Use Ġ{@ link Ġ# get Actor ()}. Ġ") ĊĠĠĠ Ġfun Ġget Widget (): ĠActor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwidget ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see Ġ. set Widget Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" ScrollPane Ġmay Ġhave Ġonly Ġa Ġsingle Ġchild .\ n " Ġ+ Ġ" ĉĠ Ġ") ĊĠĠĠ Ġoverride Ġfun Ġadd Actor ( actor : ĠActor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Use ĠScroll Pane # set Widget .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see Ġ. set Widget ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" ScrollPane Ġmay Ġhave Ġonly Ġa Ġsingle Ġchild .\ n " Ġ+ Ġ" ĉĠ Ġ") ĊĠĠĠ Ġoverride Ġfun Ġadd Actor At ( index : ĠInt , Ġactor : ĠActor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Use ĠScroll Pane # set Widget .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see Ġ. set Widget ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" ScrollPane Ġmay Ġhave Ġonly Ġa Ġsingle Ġchild .\ n " Ġ+ Ġ" ĉĠ Ġ") ĊĠĠĠ Ġoverride Ġfun Ġadd Actor Before ( actor Before : ĠActor , Ġactor : ĠActor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Use ĠScroll Pane # set Widget .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see Ġ. set Widget ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" ScrollPane Ġmay Ġhave Ġonly Ġa Ġsingle Ġchild .\ n " Ġ+ Ġ" ĉĠ Ġ") ĊĠĠĠ Ġoverride Ġfun Ġadd Actor After ( actor After : ĠActor , Ġactor : ĠActor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Use ĠScroll Pane # set Widget .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Actor ( actor : ĠActor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( actor Ġ!== Ġwidget ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . actor Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Actor ( actor : ĠActor , Ġun focus : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( actor Ġ!== Ġwidget ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġwidget Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . remove Actor ( actor , Ġun focus ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Actor At ( index : ĠInt , Ġun focus : ĠBoolean ): ĠActor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactor Ġ= Ġsuper . remove Actor At ( index , Ġun focus ) ĊĠĠĠĠĠĠĠ Ġif Ġ( actor Ġ=== Ġwidget ) Ġwidget Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġactor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhit ( x : ĠFloat , Ġy : ĠFloat , Ġtouch able : ĠBoolean ): ĠActor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġ 0 Ġ|| Ġx Ġ>= Ġwidth Ġ|| Ġy Ġ< Ġ 0 Ġ|| Ġy Ġ>= Ġheight ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( touch able Ġ&& Ġthis . touch able Ġ== ĠTouch able . Enabled Ġ&& Ġis Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll X Ġ&& Ġtouch Scroll H Ġ&& Ġh Scroll Bounds . contains ( x , Ġy )) Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Y Ġ&& Ġtouch Scroll V Ġ&& Ġv Scroll Bounds . contains ( x , Ġy )) Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hit ( x , Ġy , Ġtouch able ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCalled Ġwhenever Ġthe Ġx Ġscroll Ġamount Ġis Ġchanged . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġscroll X ( pixels X : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġamount X Ġ= Ġpixels X ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCalled Ġwhenever Ġthe Ġy Ġscroll Ġamount Ġis Ġchanged . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġscroll Y ( pixels Y : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġamount Y Ġ= Ġpixels Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCalled Ġwhenever Ġthe Ġvisual Ġx Ġscroll Ġamount Ġis Ġchanged . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġvisual Scroll X ( pixels X : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisual Amount X Ġ= Ġpixels X ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCalled Ġwhenever Ġthe Ġvisual Ġy Ġscroll Ġamount Ġis Ġchanged . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġvisual Scroll Y ( pixels Y : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisual Amount Y Ġ= Ġpixels Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġamount Ġto Ġscroll Ġh orizontally Ġwhen Ġthe Ġmouse Ġwheel Ġis Ġsc rolled . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġmouse Wheel X : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmin ( scroll Width , Ġmax ( scroll Width Ġ* Ġ 0 . 9 f , Ġmax X Ġ* Ġ 0 . 1 f ) Ġ/ Ġ 4 ) ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġamount Ġto Ġscroll Ġvert ically Ġwhen Ġthe Ġmouse Ġwheel Ġis Ġsc rolled . Ġ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġmouse Wheel Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmin ( scroll Height , Ġmax ( scroll Height Ġ* Ġ 0 . 9 f , Ġmax Y Ġ* Ġ 0 . 1 f ) Ġ/ Ġ 4 ) ĊĊĠĠĠ Ġfun Ġset Scroll X ( pixels : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll X ( MATH . clamp ( pixels , Ġ 0 f , Ġmax X )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġx Ġscroll Ġposition Ġin Ġpixels , Ġwhere Ġ 0 Ġis Ġthe Ġleft Ġof Ġthe Ġscroll Ġpane . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġget Scroll X (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġamount X ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Scroll Y ( pixels : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll Y ( MATH . clamp ( pixels , Ġ 0 f , Ġmax Y )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġy Ġscroll Ġposition Ġin Ġpixels , Ġwhere Ġ 0 Ġis Ġthe Ġtop Ġof Ġthe Ġscroll Ġpane . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġget Scroll Y (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġamount Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġvisual Ġscroll Ġamount Ġequal Ġto Ġthe Ġscroll Ġamount . ĠThis Ġcan Ġbe Ġused Ġwhen Ġsetting Ġthe Ġscroll Ġamount Ġwithout ĊĠĠĠĠ Ġ* Ġanim ating . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Visual Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġvisual Amount X Ġ= Ġamount X ĊĠĠĠĠĠĠĠ Ġvisual Amount Y Ġ= Ġamount Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġvisual Scroll X : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ(! scroll X ) Ġ 0 f Ġelse Ġvisual Amount X ĊĊĠĠĠ Ġval Ġvisual Scroll Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ(! scroll Y ) Ġ 0 f Ġelse Ġvisual Amount Y ĊĊĠĠĠ Ġval Ġvisual Scroll Percent X : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( max X Ġ== Ġ 0 f ) Ġ 0 f Ġelse ĠM ATH . clamp ( visual Amount X Ġ/ Ġmax X , Ġ 0 f , Ġ 1 f ) ĊĊĠĠĠ Ġval Ġvisual Scroll Percent Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( max Y Ġ== Ġ 0 f ) Ġ 0 f Ġelse ĠM ATH . clamp ( visual Amount Y Ġ/ Ġmax Y , Ġ 0 f , Ġ 1 f ) ĊĊĠĠĠ Ġvar Ġscroll Percent X : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( max X Ġ== Ġ 0 f ) Ġ 0 f Ġelse ĠM ATH . clamp ( amount X Ġ/ Ġmax X , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( percent X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll X ( max X Ġ* ĠM ATH . clamp ( percent X , Ġ 0 f , Ġ 1 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġscroll Percent Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( max Y Ġ== Ġ 0 f ) Ġ 0 f Ġelse ĠM ATH . clamp ( amount Y Ġ/ Ġmax Y , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( percent Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Y ( max Y Ġ* ĠM ATH . clamp ( percent Y , Ġ 0 f , Ġ 1 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset F lick Scroll Tap Square Size ( half Tap Square Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġf lick Scroll Listener . gesture Detector . set Tap Square Size ( half Tap Square Size ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĠSets Ġthe Ġscroll Ġoffset Ġso Ġthe Ġspecified Ġrectangle Ġis Ġfully Ġin Ġview , Ġand Ġoptionally Ġcentered Ġvert ically Ġand / or Ġh orizontally , ĊĠĠĠĠ Ġ* Ġif Ġpossible . ĠCoordinates Ġare Ġin Ġthe Ġscroll Ġpane Ġcom . ks df v . the le ma . studio . widget 's Ġcoordinate Ġsystem . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĠSets Ġthe Ġscroll Ġoffset Ġso Ġthe Ġspecified Ġrectangle Ġis Ġfully Ġin Ġview , Ġif Ġpossible . ĠCoordinates Ġare Ġin Ġthe Ġscroll Ġpane ĊĠĠĠĠ Ġ* Ġcom . ks df v . the le ma . studio . widget 's Ġcoordinate Ġsystem . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġscroll To ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat , Ġcenter Horizontal : ĠBoolean Ġ= Ġfalse , Ġcenter Vertical : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate () ĊĠĠĠĠĠĠĠ Ġvar Ġamount X Ġ= Ġamount X ĊĠĠĠĠĠĠĠ Ġif Ġ( center Horizontal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount X Ġ= Ġx Ġ- Ġscroll Width Ġ/ Ġ 2 Ġ+ Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ+ Ġwidth Ġ> Ġamount X Ġ+ Ġscroll Width ) Ġamount X Ġ= Ġx Ġ+ Ġwidth Ġ- Ġscroll Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġamount X ) Ġamount X Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscroll X ( MATH . clamp ( amount X , Ġ 0 f , Ġmax X )) ĊĠĠĠĠĠĠĠ Ġvar Ġamount Y Ġ= Ġamount Y ĊĠĠĠĠĠĠĠ Ġif Ġ( center Vertical ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Y Ġ= Ġmax Y Ġ- Ġy Ġ+ Ġscroll Height Ġ/ Ġ 2 Ġ- Ġheight Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ> Ġmax Y Ġ- Ġy Ġ- Ġheight Ġ+ Ġscroll Height ) Ġamount Y Ġ= Ġmax Y Ġ- Ġy Ġ- Ġheight Ġ+ Ġscroll Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Y Ġ< Ġmax Y Ġ- Ġy ) Ġamount Y Ġ= Ġmax Y Ġ- Ġy ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscroll Y ( MATH . clamp ( amount Y , Ġ 0 f , Ġmax Y )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġscroll Bar Height : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! scroll X ) Ġreturn Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Kn ob Ġ!= Ġnull ) Ġheight Ġ= Ġstyle . h Scroll Kn ob !!. min Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . h Scroll Ġ!= Ġnull ) Ġheight Ġ= Ġmax ( height , Ġstyle . h Scroll !!. min Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġscroll Bar Width : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! scroll Y ) Ġreturn Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Kn ob Ġ!= Ġnull ) Ġwidth Ġ= Ġstyle . v Scroll Kn ob !!. min Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . v Scroll Ġ!= Ġnull ) Ġwidth Ġ= Ġmax ( width , Ġstyle . v Scroll !!. min Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue Ġif Ġthe Ġcom . ks df v . the le ma . studio . widget Ġis Ġlarger Ġthan Ġthe Ġscroll Ġpane Ġh orizontally . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġis Scroll X (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscroll X ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue Ġif Ġthe Ġcom . ks df v . the le ma . studio . widget Ġis Ġlarger Ġthan Ġthe Ġscroll Ġpane Ġvert ically . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġis Scroll Y (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscroll Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDis ables Ġscrolling Ġin Ġa Ġdirection . ĠThe Ġcom . ks df v . the le ma . studio . widget Ġwill Ġbe Ġsized Ġto Ġthe ĠF lick ScrollPane Ġin Ġthe Ġdisabled Ġdirection . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġset Scrolling Disabled ( x : ĠBoolean , Ġy : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Scrolling Disabled X Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġis Scrolling Disabled Y Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġis Left Edge : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! scroll X Ġ|| Ġamount X Ġ<= Ġ 0 ĊĊĠĠĠ Ġval Ġis Right Edge : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! scroll X Ġ|| Ġamount X Ġ>= Ġmax X ĊĊĠĠĠ Ġval Ġis Top Edge : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! scroll Y Ġ|| Ġamount Y Ġ<= Ġ 0 ĊĊĠĠĠ Ġval Ġis Bottom Edge : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! scroll Y Ġ|| Ġamount Y Ġ>= Ġmax Y ĊĊĠĠĠ Ġval Ġis Dragging : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdragging Pointer Ġ!= Ġ- 1 ĊĊĠĠĠ Ġval Ġis P anning : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġf lick Scroll Listener . gesture Detector . is P anning ĊĊĠĠĠ Ġval Ġis Fl ing ing : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfl ing Timer Ġ> Ġ 0 ĊĊĠĠĠ Ġ/** ĠFor Ġf lick Ġscroll , Ġif Ġtrue Ġthe Ġcom . ks df v . the le ma . studio . widget Ġcan Ġbe Ġsc rolled Ġslightly Ġpast Ġits Ġbounds Ġand Ġwill Ġanimate Ġback Ġto Ġits Ġbounds Ġwhen ĊĠĠĠĠ Ġ* Ġscrolling Ġis Ġstopped . ĠDefault Ġis Ġtrue . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġset Over scroll ( over scroll X : ĠBoolean , Ġover scroll Y : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . over scroll X Ġ= Ġover scroll X ĊĠĠĠĠĠĠĠ Ġthis . over scroll Y Ġ= Ġover scroll Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠFor Ġf lick Ġscroll , Ġsets Ġthe Ġover scroll Ġdistance Ġin Ġpixels Ġand Ġthe Ġspeed Ġit Ġreturns Ġto Ġthe Ġcom . ks df v . the le ma . studio . widget 's Ġbounds Ġin Ġseconds . ĊĠĠĠĠ Ġ* ĠDefault Ġis Ġ 5 0 , Ġ 3 0 , Ġ 2 0 0 . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġsetup Over scroll ( distance : ĠFloat , Ġspeed Min : ĠFloat , Ġspeed Max : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġover scroll Distance Ġ= Ġdistance ĊĠĠĠĠĠĠĠ Ġover scroll Speed Min Ġ= Ġspeed Min ĊĠĠĠĠĠĠĠ Ġover scroll Speed Max Ġ= Ġspeed Max ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠFor ces Ġenabling Ġscroll bars Ġ( for Ġnon - f lick Ġscroll ) Ġand Ġover scroll ing Ġ( for Ġf lick Ġscroll ) Ġin Ġa Ġdirection , Ġeven Ġif Ġthe Ġcontents ĊĠĠĠĠ Ġ* Ġdo Ġnot Ġexceed Ġthe Ġbounds Ġin Ġthat Ġdirection . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġset Force Scroll ( x : ĠBoolean , Ġy : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Force Scroll X Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġis Force Scroll Y Ġ= Ġy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSet Ġthe Ġposition Ġof Ġthe Ġvertical Ġand Ġhorizontal Ġscroll Ġbars . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġset ScrollBar Positions ( bottom : ĠBoolean , Ġright : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġh Scroll On Bottom Ġ= Ġbottom ĊĠĠĠĠĠĠĠ Ġv Scroll On Right Ġ= Ġright ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup Fade ScrollBar s ( fade Alpha Seconds : ĠFloat , Ġfade Delay Seconds : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fade Alpha Seconds Ġ= Ġfade Alpha Seconds ĊĠĠĠĠĠĠĠ Ġthis . fade Delay Seconds Ġ= Ġfade Delay Seconds ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . style Ġ= Ġstyle ĊĠĠĠĠĠĠĠ Ġactor Ġ= Ġwidget ĊĠĠĠĠĠĠĠ Ġset Size ( 1 5 0 f , Ġ 1 5 0 f ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( focus On Mouse Enter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠInput Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġenter ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat , Ġpointer : ĠInt , Ġfrom Actor : ĠActor ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh ud ?. scroll Focus Ġ= Ġthis @ ScrollPane ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Capture Listener ( object Ġ: ĠInput Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġhandle Position Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtouch Down ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat , Ġpointer : ĠInt , Ġbutton : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drag ging Pointer Ġ!= Ġ- 1 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pointer Ġ== Ġ 0 Ġ&& Ġbutton Ġ!= Ġ 0 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h ud Ġ!= Ġnull ) Ġh ud !!. scroll Focus Ġ= Ġthis @ ScrollPane ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! f lick Scroll ) Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fade Alpha Ġ== Ġ 0 f ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Bar Touch Ġ&& Ġscroll X Ġ&& Ġh Scroll Bounds . contains ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h Kn ob Bounds . contains ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . set ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Position Ġ= Ġh Kn ob Bounds . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Scroll H Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdragging Pointer Ġ= Ġpointer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll X ( amount X Ġ+ Ġscroll Width Ġ* Ġif Ġ( x Ġ< Ġh Kn ob Bounds . x ) Ġ- 1 Ġelse Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Bar Touch Ġ&& Ġscroll Y Ġ&& Ġv Scroll Bounds . contains ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Kn ob Bounds . contains ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . set ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Position Ġ= Ġv Kn ob Bounds . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Scroll V Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdragging Pointer Ġ= Ġpointer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll Y ( amount Y Ġ+ Ġscroll Height Ġ* Ġif Ġ( y Ġ< Ġv Kn ob Bounds . y ) Ġ 1 Ġelse Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtouch Up ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat , Ġpointer : ĠInt , Ġbutton : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pointer Ġ!= Ġdragging Pointer ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtouch Drag ged ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat , Ġpointer : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pointer Ġ!= Ġdragging Pointer ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( touch Scroll H ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġx Ġ- Ġlast Point . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscroll H Ġ= Ġhandle Position Ġ+ Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Position Ġ= Ġscroll H ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll H Ġ= Ġmax ( h Scroll Bounds . x , Ġscroll H ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll H Ġ= Ġmin ( h Scroll Bounds . x Ġ+ Ġh Scroll Bounds . width Ġ- Ġh Kn ob Bounds . width , Ġscroll H ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= Ġh Scroll Bounds . width Ġ- Ġh Kn ob Bounds . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Ġ!= Ġ 0 f ) Ġscroll Percent X Ġ= Ġ( scroll H Ġ- Ġh Scroll Bounds . x ) Ġ/ Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . set ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( touch Scroll V ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġy Ġ- Ġlast Point . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscroll V Ġ= Ġhandle Position Ġ+ Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Position Ġ= Ġscroll V ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll V Ġ= Ġmax ( v Scroll Bounds . y , Ġscroll V ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll V Ġ= Ġmin ( v Scroll Bounds . y Ġ+ Ġv Scroll Bounds . height Ġ- Ġv Kn ob Bounds . height , Ġscroll V ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= Ġv Scroll Bounds . height Ġ- Ġv Kn ob Bounds . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Ġ!= Ġ 0 f ) Ġscroll Percent Y Ġ= Ġ 1 Ġ- Ġ( scroll V Ġ- Ġv Scroll Bounds . y ) Ġ/ Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . set ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Moved ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! f lick Scroll ) Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġf lick Scroll Listener Ġ= Ġobject Ġ: ĠActor Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpan ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat , Ġdelta X : ĠFloat , Ġdelta Y : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount X Ġ-= Ġdelta X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Y Ġ+= Ġdelta Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclamp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cancel Touch Focus Ġ&& Ġ( scroll X Ġ&& Ġdelta X Ġ!= Ġ 0 f Ġ|| Ġscroll Y Ġ&& Ġdelta Y Ġ!= Ġ 0 f )) Ġcancel Touch Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfl ing ( event : ĠInput Event , Ġvelocity X : ĠFloat , Ġvelocity Y : ĠFloat , Ġbutton : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( velocity X ) Ġ> Ġ 1 5 0 Ġ&& Ġscroll X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Timer Ġ= Ġfl ing Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ ScrollPane . velocity X Ġ= Ġvelocity X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cancel Touch Focus ) Ġcancel Touch Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( velocity Y ) Ġ> Ġ 1 5 0 Ġ&& Ġscroll Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Timer Ġ= Ġfl ing Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ ScrollPane . velocity Y Ġ= Ġ- velocity Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cancel Touch Focus ) Ġcancel Touch Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle ( event : ĠEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( super . handle ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( event Ġas ĠInput Event ). type Ġ== ĠInput EventType . touch Down ) Ġfl ing Timer Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . eventType Ġ== ĠEventType . Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ġas ĠInput Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . is Touch Focus Cancel ) Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Listener ( f lick Scroll Listener ) ĊĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠInput Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsc rolled ( event : ĠInput Event , Ġx : ĠFloat , Ġy : ĠFloat , Ġamount : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Scroll bars Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Y Ġ-> Ġset Scroll Y ( amount Y Ġ+ Ġmouse Wheel Y Ġ* Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll X Ġ-> Ġset Scroll X ( amount X Ġ+ Ġmouse Wheel X Ġ* Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ