package Ġcom . b aj dcc . L AL R 1 . ui . drawing Ċ Ċ import Ġjava . awt .* Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Linked BlockingQueue Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* ĠãĢĲ çķĮéĿ¢ ãĢĳ è¿ľç¨ĭ æĺ¾ç¤º å±ı Ċ Ġ* Ċ Ġ* Ġ@ author Ġb aj dcc Ċ Ġ*/ Ċ class ĠUI Remote Graphics ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġx : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġy : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġold _ x : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġold _ y : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠlineWidth : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġsvg mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġstring mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġsb : ĠStringBuilder ĊĠĠĠ Ġprivate Ġval Ġqueue : ĠQueue < Char > ĊĠĠĠ Ġprivate Ġval Ġimage : ĠImage ĊĠĠĠ Ġprivate Ġval Ġg image : ĠGraphics ĊĠĠĠ Ġprivate Ġval Ġbg : ĠColor ĊĠĠĠ Ġprivate Ġval Ġfg : ĠColor ĊĠĠĠ Ġprivate Ġval Ġcache : ĠStringBuilder ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . old _ x Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . old _ y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . lineWidth Ġ= Ġ 9 9 9 9 ĊĠĠĠĠĠĠĠ Ġthis . svg mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . string mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . queue Ġ= ĠLinked BlockingQueue () ĊĠĠĠĠĠĠĠ Ġthis . cache Ġ= ĠStringBuilder ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġthis . sb Ġ= ĠStringBuilder ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġthis . bg Ġ= ĠColor . white ĊĠĠĠĠĠĠĠ Ġthis . fg Ġ= ĠColor . black ĊĠĠĠĠĠĠĠ Ġthis . image Ġ= ĠBufferedImage ( width , Ġheight , ĠBufferedImage . TYPE _ INT _ RGB ) ĊĠĠĠĠĠĠĠ Ġthis . g image Ġ= Ġthis . image . graphics ĊĠĠĠĠĠĠĠ Ġthis . g image . color Ġ= Ġbg ĊĠĠĠĠĠĠĠ Ġthis . g image . fillRect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġthis . g image . color Ġ= Ġfg ĊĠĠĠĠĠĠĠ Ġthis . g image . font Ġ= ĠFont (" æ¥ · ä½ĵ ", ĠFont . PLAIN , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġg 2 d Ġ= Ġg image Ġas ĠGraphics 2 D ĊĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ ANTI ALIAS _ ON ) ĊĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ TEXT _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ TEXT _ ANTI ALIAS _ DEFAULT ) ĊĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ ST RO KE _ CONTROL , ĠRendering Hints . VALUE _ ST RO KE _ DEFAULT ) ĊĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ TEXT _ LCD _ CON TR AST , Ġ 1 4 0 ) ĊĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ FR ACTION AL METR ICS , ĠRendering Hints . VALUE _ FR ACTION AL METR ICS _ OFF ) ĊĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ RENDER ING , ĠRendering Hints . VALUE _ RENDER _ DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpaint ( g : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd _ c Ġ= Ġ'\ uff ee ' ĊĠĠĠĠĠĠĠ Ġval Ġcmd _ l Ġ= Ġ'\ uff ed ' ĊĠĠĠĠĠĠĠ Ġval Ġcmd _ ml Ġ= Ġ'\ uff ec ' ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġthis . queue . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . drawImage ( image , Ġ 0 , Ġ 0 , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ'` ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache . append ( c ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġcache . toString () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcmd . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcmd [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġcmd _ c Ġ&& Ġ! this . string mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . svg mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw SVG Path ( sb . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . delete ( 0 , Ġsb . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . svg mode Ġ= Ġ! this . svg mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( c Ġ== Ġcmd _ l Ġ|| Ġc Ġ== Ġcmd _ ml ) Ġ&& Ġ! this . svg mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . string mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġcmd _ l ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw String ( sb . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw String Multi Line ( sb . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . delete ( 0 , Ġsb . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . string mode Ġ= Ġ! this . string mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . svg mode Ġ|| Ġthis . string mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcache . delete ( 0 , Ġcache . length ) ĊĠĠĠĠĠĠĠ Ġg . drawImage ( image , Ġ 0 , Ġ 0 , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw String ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . g image . draw String ( s , Ġx , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw String Multi Line ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġthis . g image . font Metrics ĊĠĠĠĠĠĠĠ Ġdraw String Multi Line ( text , Ġm , Ġx , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw String Multi Line ( text : ĠString , Ġm : ĠFont Metrics , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġy 1 Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġvar Ġwords Ġ= Ġtext . split ("\ r ?\ n ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġif Ġ( words . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( word Ġin Ġwords ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw String Multi Line ( word , Ġm , Ġx , Ġy 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Ġ+= Ġm . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m . string Width ( text ) Ġ< ĠlineWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . g image . draw String ( text , Ġx , Ġy 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ġ= Ġtext . split (" ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Line Ġ= ĠStringBuilder ( 1 2 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Line . append ( words [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġwords . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m . string Width ( current Line . toString () Ġ+ Ġwords [ i ]) Ġ< ĠlineWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Line . append ( words [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . g image . draw String ( current Line . toString (), Ġx , Ġy 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Ġ+= Ġm . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Line . delete ( 0 , Ġcurrent Line . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Line . append ( words [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Line . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . g image . draw String ( current Line . toString (), Ġx , Ġy 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw SVG Path ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġpat . matcher ( s ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg 1 Ġ= Ġm . group ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg 2 Ġ= Ġm . group ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold _ x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold _ y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( m . group ( 1 )[ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' M ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġtry Parse ( arg 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' m ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġtry Parse ( arg 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' L ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġtry Parse ( arg 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( old _ x , Ġold _ y , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' l ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġtry Parse ( arg 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( old _ x , Ġold _ y , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' R ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġtry Parse ( arg 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( old _ x , Ġold _ y , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' r ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġtry Parse ( arg 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( old _ x , Ġold _ y , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' W ' Ġ-> ĠlineWidth Ġ= Ġtry Parse ( arg 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Line ( x 1 : ĠInt , Ġy 1 : ĠInt , Ġx 2 : ĠInt , Ġy 2 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . g image . draw Line ( x 1 , Ġy 1 , Ġx 2 , Ġy 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear ( x 1 : ĠInt , Ġy 1 : ĠInt , Ġx 2 : ĠInt , Ġy 2 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġthis . g image . color ĊĠĠĠĠĠĠĠ Ġthis . g image . color Ġ= ĠColor . white ĊĠĠĠĠĠĠĠ Ġthis . g image . fillRect ( x 1 , Ġy 1 , Ġx 2 Ġ- Ġx 1 , Ġy 2 Ġ- Ġy 1 ) ĊĠĠĠĠĠĠĠ Ġthis . g image . color Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Text ( c : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . queue . add ( c ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpat Ġ= ĠPattern . compile ("( \\ w )\\ s * ([ 0 - 9 - ]+ )? \\ s * ([ 0 - 9 - ]+ )? ") ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtry Parse ( str : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . parseInt ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( n fe : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ