/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 Ġme . k alic in ski . s udoku . renderer Ċ Ċ import Ġme . k alic in ski . multi platform . Multi Canvas Ċ import Ġme . k alic in ski . multi platform . Rect Ċ Ċ fun Ġdraw Board ( ĊĠĠĠĠĠĠĠ Ġmulti Canvas : ĠMulti Canvas , ĊĠĠĠĠĠĠĠ Ġwidth : ĠFloat , ĊĠĠĠĠĠĠĠ Ġheight : ĠFloat , ĊĠĠĠĠĠĠĠ ĠstrokeWidth Bold : ĠFloat , ĊĠĠĠĠĠĠĠ ĠstrokeWidth Normal : ĠFloat , ĊĠĠĠĠĠĠĠ Ġcolor Bold : ĠInt , ĊĠĠĠĠĠĠĠ Ġcolor Normal : ĠInt Ċ ){ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ% Ġ 3 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . lineWidth Ġ= ĠstrokeWidth Bold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . color Ġ= Ġcolor Bold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġin Ġ 1 .. 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . draw Line ( i Ġ* Ġwidth Ġ/ Ġ 9 f , Ġ 0 f , Ġi Ġ* Ġwidth Ġ/ Ġ 9 f , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . draw Line ( 0 f , Ġi Ġ* Ġheight Ġ/ Ġ 9 f , Ġwidth , Ġi Ġ* Ġheight Ġ/ Ġ 9 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . lineWidth Ġ= ĠstrokeWidth Normal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . color Ġ= Ġcolor Normal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġin Ġ 1 .. 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . draw Line ( i Ġ* Ġwidth Ġ/ Ġ 9 f , Ġ 0 f , Ġi Ġ* Ġwidth Ġ/ Ġ 9 f , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . draw Line ( 0 f , Ġi Ġ* Ġheight Ġ/ Ġ 9 f , Ġwidth , Ġi Ġ* Ġheight Ġ/ Ġ 9 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġtext Bounds Ġ= ĠRect () Ċ Ċ fun Ġdraw Cell ( ĊĠĠĠĠĠĠĠ Ġmulti Canvas : ĠMulti Canvas , ĊĠĠĠĠĠĠĠ Ġnumbers Showing : ĠSet < Int >, ĊĠĠĠĠĠĠĠ Ġwidth : ĠFloat , ĊĠĠĠĠĠĠĠ Ġheight : ĠFloat , ĊĠĠĠĠĠĠĠ Ġis Focused : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġis Change able : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġis Number Incorrect : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġis Number Confirmed : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcolor Focused : ĠInt , ĊĠĠĠĠĠĠĠ Ġcolor Change able : ĠInt , ĊĠĠĠĠĠĠĠ Ġcolor Incorrect : ĠInt , ĊĠĠĠĠĠĠĠ Ġcolor Highlight : ĠInt , ĊĠĠĠĠĠĠĠ Ġbig Number Height : ĠFloat , ĊĠĠĠĠĠĠĠ Ġsmall Number Height : ĠFloat Ċ ){ ĊĠĠĠ Ġmulti Canvas . textAlign Ġ= Ġ" left " ĊĠĠĠ Ġif Ġ( is Focused ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmulti Canvas . color Ġ= Ġcolor Focused ĊĠĠĠĠĠĠĠ Ġmulti Canvas . fillRect ( 0 f , Ġ 0 f , Ġwidth , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmulti Canvas . color Ġ= Ġif Ġ( is Change able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Change able ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠ 0 xFF 0 0 0 0 0 0 . toInt () Ġ// Color . BLACK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isNumber Incorrect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmulti Canvas . color Ġ= Ġcolor Incorrect ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isNumber Confirmed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmulti Canvas . text Size Ġ= Ġbig Number Height ĊĠĠĠĠĠĠĠ Ġval Ġbig Number Ġ= Ġnumbers Showing . iterator (). next (). toString () ĊĠĠĠĠĠĠĠ Ġmulti Canvas . measure Text ( big Number , Ġtext Bounds ) ĊĊĠĠĠĠĠĠĠ Ġval Ġvertical Shift : ĠFloat Ġ= Ġif Ġ( text Bounds . height () Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- text Bounds . bottom Ġ+ Ġtext Bounds . height () Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . text Size Ġ/ Ġ 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Shift : ĠFloat Ġ= Ġif Ġ( text Bounds . width () Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- text Bounds . left Ġ+ Ġtext Bounds . width () Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġmulti Canvas . draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ/ Ġ 2 f Ġ- Ġhorizontal Shift , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ/ Ġ 2 f Ġ+ Ġvertical Shift ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġnumbers Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( i Ġ- Ġ 1 ) Ġ% Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( i Ġ- Ġ 1 ) Ġ/ Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Highlight ed Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Highlight ed Ġ== Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġmulti Canvas . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . color Ġ= Ġcolor Highlight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . draw Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ* Ġwidth Ġ/ Ġ 3 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ* Ġheight Ġ/ Ġ 3 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( x Ġ+ Ġ 1 ) Ġ* Ġwidth Ġ/ Ġ 3 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Ġ+ Ġ 1 ) Ġ* Ġheight Ġ/ Ġ 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . text Size Ġ= Ġsmall Number Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . measure Text ( i . toString (), Ġtext Bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertical Shift : ĠFloat Ġ= Ġif Ġ( text Bounds . height () Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Bounds . bottom Ġ+ Ġtext Bounds . height () Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . text Size Ġ/ Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhorizontal Shift : ĠFloat Ġ= Ġif Ġ( text Bounds . width () Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- text Bounds . left Ġ+ Ġtext Bounds . width () Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Canvas . draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ* Ġwidth Ġ/ Ġ 3 f Ġ+ Ġwidth Ġ/ Ġ 6 f Ġ- Ġhorizontal Shift , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ* Ġheight Ġ/ Ġ 3 f Ġ+ Ġvertical Shift Ġ+ Ġheight Ġ/ Ġ 6 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }