/* Ċ Ġ* Ġ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 . datal ore . plot . builder Ċ Ċ import Ġjet brains . datal ore . base . geometry . Double Rectangle Ċ import Ġjet brains . datal ore . base . geometry . Double Vector Ċ import Ġjet brains . datal ore . base . geometry . Double Vector . Companion . ZERO Ċ import Ġjet brains . datal ore . base . values . Some Fig Ċ import Ġjet brains . datal ore . plot . base . geom . Live Map Geom Ċ import Ġjet brains . datal ore . plot . base . geom . Live Map Provider Ċ import Ġjet brains . datal ore . plot . base . interact . Geom Target Locator Ċ import Ġjet brains . datal ore . plot . base . render . svg . Svg Component Ċ import Ġjet brains . datal ore . plot . base . render . svg . Text Label Ċ import Ġjet brains . datal ore . plot . builder . interact . loc . Layer Target Collector With Locator Ċ import Ġjet brains . datal ore . plot . builder . layout . Facet Grid Plot Layout . Companion . FAC ET _ H _ P ADDING Ċ import Ġjet brains . datal ore . plot . builder . layout . Facet Grid Plot Layout . Companion . FAC ET _ TAB _ HEIGHT Ċ import Ġjet brains . datal ore . plot . builder . layout . Facet Grid Plot Layout . Companion . FAC ET _ V _ P ADDING Ċ import Ġjet brains . datal ore . plot . builder . layout . Facet Grid Plot Layout . Companion . facet Col Head Height Ċ import Ġjet brains . datal ore . plot . builder . layout . Facet Grid Plot Layout . Companion . facet Col Label Size Ċ import Ġjet brains . datal ore . plot . builder . layout . Tile Layout Info Ċ import Ġjet brains . datal ore . plot . builder . theme . Fac ets Theme Ċ import Ġjet brains . datal ore . plot . builder . theme . Theme Ċ import Ġjet brains . datal ore . vis . svg . Svg Rect Element Ċ Ċ internal Ġclass ĠPlot Tile ( ĊĠĠĠ Ġprivate Ġval Ġlayers : ĠList < Geom Layer >, ĊĠĠĠ Ġprivate Ġval Ġtiles Origin : ĠDouble Vector , ĊĠĠĠ Ġprivate Ġval Ġtile Layout Info : ĠTile Layout Info , ĊĠĠĠ Ġprivate Ġval Ġtheme : ĠTheme , ĊĠĠĠ Ġprivate Ġval Ġframe Of Reference : ĠTile Frame Of Reference , Ċ ) Ġ: ĠSvg Component () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmy Target Loc ators Ġ= ĠArrayList < Geom Target Locator >() ĊĊĠĠĠ Ġvar Ġlive Map Figure : ĠSome Fig ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġtarget Loc ators : ĠList < Geom Target Locator > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Target Loc ators ĊĊĠĠĠ Ġlateinit Ġvar Ġgeom Drawing Bounds : ĠDouble Rectangle Ġ Ġ// Ġthe Ġarea Ġbetween Ġaxes Ġor Ġx / y Ġlimits ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmove To ( tile Layout Info . get Absolute Bounds ( tiles Origin ). origin ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Component () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠ Ġ// ĠDon 't Ġset Ġthis Ġflag : Ġit Ġwas Ġharm less Ġwhen Ġwe Ġwere Ġusing ĠSvg Node Sub tree Generating Synchron izer Ġbut Ġwith Ġnew ĊĠĠĠ Ġ// ĠSvg Node Sub tree Buffer Generating Synchron izer Ġthis Ġleads Ġto Ġhaving Ġall Ġsvg Ġevent Ġhandlers Ġignored ĊĠĠĠ Ġ// Ġbecause Ġthe Ġentire Ġplot Ġpanel Ġwill Ġbe Ġgenerated Ġto Ġa Ġstring Ġbuffer . ĊĠĠĠ Ġ// ĠWe Ġwant Ġevent Ġhandlers Ġto Ġbe Ġcalled Ġon ĠSvg Element - s ĊĠĠĠ Ġget Root Group (). set Pre built Sub tree ( true ); ĊĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġgeom Bounds Ġ= Ġtile Layout Info . geom Bounds ĊĊĠĠĠĠĠĠĠ Ġadd Facet Labels ( geom Bounds , Ġtheme . fac ets ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrender Ġgeom s ĊĊĠĠĠĠĠĠĠ Ġval Ġlive Map Geom Layer Ġ= Ġlayers . first OrNull Ġ{ Ġit . is Live Map Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( live Map Geom Layer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Bounds Ġ= Ġtile Layout Info . get Absolute Geom Bounds ( tiles Origin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlive Map Data Ġ= Ġcreate Canvas Figure ( live Map Geom Layer , Ġreal Bounds ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Map Figure Ġ= Ġlive Map Data . canvas Figure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Target Loc ators . add ( live Map Data . target Locator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Drawing Bounds Ġ= ĠDouble Rectangle ( ZERO , Ġgeom Bounds . dimension ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNormal Ġplot Ġtiles ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Of Reference . draw Before Geom Layer ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Drawing Bounds Ġ= Ġframe Of Reference . apply Client Limits ( Double Rectangle ( ZERO , Ġgeom Bounds . dimension )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Ġin Ġlayers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollector With Locator Ġ= ĠLayer Target Collector With Locator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . geom Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . locator Lookup Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . context ual Mapping , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Target Loc ators . add ( collector With Locator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayer Component Ġ= Ġframe Of Reference . build Geom Component ( layer , Ġcollector With Locator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Component . moveTo ( geom Bounds . origin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Component . clip Bounds ( geom Drawing Bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( layer Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Of Reference . draw After Geom Layer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Facet Labels ( geom Bounds : ĠDouble Rectangle , Ġtheme : ĠFac ets Theme ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! theme . show Strip ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġfacet ĠX Ġlabel Ġ( on Ġtop Ġof Ġgeom Ġarea ) ĊĠĠĠĠĠĠĠ Ġval Ġx Labels Ġ= Ġtile Layout Info . facet X Labels ĊĠĠĠĠĠĠĠ Ġif Ġ( x Labels . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Size Ġ= Ġfacet Col Label Size ( geom Bounds . width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Orig Ġ= ĠDouble Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Bounds . left Ġ+ ĠF AC ET _ H _ P ADDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Bounds . top Ġ- Ġfacet Col Head Height ( x Labels . size ) Ġ+ ĠF AC ET _ V _ P ADDING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlabel Bounds Ġ= ĠDouble Rectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Orig , Ġlabel Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Label Ġin Ġx Labels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Do : ĠUse Ġ" facet ĠX " Ġtheme . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Facet Lab Background ( label Bounds , Ġtheme ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġlabel Bounds . center . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġlabel Bounds . center . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlab Ġ= ĠText Label ( x Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlab . moveTo ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlab . textColor (). set ( theme . strip TextColor ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlab . setHorizontal Anchor ( Text Label . Horizontal Anchor . MIDDLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlab . set Vertical Anchor ( Text Label . Vertical Anchor . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( lab ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Bounds Ġ= Ġlabel Bounds . add ( Double Vector ( 0 . 0 , Ġlabel Size . y )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġfacet ĠY Ġlabel Ġ( to Ġthe Ġright Ġfrom Ġgeom Ġarea ) ĊĠĠĠĠĠĠĠ Ġif Ġ( tile Layout Info . facet Y Label Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Pad Ġ= ĠF AC ET _ V _ P ADDING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Pad Ġ= ĠF AC ET _ H _ P ADDING ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Bounds Ġ= ĠDouble Rectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Bounds . right Ġ+ Ġh Pad , Ġgeom Bounds . top Ġ- Ġv Pad , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF AC ET _ TAB _ HEIGHT Ġ- Ġh Pad Ġ* Ġ 2 , Ġgeom Bounds . height Ġ- Ġv Pad Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Do : ĠUse Ġ" facet ĠY " Ġtheme . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Facet Lab Background ( label Bounds , Ġtheme ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġlabel Bounds . center . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġlabel Bounds . center . y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlab Ġ= ĠText Label ( tile Layout Info . facet Y Label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlab . moveTo ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlab . textColor (). set ( theme . strip TextColor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlab . setHorizontal Anchor ( Text Label . Horizontal Anchor . MIDDLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlab . set Vertical Anchor ( Text Label . Vertical Anchor . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlab . rotate ( 9 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( lab ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Facet Lab Background ( label Bounds : ĠDouble Rectangle , Ġfacet Theme : ĠFac ets Theme ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( facet Theme . show Strip Background ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠSvg Rect Element ( label Bounds ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth (). set ( facet Theme . strip Stroke Width ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Color (). set ( facet Theme . strip Fill ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Color (). set ( facet Theme . strip Color ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( rect ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Canvas Figure ( layer : ĠGe om Layer , Ġbounds : ĠDouble Rectangle ): ĠLive Map Provider . Live Map Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( layer . geom Ġas ĠLive Map Geom ). create Canvas Figure ( bounds ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ