package Ġio . github . kar ino 2 . kot lit ex . renderer . node Ċ Ċ import Ġio . github . kar ino 2 . kot lit ex . R Node Path Holder Ċ import Ġio . github . kar ino 2 . kot lit ex . renderer . Font Loader Ċ Ċ enum Ġclass ĠAlignment Ġ{ ĊĠĠĠ ĠNONE Ġ/* Ġsame Ġas Ġnull Ġon Ġcanvas - latex Ġ*/, ĠLEFT , ĠRIGHT , ĠC ENTER Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠVirtual ĠNode Ġrepresents Ġthe Ġinterface Ġfor Ġa Ġall Ġsub ĠNodes . Ċ Ġ* ĠThey Ġare Ġsimple Ġmodels , Ġwhich Ġallow Ġthe Ġdata Ġto Ġbe Ġtransp lated Ġto Ġmost Ċ Ġ* Ġrendering Ġplatforms . Ċ Ġ*/ Ċ sealed Ġclass ĠVirtual Canvas Node ( var Ġkl asses : ĠSet < String >) Ġ{ ĊĠĠĠ Ġvar Ġmargin Ġ= ĠMargin ( 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠ Ġopen Ġval Ġbounds Ġ= ĠBounds ( 0 . 0 , Ġ 0 . 0 ) ĊĊĠĠĠ Ġopen Ġfun Ġset Position ( x : ĠDouble , Ġy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbounds . x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġbounds . y Ġ= Ġy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġupdate Size () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġb . append ("${ this . java Class . simple Name } Ġ{ Ġbounds =$ bounds , Ġmargin =$ margin ") ĊĠĠĠĠĠĠĠ Ġif Ġ( kl asses . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . append (", Ġkl asses =$ kl asses ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . append (" Ġ} ") ĊĠĠĠĠĠĠĠ Ġreturn Ġb . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠContainer Node Ġrepresents Ġthe Ġcontainer Ġof Ġchild Ġnodes Ċ Ġ* ĠWhen Ġthis Ġposition Ġis Ġupdated , Ġso Ġare Ġthe Ġchildren 's Ġposition . Ċ Ġ*/ Ċ abstract Ġclass ĠVirtual Container Node < T Ġ: ĠVirtual Canvas Node >( kl asses : ĠSet < String >) Ġ: ĠVirtual Canvas Node ( kl asses ) Ġ{ ĊĠĠĠ Ġval Ġnodes Ġ= Ġmutable ListOf < T >() ĊĊĠĠĠ Ġfun Ġadd Node ( node : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnodes . add ( node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nodes . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnodes . last () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Position ( x : ĠDouble , Ġy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setPosition ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġx Ġ- Ġbounds . x ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġnodes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew X Ġ= Ġchild . bounds . x Ġ+ Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . setPosition ( new X , Ġchild . bounds . y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġthis . nodes . map Ġ{ Ġit . toString () Ġ}. join ToString (", Ġ", Ġ"[", Ġ"] ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . java Class . simple Name Ġ+ Ġ" Ġ{ Ġnodes Ġ= Ġ" Ġ+ Ġnodes Ġ+ Ġ", Ġkl asses Ġ= Ġ" Ġ+ Ġthis . kl asses Ġ+ Ġ" Ġ}" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġbounds : ĠBounds ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbounds Ġ= Ġsuper . bounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . with Index (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds Ġ= Ġit . value . bounds . copy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . extend ( it . value . bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbounds ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ class ĠVertical List Row ( kl asses : ĠSet < String >) Ġ: ĠVirtual Container Node < Virtual Canvas Node >( kl asses ) Ġ{ ĊĠĠĠ Ġvar Ġstr ut Bounds : ĠBounds ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġadd Base Str ut ( pad Node : ĠVirtual Canvas Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( str ut Bounds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr ut Bounds Ġ= Ġpad Node . bounds . copy () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr ut Bounds ?. extend ( pad Node . bounds ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Position X ( x : ĠDouble ) Ġ= Ġset Position ( x , Ġbounds . y ) ĊĊĠĠĠ Ġfun Ġleft Align ( table Left : ĠDouble ) Ġ= Ġset Position X ( table Left ) ĊĊĠĠĠ Ġfun Ġcenter Align ( table Center : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . width ĊĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= Ġtable Center Ġ- Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġset Position X ( center ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġright Align ( table Right : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . width ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġtable Right Ġ- Ġwidth ĊĠĠĠĠĠĠĠ Ġset Position X ( right ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠSt retch y Node ( val ĠminWidth : ĠDouble , Ġkl asses : ĠSet < String >) Ġ: ĠVirtual Canvas Node ( kl asses ) Ġ{ ĊĠĠĠ Ġopen Ġfun Ġset List Width ( width : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbounds . width Ġ= Ġwidth Ġ+ Ġthis . min Width ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠVertical List Ġclass Ġrepresents Ġa Ġ 1 D Ġarray Ġof ĠVertical List Row 's Ċ Ġ* Ġwhich Ġcan Ġbe Ġh orizontally Ġaligned Ġleft , Ġright , Ġor Ġcenter . Ċ Ġ*/ Ċ class ĠVertical List ( var Ġalignment : ĠAlignment , Ġvar Ġrow Start : ĠDouble , Ġkl asses : ĠSet < String >) Ġ: ĠVirtual Container Node < Vertical List Row >( kl asses ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġx Ġcoordinate Ġof Ġthe Ġnext Ġnode Ġto Ġbe Ġplaced Ġinto Ġthe ĠList ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetNext Node Placement (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Row Ġ= Ġthis . last () Ġ?: Ġreturn Ġthis . row Start Ġ+ Ġthis . margin . left ĊĠĠĠĠĠĠĠ Ġval Ġlast Node Ġ= Ġlast Row . last () Ġ?: Ġreturn Ġthis . row Start Ġ+ Ġlast Row . margin . left ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġlast Node . bounds ĊĠĠĠĠĠĠĠ Ġreturn Ġbounds . x Ġ+ Ġbounds . width Ġ+ Ġlast Node . margin . right ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġwidth Ġof Ġthe Ġstretch y Ġnodes Ġcontained Ġwithin . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Stretch Widths () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . width ĊĠĠĠĠĠĠĠ Ġnodes . forEach Ġ{ Ġrow Node Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow Node . nodes . forEach Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġis ĠSt retch y Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . set List Width ( width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlign s Ġthe ĠList Ġbased Ġon Ġthe Ġspecified Ġalignment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġalign () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this . alignment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlignment . LEFT Ġ-> Ġleft Align () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlignment . CENTER Ġ-> Ġcenter Align () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlignment . RIGHT Ġ-> Ġright Align () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlignment . NONE Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġrow Ġto Ġthe ĠList . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Row ( row : ĠVertical List Row ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( row ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa ĠVirtual Canvas Node Ġto Ġcurrent Ġrow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Cell ( node : ĠVirtual Canvas Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . last () !!. add Node ( node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstr ut Bounds : ĠBounds ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthis . bounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . forEach Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġrow . str ut Bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . extend ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcenter Align () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= Ġbounds . x Ġ+ Ġbounds . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġnodes . forEach Ġ{ Ġit . center Align ( center ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġright Align () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġbounds . x Ġ+ Ġbounds . width ĊĠĠĠĠĠĠĠ Ġnodes . forEach Ġ{ Ġit . right Align ( right ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġleft Align () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġbounds . x ĊĠĠĠĠĠĠĠ Ġnodes . forEach Ġ{ Ġit . left Align ( left ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠText Node ( ĊĠĠĠ Ġval Ġfont Loader : ĠFont Loader , ĊĠĠĠ Ġval Ġtext : ĠString , ĊĠĠĠ Ġval Ġfont : ĠCss Font , ĊĠĠĠ Ġval Ġcolor : ĠString , ĊĠĠĠ Ġkl asses : ĠSet < String > Ċ ) Ġ: ĠVirtual Canvas Node ( kl asses ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġupdate Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġfont Loader . measure Size ( font , Ġtext ) ĊĠĠĠĠĠĠĠ Ġbounds . width Ġ= Ġsize . width ĊĠĠĠĠĠĠĠ Ġbounds . height Ġ= Ġsize . height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġb . append ("${ this . java Class . simple Name } Ġ{ Ġtext =$ text ") ĊĠĠĠĠĠĠĠ Ġb . append (", Ġbounds =$ bounds ") ĊĠĠĠĠĠĠĠ Ġb . append (" Ġ} ") ĊĠĠĠĠĠĠĠ Ġreturn Ġb . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAn ĠH Padding Node Ġrepresents Ġan Ġinvisible Ġnode Ġ( not Ġdrawn ) Ġwith Ġa Ġspecific Ġwidth / x . Ċ Ġ*/ Ċ class ĠH Padding Node ( kl asses : ĠSet < String >) Ġ: ĠVirtual Canvas Node ( kl asses ) Ċ Ċ class ĠHorizontal Line Node ( val Ġcolor : ĠString , ĠminWidth : ĠDouble , Ġkl asses : ĠSet < String >) Ġ: ĠSt retch y Node ( min Width , Ġkl asses ) Ċ Ċ // ĠSvg Node Ġin Ġcanvas - latex . ĠNote Ġthat Ġthere Ġis Ġthe Ġsame Ġclass - name Ġin Ġkat ex Ġ( but Ġthis Ġclass Ġis Ġcounter - part Ġof Ġcanvas - latex , Ġnot Ġkat ex ). Ċ class ĠPath Node ( val Ġr node : ĠR Node Path Holder , ĠminWidth : ĠDouble , Ġkl asses : ĠSet < String >) Ġ: ĠSt retch y Node ( min Width , Ġkl asses ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġset List Width ( width : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbounds . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġoriginal Ġimplementation , Ġthey Ġalso Ġupdate Ġwidth Ġof Ġvirtual Html Node . attributes Ġhere . ĊĠĠĠĠĠĠĠ Ġ// ĠBut ĠI Ġthink Ġwe Ġdo Ġnot Ġuse Ġit . ĊĠĠĠ Ġ} Ċ }