package Ġmono . html . canvas . canvas Ċ Ċ import Ġkotlinx . browser . window Ċ import Ġmono . graphics . geo . Size Ċ import Ġmono . html . px Ċ import Ġorg . w 3 c . dom . Canvas Rendering Context 2 D Ċ import Ġorg . w 3 c . dom . Canvas Text Align Ċ import Ġorg . w 3 c . dom . Canvas Text Baseline Ċ import Ġorg . w 3 c . dom . HTML Canvas Element Ċ import Ġorg . w 3 c . dom . LEFT Ċ import Ġorg . w 3 c . dom . Path 2 D Ċ import Ġorg . w 3 c . dom . TOP Ċ import Ġkotlin . math . max Ċ Ċ // ĠTODO : ĠPass Ġdrawing Ġinfo Ġli ved ata Ġinto Ġthis Ġclass Ġand Ġlet Ġit Ġob serves Ġthe Ġchange . Ċ internal Ġabstract Ġclass ĠBase Canvas ViewController ( private Ġval Ġcanvas : ĠHTML Canvas Element ) Ġ{ ĊĠĠĠ Ġprotected Ġval Ġcontext : ĠCanvas Rendering Context 2 D Ġ= ĊĠĠĠĠĠĠĠ Ġcanvas . getContext (" 2 d ") Ġas ĠCanvas Rendering Context 2 D ĊĊĠĠĠ Ġinternal Ġvar Ġdrawing Info : ĠDraw ing Info Controller . Drawing Info ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawing Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw ing Info Controller . Drawing Info ( canvas Size Px Ġ= ĠSize ( canvas . width , Ġcanvas . height )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġset Drawing Info ( drawing Info : ĠDraw ing Info Controller . Drawing Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Size Px Ġ= Ġdrawing Info . canvas Size Px ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġcanvas Ġinformation Ġcauses Ġcanvas Ġclear Rect () Ġwhich Ġrequires Ġredraw ĊĠĠĠĠĠĠĠ Ġval Ġis Size Change Ġ= Ġthis . drawing Info . canvas Size Px Ġ!= Ġcanvas Size Px ĊĠĠĠĠĠĠĠ Ġif Ġ( is Size Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd pr Ġ= Ġmax ( window . device Pixel Ratio , Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . width Ġ= Ġ( canvas Size Px . width Ġ* Ġd pr ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . height Ġ= Ġ( canvas Size Px . height Ġ* Ġd pr ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . style . width Ġ= Ġcanvas Size Px . width . px ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . style . height Ġ= Ġcanvas Size Px . height . px ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scale ( d pr , Ġd pr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . drawing Info Ġ= Ġdrawing Info ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Size Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . clear Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġdrawing Info . canvas Size Px . width . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh Ġ= Ġdrawing Info . canvas Size Px . height . toDouble () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext . font Ġ= Ġdrawing Info . font ĊĠĠĠĠĠĠĠ Ġcontext . textAlign Ġ= ĠCanvas Text Align . LEFT ĊĠĠĠĠĠĠĠ Ġcontext . text Baseline Ġ= ĠCanvas Text Baseline . TOP ĊĠĠĠĠĠĠĠ Ġcontext . image Sm oothing Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdraw Internal () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġdraw Internal () ĊĊĠĠĠ Ġprotected Ġfun Ġdraw Text ( text : ĠString , Ġrow : ĠInt , Ġcolumn : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġy Px Ġ= Ġdrawing Info . to YP x ( row . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġx Px Ġ= Ġdrawing Info . to XP x ( column . toDouble ()) ĊĠĠĠĠĠĠĠ Ġcontext . fill Text ( text , Ġx Px , Ġy Px ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠPath 2 D . add H Line ( x Px : ĠDouble , Ġy Px : ĠDouble , Ġwidth Px : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmove To ( x Px , Ġy Px ) ĊĠĠĠĠĠĠĠ Ġline To ( x Px Ġ+ Ġwidth Px , Ġy Px ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠPath 2 D . add V Line ( x Px : ĠDouble , Ġy Px : ĠDouble , Ġheight Px : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmove To ( x Px , Ġy Px ) ĊĠĠĠĠĠĠĠ Ġline To ( x Px , Ġy Px Ġ+ Ġheight Px ) ĊĠĠĠ Ġ} Ċ } Ċ