/* Ċ Ġ* ĠCopyright Ġ 2 0 1 5 ĠN ich olas ĠB ily k Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . ac orn ui . component . scroll Ċ Ċ import Ġcom . ac orn ui . component . Component Init Ċ import Ġcom . ac orn ui . component . Inter activity Mode Ċ import Ġcom . ac orn ui . component . Ui Component Ċ import Ġcom . ac orn ui . component . layout . Size Constraints Ċ import Ġcom . ac orn ui . component . layout . algorithm . Basic Layout Data Ċ import Ġcom . ac orn ui . component . style . Style Tag Ċ import Ġcom . ac orn ui . core . di . Owned Ċ import Ġcom . ac orn ui . math . Bounds Ċ import Ġcom . ac orn ui . math . Vector 2 Ċ import Ġkotlin . math . round Ċ Ċ open Ġclass ĠV ScrollBar ( Ċĉ ĉ owner : ĠOwn ed Ċ ) Ġ: ĠScroll Bar Base ( owner ) Ġ{ ĊĊ ĉ init Ġ{ Ċĉ ĉ style Tags . add ( V ScrollBar ) Ċ ĉ } ĊĊ ĉ override Ġfun ĠgetModel Value ( position : ĠVector 2 ): ĠFloat Ġ{ Ċĉ ĉ val Ġthumb Ġ= Ġthumb !! Ċĉ ĉ val Ġmin Y Ġ= Ġmin Track () Ċĉ ĉ val Ġmax Y Ġ= Ġmax Track () Ċĉ ĉ val Ġdenom Ġ= Ġmax Of ( 0 . 0 0 1 f , Ġmax Y Ġ- Ġmin Y Ġ- Ġthumb . height ) Ċĉ ĉ var Ġp Y Ġ= Ġ( position . y Ġ- Ġmin Y ) Ġ/ Ġdenom Ċĉ ĉ if Ġ( p Y Ġ> Ġ 0 . 9 9 f ) Ġp Y Ġ= Ġ 1 f Ċĉ ĉ if Ġ( p Y Ġ< Ġ 0 . 0 1 f ) Ġp Y Ġ= Ġ 0 f Ċĉ ĉ return Ġp Y Ġ* Ġ( scroll Model . max Ġ- Ġscroll Model . min ) Ġ+ Ġscroll Model . min Ċ ĉ } ĊĊ ĉ override Ġfun Ġupdate Size Constraints ( out : ĠSize Constraints ) Ġ{ Ċĉ ĉ val Ġstep Up Button Ġ= Ġdecrement Button !! Ċĉ ĉ val Ġstep Down Button Ġ= Ġincrement Button !! Ċĉ ĉ out . height . min Ġ= Ġstep Up Button . height Ġ+ Ġstep Down Button . height Ċĉ ĉ out . width . min Ġ= Ġmax Of ( step Up Button . width , Ġstep Down Button . width , Ġtrack ?. min Width Ġ?: Ġ 0 f ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġupdate Layout ( explicit Width : ĠFloat ?, Ġexplicit Height : ĠFloat ?, Ġout : ĠBounds ) Ġ{ Ċĉ ĉ val Ġstep Up Button Ġ= Ġdecrement Button !! Ċĉ ĉ val Ġstep Down Button Ġ= Ġincrement Button !! Ċĉ ĉ val Ġtrack Ġ= Ġtrack !! Ċĉ ĉ val Ġthumb Ġ= Ġthumb !! Ċĉ ĉ val Ġmin H Ġ= ĠminHeight Ġ?: Ġ 0 f Ċĉ ĉ val Ġh Ġ= Ġexplicit Height Ġ?: Ġmax Of ( min H , Ġstyle . default Size ) Ċĉ ĉ val Ġs U bh : ĠFloat Ġ= Ġstep Up Button . height Ċĉ ĉ val Ġs Db h : ĠFloat Ġ= Ġstep Down Button . height Ċĉ ĉ val Ġw Ġ= Ġmax Of ( step Up Button . width , Ġstep Down Button . width ) Ċĉ ĉ val Ġtrack Ld Ġ= Ġtrack . layout Data Ġas ĠBasic Layout Data ? Ċĉ ĉ if Ġ( track Ld Ġ== Ġnull ) Ġtrack . setSize ( w , Ġh Ġ- Ġs U bh Ġ- Ġs Db h ) Ċĉ ĉ else Ġtrack . setSize ( track Ld . get Preferred Width ( w ), Ġtrack Ld . get Preferred Height ( h Ġ- Ġs U bh Ġ- Ġs Db h )) Ċĉ ĉ track . moveTo ( 0 f , Ġs U bh ) Ċĉ ĉ step Down Button . moveTo ( 0 f , Ġh Ġ- Ġstep Down Button . height ) ĊĊĉ ĉ val Ġscroll Diff Ġ= Ġscroll Model . max Ġ- Ġscroll Model . min Ċĉ ĉ val Ġthumb Available Ġ= Ġmax Track () Ġ- Ġmin Track () Ċĉ ĉ thumb . visible Ġ= Ġthumb Available Ġ> Ġmax Of ( 1 f , Ġ( thumb . min Height Ġ?: Ġ 0 f )) Ċĉ ĉ track . visible Ġ= Ġthumb . visible Ċĉ ĉ thumb . inter activity Mode Ġ= Ġif Ġ( style . page Mode Ġ&& Ġscroll Diff Ġ> Ġ 0 f ) ĠInter activity Mode . ALL Ġelse ĠInter activity Mode . NONE Ċĉ ĉ track . inter activity Mode Ġ= Ġif Ġ( scroll Diff Ġ> Ġ 0 f ) ĠInter activity Mode . ALL Ġelse ĠInter activity Mode . NONE Ċĉ ĉ if Ġ( thumb . visible ) Ġ{ Ċĉĉ ĉ val Ġthumb Height Ġ= Ġ( thumb Available Ġ* Ġthumb Available ) Ġ/ Ġmax Of ( 1 f , Ġthumb Available Ġ+ Ġscroll Diff Ġ* Ġmodel To Pixels ) Ċĉĉ ĉ val Ġthumb Ld Ġ= Ġthumb . layout Data Ġas ĠBasic Layout Data ? Ċĉĉ ĉ if Ġ( thumb Height . isNaN ()) Ċĉĉĉ ĉ throw ĠException (" thumb Ġheight Ġmay Ġnot Ġbe ĠNaN ") Ċĉĉ ĉ if Ġ( thumb Ld Ġ== Ġnull ) Ġthumb . setSize ( w , Ġthumb Height ) Ċĉĉ ĉ else Ġthumb . setSize ( thumb Ld . get Preferred Width ( w ), Ġthumb Ld . get Preferred Height ( thumb Height )) Ċĉĉ ĉ refresh Thumb Position () Ċĉ ĉ } Ċĉ ĉ out . set ( max Of ( w , Ġtrack . width , Ġif Ġ( thumb . visible ) Ġthumb . width Ġelse Ġ 0 f ), Ġh ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġrefresh Thumb Position () Ġ{ Ċĉ ĉ val Ġthumb Ġ= Ġthumb !! Ċĉ ĉ val Ġscroll Diff Ġ= Ġscroll Model . max Ġ- Ġscroll Model . min Ċĉ ĉ val Ġp Ġ= Ġif Ġ( scroll Diff Ġ<= Ġ 0 . 0 0 0 0 0 1 f ) Ġ 0 f Ġelse Ġ( scroll Model . value Ġ- Ġscroll Model . min ) Ġ/ Ġscroll Diff ĊĊĉ ĉ val Ġmin Y Ġ= Ġmin Track () Ċĉ ĉ val Ġmax Y Ġ= Ġmax Track () Ċĉ ĉ val Ġh Ġ= Ġround ( max Y Ġ- Ġmin Y Ġ+ Ġ 0 . 0 0 0 0 0 1 f ) Ġ- Ġthumb . height Ċĉ ĉ thumb . moveTo ( 0 f , Ġp Ġ* Ġh Ġ+ Ġmin Y ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġmin Track (): ĠFloat Ġ{ Ċĉ ĉ return Ġdecrement Button !!. bottom () Ċ ĉ } ĊĊ ĉ private Ġfun ĠUi Component . bottom (): ĠFloat Ġ{ Ċĉ ĉ return Ġy Ġ+ Ġheight Ċ ĉ } ĊĊ ĉ override Ġfun Ġmax Track (): ĠFloat Ġ{ Ċĉ ĉ return Ġincrement Button !!. y Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ: ĠStyle Tag Ċ } Ċ Ċ fun ĠOwn ed . v ScrollBar ( init : ĠComponent Init < V ScrollBar > Ġ= Ġ{} ): ĠV ScrollBar Ġ{ Ċ ĉ val Ġv Ġ= ĠV ScrollBar ( this ) Ċ ĉ v . init () Ċ ĉ return Ġv Ċ } Ċ Ċ open Ġclass ĠV Slider ( owner : ĠOwn ed ) Ġ: ĠV ScrollBar ( owner ) Ġ{ ĊĊ ĉ init Ġ{ Ċĉ ĉ style Tags . add ( VS l ider ) Ċĉ ĉ pageSize ( 1 f ) Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ: ĠStyle Tag Ċ } Ċ Ċ fun ĠOwn ed . v Slider ( init : ĠComponent Init < VS l ider >): ĠV Slider Ġ{ Ċ ĉ val Ġh Ġ= ĠV Slider ( this ) Ċ ĉ h . init () Ċ ĉ return Ġh Ċ }