package Ġcom . ac orn ui . component Ċ Ċ import Ġcom . ac orn ui . component . style . Style Base Ċ import Ġcom . ac orn ui . component . style . Style Type Ċ import Ġcom . ac orn ui . component . style . style Property Ċ import Ġcom . ac orn ui . core . rad To Deg Ċ import Ġcom . ac orn ui . graphic . Color Ċ import Ġcom . ac orn ui . graphic . Color Ro Ċ import Ġcom . ac orn ui . graphic . color Ċ import Ġcom . ac orn ui . math .* Ċ import Ġcom . ac orn ui . serialization .* Ċ import Ġkotlin . math . atan 2 Ċ Ċ open Ġclass ĠBox Style Ġ: ĠStyle Base () Ġ{ ĊĊ ĉ override Ġval Ġtype : ĠStyle Type < Box Style > Ġ= ĠComp anion ĊĊ ĉ var Ġlinear Gradient : ĠLinear Gradient Ro ? Ġby Ġprop < Linear Gradient Ro ? >( null ) Ċ ĉ var ĠbackgroundColor : ĠColor Ro Ġby Ġprop ( Color . BLACK ) ĊĊ ĉ var Ġborder Colors : ĠBorder Colors Ro Ġby Ġprop ( Border Colors ()) ĊĊ ĉ var Ġborder Th ick nesses : ĠPad Ro Ġby Ġprop ( Pad ()) ĊĊ ĉ var Ġborder Rad ii : ĠC orners Ro Ġby Ġprop ( C orners ()) ĊĊ ĉ var Ġmargin : ĠPad Ro Ġby Ġprop ( Pad ()) Ċ ĉ var Ġpadding : ĠPad Ro Ġby Ġprop ( Pad ()) ĊĊ ĉ comp anion Ġobject Ġ: ĠStyle Type < Box Style > Ċ } Ċ Ċ object ĠBox Style Serializer Ġ: ĠTo < Box Style >, ĠFrom < Box Style > Ġ{ ĊĊ ĉ override Ġfun ĠBox Style . write ( writer : ĠWriter ) Ġ{ Ċĉ ĉ writer . style Property ( this , Ġ:: linear Gradient )?. obj ( linear Gradient , ĠLinear Gradient Serializer ) Ċĉ ĉ writer . style Property ( this , Ġ:: backgroundColor )?. color ( backgroundColor ) Ċĉ ĉ writer . style Property ( this , Ġ:: border Colors )?. obj ( border Colors , ĠBorder Colors Serializer ) Ċĉ ĉ writer . style Property ( this , Ġ:: border Th ick nesses )?. obj ( border Th ick nesses , ĠPad Serializer ) Ċĉ ĉ writer . style Property ( this , Ġ:: border Rad ii )?. obj ( border Rad ii , ĠC orners Serializer ) Ċĉ ĉ writer . style Property ( this , Ġ:: margin )?. obj ( margin , ĠPad Serializer ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġread ( reader : ĠReader ): ĠBox Style Ġ{ Ċĉ ĉ val Ġbox Style Ġ= ĠBox Style () Ċĉ ĉ read ( reader , Ġbox Style ) Ċĉ ĉ return Ġbox Style Ċ ĉ } ĊĊ ĉ fun Ġread ( reader : ĠReader , Ġbox Style : ĠBox Style ) Ġ{ Ċĉ ĉ reader . contains ( box Style :: linear Gradient . name ) Ġ{ Ġbox Style . linear Gradient Ġ= Ġit . obj ( Linear Gradient Serializer ) Ġ} Ċĉ ĉ reader . contains ( box Style :: backgroundColor . name ) Ġ{ Ġbox Style . backgroundColor Ġ= Ġit . color () !! Ġ} Ċĉ ĉ reader . contains ( box Style :: border Colors . name ) Ġ{ Ġbox Style . border Colors Ġ= Ġit . obj ( Border Colors Serializer ) !! Ġ} Ċĉ ĉ reader . contains ( box Style :: border Th ick nesses . name ) Ġ{ Ġbox Style . border Th ick nesses Ġ= Ġit . obj ( Pad Serializer ) !! Ġ} Ċĉ ĉ reader . contains ( box Style :: border Rad ii . name ) Ġ{ Ġbox Style . border Rad ii Ġ= Ġit . obj ( C orners Serializer ) !! Ġ} Ċĉ ĉ reader . contains ( box Style :: margin . name ) Ġ{ Ġbox Style . margin Ġ= Ġit . obj ( Pad Serializer ) !! Ġ} Ċ ĉ } Ċ } Ċ Ċ fun Ġbox Style ( init : ĠBox Style . () Ġ-> ĠUnit ): ĠBox Style Ġ{ Ċ ĉ val Ġb Ġ= ĠBox Style () Ċ ĉ b . init () Ċ ĉ return Ġb Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġlinear Ġgradient Ġwhere Ġthe Ġcolor Ġstops Ġare Ġdistributed Ġeven ly Ġfor Ġthe Ġgiven Ġcolors . Ċ Ġ*/ Ċ fun ĠLinear Gradient ( direction : ĠGradient Direction , Ġvar arg Ġcolors : ĠColor Ro ): ĠLinear Gradient Ġ{ Ċ ĉ val Ġcolor Stops : ĠArray < Color Stop Ro > Ġ= ĠArray ( colors . size , Ġ{ ĠColor Stop ( colors [ it ]) Ġ}) Ċ ĉ return ĠLinear Gradient ( direction , Ġ 0 f , Ġcolor Stops . to Mutable List ()) Ċ } Ċ Ċ fun ĠLinear Gradient ( direction : ĠGradient Direction , Ġvar arg Ġcolor Stops : ĠColor Stop Ro ): ĠLinear Gradient Ġ= ĠLinear Gradient ( direction , Ġ 0 f , Ġcolor Stops . to Mutable List ()) Ċ fun ĠLinear Gradient ( angle : ĠFloat , Ġvar arg Ġcolor Stops : ĠColor Stop Ro ): ĠLinear Gradient Ġ= ĠLinear Gradient ( Gradient Direction . ANGLE , Ġangle , Ġcolor Stops . to Mutable List ()) Ċ Ċ /** Ċ Ġ* ĠA Ġread - only Ġinterface Ġto Ġ[ Linear Gradient ] Ċ Ġ*/ Ċ interface ĠLinear Gradient Ro Ġ{ ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġdirection Ġthe Ġgradient Ġshould Ġgo . ĠIf Ġdirection Ġis Ġ[ Gradient Direction . ANGLE ], Ġthen Ġthe Ġ[ angle ] Ġproperty Ċĉ Ġ* Ġwill Ġbe Ġused . Ċĉ Ġ*/ Ċ ĉ val Ġdirection : ĠGradient Direction ĊĊ ĉ /** Ċĉ Ġ* ĠIn Ġradians , Ġangles Ġstart Ġpointing Ġtowards Ġtop , Ġrot ating Ġclock wise . Ċĉ Ġ* ĠPI Ġ/ Ġ 2 Ġis Ġpointing Ġto Ġthe Ġright , ĠPI Ġis Ġpointing Ġto Ġbottom , Ġ 3 Ġ/ Ġ 2 f Ġ* ĠPI Ġis Ġpointing Ġto Ġright . Ċĉ Ġ*/ Ċ ĉ val Ġangle : ĠFloat ĊĊ ĉ val Ġcolor Stops : ĠList < Color Stop Ro > ĊĊ ĉ fun Ġto Css String (): ĠString Ġ{ Ċĉ ĉ val Ġangle Str Ġ= Ġwhen Ġ( direction ) Ġ{ Ċĉĉ ĉ Gradient Direction . TOP _ LEFT Ġ-> Ġ" to Ġleft Ġtop " Ċĉĉ ĉ Gradient Direction . TOP Ġ-> Ġ" to Ġtop " Ċĉĉ ĉ Gradient Direction . TOP _ RIGHT Ġ-> Ġ" to Ġtop Ġright " Ċĉĉ ĉ Gradient Direction . RIGHT Ġ-> Ġ" to Ġright " Ċĉĉ ĉ Gradient Direction . BOTTOM _ RIGHT Ġ-> Ġ" to Ġbottom Ġright " Ċĉĉ ĉ Gradient Direction . BOTTOM Ġ-> Ġ" to Ġbottom " Ċĉĉ ĉ Gradient Direction . BOTTOM _ LEFT Ġ-> Ġ" to Ġbottom Ġleft " Ċĉĉ ĉ Gradient Direction . LEFT Ġ-> Ġ" to Ġleft " Ċĉĉ ĉ Gradient Direction . ANGLE Ġ-> Ġ"${ angle . rad To Deg ()} deg " Ċĉ ĉ } Ċĉ ĉ var Ġcolor Stops Str Ġ= Ġ"" Ċĉ ĉ for Ġ( color Stop Ġin Ġcolor Stops ) Ġ{ Ċĉĉ ĉ if Ġ( color Stops Str Ġ!= Ġ"") Ġcolor Stops Str Ġ+= Ġ", Ġ" Ċĉĉ ĉ color Stops Str Ġ+= Ġcolor Stop . to Css String () Ċĉ ĉ } Ċĉ ĉ return Ġ" linear - gradient ($ angle Str , Ġ$ color Stops Str )" Ċ ĉ } ĊĊĊ ĉ fun Ġget Angle ( width : ĠFloat , Ġheight : ĠFloat ): ĠFloat Ġ{ Ċĉ ĉ if Ġ( direction Ġ== ĠGradient Direction . ANGLE ) Ġreturn Ġangle Ċĉ ĉ else Ġreturn Ġdirection . get Angle ( width , Ġheight ) Ċ ĉ } Ċ } Ċ Ċ data Ġclass ĠLinear Gradient ( ĊĊĉ ĉ override Ġvar Ġdirection : ĠGradient Direction , ĊĊĉ ĉ override Ġvar Ġangle : ĠFloat , ĊĊĉ ĉ override Ġval Ġcolor Stops : ĠMutable List < Color Stop Ro > Ċ ) Ġ: ĠLinear Gradient Ro Ċ Ċ object ĠLinear Gradient Serializer Ġ: ĠTo < Linear Gradient Ro >, ĠFrom < Linear Gradient > Ġ{ ĊĊ ĉ override Ġfun Ġread ( reader : ĠReader ): ĠLinear Gradient Ġ{ Ċĉ ĉ val Ġb Ġ= ĠLinear Gradient ( Ċĉĉĉ ĉ direction Ġ= ĠGradient Direction . valueOf ( reader . string (" direction ") !! ), Ċĉĉĉ ĉ angle Ġ= Ġreader . float (" angle ") !! , Ċĉĉĉ ĉ color Stops Ġ= Ġreader . array 2 (" color Stops ", ĠColor Stop Serializer ) !!. to Mutable List () Ċĉ ĉ ) Ċĉ ĉ return Ġb Ċ ĉ } ĊĊ ĉ override Ġfun ĠLinear Gradient Ro . write ( writer : ĠWriter ) Ġ{ Ċĉ ĉ writer . string (" direction ", Ġdirection . name ) Ċĉ ĉ writer . float (" angle ", Ġangle ) Ċĉ ĉ writer . array (" color Stops ", Ġcolor Stops , ĠColor Stop Serializer ) Ċ ĉ } Ċ } Ċ Ċ enum Ġclass ĠGradient Direction Ġ{ Ċ ĉ TOP _ LEFT , Ċ ĉ TOP , Ċ ĉ TOP _ RIGHT , Ċ ĉ RIGHT , Ċ ĉ BOTTOM _ RIGHT , Ċ ĉ BOTTOM , Ċ ĉ BOTTOM _ LEFT , Ċ ĉ LEFT , Ċ ĉ ANGLE ; ĊĊ ĉ fun Ġget Angle ( width : ĠFloat , Ġheight : ĠFloat ): ĠFloat Ġ{ Ċĉ ĉ return Ġwhen Ġ( this ) Ġ{ Ċĉĉ ĉ TOP _ LEFT Ġ-> Ġatan 2 (- height , Ġwidth ) Ċĉĉ ĉ TOP Ġ-> Ġ 0 f Ċĉĉ ĉ TOP _ RIGHT Ġ-> Ġatan 2 ( height , Ġwidth ) Ċĉĉ ĉ RIGHT Ġ-> Ġ 0 . 5 f Ġ* ĠPI Ċĉĉ ĉ BOTTOM _ RIGHT Ġ-> Ġatan 2 ( height , Ġ- width ) Ċĉĉ ĉ BOTTOM Ġ-> ĠPI Ċĉĉ ĉ BOTTOM _ LEFT Ġ-> Ġatan 2 (- height , Ġ- width ) Ċĉĉ ĉ LEFT Ġ-> Ġ 1 . 5 f Ġ* ĠPI Ċĉĉ ĉ ANGLE Ġ-> Ġ 0 f Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġread Ġonly Ġinterface Ġto Ġ[ Color Stop ] Ċ Ġ*/ Ċ interface ĠColor Stop Ro Ġ{ ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġcolor Ġvalue Ġat Ġthis Ġstop . Ċĉ Ġ*/ Ċ ĉ val Ġcolor : ĠColor Ro ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġpercent Ġtowards Ġthe Ġend Ġposition Ġof Ġthe Ġgradient . ĠThis Ġnumber Ġis Ġabsolute , Ġnot Ġrelative Ġto Ċĉ Ġ* Ġthe Ġprevious Ġcolor Ġstop . Ċĉ Ġ* ĠIf Ġneither Ġ[ pixels ] Ġor Ġ[ percent ] Ġis Ġset , Ġthis Ġstop Ġwill Ġbe Ġhalf way Ġbetween Ġthe Ġprevious Ġstop Ġand Ġthe Ġnext . Ċĉ Ġ*/ Ċ ĉ val Ġpercent : ĠFloat ? ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġnumber Ġof Ġpixels Ġtowards Ġthe Ġend Ġposition Ġof Ġthe Ġgradient . ĠThis Ġnumber Ġis Ġabsolute , Ġnot Ġrelative Ġto Ċĉ Ġ* Ġthe Ġprevious Ġcolor Ġstop . Ċĉ Ġ* ĠIf Ġneither Ġ[ pixels ] Ġor Ġ[ percent ] Ġis Ġset , Ġthis Ġstop Ġwill Ġbe Ġhalf way Ġbetween Ġthe Ġprevious Ġstop Ġand Ġthe Ġnext . Ċĉ Ġ*/ Ċ ĉ val Ġpixels : ĠFloat ? ĊĊ ĉ fun Ġto Css String (): ĠString Ġ{ Ċĉ ĉ var Ġstr Ġ= Ġcolor . to Css String () Ċĉ ĉ if Ġ( percent Ġ!= Ġnull ) Ġstr Ġ+= Ġ" Ġ${ percent !! Ġ* Ġ 1 0 0 f } %" Ċĉ ĉ else Ġif Ġ( pixels Ġ!= Ġnull ) Ġstr Ġ+= Ġ" Ġ${ pixels } px " Ċĉ ĉ return Ġstr Ċ ĉ } Ċ } Ċ Ċ data Ġclass ĠColor Stop ( ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġcolor Ġvalue Ġat Ġthis Ġstop . Ċĉĉ Ġ*/ Ċĉ ĉ override Ġvar Ġcolor : ĠColor Ro , ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġpercent Ġtowards Ġthe Ġend Ġposition Ġof Ġthe Ġgradient . ĠThis Ġnumber Ġis Ġabsolute , Ġnot Ġrelative Ġto Ċĉĉ Ġ* Ġthe Ġprevious Ġcolor Ġstop . Ċĉĉ Ġ* ĠIf Ġneither Ġ[ pixels ] Ġor Ġ[ percent ] Ġis Ġset , Ġthis Ġstop Ġwill Ġbe Ġhalf way Ġbetween Ġthe Ġprevious Ġstop Ġand Ġthe Ġnext . Ċĉĉ Ġ*/ Ċĉ ĉ override Ġvar Ġpercent : ĠFloat ? Ġ= Ġnull , ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġnumber Ġof Ġpixels Ġtowards Ġthe Ġend Ġposition Ġof Ġthe Ġgradient . ĠThis Ġnumber Ġis Ġabsolute , Ġnot Ġrelative Ġto Ċĉĉ Ġ* Ġthe Ġprevious Ġcolor Ġstop . Ċĉĉ Ġ* ĠIf Ġneither Ġ[ pixels ] Ġor Ġ[ percent ] Ġis Ġset , Ġthis Ġstop Ġwill Ġbe Ġhalf way Ġbetween Ġthe Ġprevious Ġstop Ġand Ġthe Ġnext . Ċĉĉ Ġ*/ Ċĉ ĉ override Ġvar Ġpixels : ĠFloat ? Ġ= Ġnull Ċ ) Ġ: ĠColor Stop Ro Ġ{ ĊĊ ĉ constructor ( rgba : ĠLong , Ġpercent : ĠFloat ? Ġ= Ġnull , Ġpixels : ĠFloat ? Ġ= Ġnull ) Ġ: Ġthis ( Color ( rgba ), Ġpercent , Ġpixels ) ĊĊ ĉ fun Ġset ( other : ĠColor Stop Ro ): ĠColor Stop Ġ{ Ċĉ ĉ color Ġ= Ġother . color Ċĉ ĉ percent Ġ= Ġother . percent Ċĉ ĉ pixels Ġ= Ġother . pixels Ċĉ ĉ return Ġthis Ċ ĉ } Ċ Ċ } Ċ Ċ object ĠColor Stop Serializer Ġ: ĠTo < Color Stop Ro >, ĠFrom < Color Stop > Ġ{ ĊĊ ĉ override Ġfun Ġread ( reader : ĠReader ): ĠColor Stop Ġ{ Ċĉ ĉ val Ġc Ġ= ĠColor Stop ( Ċĉĉĉ ĉ color Ġ= Ġreader . color (" color ") !! , Ċĉĉĉ ĉ percent Ġ= Ġreader . float (" percent "), Ċĉĉĉ ĉ pixels Ġ= Ġreader . float (" pixels ") Ċĉ ĉ ) Ċĉ ĉ return Ġc Ċ ĉ } ĊĊ ĉ override Ġfun ĠColor Stop Ro . write ( writer : ĠWriter ) Ġ{ Ċĉ ĉ writer . color (" color ", Ġcolor ) Ċĉ ĉ if Ġ( percent Ġ!= Ġnull ) Ġwriter . float (" percent ", Ġpercent ) Ċĉ ĉ if Ġ( pixels Ġ!= Ġnull ) Ġwriter . float (" pixels ", Ġpixels ) Ċ ĉ } Ċ } Ċ Ċ interface ĠBorder Colors Ro Ġ{ ĊĊ ĉ val Ġtop : ĠColor Ro Ċ ĉ val Ġright : ĠColor Ro Ċ ĉ val Ġbottom : ĠColor Ro Ċ ĉ val Ġleft : ĠColor Ro ĊĊ ĉ fun Ġcopy ( top : ĠColor Ro Ġ= Ġthis . top , Ġright : ĠColor Ro Ġ= Ġthis . right , Ġbottom : ĠColor Ro Ġ= Ġthis . bottom , Ġleft : ĠColor Ro Ġ= Ġthis . left ): ĠBorder Colors Ġ{ Ċĉ ĉ return ĠBorder Colors ( top . copy (), Ġright . copy (), Ġbottom . copy (), Ġleft . copy ()) Ċ ĉ } Ċ } Ċ Ċ data Ġclass ĠBorder Colors ( Ċĉ ĉ override Ġval Ġtop : ĠColor , Ċĉ ĉ override Ġval Ġright : ĠColor , Ċĉ ĉ override Ġval Ġbottom : ĠColor , Ċĉ ĉ override Ġval Ġleft : ĠColor Ċ ) Ġ: ĠBorder Colors Ro Ġ{ ĊĊ ĉ constructor ( all : ĠColor Ro ) Ġ: Ġthis ( all . copy (), Ġall . copy (), Ġall . copy (), Ġall . copy ()) Ġ{ Ċĉ ĉ set ( all ) Ċ ĉ } ĊĊ ĉ constructor ( Ċĉĉ ĉ top : ĠColor Ro , Ċĉĉ ĉ right : ĠColor Ro , Ċĉĉ ĉ bottom : ĠColor Ro , Ċĉĉ ĉ left : ĠColor Ro Ċ ĉ ) Ġ: Ġthis ( top . copy (), Ġright . copy (), Ġbottom . copy (), Ġleft . copy ()) ĊĊ ĉ constructor () Ġ: Ġthis ( Color . CLEAR ) ĊĊ ĉ fun Ġset ( all : ĠColor Ro ): ĠBorder Colors Ġ{ Ċĉ ĉ top . set ( all ) Ċĉ ĉ right . set ( all ) Ċĉ ĉ bottom . set ( all ) Ċĉ ĉ left . set ( all ) Ċĉ ĉ return Ġthis Ċ ĉ } ĊĊ ĉ fun Ġset ( other : ĠBorder Colors Ro ): ĠBorder Colors Ġ{ Ċĉ ĉ top . set ( other . top ) Ċĉ ĉ right . set ( other . right ) Ċĉ ĉ bottom . set ( other . bottom ) Ċĉ ĉ left . set ( other . left ) Ċĉ ĉ return Ġthis Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠMultip lies Ġall Ġborder Ġcolors Ġby Ġthe Ġgiven Ġvalue . Ċĉ Ġ*/ Ċ ĉ fun Ġmul ( value : ĠColor Ro ) Ġ{ Ċĉ ĉ top . mul ( value ) Ċĉ ĉ right . mul ( value ) Ċĉ ĉ bottom . mul ( value ) Ċĉ ĉ left . mul ( value ) Ċ ĉ } Ċ } Ċ Ċ object ĠBorder Colors Serializer Ġ: ĠTo < Border Colors Ro >, ĠFrom < Border Colors > Ġ{ Ċ ĉ override Ġfun ĠBorder Colors Ro . write ( writer : ĠWriter ) Ġ{ Ċĉ ĉ writer . color (" top ", Ġtop ) Ċĉ ĉ writer . color (" right ", Ġright ) Ċĉ ĉ writer . color (" bottom ", Ġbottom ) Ċĉ ĉ writer . color (" left ", Ġleft ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġread ( reader : ĠReader ): ĠBorder Colors Ġ{ Ċĉ ĉ return ĠBorder Colors ( Ċĉĉĉ ĉ reader . color (" top ") !! , Ċĉĉĉ ĉ reader . color (" right ") !! , Ċĉĉĉ ĉ reader . color (" bottom ") !! , Ċĉĉĉ ĉ reader . color (" left ") !! Ċĉ ĉ ) Ċ ĉ } Ċ }