/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 Ġ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 . layout . algorithm . virtual Ċ Ċ import Ġcom . ac orn ui . component . Component Init Ċ import Ġcom . ac orn ui . component . layout . Data Scroller Ċ import Ġcom . ac orn ui . component . layout . H Align Ċ import Ġcom . ac orn ui . component . layout . Layout Element Ċ import Ġcom . ac orn ui . component . layout . algorithm . Vertical Layout Data Ċ import Ġcom . ac orn ui . component . style . Style Base Ċ import Ġcom . ac orn ui . component . style . Style Type Ċ import Ġcom . ac orn ui . core . di . Owned Ċ import Ġcom . ac orn ui . math . Bounds Ċ import Ġcom . ac orn ui . math . Pad Ċ import Ġcom . ac orn ui . math . Pad Ro Ċ import Ġkotlin . math . floor Ċ Ċ class ĠVirtual Vertical Layout Ġ: ĠVirtual Layout Algorithm < Virtual Vertical Layout Style , ĠVertical Layout Data > Ġ{ ĊĊ ĉ override Ġval Ġdirection : ĠVirtual Layout Direction Ġ= ĠVirtual Layout Direction . VERTICAL ĊĊ ĉ override Ġfun Ġget Offset ( width : ĠFloat , Ġheight : ĠFloat , Ġelement : ĠLayout Element , Ġindex : ĠInt , Ġlast Index : ĠInt , Ġis Re versed : ĠBoolean , Ġprops : ĠVirtual Vertical Layout Style ): ĠFloat Ġ{ Ċĉ ĉ val Ġpadding Ġ= Ġprops . padding Ċĉ ĉ val Ġgap Ġ= Ġprops . gap Ċĉ ĉ return Ġif Ġ( is Re versed ) Ġ{ Ċĉĉ ĉ ( height Ġ- Ġpadding . bottom Ġ- Ġ( element . y Ġ+ Ġelement . height )) Ġ/ Ġmax Of ( 0 . 0 0 0 1 f , Ġelement . height Ġ+ Ġgap ) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ ( element . y Ġ- Ġpadding . top ) Ġ/ Ġmax Of ( 0 . 0 0 0 1 f , Ġelement . height Ġ+ Ġgap ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġupdate Layout Entry ( explicit Width : ĠFloat ?, Ġexplicit Height : ĠFloat ?, Ġelement : ĠLayout Element , ĠcurrentIndex : ĠInt , ĠstartIndex : ĠFloat , Ġlast Index : ĠInt , Ġprevious Element : ĠLayout Element ?, Ġis Re versed : ĠBoolean , Ġprops : ĠVirtual Vertical Layout Style ) Ġ{ Ċĉ ĉ val Ġpadding Ġ= Ġprops . padding Ċĉ ĉ val Ġgap Ġ= Ġprops . gap Ċĉ ĉ val Ġhorizontal Align Ġ= Ġprops . horizontal Align Ċĉ ĉ val Ġchild Available Width Ġ= Ġpadding . reduce Width ( explicit Width ) Ċĉ ĉ val Ġchild Available Height Ġ= Ġpadding . reduce Height ( explicit Height ) ĊĊĉ ĉ // ĠSize Ġthe Ġelement Ċĉ ĉ val Ġlayout Data Ġ= Ġelement . layout Data Cast Ċĉ ĉ val Ġw Ġ= Ġlayout Data ?. get Preferred Width ( child Available Width ) Ċĉ ĉ val Ġh Ġ= Ġlayout Data ?. get Preferred Height ( child Available Height ) Ċĉ ĉ element . setSize ( w , Ġh ) ĊĊĉ ĉ // ĠPosition Ġthe Ġelement Ċĉ ĉ val Ġy Ġ= Ġif Ġ( previous Element Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ val Ġstart Y Ġ= Ġ( currentIndex Ġ- ĠstartIndex ) Ġ* Ġ( element . height Ġ+ Ġgap ) Ċĉĉ ĉ if Ġ( is Re versed ) Ġ{ Ċĉĉĉ ĉ ( child Available Height Ġ?: Ġ 0 f ) Ġ- Ġpadding . bottom Ġ+ Ġstart Y Ġ- Ġelement . height Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ padding . top Ġ+ Ġstart Y Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ if Ġ( is Re versed ) Ġ{ Ċĉĉĉ ĉ previous Element . y Ġ- Ġgap Ġ- Ġelement . height Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ previous Element . y Ġ+ Ġprevious Element . height Ġ+ Ġgap Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( child Available Width Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ element . moveTo ( padding . left , Ġy ) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ when Ġ( layout Data ?. horizontal Align Ġ?: Ġhorizontal Align ) Ġ{ Ċĉĉĉ ĉ H Align . LEFT Ġ-> Ċĉĉĉĉ ĉ element . moveTo ( padding . left , Ġy ) Ċĉĉĉ ĉ H Align . CENTER Ġ-> Ċĉĉĉĉ ĉ element . moveTo ( padding . left Ġ+ Ġfloor ((( child Available Width Ġ- Ġelement . width ) Ġ* Ġ 0 . 5 f )), Ġy ) Ċĉĉĉ ĉ H Align . RIGHT Ġ-> Ċĉĉĉĉ ĉ element . moveTo ( padding . left Ġ+ Ġ( child Available Width Ġ- Ġelement . width ), Ġy ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġmeasure ( explicit Width : ĠFloat ?, Ġexplicit Height : ĠFloat ?, Ġelements : ĠList < Layout Element >, Ġprops : ĠVirtual Vertical Layout Style , Ġout : ĠBounds ) Ġ{ Ċĉ ĉ val Ġpadding Ġ= Ġprops . padding Ċĉ ĉ super . measure ( explicit Width , Ġexplicit Height , Ġelements , Ġprops , Ġout ) Ċĉ ĉ out . add ( padding . right , Ġpadding . bottom ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġshould Show Renderer ( explicit Width : ĠFloat ?, Ġexplicit Height : ĠFloat ?, Ġelement : ĠLayout Element , Ġprops : ĠVirtual Vertical Layout Style ): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( explicit Height Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ val Ġbottom Ġ= Ġelement . y Ġ+ Ġelement . height Ċĉĉ ĉ val Ġbuffer Y Ġ= Ġexplicit Height Ġ* Ġprops . buffer Ċĉĉ ĉ if Ġ( bottom Ġ< Ġ- buffer Y Ġ|| Ċĉĉĉĉ ĉ element . y Ġ> Ġexplicit Height Ġ+ Ġbuffer Y ) Ġ{ Ċĉĉĉ ĉ return Ġfalse Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun Ġcreate Layout Data (): ĠVertical Layout Data Ġ= ĠVertical Layout Data () Ċ } Ċ Ċ open Ġclass ĠVirtual Vertical Layout Style Ġ: ĠStyle Base () Ġ{ ĊĊ ĉ override Ġval Ġtype : ĠStyle Type < Virtual Vertical Layout Style > Ġ= ĠComp anion ĊĊ ĉ var Ġgap Ġby Ġprop ( 0 f ) ĊĊ ĉ /** Ċĉ Ġ* ĠIf Ġthere Ġwas Ġan Ġexplicit Ġheight , Ġthis Ġrepresents Ġthe Ġpercent Ġof Ġthat Ġheight Ġout Ġof Ġbounds Ġan Ġelement Ġcan Ġbe Ċĉ Ġ* Ġbefore Ġbeing Ġre cyc led . Ċĉ Ġ*/ Ċ ĉ var Ġbuffer : ĠFloat Ġby Ġprop ( 0 . 1 5 f ) ĊĊ ĉ /** Ċĉ Ġ* ĠThe ĠPadding Ġobject Ġwith Ġleft , Ġbottom , Ġtop , Ġand Ġright Ġpadding . Ċĉ Ġ*/ Ċ ĉ var Ġpadding : ĠPad Ro Ġby Ġprop ( Pad ()) ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġhorizontal Ġalignment Ġof Ġeach Ġelement Ġwithin Ġthe Ġmeasured Ġwidth . Ċĉ Ġ*/ Ċ ĉ var Ġhorizontal Align Ġby Ġprop ( H Align . LEFT ) ĊĊ ĉ comp anion Ġobject Ġ: ĠStyle Type < Virtual Vertical Layout Style > Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġvirtual ized Ġdata Ġsc roller Ġwith Ġa Ġvertical Ġlayout . Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠOwn ed . v Data Scroller ( Ċĉ ĉ init : ĠComponent Init < Data Scroller < E , ĠVirtual Vertical Layout Style , ĠVertical Layout Data >> Ġ= Ġ{} Ċ ): ĠData Scroller < E , ĠVirtual Vertical Layout Style , ĠVertical Layout Data > Ġ{ Ċ ĉ val Ġlayout Algorithm Ġ= ĠVirtual Vertical Layout () Ċ ĉ val Ġc Ġ= ĠData Scroller < E , ĠVirtual Vertical Layout Style , ĠVertical Layout Data >( this , Ġlayout Algorithm , ĠVirtual Vertical Layout Style ()) Ċ ĉ c . init () Ċ ĉ return Ġc Ċ }