package Ġcom . brain . ion . graphics Ċ Ċ import Ġcom . brain . ion . components . Component Ċ import Ġcom . brain . ion . components . Text Ċ import Ġcom . brain . ion . components . vectors . Path Ċ import Ġcom . brain . ion . components . vectors . Style Ċ import Ġcom . brain . ion . components . vectors . Vector Ċ import Ġjava . awt .* Ċ import Ġjava . awt . font . Text Layout Ċ import Ġjava . awt . geom . Affine Transform ĊĊ Ċ class ĠIon Graphics ( Ċĉ ĉ private Ġval Ġbounds : ĠRectangle Ġ= ĠRectangle ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ), Ċĉ ĉ g : ĠGraphics 2 D Ġ= ĠDummy Graphics 2 D () Ċ ) Ġ{ ĊĉĊ ĉ val Ġrender Queue : ĠGroup Ġ= ĠGroup Impl ( 0 , Ġnull ) Ċ ĉ val Ġgraphics : ĠGraphics 2 D Ċĉ ĉ get () Ġ= Ġgraphics Private . create () Ġas ĠGraphics 2 D ĊĉĊ ĉ private Ġvar Ġgraphics Private : ĠGraphics 2 D Ġ= Ġg ĊĉĊ ĉ fun Ġset Graphics ( g : ĠGraphics ) Ġ{ Ċĉ ĉ graphics Private Ġ= Ġg . create () Ġas ĠGraphics 2 D ĊĉĉĊĉ ĉ graphics Private . color Ġ= ĠColor . DARK _ GRAY Ċĉ ĉ graphics Private . set Clip ( bounds . x , Ġbounds . y , Ġbounds . width , Ġbounds . height ) Ċĉ ĉ graphics Private . fillRect ( bounds . x , Ġbounds . y , Ġbounds . width , Ġbounds . height ) ĊĉĉĊĉ ĉ graphics Private . set Rendering Hint ( Rendering Hints . KEY _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ ANTI ALIAS _ ON ) Ċĉ ĉ graphics Private . set Rendering Hint ( Rendering Hints . KEY _ TEXT _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ TEXT _ ANTI ALIAS _ ON ) Ċĉĉ Ċ // ĉ ĉ val Ġtext Ġ= ĠText (" Test ") Ċ // ĉ ĉ graphics Private . color Ġ= ĠColor . white Ċ // ĉ ĉ val Ġf rc Ġ= Ġgraphics Private . getFont Render Context () Ċ // ĉ ĉ val Ġfont Ġ= ĠFont (" Open ĠSans ", ĠFont . BOLD , Ġ 1 8 ); Ċ // ĉ ĉ val Ġlayout Ġ= ĠText Layout (" This Ġis Ġa Ġstring ", Ġfont , Ġf rc ) Ċ // ĉ ĉ val Ġat Ġ= ĠAff ine Transform () Ċ // ĉ ĉ at . set To Translation ( 1 0 0 . 0 , Ġ 1 0 0 . 0 ) Ċ // ĉ ĉ graphics . fill ( Path ("", ĠStyle (), Ġlayout . get Outline ( at )). get Shape ()) ĊĉĉĊ ĉ } ĊĉĊ ĉ private Ġoperator Ġfun ĠNumber . plus ( i : ĠNumber ): ĠNumber Ġ{ Ċĉ ĉ return Ġthis . toDouble () Ġ+ Ġi . toDouble () Ċ ĉ } ĊĉĊ ĉ fun Ġdraw ( component : ĠComponent , Ġbase X : ĠNumber Ġ= Ġ 0 , Ġbase Y : ĠNumber Ġ= Ġ 0 ) Ġ{ ĊĉĉĊĉ ĉ if Ġ(! component . visible ) Ġ{ Ċĉĉ ĉ return Ċĉ ĉ } ĊĉĉĊĉ ĉ val Ġx Ġ= Ġbase X Ġ+ Ġcomponent . x Ċĉ ĉ val Ġy Ġ= Ġbase Y Ġ+ Ġcomponent . y ĊĉĉĊĉ ĉ if ( component Ġis ĠVector ) Ġ{ Ċĉĉ ĉ draw ( component ) Ċĉ ĉ } Ġelse Ġ{ ĊĉĉĉĊĉĉ ĉ for Ġ( c Ġin Ġcomponent . get Collection ( this )) Ġ{ Ċĉĉĉ ĉ when ( c ) Ġ{ Ċĉĉĉĉ ĉ is ĠVector Ġ-> Ġdraw ( c , Ġx , Ġy ) Ċĉĉĉĉ ĉ else Ġ-> Ġdraw ( c , Ġx , Ġy ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĉĉĉĊĉ ĉ } ĊĉĉĊ ĉ } ĊĉĊ ĉ private Ġfun Ġdraw ( vector : ĠVector , Ġx : ĠNumber Ġ= Ġ 0 , Ġy : ĠNumber Ġ= Ġ 0 ) Ġ{ ĊĉĉĊĉ ĉ if (! vector . visible ) Ġ{ Ċĉĉ ĉ return Ċĉ ĉ } ĊĉĉĊĉ ĉ val Ġgraphics Ġ= Ġgraphics Ċĉ ĉ graphics . translate ( x . toDouble (), Ġy . toDouble ()) ĊĊĉ ĉ graphics . color Ġ= Ġvector . style . fill Color Ċĉ ĉ graphics . fill ( vector . get Shape ()) ĊĉĉĊĉ ĉ if Ġ( vector . style . stroke Color . alpha Ġ!= Ġ 0 ) Ġ{ Ċĉĉ ĉ graphics . color Ġ= Ġvector . style . stroke Color Ċĉĉ ĉ graphics . stroke Ġ= Ġvector . style . stroke Prop Ċ Ċ // ĉĉ ĉ if ( vector . style . stroke Prop . lineWidth Ġ% Ġ 2 Ġ== Ġ 0 f ) Ġ{ Ċ // ĉĉĉ ĉ graphics . set Rendering Hint ( Rendering Hints . KEY _ ST RO KE _ CONTROL , ĠRendering Hints . VALUE _ ST RO KE _ PURE ); Ċ // ĉĉ ĉ } Ċĉĉ ĉ graphics . draw ( vector . get Shape ()) ĊĊĉ ĉ } ĊĉĉĊ ĉ } ĊĉĊ ĉ fun Ġrender () Ġ{ Ċĉ ĉ render Queue . render ( this ) Ċ ĉ } ĊĉĊ ĉ private Ġclass ĠGroup Impl ( Ċĉĉ ĉ override Ġval Ġindex : ĠInt , Ċĉĉ ĉ override Ġval Ġparent : ĠRender able ?, Ċĉĉ ĉ private Ġval Ġqueue : ĠMutable List < Render able > Ġ= Ġmutable ListOf () Ċ ĉ ): ĠGroup , ĠMutable List < Render able > Ġby Ġqueue Ġ{ ĊĉĉĊĉ ĉ override Ġfun Ġnew Group (): ĠGroup Ġ{ Ċĉĉ ĉ val Ġgroup Ġ= ĠGroup Impl ( size , Ġthis ) Ċĉĉ ĉ queue . add ( group ) Ċĉĉ ĉ return Ġgroup Ċĉ ĉ } ĊĉĉĊĉ ĉ override Ġfun Ġrender ( g : ĠIon Graphics ) Ġ{ Ċĉĉ ĉ for Ġ( c Ġin Ġqueue . toList ()) Ġ{ Ċĉĉĉ ĉ when ( c ) Ġ{ Ċĉĉĉĉ ĉ is ĠGroup Ġ-> Ġc . render ( g ) Ċĉĉĉĉ ĉ is ĠComponent Ġ-> Ġg . draw ( c ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĉĉĊ ĉ } Ċ Ċ }