/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . liv emap . chart Ċ Ċ import Ġjet brains . datal ore . base . function . Consumer Ċ import Ġjet brains . datal ore . base . typed Geometry . Multi Polygon Ċ import Ġjet brains . datal ore . vis . canvas . Context 2 d Ċ import Ġjet brains . datal ore . vis . canvas . Context 2 d . Line Join Ċ import Ġjet brains . liv emap . Client Ċ import Ġjet brains . liv emap . chart . Utils . draw Path Ċ import Ġjet brains . liv emap . core . ecs . E cs Entity Ċ import Ġjet brains . liv emap . geometry . Scale Component Ċ import Ġjet brains . liv emap . geometry . Screen Geometry Component Ċ import Ġjet brains . liv emap . map engine . Renderer Ċ import Ġjet brains . liv emap . map engine . lineTo Ċ import Ġjet brains . liv emap . map engine . moveTo Ċ Ċ object ĠRender ers Ġ{ ĊĊĠĠĠ Ġfun Ġdraw Lines ( geometry : ĠMulti Polygon < Client >, Ġctx : ĠContext 2 d , Ġafter Polygon : ĠConsumer < Context 2 d >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( polygon Ġin Ġgeometry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ring Ġin Ġpolygon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring [ 0 ]. let Ġ{ Ġctx . moveTo ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring . drop ( 1 ). forEach Ġ{ Ġctx . lineTo ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġafter Polygon ( ctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPoint Renderer ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshape : ĠInt ĊĠĠĠ Ġ) Ġ: ĠRenderer Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( entity : ĠE cs Entity , Ġctx : ĠContext 2 d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Element Ġ= Ġentity . get < Chart Element Component >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsymbol Data Ġ= Ġentity . get < Symbol Component >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġsymbol Data . size . x Ġ* Ġchart Element . scale Factor Ġ/ Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . translate (- radius , Ġ- radius ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . translate ( radius , Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . beginPath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Path ( ctx , Ġradius , Ġshape ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chart Element . fill Color Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . setFill Style ( chart Element . fill Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chart Element . stroke Color Ġ!= Ġnull Ġ&& Ġ! chart Element . stroke Width . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . set Stroke Style ( chart Element . stroke Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . set LineWidth ( chart Element . stroke Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . stroke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPolygon Renderer Ġ: ĠRenderer Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( entity : ĠE cs Entity , Ġctx : ĠContext 2 d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! entity . contains ( Screen Geometry Component :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . save () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity . contains ( Scale Component :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġentity . get < Scale Component >(). scale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ!= Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Element Ġ= Ġentity . get < Chart Element Component >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . set Line Join ( Line Join . ROUND ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . beginPath () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Lines ( entity . get < Screen Geometry Component >(). geometry , Ġctx ) Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . close Path () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chart Element . fill Color Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . setFill Style ( chart Element . fill Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . fill () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chart Element . stroke Color Ġ!= Ġnull Ġ&& Ġchart Element . stroke Width Ġ!= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . set Stroke Style ( chart Element . stroke Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . set LineWidth ( chart Element . stroke Width Ġ* Ġchart Element . scale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . stroke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPath Renderer Ġ: ĠRenderer Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( entity : ĠE cs Entity , Ġctx : ĠContext 2 d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! entity . contains ( Screen Geometry Component :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Element Ġ= Ġentity . get < Chart Element Component >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . set Line Dash ( chart Element . line Dash !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . set Stroke Style ( chart Element . stroke Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . set LineWidth ( chart Element . stroke Width Ġ* Ġchart Element . scale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . beginPath () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Lines ( entity . get < Screen Geometry Component >(). geometry , Ġctx ) Ġ{ Ġit . stroke () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠText Renderer Ġ: ĠRenderer Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( entity : ĠE cs Entity , Ġctx : ĠContext 2 d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Element Component Ġ= Ġentity . get < Chart Element Component >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Spec Ġ= Ġentity . get < Text Spec Component >(). text Spec ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . save () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . rotate ( text Spec . angle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . setFont ( text Spec . font ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . setFill Style ( chart Element Component . fill Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill Text ( text Spec . label , Ġtext Spec . alignment . x , Ġtext Spec . alignment . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊ Ċ } ĊĊ