@amcharts/amcharts5 5.2.35 → 5.2.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/.internal/charts/map/MapChart.d.ts +2 -2
  2. package/.internal/charts/map/MapChart.d.ts.map +1 -1
  3. package/.internal/charts/map/MapChart.js +8 -1
  4. package/.internal/charts/map/MapChart.js.map +1 -1
  5. package/.internal/charts/map/MapChartDefaultTheme.d.ts.map +1 -1
  6. package/.internal/charts/map/MapChartDefaultTheme.js +7 -0
  7. package/.internal/charts/map/MapChartDefaultTheme.js.map +1 -1
  8. package/.internal/charts/map/MapLineSeries.d.ts.map +1 -1
  9. package/.internal/charts/map/MapLineSeries.js +1 -0
  10. package/.internal/charts/map/MapLineSeries.js.map +1 -1
  11. package/.internal/charts/map/MapPointSeries.d.ts.map +1 -1
  12. package/.internal/charts/map/MapPointSeries.js +1 -0
  13. package/.internal/charts/map/MapPointSeries.js.map +1 -1
  14. package/.internal/charts/map/MapPolygonSeries.js +1 -1
  15. package/.internal/charts/map/MapPolygonSeries.js.map +1 -1
  16. package/.internal/charts/map/MapSeries.d.ts +7 -1
  17. package/.internal/charts/map/MapSeries.d.ts.map +1 -1
  18. package/.internal/charts/map/MapSeries.js +4 -4
  19. package/.internal/charts/map/MapSeries.js.map +1 -1
  20. package/.internal/charts/map/ZoomControl.js +8 -8
  21. package/.internal/charts/map/ZoomControl.js.map +1 -1
  22. package/.internal/charts/percent/PercentSeries.d.ts.map +1 -1
  23. package/.internal/charts/percent/PercentSeries.js +0 -3
  24. package/.internal/charts/percent/PercentSeries.js.map +1 -1
  25. package/.internal/core/Registry.js +1 -1
  26. package/.internal/core/Registry.js.map +1 -1
  27. package/.internal/core/render/Series.d.ts +4 -0
  28. package/.internal/core/render/Series.d.ts.map +1 -1
  29. package/.internal/core/render/Series.js +3 -0
  30. package/.internal/core/render/Series.js.map +1 -1
  31. package/.internal/core/render/SpriteResizer.d.ts.map +1 -1
  32. package/.internal/core/render/SpriteResizer.js +2 -0
  33. package/.internal/core/render/SpriteResizer.js.map +1 -1
  34. package/.internal/core/render/Tooltip.d.ts.map +1 -1
  35. package/.internal/core/render/Tooltip.js +6 -0
  36. package/.internal/core/render/Tooltip.js.map +1 -1
  37. package/.internal/core/render/backend/CanvasRenderer.js +1 -1
  38. package/.internal/core/render/backend/CanvasRenderer.js.map +1 -1
  39. package/CHANGELOG.md +20 -0
  40. package/examples/javascript/flow-chord/package.json +1 -1
  41. package/examples/javascript/flow-chord-directed/package.json +1 -1
  42. package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
  43. package/examples/javascript/flow-sankey/package.json +1 -1
  44. package/examples/javascript/gauge/package.json +1 -1
  45. package/examples/javascript/gauge-bands/package.json +1 -1
  46. package/examples/javascript/hierarchy-force-directed/package.json +1 -1
  47. package/examples/javascript/hierarchy-pack/package.json +1 -1
  48. package/examples/javascript/hierarchy-partition/package.json +1 -1
  49. package/examples/javascript/hierarchy-sunburst/package.json +1 -1
  50. package/examples/javascript/hierarchy-tree/package.json +1 -1
  51. package/examples/javascript/hierarchy-treemap/package.json +1 -1
  52. package/examples/javascript/jest/package.json +1 -1
  53. package/examples/javascript/json/package.json +1 -1
  54. package/examples/javascript/map-animating-along-lines/package.json +1 -1
  55. package/examples/javascript/map-day-and-night/package.json +1 -1
  56. package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
  57. package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
  58. package/examples/javascript/map-with-bubbles/package.json +1 -1
  59. package/examples/javascript/map-zoom-to-country/package.json +1 -1
  60. package/examples/javascript/misc-40-charts/package.json +1 -1
  61. package/examples/javascript/misc-microchart-grid/package.json +1 -1
  62. package/examples/javascript/pie-chart/package.json +1 -1
  63. package/examples/javascript/pie-donut-chart/package.json +1 -1
  64. package/examples/javascript/pie-variable-radius/package.json +1 -1
  65. package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
  66. package/examples/javascript/radar-heat-map/package.json +1 -1
  67. package/examples/javascript/radar-line/package.json +1 -1
  68. package/examples/javascript/radar-time-line/package.json +1 -1
  69. package/examples/javascript/sliced-funnel/package.json +1 -1
  70. package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
  71. package/examples/javascript/sliced-pyramid/package.json +1 -1
  72. package/examples/javascript/stock-chart/package.json +1 -1
  73. package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
  74. package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
  75. package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
  76. package/examples/javascript/stock-chart-intraday/package.json +1 -1
  77. package/examples/javascript/stock-chart-live/package.json +1 -1
  78. package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
  79. package/examples/javascript/venn-diagram/package.json +1 -1
  80. package/examples/javascript/wordcloud-with-data/package.json +1 -1
  81. package/examples/javascript/wordcloud-with-text/package.json +1 -1
  82. package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
  83. package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  84. package/examples/javascript/xy-bubble/package.json +1 -1
  85. package/examples/javascript/xy-candlestick/package.json +1 -1
  86. package/examples/javascript/xy-clustered-column/package.json +1 -1
  87. package/examples/javascript/xy-column/package.json +1 -1
  88. package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
  89. package/examples/javascript/xy-data-grouping/package.json +1 -1
  90. package/examples/javascript/xy-draggable-range/package.json +1 -1
  91. package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  92. package/examples/javascript/xy-dumbbell plot/package.json +1 -1
  93. package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
  94. package/examples/javascript/xy-line/package.json +1 -1
  95. package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
  96. package/examples/javascript/xy-live-data/package.json +1 -1
  97. package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
  98. package/examples/javascript/xy-ohlc/package.json +1 -1
  99. package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
  100. package/examples/javascript/xy-smoothed-line/package.json +1 -1
  101. package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
  102. package/examples/javascript/xy-stacked-column/package.json +1 -1
  103. package/examples/javascript/xy-stacked-step/package.json +1 -1
  104. package/examples/javascript/xy-stock/package.json +1 -1
  105. package/examples/javascript/xy-stock-comparing/package.json +1 -1
  106. package/examples/typescript/flow-chord/package.json +1 -1
  107. package/examples/typescript/flow-chord-directed/package.json +1 -1
  108. package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
  109. package/examples/typescript/flow-sankey/package.json +1 -1
  110. package/examples/typescript/gauge/package.json +1 -1
  111. package/examples/typescript/gauge-bands/package.json +1 -1
  112. package/examples/typescript/hierarchy-force-directed/package.json +1 -1
  113. package/examples/typescript/hierarchy-pack/package.json +1 -1
  114. package/examples/typescript/hierarchy-partition/package.json +1 -1
  115. package/examples/typescript/hierarchy-sunburst/package.json +1 -1
  116. package/examples/typescript/hierarchy-tree/package.json +1 -1
  117. package/examples/typescript/hierarchy-treemap/package.json +1 -1
  118. package/examples/typescript/jest/package.json +1 -1
  119. package/examples/typescript/json/package.json +1 -1
  120. package/examples/typescript/map-animating-along-lines/package.json +1 -1
  121. package/examples/typescript/map-day-and-night/package.json +1 -1
  122. package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
  123. package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
  124. package/examples/typescript/map-with-bubbles/package.json +1 -1
  125. package/examples/typescript/map-zoom-to-country/package.json +1 -1
  126. package/examples/typescript/misc-40-charts/package.json +1 -1
  127. package/examples/typescript/misc-microchart-grid/package.json +1 -1
  128. package/examples/typescript/pie-chart/package.json +1 -1
  129. package/examples/typescript/pie-donut-chart/package.json +1 -1
  130. package/examples/typescript/pie-variable-radius/package.json +1 -1
  131. package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
  132. package/examples/typescript/radar-heat-map/package.json +1 -1
  133. package/examples/typescript/radar-line/package.json +1 -1
  134. package/examples/typescript/radar-time-line/package.json +1 -1
  135. package/examples/typescript/sliced-funnel/package.json +1 -1
  136. package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
  137. package/examples/typescript/sliced-pyramid/package.json +1 -1
  138. package/examples/typescript/stock-chart/package.json +1 -1
  139. package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
  140. package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
  141. package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
  142. package/examples/typescript/stock-chart-intraday/package.json +1 -1
  143. package/examples/typescript/stock-chart-live/package.json +1 -1
  144. package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
  145. package/examples/typescript/venn-diagram/package.json +1 -1
  146. package/examples/typescript/wordcloud-with-data/package.json +1 -1
  147. package/examples/typescript/wordcloud-with-text/package.json +1 -1
  148. package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
  149. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  150. package/examples/typescript/xy-bubble/package.json +1 -1
  151. package/examples/typescript/xy-candlestick/package.json +1 -1
  152. package/examples/typescript/xy-clustered-column/package.json +1 -1
  153. package/examples/typescript/xy-column/package.json +1 -1
  154. package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
  155. package/examples/typescript/xy-data-grouping/package.json +1 -1
  156. package/examples/typescript/xy-draggable-range/package.json +1 -1
  157. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  158. package/examples/typescript/xy-dumbbell plot/package.json +1 -1
  159. package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
  160. package/examples/typescript/xy-line/package.json +1 -1
  161. package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
  162. package/examples/typescript/xy-live-data/package.json +1 -1
  163. package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
  164. package/examples/typescript/xy-ohlc/package.json +1 -1
  165. package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
  166. package/examples/typescript/xy-smoothed-line/package.json +1 -1
  167. package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
  168. package/examples/typescript/xy-stacked-column/package.json +1 -1
  169. package/examples/typescript/xy-stacked-step/package.json +1 -1
  170. package/examples/typescript/xy-stock/package.json +1 -1
  171. package/examples/typescript/xy-stock-comparing/package.json +1 -1
  172. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasRenderer.js","sourceRoot":"","sources":["../../../../../../src/.internal/core/render/backend/CanvasRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/** @ignore *//** */\n\nimport {\n\tIRenderer, IContainer, IDisplayObject, IGraphics, IRendererEvents,\n\tIText, ITextStyle, IRadialText, IPicture, IRendererEvent, ILayer, ICanvasOptions, BlendMode, IPointerEvent, Id\n} from \"./Renderer\";\nimport type { IBounds } from \"../../util/IBounds\";\nimport type { IPoint } from \"../../util/IPoint\";\nimport { Color } from \"../../util/Color\";\nimport { Matrix } from \"../../util/Matrix\";\nimport { Percent, percent } from \"../../util/Percent\";\n//import { Throttler } from \"../../util/Throttler\";\nimport { ArrayDisposer, Disposer, DisposerClass, IDisposer, CounterDisposer, MultiDisposer } from \"../../util/Disposer\";\nimport { TextFormatter, ITextChunk } from \"../../util/TextFormatter\";\nimport * as $utils from \"../../util/Utils\";\nimport * as $array from \"../../util/Array\";\nimport * as $object from \"../../util/Object\";\nimport * as $type from \"../../util/Type\";\nimport * as $math from \"../../util/Math\";\nimport arcToBezier from 'svg-arc-to-cubic-bezier';\n\n\n/**\n * @ignore\n */\nfunction checkArgs(name: string, actual: number, expected: number) {\n\tif (actual !== expected) {\n\t\tthrow new Error(\"Required \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkMinArgs(name: string, actual: number, expected: number) {\n\tif (actual < expected) {\n\t\tthrow new Error(\"Required at least \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkEvenArgs(name: string, actual: number, expected: number) {\n\tcheckMinArgs(name, actual, expected);\n\n\tif ((actual % expected) !== 0) {\n\t\tthrow new Error(\"Arguments for \" + name + \" must be in pairs of \" + expected);\n\t}\n}\n\n/**\n * @ignore\n * This splits the flag so that way 0017 will be processed as 0 0 17\n *\n * This is important for weird paths like `M17 5A1 1 0 0017 30 1 1 0 0017 5`\n */\nfunction splitArcFlags(args: Array<string>) {\n\tfor (let i = 0; i < args.length; i += 7) {\n\t\tlet index = i + 3;\n\t\tlet flag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])([01])(.*)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs.splice(index, 0, a[2]);\n\t\t\t\t++index;\n\n\t\t\t\tif (a[3].length > 0) {\n\t\t\t\t\targs[index] = a[3];\n\n\t\t\t\t} else {\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++index;\n\n\t\tflag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])(.+)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs[index] = a[2];\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction assertBinary(value: number): 0 | 1 {\n\tif (value === 0 || value === 1) {\n\t\treturn value;\n\n\t} else {\n\t\tthrow new Error(\"Flag must be 0 or 1\");\n\t}\n}\n\n// 1 -> 0xffffff * (2 / 2)\n// 2 -> 0xffffff * (1 / 2)\n//\n// 3 -> 0xffffff * (3 / 4)\n// 4 -> 0xffffff * (1 / 4)\n//\n// 5 -> 0xffffff * (7 / 8)\n// 6 -> 0xffffff * (5 / 8)\n// 7 -> 0xffffff * (3 / 8)\n// 8 -> 0xffffff * (1 / 8)\n//\n// 9 -> 0xffffff * (15 / 16)\n// 10 -> 0xffffff * (13 / 16)\n// 11 -> 0xffffff * (11 / 16)\n// 12 -> 0xffffff * (9 / 16)\n// 13 -> 0xffffff * (7 / 16)\n// 14 -> 0xffffff * (5 / 16)\n// 15 -> 0xffffff * (3 / 16)\n// 16 -> 0xffffff * (1 / 16)\n// @todo remove this old color distribution algo if the new one pans out\n// function distributeIdBAK(id: number): number {\n// \tif (id === 1) {\n// \t\treturn 0x000001;\n\n// \t} else {\n// \t\t// Finds the closest power of 2\n// \t\tconst base = Math.pow(2, Math.ceil(Math.log(id) / Math.log(2)));\n\n// \t\t// Translates the id into an odd fraction index\n// \t\tconst index = ((base - id) * 2) + 1;\n\n// \t\t// TODO is Math.round correct ?\n// \t\treturn Math.round(0xffffff * (index / base));\n// \t}\n// }\n\n/**\n * Function by smeans:\n * https://lowcode.life/generating-unique-contrasting-colors-in-javascript/\n * @ignore\n */\nfunction distributeId(id: number): number {\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 24; i++) {\n\t\trgb[i % 3] <<= 1;\n\t\trgb[i % 3] |= id & 0x01;\n\t\tid >>= 1;\n\t}\n\treturn (rgb[2] | 0) + (rgb[1] << 8) + (rgb[0] << 16);\n}\n\n/**\n * @ignore\n */\nfunction eachTargets(hitTarget: CanvasDisplayObject, f: (target: CanvasDisplayObject) => boolean): void {\n\tfor (; ;) {\n\t\tif (hitTarget.interactive) {\n\t\t\tif (!f(hitTarget)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (hitTarget._parent) {\n\t\t\thitTarget = hitTarget._parent;\n\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// TODO feature detection for mouse/touch/pointer\n/**\n * @ignore\n */\nfunction onPointerEvent(element: EventTarget, name: string, f: (event: Array<IPointerEvent>) => void): IDisposer {\n\treturn $utils.addEventListener(element, $utils.getRendererEvent(name), (event: MouseEvent | TouchEvent) => {\n\t\tlet touches = (<any>event).touches;\n\t\tif (touches) {\n\t\t\tif (touches.length == 0) {\n\t\t\t\ttouches = (<any>event).changedTouches;\n\t\t\t}\n\n\t\t\tf($array.copy(<TouchList>touches));\n\n\t\t} else {\n\t\t\tf([<MouseEvent>event]);\n\t\t}\n\t});\n}\n\n/**\n * @ignore\n */\nfunction isTainted(image: HTMLImageElement): boolean {\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = 1;\n\tcanvas.height = 1;\n\tconst context = canvas.getContext(\"2d\", { willReadFrequently: true })! as CanvasRenderingContext2D;\n\tcontext.drawImage(image, 0, 0, 1, 1);\n\n\ttry {\n\t\tcontext.getImageData(0, 0, 1, 1);\n\t\treturn false;\n\t}\n\tcatch (err) {\n\t\tconsole.warn(\"Image \\\"\" + image.src + \"\\\" is loaded from different host and is not covered by CORS policy. For more information about the implications read here: https://www.amcharts.com/docs/v5/concepts/cors\");\n\t\treturn true;\n\t}\n}\n\n/**\n * This is needed to workaround a bug in iOS which causes it to not GC canvas elements.\n *\n * @ignore\n */\nfunction clearCanvas(view: HTMLCanvasElement) {\n\tview.width = 0;\n\tview.height = 0;\n\tview.style.width = \"0px\";\n\tview.style.height = \"0px\";\n}\n\n/**\n * @ignore\n */\nexport class CanvasPivot implements IPoint {\n\tprotected _x: number = 0;\n\tprotected _y: number = 0;\n\n\tget x(): number {\n\t\treturn this._x;\n\t}\n\n\tget y(): number {\n\t\treturn this._y;\n\t}\n\n\tset x(value: number) {\n\t\tthis._x = value;\n\t}\n\n\tset y(value: number) {\n\t\tthis._y = value;\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasDisplayObject extends DisposerClass implements IDisplayObject, IDisposer {\n\tpublic _layer?: CanvasLayer;\n\n\tpublic mask: CanvasGraphics | null = null;\n\tpublic visible: boolean = true;\n\tpublic exportable?: boolean = true;\n\tpublic interactive: boolean = false;\n\tpublic inactive: boolean = false;\n\tpublic wheelable: boolean = false;\n\tpublic cancelTouch: boolean = false;\n\tpublic isMeasured: boolean = false;\n\tpublic buttonMode: boolean = false;\n\tpublic alpha: number = 1;\n\tpublic compoundAlpha: number = 1;\n\tpublic angle: number = 0;\n\tpublic scale: number = 1;\n\tpublic x: number = 0;\n\tpublic y: number = 0;\n\tpublic pivot: CanvasPivot = new CanvasPivot();\n\n\tpublic filter?: string;\n\n\tpublic cursorOverStyle?: string;\n\tpublic _replacedCursorStyle?: string;\n\n\tpublic _localMatrix: Matrix = new Matrix();\n\tpublic _matrix: Matrix = new Matrix();\n\t// TODO can this be replaced with _localMatrix ?\n\tprotected _uMatrix: Matrix = new Matrix();\n\n\tpublic _renderer: CanvasRenderer;\n\tpublic _parent: CanvasContainer | undefined;\n\n\tprotected _localBounds: IBounds | undefined;\n\tprotected _bounds: IBounds | undefined;\n\tpublic _colorId: string | undefined;\n\n\tconstructor(renderer: CanvasRenderer) {\n\t\tsuper();\n\t\tthis._renderer = renderer;\n\t}\n\n\tprotected _dispose(): void {\n\t\tthis._renderer._removeObject(this);\n\t}\n\n\tpublic getCanvas(): HTMLCanvasElement {\n\t\treturn this.getLayer().view;\n\t}\n\n\tpublic getLayer(): CanvasLayer {\n\t\tlet self: CanvasDisplayObject = this;\n\n\t\tfor (; ;) {\n\t\t\tif (self._layer) {\n\t\t\t\treturn self._layer;\n\n\t\t\t} else if (self._parent) {\n\t\t\t\tself = self._parent;\n\n\t\t\t} else {\n\t\t\t\treturn this._renderer.defaultLayer;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setLayer(order: number | undefined, visible: boolean = true): void {\n\t\tif (order == null) {\n\t\t\tthis._layer = undefined;\n\n\t\t} else {\n\t\t\tthis._layer = this._renderer.getLayer(order, visible);\n\t\t\tthis._layer.visible = visible;\n\t\t\tif (this._parent) {\n\t\t\t\tthis._parent.registerChildLayer(this._layer);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(): void {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.invalidateBounds();\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tthis._localBounds = undefined;\n\t}\n\n\tpublic _addBounds(_bounds: IBounds): void { }\n\n\tprotected _getColorId(): string {\n\t\tif (this._colorId === undefined) {\n\t\t\tthis._colorId = this._renderer.paintId(this);\n\t\t}\n\n\t\treturn this._colorId;\n\t}\n\n\tprotected _isInteractive(): boolean {\n\t\treturn this.inactive == false && (this.interactive || this._renderer._forceInteractive > 0);\n\t}\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this._isInteractive();\n\t}\n\n\tpublic contains(child: CanvasDisplayObject): boolean {\n\t\tfor (; ;) {\n\t\t\tif (child === this) {\n\t\t\t\treturn true;\n\n\t\t\t} else if (child._parent) {\n\t\t\t\tchild = child._parent;\n\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\ttoGlobal(point: IPoint): IPoint {\n\t\treturn this._matrix.apply(point);\n\t}\n\n\ttoLocal(point: IPoint): IPoint {\n\t\treturn this._matrix.applyInverse(point);\n\t}\n\n\tpublic getLocalMatrix(): Matrix {\n\t\tthis._uMatrix.setTransform(0, 0, this.pivot.x, this.pivot.y, this.angle * Math.PI / 180, this.scale);\n\t\treturn this._uMatrix;\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\t\t\tconst bn = 10000000;\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: bn,\n\t\t\t\ttop: bn,\n\t\t\t\tright: -bn,\n\t\t\t\tbottom: -bn\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tgetAdjustedBounds(bounds: IBounds): IBounds {\n\t\tthis._setMatrix();\n\n\t\tconst matrix = this.getLocalMatrix();\n\n\t\tconst p0 = matrix.apply({ x: bounds.left, y: bounds.top });\n\t\tconst p1 = matrix.apply({ x: bounds.right, y: bounds.top });\n\t\tconst p2 = matrix.apply({ x: bounds.right, y: bounds.bottom });\n\t\tconst p3 = matrix.apply({ x: bounds.left, y: bounds.bottom });\n\n\t\treturn {\n\t\t\tleft: Math.min(p0.x, p1.x, p2.x, p3.x),\n\t\t\ttop: Math.min(p0.y, p1.y, p2.y, p3.y),\n\t\t\tright: Math.max(p0.x, p1.x, p2.x, p3.x),\n\t\t\tbottom: Math.max(p0.y, p1.y, p2.y, p3.y)\n\t\t}\n\t}\n\n\ton<C, Key extends keyof IRendererEvents>(key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tif (this.interactive) {\n\t\t\treturn this._renderer._addEvent(this, key, callback, context);\n\n\t\t} else {\n\t\t\treturn new Disposer(() => { });\n\t\t}\n\t}\n\n\tpublic _setMatrix(): void {\n\t\t// TODO only calculate this if it has actually changed\n\t\tthis._localMatrix.setTransform(\n\t\t\tthis.x,\n\t\t\tthis.y,\n\t\t\tthis.pivot.x,\n\t\t\tthis.pivot.y,\n\t\t\t// Converts degrees to radians\n\t\t\tthis.angle * Math.PI / 180,\n\t\t\tthis.scale\n\t\t);\n\n\t\tthis._matrix.copyFrom(this._localMatrix);\n\n\t\tif (this._parent) {\n\t\t\t// TODO only calculate this if it has actually changed\n\t\t\tthis._matrix.prepend(this._parent._matrix);\n\t\t}\n\t}\n\n\tpublic _transform(context: CanvasRenderingContext2D, resolution: number): void {\n\t\tconst m = this._matrix;\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\tm.tx * resolution,\n\t\t\tm.ty * resolution\n\t\t);\n\t}\n\n\tpublic render(parentLayer: CanvasLayer): void {\n\t\tif (this.visible && (this.exportable !== false || !this._renderer._omitTainted)) {\n\t\t\tthis._setMatrix();\n\n\t\t\tconst resolution = this._renderer.resolution;\n\n\t\t\tconst layers = this._renderer.layers;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t}\n\n\t\t\t// TODO improve this\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tconst context = layer.context;\n\t\t\t\t\tcontext.save();\n\n\t\t\t\t\t// We must apply the mask before we transform the element\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tmask._transform(context, layer.scale || resolution);\n\t\t\t\t\t\tmask._runPath(context);\n\t\t\t\t\t\tcontext.clip();\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\t\t\tthis._transform(context, layer.scale || resolution);\n\n\t\t\t\t\tif (this.filter) {\n\t\t\t\t\t\tcontext.filter = this.filter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tghostContext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tif (mask && this._isInteractiveMask()) {\n\t\t\t\tmask._transform(ghostContext, resolution);\n\t\t\t\tmask._runPath(ghostContext);\n\t\t\t\tghostContext.clip();\n\t\t\t}\n\n\t\t\tthis._transform(ghostContext, resolution);\n\n\t\t\tthis._render(parentLayer);\n\n\t\t\tghostContext.restore();\n\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tlayer.context.restore();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tif (this.exportable === false) {\n\t\t\tconst layer = this._layer || parentLayer;\n\t\t\tlayer.tainted = true;\n\t\t}\n\t}\n\n\thovering(): boolean {\n\t\treturn this._renderer._hovering.has(this);\n\t}\n\n\tdragging(): boolean {\n\t\treturn this._renderer._dragging.some((x) => x.value === this);\n\t}\n\n\tpublic dispose() {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic shouldCancelTouch(): boolean {\n\t\tconst renderer = this._renderer;\n\t\tif (renderer.tapToActivate && !renderer._touchActive) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.cancelTouch) {\n\t\t\treturn true;\n\t\t}\n\t\telse if (this._parent) {\n\t\t\treturn this._parent.shouldCancelTouch();\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasContainer extends CanvasDisplayObject implements IContainer {\n\tpublic interactiveChildren: boolean = true;\n\tprivate _childLayers?: CanvasLayer[];\n\n\tprotected _children: Array<CanvasDisplayObject> = [];\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this.interactiveChildren || super._isInteractiveMask();\n\t}\n\n\taddChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = this;\n\t\tthis._children.push(child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\taddChildAt(child: CanvasDisplayObject, index: number): void {\n\t\tchild._parent = this;\n\t\tthis._children.splice(index, 0, child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\tremoveChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = undefined;\n\t\t$array.removeFirst(this._children, child);\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst renderer = this._renderer;\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t++renderer._forceInteractive;\n\t\t}\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t$array.each(this._children, (child) => {\n\t\t\tchild.compoundAlpha = this.compoundAlpha * this.alpha;\n\t\t\tchild.render(layer);\n\t\t});\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t--renderer._forceInteractive;\n\t\t}\n\t}\n\n\tregisterChildLayer(layer: CanvasLayer): void {\n\t\tif (!this._childLayers) {\n\t\t\tthis._childLayers = [];\n\t\t}\n\t\t$array.pushOne(this._childLayers, layer);\n\t\tif (this._parent) {\n\t\t\tthis._parent.registerChildLayer(layer);\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(deep: boolean = false): void {\n\t\tsuper.markDirtyLayer();\n\t\tif (deep && this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => layer.dirty = true);\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tsuper.dispose();\n\t\tif (this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => {\n\t\t\t\tlayer.dirty = true;\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction setPoint(bounds: IBounds, point: IPoint): void {\n\tbounds.left = Math.min(bounds.left, point.x);\n\tbounds.top = Math.min(bounds.top, point.y);\n\tbounds.right = Math.max(bounds.right, point.x);\n\tbounds.bottom = Math.max(bounds.bottom, point.y);\n}\n\n/**\n * @ignore\n */\nabstract class Op {\n\tpublic colorize(_context: CanvasRenderingContext2D, _forceColor: string | undefined): void { }\n\n\tpublic path(_context: CanvasRenderingContext2D): void { }\n\n\tpublic addBounds(_bounds: IBounds): void { }\n}\n\n/**\n * @ignore\n */\nclass BeginFill extends Op {\n\tconstructor(public color: string | CanvasGradient | CanvasPattern) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.fillStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndFill extends Op {\n\tconstructor(public clearShadow: boolean) { super(); }\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.fill();\n\t\tif (this.clearShadow) {\n\t\t\tcontext.shadowColor = \"\";\n\t\t\tcontext.shadowBlur = 0;\n\t\t\tcontext.shadowOffsetX = 0;\n\t\t\tcontext.shadowOffsetY = 0;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndStroke extends Op {\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.stroke();\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineStyle extends Op {\n\tconstructor(public width: number, public color: string | CanvasGradient | CanvasPattern, public lineJoin?: \"miter\" | \"round\" | \"bevel\") { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.strokeStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.strokeStyle = this.color;\n\t\t}\n\n\t\tcontext.lineWidth = this.width;\n\t\tif (this.lineJoin) {\n\t\t\tcontext.lineJoin = this.lineJoin;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDash extends Op {\n\tconstructor(public dash: number[]) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.setLineDash(this.dash);\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDashOffset extends Op {\n\tconstructor(public dashOffset: number) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.lineDashOffset = this.dashOffset;\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawRect extends Op {\n\tconstructor(public x: number, public y: number, public width: number, public height: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.rect(this.x, this.y, this.width, this.height);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tconst l = this.x;\n\t\tconst t = this.y;\n\t\tconst r = l + this.width;\n\t\tconst b = t + this.height;\n\n\t\tsetPoint(bounds, { x: l, y: t });\n\t\tsetPoint(bounds, { x: r, y: t });\n\t\tsetPoint(bounds, { x: l, y: b });\n\t\tsetPoint(bounds, { x: r, y: b });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawCircle extends Op {\n\tconstructor(public x: number, public y: number, public radius: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x + this.radius, this.y);\n\t\tcontext.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radius, y: this.y - this.radius });\n\t\tsetPoint(bounds, { x: this.x + this.radius, y: this.y + this.radius });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawEllipse extends Op {\n\tconstructor(public x: number, public y: number, public radiusX: number, public radiusY: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.ellipse(0, 0, this.radiusX, this.radiusY, 0, 0, Math.PI * 2);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radiusX, y: this.y - this.radiusY });\n\t\tsetPoint(bounds, { x: this.x + this.radiusX, y: this.y + this.radiusY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Arc extends Op {\n\tconstructor(\n\t\tpublic cx: number,\n\t\tpublic cy: number,\n\t\tpublic radius: number,\n\t\tpublic startAngle: number,\n\t\tpublic endAngle: number,\n\t\tpublic anticlockwise: boolean,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arc(this.cx, this.cy, this.radius, this.startAngle, this.endAngle, this.anticlockwise);\n\t\t}\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tlet arcBounds = $math.getArcBounds(this.cx, this.cy, this.startAngle * $math.DEGREES, this.endAngle * $math.DEGREES, this.radius);\n\t\tsetPoint(bounds, { x: arcBounds.left, y: arcBounds.top });\n\t\tsetPoint(bounds, { x: arcBounds.right, y: arcBounds.bottom });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ArcTo extends Op {\n\tconstructor(\n\t\tpublic x1: number,\n\t\tpublic y1: number,\n\t\tpublic x2: number,\n\t\tpublic y2: number,\n\t\tpublic radius: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\n\t\t}\n\t}\n\n\t// TODO: add points\n\tpublic addBounds(_bounds: IBounds): void {\n\t\t/*\n\t\t// not finished\n\t\thttps://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically\n\n\t\tif (prevPoint) {\n\t\t\tlet x1 = prevPoint.x;\n\t\t\tlet y1 = prevPoint.y;\n\t\t\tlet x2 = this.x2;\n\t\t\tlet y2 = this.y2;\n\t\t\tlet r = this.radius;\n\n\t\t\tlet xa = (x2 - x1) / 2;\n\t\t\tlet ya = (y2 - y1) / 2;\n\n\t\t\tlet x0 = x1 + xa;\n\t\t\tlet y0 = y1 + ya;\n\n\t\t\tlet a = Math.hypot(xa, ya);\n\t\t\tlet b = Math.sqrt(r * r - a * a);\n\n\t\t\tlet cx = x0 + b * ya / a;\n\t\t\tlet cy = y0 - b * xa / a;\n\n\t\t\tconsole.log(cx, cy);\n\t\t}*/\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.lineTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass MoveTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ClosePath extends Op {\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.closePath();\n\t}\n}\n\n/**\n * @ignore\n */\nclass BezierCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic cpX2: number,\n\t\tpublic cpY2: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.bezierCurveTo(this.cpX, this.cpY, this.cpX2, this.cpY2, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.cpX2, y: this.cpY2 });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass QuadraticCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.quadraticCurveTo(this.cpX, this.cpY, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Shadow extends Op {\n\tconstructor(\n\t\tpublic color: string,\n\t\tpublic blur: number,\n\t\tpublic offsetX: number,\n\t\tpublic offsetY: number,\n\t\tpublic opacity?: number\n\t) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tif (this.opacity) {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t\tcontext.shadowColor = this.color;\n\t\tcontext.shadowBlur = this.blur;\n\t\tcontext.shadowOffsetX = this.offsetX;\n\t\tcontext.shadowOffsetY = this.offsetY;\n\t}\n}\n\n/**\n * @ignore\n */\nclass GraphicsImage extends Op {\n\tconstructor(\n\t\tpublic image: HTMLImageElement,\n\t\tpublic width: number,\n\t\tpublic height: number,\n\t\tpublic x: number,\n\t\tpublic y: number\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.drawImage(this.image, this.x, this.y, this.width, this.height);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t\tsetPoint(bounds, { x: this.width, y: this.height });\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasGraphics extends CanvasDisplayObject implements IGraphics {\n\tprotected _operations: Array<Op> = [];\n\n\tpublic blendMode: BlendMode = BlendMode.NORMAL;\n\n\tprotected _hasShadows: boolean = false;\n\tprotected _fillAlpha?: number;\n\tprotected _strokeAlpha?: number;\n\n\tclear(): void {\n\t\tsuper.clear();\n\t\tthis._operations.length = 0;\n\t}\n\n\tprotected _pushOp(op: Op): void {\n\t\tthis._operations.push(op);\n\t}\n\n\tbeginFill(color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1): void {\n\t\tthis._fillAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new BeginFill(color.toCSS(alpha)));\n\n\t\t\t} else {\n\t\t\t\tthis.isMeasured = true;\n\t\t\t\tthis._pushOp(new BeginFill(color));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new BeginFill(\"rgba(0, 0, 0, \" + alpha + \")\"));\n\t\t}\n\t}\n\n\tendFill(): void {\n\t\tthis._pushOp(new EndFill(this._hasShadows));\n\t}\n\n\tendStroke(): void {\n\t\tthis._pushOp(new EndStroke());\n\t}\n\n\tlineStyle(width: number = 0, color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1, lineJoin?: \"miter\" | \"round\" | \"bevel\"): void {\n\t\tthis._strokeAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new LineStyle(width, color.toCSS(alpha), lineJoin));\n\t\t\t} else {\n\t\t\t\tthis._pushOp(new LineStyle(width, color, lineJoin));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new LineStyle(width, \"rgba(0, 0, 0, \" + alpha + \")\", lineJoin));\n\t\t}\n\t}\n\n\tsetLineDash(dash?: number[]): void {\n\t\tthis._pushOp(new LineDash(dash ? dash : []));\n\t}\n\n\tsetLineDashOffset(dashOffset: number = 0): void {\n\t\tthis._pushOp(new LineDashOffset(dashOffset));\n\t}\n\n\tdrawRect(x: number, y: number, width: number, height: number): void {\n\t\tthis._pushOp(new DrawRect(x, y, width, height));\n\t}\n\n\tdrawCircle(x: number, y: number, radius: number): void {\n\t\tthis._pushOp(new DrawCircle(x, y, radius));\n\t}\n\n\tdrawEllipse(x: number, y: number, radiusX: number, radiusY: number): void {\n\t\tthis._pushOp(new DrawEllipse(x, y, radiusX, radiusY));\n\t}\n\n\tarc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise: boolean = false): void {\n\t\tthis._pushOp(new Arc(cx, cy, radius, startAngle, endAngle, anticlockwise));\n\t}\n\n\tarcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n\t\tthis._pushOp(new ArcTo(x1, y1, x2, y2, radius));\n\t}\n\n\tlineTo(x: number, y: number): void {\n\t\tthis._pushOp(new LineTo(x, y));\n\t}\n\n\tmoveTo(x: number, y: number): void {\n\t\tthis._pushOp(new MoveTo(x, y));\n\t}\n\n\tbezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new BezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY));\n\t}\n\n\tquadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new QuadraticCurveTo(cpX, cpY, toX, toY));\n\t}\n\n\tclosePath(): void {\n\t\tthis._pushOp(new ClosePath());\n\t}\n\n\tshadow(color: Color, blur: number = 0, offsetX: number = 0, offsetY: number = 0, opacity?: number): void {\n\t\tthis._hasShadows = true;\n\t\tthis._pushOp(new Shadow(opacity ? color.toCSS(opacity) : color.toCSS(this._fillAlpha || this._strokeAlpha), blur, offsetX, offsetY));\n\t}\n\n\timage(image: HTMLImageElement, width: number, height: number, x: number, y: number): void {\n\t\tthis._pushOp(new GraphicsImage(image, width, height, x, y));\n\t}\n\n\t// https://svgwg.org/svg2-draft/paths.html#DProperty\n\t// TODO better error checking\n\tsvgPath(path: string): void {\n\t\tlet x = 0;\n\t\tlet y = 0;\n\t\tlet cpx: number | null = null;\n\t\tlet cpy: number | null = null;\n\t\tlet qcpx: number | null = null;\n\t\tlet qcpy: number | null = null;\n\n\t\tconst SEGMENTS_REGEXP = /([MmZzLlHhVvCcSsQqTtAa])([^MmZzLlHhVvCcSsQqTtAa]*)/g;\n\t\tconst ARGS_REGEXP = /[\\u0009\\u0020\\u000A\\u000C\\u000D]*([\\+\\-]?[0-9]*\\.?[0-9]+(?:[eE][\\+\\-]?[0-9]+)?)[\\u0009\\u0020\\u000A\\u000C\\u000D]*,?/g;\n\n\t\tlet match;\n\n\t\twhile ((match = SEGMENTS_REGEXP.exec(path)) !== null) {\n\t\t\tconst name = match[1];\n\t\t\tconst rest = match[2];\n\n\t\t\tconst args: Array<string> = [];\n\n\t\t\twhile ((match = ARGS_REGEXP.exec(rest)) !== null) {\n\t\t\t\targs.push(match[1]);\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"S\" && name !== \"s\" && name !== \"C\" && name !== \"c\") {\n\t\t\t\tcpx = null;\n\t\t\t\tcpy = null;\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"Q\" && name !== \"q\" && name !== \"T\" && name !== \"t\") {\n\t\t\t\tqcpx = null;\n\t\t\t\tqcpy = null;\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\tcase \"M\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx = +args[0];\n\t\t\t\t\ty = +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx += +args[0];\n\t\t\t\t\ty += +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"L\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"l\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"H\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"h\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"V\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"v\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"C\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i];\n\t\t\t\t\t\tconst y1 = +args[i + 1];\n\t\t\t\t\t\tcpx = +args[i + 2];\n\t\t\t\t\t\tcpy = +args[i + 3];\n\t\t\t\t\t\tx = +args[i + 4];\n\t\t\t\t\t\ty = +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"c\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i] + x;\n\t\t\t\t\t\tconst y1 = +args[i + 1] + y;\n\t\t\t\t\t\tcpx = +args[i + 2] + x;\n\t\t\t\t\t\tcpy = +args[i + 3] + y;\n\t\t\t\t\t\tx += +args[i + 4];\n\t\t\t\t\t\ty += +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"S\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i];\n\t\t\t\t\t\tcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"s\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i] + x;\n\t\t\t\t\t\tcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i];\n\t\t\t\t\t\tqcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i] + x;\n\t\t\t\t\t\tqcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"T\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"t\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"A\":\n\t\t\t\tcase \"a\":\n\t\t\t\t\tconst relative = (name === \"a\");\n\n\t\t\t\t\tsplitArcFlags(args);\n\t\t\t\t\tcheckEvenArgs(name, args.length, 7);\n\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 7) {\n\t\t\t\t\t\tlet cx = +args[i + 5];\n\t\t\t\t\t\tlet cy = +args[i + 6];\n\n\t\t\t\t\t\tif (relative) {\n\t\t\t\t\t\t\tcx += x;\n\t\t\t\t\t\t\tcy += y;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst bs = arcToBezier({\n\t\t\t\t\t\t\tpx: x,\n\t\t\t\t\t\t\tpy: y,\n\t\t\t\t\t\t\trx: +args[i],\n\t\t\t\t\t\t\try: +args[i + 1],\n\t\t\t\t\t\t\txAxisRotation: +args[i + 2],\n\t\t\t\t\t\t\tlargeArcFlag: assertBinary(+args[i + 3]),\n\t\t\t\t\t\t\tsweepFlag: assertBinary(+args[i + 4]),\n\t\t\t\t\t\t\tcx,\n\t\t\t\t\t\t\tcy,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$array.each(bs, (b) => {\n\t\t\t\t\t\t\tthis.bezierCurveTo(b.x1, b.y1, b.x2, b.y2, b.x, b.y);\n\t\t\t\t\t\t\tx = b.x;\n\t\t\t\t\t\t\ty = b.y;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"z\":\n\t\t\t\t\tcheckArgs(name, args.length, 0);\n\t\t\t\t\tthis.closePath();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpublic _runPath(context: CanvasRenderingContext2D): void {\n\t\tcontext.beginPath();\n\n\t\t$array.each(this._operations, (op) => {\n\t\t\top.path(context);\n\t\t});\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\tconst layerDirty = layer.dirty;\n\t\tconst interactive = this._isInteractive();\n\n\t\tif (layerDirty || interactive) {\n\n\t\t\tconst context = layer.context;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\tif (layerDirty) {\n\t\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\t\tcontext.beginPath();\n\t\t\t}\n\n\t\t\tlet color: string | undefined;\n\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.beginPath();\n\t\t\t\tcolor = this._getColorId();\n\t\t\t}\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\tif (layerDirty) {\n\t\t\t\t\top.path(context);\n\t\t\t\t\top.colorize(context, undefined);\n\t\t\t\t}\n\n\t\t\t\tif (interactive) {\n\t\t\t\t\top.path(ghostContext);\n\t\t\t\t\top.colorize(ghostContext, color);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic renderDetached(context: CanvasRenderingContext2D): void {\n\t\tif (this.visible) {\n\t\t\tthis._setMatrix();\n\n\t\t\tcontext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t\tmask._transform(context, 1);\n\t\t\t\tmask._runPath(context);\n\t\t\t\tcontext.clip();\n\t\t\t}\n\n\t\t\t// TODO handle compoundAlpha somehow ?\n\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\tthis._transform(context, 1);\n\n\t\t\tif (this.filter) {\n\t\t\t\tcontext.filter = this.filter;\n\t\t\t}\n\n\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\tcontext.beginPath();\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.path(context);\n\t\t\t\top.colorize(context, undefined);\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.addBounds(bounds);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface ILineChunk {\n\tstyle: string | undefined,\n\tfill: Color | undefined,\n\ttext: string,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\tascent: number,\n\toffsetX: number,\n\toffsetY: number,\n\ttextDecoration: string | undefined,\n\tverticalAlign?: \"baseline\" | \"sub\" | \"super\"\n}\n\n/**\n * @ignore\n */\ninterface ILine {\n\toffsetY: number,\n\tascent: number,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\ttextChunks: Array<ILineChunk>,\n}\n\n/**\n * @ignore\n */\nexport class CanvasText extends CanvasDisplayObject implements IText {\n\tpublic text: string;\n\tpublic style: CanvasTextStyle;\n\tpublic resolution: number = 1;\n\n\tprotected _textInfo: Array<ILine> | undefined;\n\tprotected _textVisible: boolean = true;\n\tprotected _originalScale?: number = 1;\n\n\tconstructor(renderer: CanvasRenderer, text: string, style: CanvasTextStyle) {\n\t\tsuper(renderer);\n\t\tthis.text = text;\n\t\tthis.style = style;\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tsuper.invalidateBounds();\n\t\tthis._textInfo = undefined;\n\t}\n\n\tprivate _shared(context: CanvasRenderingContext2D) {\n\t\tif (this.style.textAlign) {\n\t\t\tcontext.textAlign = this.style.textAlign;\n\t\t}\n\n\t\tif (this.style.direction) {\n\t\t\tcontext.direction = this.style.direction;\n\t\t}\n\n\t\tif (this.style.textBaseline) {\n\t\t\tcontext.textBaseline = this.style.textBaseline;\n\t\t}\n\n\t}\n\n\tprotected _prerender(layer: CanvasLayer, ignoreGhost = false, ignoreFontWeight = false): void {\n\t\tsuper._render(layer);\n\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t// Font style\n\n\t\tconst style = this.style;\n\t\tlet fontStyle = this._getFontStyle(undefined, ignoreFontWeight);\n\n\t\tcontext.font = fontStyle;\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.font = fontStyle;\n\t\t}\n\n\t\t// Other parameters\n\t\tif (style.fill) {\n\t\t\tif (style.fill instanceof Color) {\n\t\t\t\tcontext.fillStyle = style.fill.toCSS();\n\t\t\t} else {\n\t\t\t\tcontext.fillStyle = style.fill;\n\t\t\t}\n\t\t}\n\n\t\tif (style.shadowColor) {\n\t\t\tlayer.context.shadowColor = style.shadowColor.toCSS(style.shadowOpacity || 1);\n\t\t}\n\t\tif (style.shadowBlur) {\n\t\t\tlayer.context.shadowBlur = style.shadowBlur;\n\t\t}\n\t\tif (style.shadowOffsetX) {\n\t\t\tlayer.context.shadowOffsetX = style.shadowOffsetX;\n\t\t}\n\t\tif (style.shadowOffsetY) {\n\t\t\tlayer.context.shadowOffsetY = style.shadowOffsetY;\n\t\t}\n\n\t\tthis._shared(context);\n\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.fillStyle = this._getColorId();\n\t\t\tthis._shared(ghostContext);\n\t\t}\n\t}\n\n\tprotected _getFontStyle(style2?: ITextStyle, ignoreFontWeight = false): string {\n\n\t\t// Process defaults\n\t\tconst style = this.style;\n\t\tlet fontStyle: string[] = [];\n\n\t\tif (style2 && style2.fontVariant) {\n\t\t\tfontStyle.push(style2.fontVariant);\n\t\t}\n\t\telse if (style.fontVariant) {\n\t\t\tfontStyle.push(style.fontVariant);\n\t\t}\n\n\t\tif (!ignoreFontWeight) {\n\t\t\tif (style2 && style2.fontWeight) {\n\t\t\t\tfontStyle.push(style2.fontWeight);\n\t\t\t}\n\t\t\telse if (style.fontWeight) {\n\t\t\t\tfontStyle.push(style.fontWeight);\n\t\t\t}\n\t\t}\n\n\t\tif (style2 && style2.fontStyle) {\n\t\t\tfontStyle.push(style2.fontStyle);\n\t\t}\n\t\telse if (style.fontStyle) {\n\t\t\tfontStyle.push(style.fontStyle);\n\t\t}\n\n\t\tif (style2 && style2.fontSize) {\n\t\t\tif ($type.isNumber(style2.fontSize)) {\n\t\t\t\tstyle2.fontSize = style2.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style2.fontSize);\n\t\t}\n\t\telse if (style.fontSize) {\n\t\t\tif ($type.isNumber(style.fontSize)) {\n\t\t\t\tstyle.fontSize = style.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style.fontSize);\n\t\t}\n\n\t\tif (style2 && style2.fontFamily) {\n\t\t\tfontStyle.push(style2.fontFamily);\n\t\t}\n\t\telse if (style.fontFamily) {\n\t\t\tfontStyle.push(style.fontFamily);\n\t\t}\n\t\telse if (fontStyle.length) {\n\t\t\tfontStyle.push(\"Arial\");\n\t\t}\n\n\t\treturn fontStyle.join(\" \");\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t// We need measurements in order to properly position text for alignment\n\t\tif (!this._textInfo) {\n\t\t\tthis._measure(layer);\n\t\t}\n\n\t\tif (this._textVisible) {\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\tcontext.save();\n\t\t\tghostContext.save();\n\t\t\tthis._prerender(layer);\n\n\t\t\t// const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\t\t// const x = this._localBounds && (this._localBounds.left < 0) ? Math.abs(this._localBounds.left) : 0;\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (this._isInteractive()) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw text\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw underline\n\t\t\t\t\tif (chunk.textDecoration == \"underline\" || chunk.textDecoration == \"line-through\") {\n\n\t\t\t\t\t\tlet thickness = 1;\n\t\t\t\t\t\tlet offset = 1;\n\t\t\t\t\t\tlet fontSize = chunk.height;\n\n\t\t\t\t\t\tlet offsetX = chunk.offsetX;\n\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width / 2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\t\tconst format = TextFormatter.getTextStyle(chunk.style);\n\t\t\t\t\t\t\tswitch (format.fontWeight) {\n\t\t\t\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\t\t\t\tcase \"bold\":\n\t\t\t\t\t\t\t\tcase \"700\":\n\t\t\t\t\t\t\t\tcase \"800\":\n\t\t\t\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\t\t\t\tthickness = 2;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fontSize) {\n\t\t\t\t\t\t\toffset = fontSize / 20;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet y: number;\n\n\t\t\t\t\t\tif (chunk.textDecoration == \"line-through\") {\n\t\t\t\t\t\t\ty = thickness + line.offsetY + chunk.offsetY - chunk.height / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ty = thickness + offset * 1.5 + line.offsetY + chunk.offsetY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.beginPath();\n\t\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\t\tcontext.strokeStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style.fill && this.style.fill instanceof Color) {\n\t\t\t\t\t\t\tcontext.strokeStyle = this.style.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontext.lineWidth = thickness * offset;\n\t\t\t\t\t\tcontext.moveTo(offsetX, y);\n\t\t\t\t\t\tcontext.lineTo(offsetX + chunk.width, y);\n\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (interactive && this.interactive) {\n\t\t\t\t\t\t// Draw text in ghost canvas ONLY if it is set as interactive\n\t\t\t\t\t\t// explicitly. This way we avoid hit test anomalies caused by anti\n\t\t\t\t\t\t// aliasing of text.\n\t\t\t\t\t\tghostContext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t//if (this._textVisible) {\n\t\t\tconst x = this._measure(this.getLayer());\n\t\t\tsetPoint(bounds, { x: x.left, y: x.top });\n\t\t\tsetPoint(bounds, { x: x.right, y: x.bottom });\n\t\t\t//}\n\t\t}\n\t}\n\n\tprotected _ignoreFontWeight(): boolean {\n\t\treturn /apple/i.test(navigator.vendor);\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostContext;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\t// Reset text info\n\t\tthis._textInfo = [];\n\n\t\t// Init\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true, this._ignoreFontWeight());\n\n\t\t// Get default font metrix\n\t\tconst refText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \";\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet minX = 0;\n\t\tlet maxX = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\tlet currentStyle: string | undefined;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks: ITextChunk[];\n\t\t\tif (line == \"\") {\n\t\t\t\tchunks = [{\n\t\t\t\t\ttype: \"value\",\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\t\t\t}\n\n\t\t\twhile (chunks.length > 0) {\n\n\t\t\t\t// Init line object\n\t\t\t\tlet lineInfo: ILine = {\n\t\t\t\t\toffsetY: offsetY,\n\t\t\t\t\tascent: 0,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttextChunks: []\n\t\t\t\t};\n\n\t\t\t\t// Measure reference text\n\t\t\t\tconst metrics = this._measureText(refText, context);\n\n\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\tlineInfo.height = height;\n\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\n\t\t\t\tlet currentFormat: string;\n\t\t\t\tlet currentDecoration: string | undefined = this.style.textDecoration;\n\t\t\t\tlet currentFill: Color | undefined;\n\t\t\t\tlet currentChunkWidth: number | undefined;\n\t\t\t\tlet skipFurtherText = false;\n\t\t\t\tlet firstTextChunk = true;\n\t\t\t\tlet leftoverChunks: Array<ITextChunk> = [];\n\t\t\t\tlet currentVerticalAlign: \"baseline\" | \"sub\" | \"super\" | undefined;\n\t\t\t\t//let offsetX = 0;\n\t\t\t\t//let chunk;\n\n\t\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t\t$array.eachContinue(chunks, (chunk, index) => {\n\n\t\t\t\t\t// Format chunk\n\t\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t\t\tcurrentDecoration = this.style.textDecoration;\n\t\t\t\t\t\t\tcurrentVerticalAlign = undefined\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t\tif (format.textDecoration) {\n\t\t\t\t\t\t\t\tcurrentDecoration = format.textDecoration;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.verticalAlign) {\n\t\t\t\t\t\t\t\tcurrentVerticalAlign = format.verticalAlign;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyleRestored = false;\n\n\t\t\t\t\t\t\t// Measure reference text after change of format\n\t\t\t\t\t\t\tconst metrics = this._measureText(refText, context);\n\t\t\t\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\t\tif (height > lineInfo.height) {\n\t\t\t\t\t\t\t\tlineInfo.height = height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Text chunk\n\t\t\t\t\telse if (chunk.type == \"value\" && !skipFurtherText) {\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(chunk.text, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t// Check for fit\n\t\t\t\t\t\tif (truncate) {\n\n\t\t\t\t\t\t\t// Break words?\n\t\t\t\t\t\t\tlet breakWords = firstTextChunk || this.style.breakWords || false;\n\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\t\t\t\t\t\tconst ellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width - ellipsisWidth;\n\t\t\t\t\t\t\t\tchunk.text = this._truncateText(context, chunk.text, excessWidth, breakWords);\n\t\t\t\t\t\t\t\tchunk.text += ellipsis;\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (wrap) {\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width;\n\t\t\t\t\t\t\t\tconst tmpText = this._truncateText(\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tchunk.text,\n\t\t\t\t\t\t\t\t\texcessWidth,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t(firstTextChunk && this.style.oversizedBehavior != \"wrap-no-break\")\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (tmpText == \"\") {\n\t\t\t\t\t\t\t\t\t// Unable to fit a single letter - hide the whole label\n\t\t\t\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//skipFurtherText = true;\n\n\t\t\t\t\t\t\t\t//Add remaining chunks for the next line\n\t\t\t\t\t\t\t\tleftoverChunks = chunks.slice(index + 1);\n\n\t\t\t\t\t\t\t\t//Add remaining text of current chunk if it was forced-cut\n\t\t\t\t\t\t\t\tif ($utils.trim(tmpText) != $utils.trim(chunk.text)) {\n\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\ttype: \"value\",\n\t\t\t\t\t\t\t\t\t\ttext: chunk.text.substr(tmpText.length)\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (currentFormat) {\n\t\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"format\",\n\t\t\t\t\t\t\t\t\t\t\ttext: currentFormat\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Set current chunk (truncated)\n\t\t\t\t\t\t\t\tchunk.text = $utils.trim(tmpText);\n\n\t\t\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tlet leftBoundMod = 1;\n\t\t\t\t\t\tlet rightBoundMod = 1;\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\t// increase horizontal bounding boxes accordingly\n\t\t\t\t\t\t\tconst boundsMod = chunkWidth / currentChunkWidth\n\t\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\n\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft / leftBoundMod;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight / rightBoundMod;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: chunk.text,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: 0,\n\t\t\t\t\t\t\ttextDecoration: currentDecoration,\n\t\t\t\t\t\t\tverticalAlign: currentVerticalAlign\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//offsetX += chunkWidth;\n\n\t\t\t\t\t\tfirstTextChunk = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftoverChunks) {\n\t\t\t\t\t\t//return false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\t//}\n\t\t\t\t});\n\n\t\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight.value;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight || 1.2;\n\t\t\t\t}\n\n\t\t\t\tif (minX < lineInfo.left) {\n\t\t\t\t\tminX = lineInfo.left;\n\t\t\t\t}\n\n\t\t\t\tif (maxX < lineInfo.right) {\n\t\t\t\t\tmaxX = lineInfo.right;\n\t\t\t\t}\n\n\t\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\t\toffsetY += lineInfo.height;\n\n\t\t\t\t// Reset chunks so that it can proceed to the next line\n\t\t\t\tchunks = leftoverChunks || [];\n\t\t\t}\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo, _index: number) => {\n\t\t\tlet currentChunkOffset = 0\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetX = currentChunkOffset + chunk.left - lineInfo.left;\n\t\t\t\tchunk.offsetY += lineInfo.height - lineInfo.height * (this.style.baselineRatio || 0.19);\n\t\t\t\tcurrentChunkOffset += chunk.width;\n\n\t\t\t\tif (chunk.verticalAlign) {\n\t\t\t\t\tswitch (chunk.verticalAlign) {\n\t\t\t\t\t\tcase \"super\":\n\t\t\t\t\t\t\tchunk.offsetY -= lineInfo.height / 2 - chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sub\":\n\t\t\t\t\t\t\tchunk.offsetY += chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tconst bounds = {\n\t\t\tleft: rtl ? -maxX : -minX,\n\t\t\ttop: 0,\n\t\t\tright: rtl ? minX : maxX,\n\t\t\tbottom: offsetY,\n\t\t};\n\n\n\t\t// We need to fit?\n\t\tif (oversizedBehavior !== \"none\") {\n\t\t\tconst ratio = this._fitRatio(bounds);\n\t\t\tif (ratio < 1) {\n\t\t\t\tif (oversizedBehavior == \"fit\") {\n\t\t\t\t\tif ($type.isNumber(this.style.minScale) && (ratio < this.style.minScale)) {\n\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!this._originalScale || this._originalScale == 1) {\n\t\t\t\t\t\t\tthis._originalScale = this.scale;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.scale = ratio;\n\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (oversizedBehavior == \"hide\") {\n\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t}\n\t\t\t\telse {\n\n\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth;\n\t\t\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth / 2;\n\t\t\t\t\t\t\tbounds.right = maxWidth / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\t\t\tbounds.right = maxWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\t\tthis._originalScale = undefined;\n\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\tthis._originalScale = undefined;\n\t\t\t\tthis._textVisible = true;\n\t\t\t}\n\t\t}\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn bounds;\n\t}\n\n\tprotected _fitRatio(bounds: IBounds): number {\n\t\tconst maxW = this.style.maxWidth;\n\t\tconst maxH = this.style.maxHeight;\n\t\tif (!$type.isNumber(maxW) && !$type.isNumber(maxH)) {\n\t\t\treturn 1;\n\t\t}\n\t\tconst w = bounds.right - bounds.left;\n\t\tconst h = bounds.bottom - bounds.top;\n\t\treturn Math.min(maxW! / w || 1, maxH! / h || 1);\n\t}\n\n\tprotected _truncateText(context: CanvasRenderingContext2D, text: string, maxWidth: number, breakWords: boolean = false, fallbackBreakWords: boolean = true): string {\n\t\tlet width: number;\n\t\tdo {\n\t\t\tif (breakWords) {\n\t\t\t\ttext = text.slice(0, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet tmp = text.replace(/[^,;:!?\\\\\\/\\s]+[,;:!?\\\\\\/\\s]*$/g, \"\");\n\t\t\t\tif (tmp == \"\" && fallbackBreakWords) {\n\t\t\t\t\tbreakWords = true;\n\t\t\t\t}\n\t\t\t\telse if (tmp == \"\") {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst metrics = this._measureText(text, context);\n\t\t\twidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\t\t} while ((width > maxWidth) && text != \"\");\n\t\treturn text;\n\t}\n\n\tprotected _measureText(text: string, context: CanvasRenderingContext2D): TextMetrics {\n\t\tlet metrics = context.measureText(text);\n\t\tlet fakeMetrics: any = {};\n\t\tif (metrics.actualBoundingBoxAscent == null) {\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tdiv.innerText = text;\n\t\t\tdiv.style.visibility = \"hidden\";\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tdiv.style.top = \"-1000000px;\"\n\t\t\tdiv.style.fontFamily = this.style.fontFamily || \"\";\n\t\t\tdiv.style.fontSize = this.style.fontSize + \"\";\n\t\t\tdocument.body.appendChild(div);\n\t\t\tconst bbox = div.getBoundingClientRect();\n\t\t\tdocument.body.removeChild(div);\n\t\t\tconst h = bbox.height;\n\t\t\tconst w = metrics.width;\n\t\t\tlet left = 0;\n\t\t\tlet right = w;\n\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: h,\n\t\t\t\tactualBoundingBoxDescent: 0,\n\t\t\t\tactualBoundingBoxLeft: left,\n\t\t\t\tactualBoundingBoxRight: right,\n\t\t\t\tfontBoundingBoxAscent: h,\n\t\t\t\tfontBoundingBoxDescent: 0,\n\t\t\t\twidth: w\n\t\t\t}\n\t\t\t//return fake;\n\t\t}\n\t\telse {\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tactualBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\tactualBoundingBoxLeft: metrics.actualBoundingBoxLeft,\n\t\t\t\tactualBoundingBoxRight: metrics.actualBoundingBoxRight,\n\t\t\t\tfontBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tfontBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\twidth: metrics.width\n\t\t\t}\n\t\t}\n\n\t\tconst w = metrics.width;\n\t\tswitch (this.style.textAlign) {\n\t\t\tcase \"right\":\n\t\t\tcase \"end\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w / 2;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w / 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = 0;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w;\n\t\t}\n\n\t\treturn fakeMetrics;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasTextStyle implements ITextStyle {\n\t//public wordWrapWidth: number = 100;\n\tpublic fill?: Color | CanvasGradient | CanvasPattern;\n\tpublic textAlign?: \"start\" | \"end\" | \"left\" | \"right\" | \"center\";\n\tpublic fontFamily?: string;\n\tpublic fontSize?: string | number;\n\tpublic fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'\n\tpublic fontStyle?: 'normal' | 'italic' | 'oblique';\n\tpublic fontVariant?: \"normal\" | \"small-caps\";\n\tpublic textDecoration?: \"underline\" | \"line-through\";\n\tpublic shadowColor?: Color | null;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\t// leading?: number;\n\t// letterSpacing?: number;\n\tpublic lineHeight?: number | Percent = percent(120);\n\tpublic baselineRatio?: number = 0.19;\n\t// padding?: number;\n\t// stroke?: number;\n\t// strokeThickness?: number;\n\t// trim?: number;\n\t// wordWrap?: boolean;\n\tpublic direction?: \"ltr\" | \"rtl\";\n\tpublic textBaseline?: \"top\" | \"hanging\" | \"middle\" | \"alphabetic\" | \"ideographic\" | \"bottom\";\n\tpublic oversizedBehavior?: \"none\" | \"hide\" | \"fit\" | \"wrap\" | \"wrap-no-break\" | \"truncate\" = \"none\";\n\tpublic breakWords?: boolean = false;\n\tpublic ellipsis?: string = \"…\";\n\tpublic maxWidth?: number;\n\tpublic maxHeight?: number;\n\tpublic minScale?: number;\n\tpublic ignoreFormatting?: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRadialText extends CanvasText implements IRadialText {\n\tpublic textType?: \"regular\" | \"circular\" | \"radial\" | \"aligned\" | \"adjusted\" = \"circular\";\n\tpublic radius?: number;\n\tpublic startAngle?: number;\n\tpublic inside?: boolean = false;\n\tpublic orientation?: \"inward\" | \"outward\" | \"auto\" = \"auto\";\n\tpublic kerning?: number = 0;\n\n\tprivate _textReversed: boolean = false;\n\n\tpublic _render(parentLayer: CanvasLayer): void {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\tthis._renderCircular(parentLayer);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsuper._render(parentLayer);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpublic _renderCircular(parentLayer: CanvasLayer): void {\n\t\tif (this._textVisible) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tthis._prerender(layer);\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\t// Savepoint\n\t\t\tcontext.save();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.save();\n\t\t\t}\n\n\t\t\t// Init\n\t\t\tlet radius = (this.radius || 0);\n\t\t\tlet startAngle = (this.startAngle || 0);\n\t\t\tlet deltaAngle = 0;\n\t\t\tlet orientation = this.orientation;\n\t\t\tlet inward = orientation == \"auto\" ? \"auto\" : orientation == \"inward\";\n\t\t\tconst inside = this.inside;\n\t\t\tconst align = this.style.textAlign || \"left\";\n\t\t\tconst kerning = this.kerning || 0;\n\t\t\tlet clockwise = align == \"left\" ? 1 : -1;\n\t\t\tconst shouldReverse = !this._textReversed;\n\n\t\t\t// We need measurements in order to properly position text for alignment\n\t\t\tif (!this._textInfo) {\n\t\t\t\tthis._measure(layer);\n\t\t\t}\n\n\t\t\t// Check if we need to invert the whole stuff\n\t\t\tif (inward == \"auto\") {\n\t\t\t\t// Calc max angle so we know whether we need to flip it\n\t\t\t\tlet maxAngle = 0;\n\t\t\t\tlet midAngle = 0;\n\t\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t\tconst deltaAngle = startAngle + (line.width / (radius - line.height)) / 2 * -clockwise;\n\t\t\t\t\tif (deltaAngle > maxAngle) {\n\t\t\t\t\t\tmaxAngle = deltaAngle;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (align == \"left\") {\n\t\t\t\t\tmidAngle = (maxAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse if (align == \"right\") {\n\t\t\t\t\tmidAngle = (maxAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmidAngle = startAngle * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\tmidAngle = $math.normalizeAngle(midAngle);\n\t\t\t\tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t}\n\n\t\t\tif (inward == true && shouldReverse) {\n\t\t\t\tthis._textInfo!.reverse();\n\t\t\t\tthis._textReversed = true;\n\t\t\t}\n\n\t\t\t// if ((inward == false && align == \"left\") || (inward == true && align == \"right\")) {\n\t\t\t// \tclockwise *= -1;\n\t\t\t// }\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\n\t\t\t\tconst textHeight = line.height;\n\n\t\t\t\t// Adjust radius (for `inside = false`)\n\t\t\t\t// Radius adjustment for `inside = false` is below the line calculation\n\t\t\t\tif (!inside) {\n\t\t\t\t\tradius += textHeight;\n\t\t\t\t}\n\n\t\t\t\t// Reverse letters if we're painting them counter-clockwise\n\t\t\t\tif (((clockwise == -1 && inward) || (clockwise == 1 && !inward)) && shouldReverse) {\n\t\t\t\t\tline.textChunks.reverse();\n\t\t\t\t}\n\n\t\t\t\t// Init angles\n\t\t\t\tlet lineStartAngle = startAngle;\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t\t// Adjust for center-align\n\t\t\t\tif (align == \"center\") {\n\t\t\t\t\tlineStartAngle += (line.width / (radius - textHeight)) / 2 * -clockwise;\n\t\t\t\t\tdeltaAngle = lineStartAngle - startAngle;\n\t\t\t\t}\n\n\t\t\t\t// if (inward == \"auto\") {\n\t\t\t\t// \tlet midAngle;\n\t\t\t\t// \tif (align == \"left\") {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \telse if () {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t\t// }\n\n\t\t\t\t// Rotate letters if they are facing outward\n\t\t\t\tlineStartAngle += (Math.PI * (inward ? 0 : 1)); // Rotate 180 if outward\n\n\t\t\t\t// Savepoint\n\t\t\t\tcontext.save();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.save();\n\t\t\t\t}\n\n\t\t\t\t// Assume starting angle\n\t\t\t\tcontext.rotate(lineStartAngle);\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.rotate(lineStartAngle);\n\t\t\t\t}\n\n\t\t\t\tlet angleShift = 0;\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Draw the letter\n\t\t\t\t\tconst char = chunk.text;\n\t\t\t\t\tconst charWidth = chunk.width;\n\n\t\t\t\t\t// Rotate half a letter\n\t\t\t\t\tangleShift = (charWidth / 2) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Center letters\n\t\t\t\t\tcontext.textBaseline = \"middle\";\n\t\t\t\t\tcontext.textAlign = \"center\";\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.textBaseline = \"middle\";\n\t\t\t\t\t\tghostContext.textAlign = \"center\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Plop the letter\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Rotate half a letter and add spacing\n\t\t\t\t\tangleShift = (charWidth / 2 + kerning) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t// Restore angle\n\t\t\t\tcontext.restore();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.restore();\n\t\t\t\t}\n\n\t\t\t\t// Adjust radius (for `inside = true`)\n\t\t\t\tif (inside) {\n\t\t\t\t\tradius -= textHeight;\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t// Restore\n\t\t\tcontext.restore();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.restore();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\treturn this._measureCircular(layer);\n\t\t\tdefault:\n\t\t\t\treturn super._measure(layer);\n\t\t}\n\t}\n\n\tpublic _measureCircular(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostContext;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\tlet ellipsisMetrics: TextMetrics;\n\t\t//const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\n\t\t// Reset text info\n\t\tthis._textVisible = true;\n\t\tthis._textInfo = [];\n\t\tthis._textReversed = false;\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true);\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet totalWidth = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\n\t\t\t// Init line object\n\t\t\tlet lineInfo: ILine = {\n\t\t\t\toffsetY: offsetY,\n\t\t\t\tascent: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttextChunks: []\n\t\t\t};\n\n\t\t\tlet currentStyle: string | undefined;\n\t\t\tlet currentFill: Color | undefined;\n\t\t\tlet currentChunkWidth: number | undefined;\n\n\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t$array.each(chunks, (chunk, _index) => {\n\n\t\t\t\t// Format chunk\n\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyleRestored = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Text format\n\t\t\t\telse if (chunk.type == \"value\") {\n\n\t\t\t\t\t// Measure each letter\n\t\t\t\t\tconst chars = chunk.text.match(/./ug) || [];\n\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\tchars.reverse();\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < chars.length; i++) {\n\n\t\t\t\t\t\tconst char = chars[i];\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(char, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.width;\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: char,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight + metrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\ttotalWidth += chunkWidth;\n\n\t\t\t\t\t\t// Handle oversized behavior\n\t\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tif (!ellipsisMetrics) {\n\t\t\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\ttotalWidth += ellipsisWidth;\n\t\t\t\t\t\t\tif ((totalWidth + ellipsisWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tif (lineInfo.textChunks.length == 1) {\n\t\t\t\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlineInfo.width += ellipsisWidth;\n\t\t\t\t\t\t\t\t\tlineInfo.left += ellipsisMetrics.actualBoundingBoxLeft;\n\t\t\t\t\t\t\t\t\tlineInfo.right += ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\t\t\t\ttext: ellipsis,\n\t\t\t\t\t\t\t\t\t\twidth: ellipsisWidth,\n\t\t\t\t\t\t\t\t\t\theight: chunkHeight + ellipsisMetrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\t\t\t\tleft: ellipsisMetrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\t\t\t\tright: ellipsisMetrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\t\t\t\tascent: ellipsisMetrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t}\n\n\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\toffsetY += lineInfo.height;\n\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\n\t\tif (oversizedBehavior == \"hide\" && (totalWidth > maxWidth)) {\n\t\t\tthis._textVisible = false;\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo) => {\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetY += Math.round((lineInfo.height - chunk.height + (lineInfo.ascent - chunk.ascent)) / 2);\n\t\t\t});\n\t\t});\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t};\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasImage extends CanvasDisplayObject implements IPicture {\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic image: HTMLImageElement | undefined;\n\tpublic tainted?: boolean;\n\n\tpublic shadowColor?: Color;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\n\tprotected _imageMask: HTMLCanvasElement | undefined;\n\n\tconstructor(renderer: CanvasRenderer, image: HTMLImageElement | undefined) {\n\t\tsuper(renderer);\n\t\tthis.image = image;\n\t}\n\n\tprotected _dispose(): void {\n\t\tsuper._dispose();\n\n\t\tif (this._imageMask) {\n\t\t\tclearCanvas(this._imageMask);\n\t\t}\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\n\t\t\tlet w = 0;\n\t\t\tlet h = 0;\n\n\t\t\tif (this.width) {\n\t\t\t\tw = this.width;\n\t\t\t}\n\t\t\tif (this.height) {\n\t\t\t\th = this.height;\n\t\t\t}\n\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: w,\n\t\t\t\tbottom: h\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tif (this.image) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tif (this.tainted === undefined) {\n\t\t\t\tthis.tainted = isTainted(this.image);\n\t\t\t\tlayer.tainted = true;\n\t\t\t}\n\n\t\t\tif (this.tainted && this._renderer._omitTainted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (layer.dirty) {\n\n\t\t\t\tif (this.shadowColor) {\n\t\t\t\t\tlayer.context.shadowColor = this.shadowColor.toCSS(this.shadowOpacity || 1);\n\t\t\t\t}\n\t\t\t\tif (this.shadowBlur) {\n\t\t\t\t\tlayer.context.shadowBlur = this.shadowBlur;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetX) {\n\t\t\t\t\tlayer.context.shadowOffsetX = this.shadowOffsetX;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetY) {\n\t\t\t\t\tlayer.context.shadowOffsetY = this.shadowOffsetY;\n\t\t\t\t}\n\n\t\t\t\t// TODO should this round ?\n\t\t\t\tconst width = this.width || this.image.naturalWidth;\n\t\t\t\tconst height = this.height || this.image.naturalHeight;\n\n\t\t\t\tlayer.context.drawImage(this.image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tif (this.interactive && this._isInteractive()) {\n\t\t\t\tconst mask = this._getMask(this.image);\n\n\t\t\t\tthis._renderer._ghostContext.drawImage(mask, 0, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tsuper.clear();\n\t\tthis.image = undefined;\n\t\tthis._imageMask = undefined;\n\t}\n\n\tprotected _getMask(image: HTMLImageElement): HTMLCanvasElement {\n\t\tif (this._imageMask === undefined) {\n\t\t\t// TODO should this round ?\n\t\t\tconst width = this.width || image.naturalWidth;\n\t\t\tconst height = this.height || image.naturalHeight;\n\n\t\t\t// We need to create a second canvas because destination-in clears out the entire canvas\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\t\tcontext.imageSmoothingEnabled = false;\n\n\t\t\tcontext.fillStyle = this._getColorId();\n\t\t\tcontext.fillRect(0, 0, width, height);\n\n\t\t\tif (!isTainted(image)) {\n\t\t\t\tcontext.globalCompositeOperation = \"destination-in\";\n\t\t\t\tcontext.drawImage(image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tthis._imageMask = canvas;\n\t\t}\n\n\t\treturn this._imageMask;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasRendererEvent<A> implements IRendererEvent<A> {\n\tpublic id: Id;\n\tpublic simulated: boolean = false;\n\tpublic native: boolean = true;\n\n\tconstructor(public event: A, public point: IPoint, public bbox: DOMRect) {\n\t\tif ($utils.supports(\"touchevents\") && event instanceof Touch) {\n\t\t\tthis.id = event.identifier;\n\n\t\t} else {\n\t\t\tthis.id = null;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface Event<Key extends keyof IRendererEvents> {\n\tobject: CanvasDisplayObject;\n\tcontext: unknown;\n\tcallback: (event: IRendererEvents[Key]) => void;\n\tdisposed: boolean;\n}\n\n/**\n * @ignore\n */\ninterface Events<Key extends keyof IRendererEvents> {\n\tdisposer: IDisposer;\n\tcallbacks: Array<Event<Key>>;\n\tdispatching: boolean;\n\tcleanup: boolean;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRenderer extends ArrayDisposer implements IRenderer, IDisposer {\n\tpublic view: HTMLElement = document.createElement(\"div\");\n\tprotected _layerDom: HTMLElement = document.createElement(\"div\");\n\n\tpublic layers: Array<CanvasLayer> = [];\n\tpublic _dirtyLayers: Array<CanvasLayer> = [];\n\tpublic defaultLayer: CanvasLayer = this.getLayer(0);\n\n\tprotected _ghostView: HTMLCanvasElement;\n\tpublic _ghostContext: CanvasRenderingContext2D;\n\n\tprotected _patternCanvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\tprotected _patternContext: CanvasRenderingContext2D = this._patternCanvas.getContext(\"2d\")!;\n\n\tprotected _width: number = 0;\n\tprotected _height: number = 0;\n\n\tprotected _clientWidth: number = 0;\n\tprotected _clientHeight: number = 0;\n\n\tpublic resolution: number;\n\tpublic interactionsEnabled: boolean = true;\n\n\tprotected _listeners: { [key: string]: CounterDisposer } = {};\n\tprotected _events: { [Key in keyof IRendererEvents]?: Events<Key> } = {};\n\n\tprotected _colorId: number = 0;\n\tprotected _colorMap: { [color: string]: CanvasDisplayObject } = {};\n\n\tpublic _forceInteractive: number = 0;\n\tpublic _omitTainted: boolean = false;\n\n\t// TODO this should store the Id as well\n\tpublic _hovering: Set<CanvasDisplayObject> = new Set();\n\tpublic _dragging: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\tpublic _mousedown: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\n\tprotected _lastPointerMoveEvent: { events: Array<IPointerEvent>, native: boolean } | undefined;\n\n\tpublic tapToActivate: boolean = false;\n\tpublic tapToActivateTimeout: number = 3000;\n\tpublic _touchActive: boolean = false;\n\tprotected _touchActiveTimeout?: number;\n\n\t/*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\n\t\tthis._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\n\t});\n\t*/\n\n\tconstructor(resolution?: number) {\n\t\tsuper();\n\n\t\tif (resolution == null) {\n\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t} else {\n\t\t\tthis.resolution = resolution;\n\t\t}\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.appendChild(this._layerDom);\n\n\t\tthis._disposers.push(new Disposer(() => {\n\t\t\t$object.each(this._events, (_key, events) => {\n\t\t\t\tevents.disposer.dispose();\n\t\t\t});\n\n\t\t\t$array.each(this.layers, (layer) => {\n\t\t\t\tclearCanvas(layer.view);\n\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tclearCanvas(layer.exportableView);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tclearCanvas(this._ghostView);\n\t\t\tclearCanvas(this._patternCanvas);\n\t\t}));\n\n\t\t// @todo : do the same for ghost\n\t\tthis._ghostView = document.createElement(\"canvas\");\n\t\tthis._ghostContext = this._ghostView.getContext(\"2d\", { alpha: false, willReadFrequently: true })! as CanvasRenderingContext2D;\n\t\tthis._ghostContext.imageSmoothingEnabled = false;\n\n\t\tthis._ghostView.style.position = \"absolute\";\n\t\tthis._ghostView.style.top = \"0px\";\n\t\tthis._ghostView.style.left = \"0px\";\n\n\t\tthis._disposers.push($utils.addEventListener(this._ghostView, \"click\", (originalEvent: MouseEvent) => {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\t\t\tconsole.debug(target);\n\t\t}));\n\n\t\t// Monitor for possible pixel ratio changes (when page is zoomed)\n\t\tthis._disposers.push($utils.onZoom(() => {\n\t\t\tif (resolution == null) {\n\t\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t\t}\n\t\t}));\n\n\t\t// We need this in order top prevent default touch gestures when dragging\n\t\t// draggable elements\n\t\tif ($utils.supports(\"touchevents\")) {\n\t\t\tconst listener = (ev: any) => {\n\t\t\t\tif (this._dragging.length !== 0) {\n\t\t\t\t\t$array.eachContinue(this._dragging, (item) => {\n\t\t\t\t\t\tif (item.value.shouldCancelTouch()) {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If touch down happends, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"touchstart\", listener, { passive: false }));\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchstart\", listener, { passive: false }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchmove\", () => {\n\t\t\t\t// If touch is moving, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"click\", (_ev: any) => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"click\", (_ev: any) => {\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tthis._touchActive = true;\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}, 100);\n\t\t\t}, { passive: true }));\n\n\t\t}\n\n\t\t// Prevent scrolling of the window when hovering on \"wheelable\" object\n\t\tif ($utils.supports(\"wheelevents\")) {\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"wheel\", (ev) => {\n\t\t\t\tlet prevent = false;\n\t\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\t\tif (obj.wheelable) {\n\t\t\t\t\t\tprevent = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (prevent) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}, { passive: false }));\n\t\t}\n\n\t}\n\n\tprotected _delayTouchDeactivate(): void {\n\t\tif (this._touchActiveTimeout) {\n\t\t\tclearTimeout(this._touchActiveTimeout);\n\t\t}\n\t\tif (this.tapToActivateTimeout > 0) {\n\t\t\tthis._touchActiveTimeout = window.setTimeout(() => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, this.tapToActivateTimeout);\n\t\t}\n\t}\n\n\tpublic get debugGhostView(): boolean {\n\t\treturn !!this._ghostView.parentNode;\n\t}\n\n\tpublic set debugGhostView(value: boolean) {\n\t\tif (value) {\n\t\t\tif (!this._ghostView.parentNode) {\n\t\t\t\tthis.view.appendChild(this._ghostView);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (this._ghostView.parentNode) {\n\t\t\t\tthis._ghostView.parentNode.removeChild(this._ghostView);\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateLinearGradient(x1: number, y1: number, x2: number, y2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createLinearGradient(x1, y1, x2, y2);\n\t}\n\n\tcreateRadialGradient(x1: number, y1: number, radius1: number, x2: number, y2: number, radius2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);\n\t}\n\n\tcreatePattern(graphics: CanvasGraphics, background: CanvasGraphics, repetition: string, width: number, height: number): CanvasPattern {\n\t\t// const patternCanvas = document.createElement(\"canvas\");\n\t\t// const patternContext = patternCanvas.getContext(\"2d\")!;\n\t\t// patternCanvas.width = width;\n\t\t// patternCanvas.height = height;\n\t\t// if (fill) {\n\t\t// \tpatternContext.fillStyle = fill.toCSS();\n\t\t// \tpatternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\n\t\t// }\n\n\t\t// const layer = {\n\t\t// \tview: patternCanvas,\n\t\t// \tcontext: patternContext,\n\t\t// \tvisible: true,\n\t\t// \torder: 0,\n\t\t// \twidth: width,\n\t\t// \theight: height,\n\t\t// \tdirty: true\n\t\t// };\n\n\t\t// // patternContext.arc(0, 0, 50, 0, .5 * Math.PI);\n\t\t// // patternContext.stroke();\n\n\t\t// image.targetLayer = layer;\n\t\t// image.render(layer);\n\n\t\t//this._layerDom.appendChild(patternCanvas);\n\n\t\tthis._patternCanvas.width = width;\n\t\tthis._patternCanvas.height = height;\n\n\t\tthis._patternContext.clearRect(0, 0, width, height);\n\n\t\t// patternCanvas.style.width = width * this.resolution + \"px\";\n\t\t// patternCanvas.style.height = height * this.resolution + \"px\";\n\n\t\tbackground.renderDetached(this._patternContext);\n\t\tgraphics.renderDetached(this._patternContext);\n\n\t\treturn this._patternContext.createPattern(this._patternCanvas, repetition)!;\n\t}\n\n\tmakeContainer(): CanvasContainer {\n\t\treturn new CanvasContainer(this);\n\t}\n\n\tmakeGraphics(): CanvasGraphics {\n\t\treturn new CanvasGraphics(this);\n\t}\n\n\tmakeText(text: string, style: CanvasTextStyle): CanvasText {\n\t\treturn new CanvasText(this, text, style);\n\t}\n\n\tmakeTextStyle(): CanvasTextStyle {\n\t\treturn new CanvasTextStyle();\n\t}\n\n\tmakeRadialText(text: string, style: CanvasTextStyle): CanvasRadialText {\n\t\treturn new CanvasRadialText(this, text, style);\n\t}\n\n\tmakePicture(image: HTMLImageElement | undefined): CanvasImage {\n\t\treturn new CanvasImage(this, image);\n\t}\n\n\tresize(width: number, height: number): void {\n\t\tthis._clientWidth = width;\n\t\tthis._clientHeight = height;\n\t\tthis._width = Math.floor(width * this.resolution);\n\t\tthis._height = Math.floor(height * this.resolution);\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tlayer.dirty = true;\n\n\t\t\t\tif (layer.width != null) {\n\t\t\t\t\tlayer.view.width = layer.width;\n\t\t\t\t\tlayer.view.style.width = layer.width + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlayer.view.width = this._width;\n\t\t\t\t\tlayer.view.style.width = width + \"px\";\n\t\t\t\t}\n\n\t\t\t\tif (layer.height != null) {\n\t\t\t\t\tlayer.view.height = layer.height;\n\t\t\t\t\tlayer.view.style.height = layer.height + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlayer.view.height = this._height;\n\t\t\t\t\tlayer.view.style.height = height + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// @todo: do the same for ghost canvases\n\t\tthis._ghostView.width = this._width;\n\t\tthis._ghostView.height = this._height;\n\t\tthis._ghostView.style.width = width + \"px\";\n\t\tthis._ghostView.style.height = height + \"px\";\n\n\t\tthis.view.style.width = width + \"px\";\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tprivate createDetachedLayer(willReadFrequently: boolean = false): CanvasLayer {\n\t\tconst view = document.createElement(\"canvas\");\n\t\tconst context = view.getContext(\"2d\", { willReadFrequently: willReadFrequently })! as CanvasRenderingContext2D;\n\t\tconst layer = {\n\t\t\tview: view,\n\t\t\tcontext: context,\n\t\t\torder: 0,\n\t\t\tvisible: true,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tdirty: true,\n\t\t\ttainted: false\n\t\t};\n\n\t\tview.style.position = \"absolute\";\n\t\tview.style.top = \"0px\";\n\t\tview.style.left = \"0px\";\n\n\t\treturn layer;\n\t}\n\n\tgetLayerByOrder(order: number): CanvasLayer | undefined {\n\t\tconst layers = this.layers;\n\t\tconst length = layers.length;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst layer = layers[i];\n\t\t\tif (layer.order == order) {\n\t\t\t\treturn layer;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetLayer(order: number, visible: boolean = true): CanvasLayer {\n\t\tlet existingLayer = this.getLayerByOrder(order);\n\t\tif (existingLayer) {\n\t\t\treturn existingLayer;\n\t\t}\n\n\t\tconst layer = this.createDetachedLayer(order == 99);\n\t\tlayer.order = order;\n\t\tlayer.visible = visible;\n\n\t\tif (layer.visible && this._width) {\n\t\t\tlayer.view.width = this._width;\n\t\t\tlayer.view.style.width = this._clientWidth + \"px\";\n\t\t\tlayer.view.height = this._height;\n\t\t\tlayer.view.style.height = this._clientHeight + \"px\";\n\t\t}\n\n\t\tconst layers = this.layers;\n\n\t\tlayers.push(layer);\n\n\t\tlayers.sort((a, b) => {\n\t\t\tif (a.order > b.order) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a.order < b.order) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tconst length = layers.length;\n\t\tconst layerIndex = $array.indexOf(layers, layer);\n\t\tlet next;\n\n\t\tfor (let i = layerIndex + 1; i < length; i++) {\n\t\t\tif (layers[i].visible) {\n\t\t\t\tnext = layers[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (layer.visible) {\n\t\t\tif (next === undefined) {\n\t\t\t\tthis._layerDom.appendChild(layer.view);\n\n\t\t\t} else {\n\t\t\t\tthis._layerDom.insertBefore(layer.view, next.view);\n\t\t\t}\n\t\t}\n\n\t\treturn layer;\n\t}\n\n\trender(root: CanvasDisplayObject): void {\n\n\t\tthis._dirtyLayers.length = 0;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tif (layer.dirty && layer.visible) {\n\t\t\t\t\tconst context = layer.context;\n\n\t\t\t\t\tthis._dirtyLayers.push(layer);\n\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.clearRect(0, 0, this._width, this._height);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis._ghostContext.save();\n\t\t//this._ghostContext.clearRect(0, 0, this._width, this._height);\n\t\t//this._ghostContext.beginPath();\n\t\tthis._ghostContext.fillStyle = '#000';\n\t\tthis._ghostContext.fillRect(0, 0, this._width, this._height);\n\n\t\troot.render(this.defaultLayer);\n\n\t\tthis._ghostContext.restore();\n\n\t\t//setTimeout(() => {\n\n\t\t// Remove this after the Chrome bug is fixed:\n\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=1279394\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tconst context = layer.context;\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(0, 0);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t});\n\n\t\t$array.each(this._dirtyLayers, (layer) => {\n\t\t\tlayer.context.restore();\n\t\t\tlayer.dirty = false;\n\t\t});\n\t\t//}, 100)\n\n\t\tif (this._hovering.size && this._lastPointerMoveEvent) {\n\t\t\t//this._mouseMoveThrottler.run();\n\t\t\tconst native = this._lastPointerMoveEvent.native;\n\n\t\t\t$array.each(this._lastPointerMoveEvent.events, (event) => {\n\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t});\n\t\t}\n\t}\n\n\tpaintId(obj: CanvasDisplayObject): string {\n\t\tconst id = distributeId(++this._colorId);\n\t\tconst color = Color.fromHex(id).toCSS();\n\t\tthis._colorMap[color] = obj;\n\t\treturn color;\n\t}\n\n\t_removeObject(obj: CanvasDisplayObject): void {\n\t\tif (obj._colorId !== undefined) {\n\t\t\tdelete this._colorMap[obj._colorId];\n\t\t}\n\t}\n\n\t// protected _identifyObjectByColor(colorId: number): CanvasDisplayObject | undefined {\n\t// \treturn this._colorMap[colorId];\n\t// }\n\n\tpublic getEvent<A extends IPointerEvent>(originalEvent: A, adjustPoint: boolean = true): CanvasRendererEvent<A> {\n\t\tconst bbox: DOMRect = adjustPoint ? this.view.getBoundingClientRect() : new DOMRect(0, 0, 0, 0);\n\n\t\treturn new CanvasRendererEvent(\n\t\t\toriginalEvent,\n\t\t\t(originalEvent.clientX || originalEvent.clientY ? {\n\t\t\t\tx: originalEvent.clientX - (originalEvent.clientX ? bbox.left : 0),\n\t\t\t\ty: originalEvent.clientY - (originalEvent.clientY ? bbox.top : 0),\n\t\t\t} : {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}),\n\t\t\tbbox,\n\t\t);\n\t}\n\n\t_getHitTarget(point: IPoint, bbox: DOMRect): CanvasDisplayObject | undefined | false {\n\t\tif (point.x < 0 || point.x > bbox.width || point.y < 0 || point.y > bbox.height) {\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst pixel = this._ghostContext.getImageData(\n\t\t\t\t// TODO should this round ?\n\t\t\t\tMath.round((point.x / bbox.width) * this._width),\n\t\t\t\tMath.round((point.y / bbox.height) * this._height),\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t);\n\n\t\t\tif (pixel.data[0] === 0 && pixel.data[1] === 0 && pixel.data[2] === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst colorId = Color.fromRGB(pixel.data[0], pixel.data[1], pixel.data[2]).toCSS();\n\t\t\tconst hit = this._colorMap[colorId];\n\n\t\t\treturn hit;\n\t\t}\n\t}\n\n\t_withEvents<Key extends keyof IRendererEvents>(key: Key, f: (events: Events<Key>) => void): void {\n\t\tconst events = this._events[key] as Events<Key> | undefined;\n\n\t\tif (events !== undefined) {\n\t\t\tevents.dispatching = true;\n\n\t\t\ttry {\n\t\t\t\tf(events);\n\n\t\t\t} finally {\n\t\t\t\tevents.dispatching = false;\n\n\t\t\t\tif (events.cleanup) {\n\t\t\t\t\tevents.cleanup = false;\n\n\t\t\t\t\t$array.keepIf(events.callbacks, (callback) => {\n\t\t\t\t\t\treturn !callback.disposed;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (events.callbacks.length === 0) {\n\t\t\t\t\t\tevents.disposer.dispose();\n\t\t\t\t\t\tdelete this._events[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_dispatchEventAll<Key extends keyof IRendererEvents>(key: Key, event: IRendererEvents[Key]): void {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_dispatchEvent<Key extends keyof IRendererEvents>(key: Key, target: CanvasDisplayObject, event: IRendererEvents[Key]): boolean {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet dispatched = false;\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed && callback.object === target) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t\tdispatched = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn dispatched;\n\t}\n\n\t_dispatchMousedown(originalEvent: IPointerEvent): void {\n\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tif (button != 0 && button != 2 && button != 1 && button !== undefined) {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\n\t\tif (target) {\n\t\t\tconst id = event.id;\n\n\t\t\tlet dragged = false;\n\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tconst info = { id: id, value: obj };\n\n\t\t\t\tthis._mousedown.push(info);\n\n\t\t\t\tif (!dragged && this._dispatchEvent(\"pointerdown\", obj, event)) {\n\t\t\t\t\t// Only dispatch the first element which matches\n\t\t\t\t\tdragged = true;\n\n\t\t\t\t\tconst has = this._dragging.some((x) => {\n\t\t\t\t\t\treturn x.value === obj && x.id === id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!has) {\n\t\t\t\t\t\tthis._dragging.push(info);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchGlobalMousemove(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\t\tevent.native = native;\n\n\t\tif (target) {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (!obj.contains(target)) {\n\t\t\t\t\tthis._hovering.delete(obj);\n\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t\t}\n\t\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (event.native) {\n\t\t\t\teachTargets(target, (obj) => {\n\t\t\t\t\tif (!this._hovering.has(obj)) {\n\t\t\t\t\t\tthis._hovering.add(obj);\n\t\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t\tobj._replacedCursorStyle = $utils.getStyle(document.body, \"cursor\");\n\t\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj.cursorOverStyle);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._dispatchEvent(\"pointerover\", obj, event);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//} else if (target === false) {\n\t\t} else {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t}\n\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t});\n\n\t\t\tthis._hovering.clear();\n\t\t}\n\t\tthis._dispatchEventAll(\"globalpointermove\", event);\n\t}\n\n\t_dispatchGlobalMouseup(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tevent.native = native;\n\t\t//const target = this._getHitTarget(event.point);\n\t\tthis._dispatchEventAll(\"globalpointerup\", event);\n\t}\n\n\t_dispatchDragMove(originalEvent: IPointerEvent): void {\n\t\tif (this._dragging.length !== 0) {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst id = event.id;\n\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointermove\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchDragEnd(originalEvent: IPointerEvent): void {\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tlet clickevent: \"click\" | \"rightclick\" | \"middleclick\";\n\t\tif (button == 0 || button === undefined) {\n\t\t\tclickevent = \"click\";\n\t\t}\n\t\telse if (button == 2) {\n\t\t\tclickevent = \"rightclick\";\n\t\t}\n\t\telse if (button == 1) {\n\t\t\tclickevent = \"middleclick\";\n\t\t}\n\t\telse {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst id = event.id;\n\n\t\tif (this._mousedown.length !== 0) {\n\t\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\t\t\tif (target) {\n\t\t\t\tthis._mousedown.forEach((obj) => {\n\t\t\t\t\tif (obj.id === id && obj.value.contains(target)) {\n\t\t\t\t\t\tthis._dispatchEvent(clickevent, obj.value, event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._mousedown.length = 0;\n\t\t}\n\n\t\tif (this._dragging.length !== 0) {\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointerup\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._dragging.length = 0;\n\t\t}\n\t}\n\n\t_dispatchDoubleClick(originalEvent: IPointerEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"dblclick\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchWheel(originalEvent: WheelEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"wheel\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_makeSharedEvent(key: string, f: () => IDisposer): IDisposer {\n\t\tif (this._listeners[key] === undefined) {\n\t\t\tconst listener = f();\n\n\t\t\tthis._listeners[key] = new CounterDisposer(() => {\n\t\t\t\tdelete this._listeners[key];\n\t\t\t\tlistener.dispose();\n\t\t\t});\n\t\t}\n\n\t\treturn this._listeners[key].increment();\n\t}\n\n\t_onPointerEvent(name: string, f: (event: Array<IPointerEvent>, native: boolean) => void): IDisposer {\n\t\tlet native = false;\n\t\tlet timer: number | null = null;\n\n\t\tfunction clear() {\n\t\t\ttimer = null;\n\t\t\tnative = false;\n\t\t}\n\n\t\treturn new MultiDisposer([\n\t\t\tnew Disposer(() => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\tclear();\n\t\t\t}),\n\n\t\t\t$utils.addEventListener(this.view, $utils.getRendererEvent(name), (_) => {\n\t\t\t\tnative = true;\n\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\ttimer = window.setTimeout(clear, 0);\n\t\t\t}),\n\n\t\t\tonPointerEvent(window, name, (ev) => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = null;\n\t\t\t\t}\n\n\t\t\t\tf(ev, native);\n\n\t\t\t\tnative = false;\n\t\t\t}),\n\t\t]);\n\t}\n\n\t// This ensures that only a single DOM event is added (e.g. only a single mousemove event listener)\n\t_initEvent(key: keyof IRendererEvents): IDisposer | undefined {\n\t\tswitch (key) {\n\t\t\tcase \"globalpointermove\":\n\t\t\tcase \"pointerover\":\n\t\t\tcase \"pointerout\":\n\t\t\t\treturn this._makeSharedEvent(\"pointermove\", () => {\n\t\t\t\t\tconst listener = (events: Array<IPointerEvent>, native: boolean) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\treturn new MultiDisposer([\n\t\t\t\t\t\tthis._onPointerEvent(\"pointerdown\", listener),\n\t\t\t\t\t\tthis._onPointerEvent(\"pointermove\", listener),\n\t\t\t\t\t]);\n\t\t\t\t});\n\t\t\tcase \"globalpointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerup\", () => {\n\t\t\t\t\tvar mouseup = this._onPointerEvent(\"pointerup\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\tvar pointercancel = this._onPointerEvent(\"pointercancel\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"click\":\n\t\t\tcase \"rightclick\":\n\t\t\tcase \"middleclick\":\n\t\t\tcase \"pointerdown\":\n\t\t\t/*\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"pointerdown\", (event, native) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { event, native };\n\t\t\t\t\t\tthis._dispatchMousedown(event)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t*/\n\t\t\tcase \"pointermove\":\n\t\t\tcase \"pointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\t//const throttler = new Throttler();\n\n\t\t\t\t\tconst mousedown = onPointerEvent(this.view, \"pointerdown\", (events) => {\n\t\t\t\t\t\t$array.each(events, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchMousedown(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO handle throttling properly for multitouch\n\t\t\t\t\tconst mousemove = this._onPointerEvent(\"pointermove\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t//throttler.throttle(() => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragMove(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst mouseup = this._onPointerEvent(\"pointerup\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst pointercancel = this._onPointerEvent(\"pointercancel\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmousedown.dispose();\n\t\t\t\t\t\tmousemove.dispose();\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"dblclick\":\n\t\t\t\treturn this._makeSharedEvent(\"dblclick\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"dblclick\", (ev) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDoubleClick(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"wheel\":\n\t\t\t\treturn this._makeSharedEvent(\"wheel\", () => {\n\t\t\t\t\treturn $utils.addEventListener(window, $utils.getRendererEvent(\"wheel\"), (event: WheelEvent) => {\n\t\t\t\t\t\tthis._dispatchWheel(event);\n\t\t\t\t\t}, { passive: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_addEvent<C, Key extends keyof IRendererEvents>(object: CanvasDisplayObject, key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tlet events: Events<Key> | undefined = this._events[key] as any;\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._events[key] = {\n\t\t\t\tdisposer: this._initEvent(key)!,\n\t\t\t\tcallbacks: [],\n\t\t\t\tdispatching: false,\n\t\t\t\tcleanup: false,\n\t\t\t};\n\t\t}\n\n\t\tconst listener = { object, context, callback, disposed: false };\n\n\t\tevents!.callbacks.push(listener);\n\n\t\treturn new Disposer(() => {\n\t\t\tlistener.disposed = true;\n\n\t\t\tif (events!.dispatching) {\n\t\t\t\tevents!.cleanup = true;\n\n\t\t\t} else {\n\t\t\t\t$array.removeFirst(events!.callbacks, listener);\n\n\t\t\t\tif (events!.callbacks.length === 0) {\n\t\t\t\t\tevents!.disposer.dispose();\n\t\t\t\t\tdelete this._events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getCanvas(root: CanvasDisplayObject, options?: ICanvasOptions): HTMLCanvasElement {\n\n\t\t// Make sure everything is rendered\n\t\tthis.render(root);\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tlet scale: number = this.resolution;\n\n\t\t// Check if we need to scale\n\t\tif (options.minWidth && (options.minWidth > this._width)) {\n\t\t\tlet minScale = options.minWidth / this._width;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.minHeight && (options.minHeight > this._height)) {\n\t\t\tlet minScale = options.minHeight / this._height;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxWidth && (options.maxWidth < this._width)) {\n\t\t\tlet maxScale = options.maxWidth / this._width;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxHeight && (options.maxHeight > this._height)) {\n\t\t\tlet maxScale = options.maxHeight / this._height;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\t// Check if we need to compensate for pixel ratio\n\t\tif (options.maintainPixelRatio) {\n\t\t\tscale /= this.resolution;\n\t\t}\n\n\t\t// Init list canvases to remove from DOM after export\n\t\tconst canvases: HTMLCanvasElement[] = [];\n\n\t\t// Set up new canvas for export\n\t\tlet forceRender = false;\n\t\tlet canvasWidth = this._width;\n\t\tlet canvasHeight = this._height;\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tif (scale != this.resolution) {\n\t\t\tforceRender = true;\n\t\t\tcanvasWidth = this._width * scale / this.resolution;\n\t\t\tcanvasHeight = this._height * scale / this.resolution;\n\t\t}\n\n\t\tcanvas.width = canvasWidth;\n\t\tcanvas.height = canvasHeight;\n\n\t\t// Add to DOM so it inherits CSS\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis.view.appendChild(canvas);\n\t\tcanvases.push(canvas);\n\n\t\t// Context\n\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\tlet width = 0;\n\t\tlet height = 0;\n\t\tlet needRerender = false;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\t\t\t\tif (layer.tainted || forceRender) {\n\t\t\t\t\tneedRerender = true;\n\n\t\t\t\t\tlayer.exportableView = layer.view;\n\t\t\t\t\tlayer.exportableContext = layer.context;\n\n\t\t\t\t\tlayer.view = document.createElement(\"canvas\");\n\n\t\t\t\t\t// Add to DOM so it inherits CSS\n\t\t\t\t\tlayer.view.style.position = \"fixed\";\n\t\t\t\t\tlayer.view.style.top = \"-10000px\";\n\t\t\t\t\tthis.view.appendChild(layer.view);\n\t\t\t\t\tcanvases.push(layer.view);\n\n\t\t\t\t\tlayer.view.width = canvasWidth;\n\t\t\t\t\tlayer.view.height = canvasHeight;\n\n\t\t\t\t\tlayer.context = layer.view.getContext(\"2d\")!;\n\n\t\t\t\t\tlayer.dirty = true;\n\t\t\t\t\tlayer.scale = scale;\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (needRerender) {\n\t\t\tthis._omitTainted = true;\n\t\t\tthis.render(root);\n\t\t\tthis._omitTainted = false;\n\t\t}\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\n\t\t\t\t// Layer is fine. Just plop it into our target canvas\n\t\t\t\tcontext.drawImage(layer.view, 0, 0);\n\n\t\t\t\t// Restore layer original canvas\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tlayer.view = layer.exportableView;\n\t\t\t\t\tlayer.exportableView = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (layer.exportableContext) {\n\t\t\t\t\tlayer.context = layer.exportableContext;\n\t\t\t\t\tlayer.exportableContext = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (width < layer.view.clientWidth) {\n\t\t\t\t\twidth = layer.view.clientWidth;\n\t\t\t\t}\n\t\t\t\tif (height < layer.view.clientHeight) {\n\t\t\t\t\theight = layer.view.clientHeight;\n\t\t\t\t}\n\n\t\t\t\tlayer.scale = undefined;\n\t\t\t}\n\t\t});\n\n\t\tcanvas.style.width = width + \"px\";\n\t\tcanvas.style.height = height + \"px\";\n\n\t\t$array.each(canvases, (canvas) => {\n\t\t\tcanvas.style.position = \"\";\n\t\t\tcanvas.style.top = \"\";\n\t\t\tthis.view.removeChild(canvas);\n\t\t})\n\n\t\treturn canvas;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport interface CanvasLayer extends ILayer {\n\tview: HTMLCanvasElement;\n\tcontext: CanvasRenderingContext2D;\n\ttainted?: boolean;\n\texportableView?: HTMLCanvasElement;\n\texportableContext?: CanvasRenderingContext2D;\n\tscale?: number;\n}\n"]}
1
+ {"version":3,"file":"CanvasRenderer.js","sourceRoot":"","sources":["../../../../../../src/.internal/core/render/backend/CanvasRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/** @ignore *//** */\n\nimport {\n\tIRenderer, IContainer, IDisplayObject, IGraphics, IRendererEvents,\n\tIText, ITextStyle, IRadialText, IPicture, IRendererEvent, ILayer, ICanvasOptions, BlendMode, IPointerEvent, Id\n} from \"./Renderer\";\nimport type { IBounds } from \"../../util/IBounds\";\nimport type { IPoint } from \"../../util/IPoint\";\nimport { Color } from \"../../util/Color\";\nimport { Matrix } from \"../../util/Matrix\";\nimport { Percent, percent } from \"../../util/Percent\";\n//import { Throttler } from \"../../util/Throttler\";\nimport { ArrayDisposer, Disposer, DisposerClass, IDisposer, CounterDisposer, MultiDisposer } from \"../../util/Disposer\";\nimport { TextFormatter, ITextChunk } from \"../../util/TextFormatter\";\nimport * as $utils from \"../../util/Utils\";\nimport * as $array from \"../../util/Array\";\nimport * as $object from \"../../util/Object\";\nimport * as $type from \"../../util/Type\";\nimport * as $math from \"../../util/Math\";\nimport arcToBezier from 'svg-arc-to-cubic-bezier';\n\n\n/**\n * @ignore\n */\nfunction checkArgs(name: string, actual: number, expected: number) {\n\tif (actual !== expected) {\n\t\tthrow new Error(\"Required \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkMinArgs(name: string, actual: number, expected: number) {\n\tif (actual < expected) {\n\t\tthrow new Error(\"Required at least \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkEvenArgs(name: string, actual: number, expected: number) {\n\tcheckMinArgs(name, actual, expected);\n\n\tif ((actual % expected) !== 0) {\n\t\tthrow new Error(\"Arguments for \" + name + \" must be in pairs of \" + expected);\n\t}\n}\n\n/**\n * @ignore\n * This splits the flag so that way 0017 will be processed as 0 0 17\n *\n * This is important for weird paths like `M17 5A1 1 0 0017 30 1 1 0 0017 5`\n */\nfunction splitArcFlags(args: Array<string>) {\n\tfor (let i = 0; i < args.length; i += 7) {\n\t\tlet index = i + 3;\n\t\tlet flag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])([01])(.*)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs.splice(index, 0, a[2]);\n\t\t\t\t++index;\n\n\t\t\t\tif (a[3].length > 0) {\n\t\t\t\t\targs[index] = a[3];\n\n\t\t\t\t} else {\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++index;\n\n\t\tflag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])(.+)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs[index] = a[2];\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction assertBinary(value: number): 0 | 1 {\n\tif (value === 0 || value === 1) {\n\t\treturn value;\n\n\t} else {\n\t\tthrow new Error(\"Flag must be 0 or 1\");\n\t}\n}\n\n// 1 -> 0xffffff * (2 / 2)\n// 2 -> 0xffffff * (1 / 2)\n//\n// 3 -> 0xffffff * (3 / 4)\n// 4 -> 0xffffff * (1 / 4)\n//\n// 5 -> 0xffffff * (7 / 8)\n// 6 -> 0xffffff * (5 / 8)\n// 7 -> 0xffffff * (3 / 8)\n// 8 -> 0xffffff * (1 / 8)\n//\n// 9 -> 0xffffff * (15 / 16)\n// 10 -> 0xffffff * (13 / 16)\n// 11 -> 0xffffff * (11 / 16)\n// 12 -> 0xffffff * (9 / 16)\n// 13 -> 0xffffff * (7 / 16)\n// 14 -> 0xffffff * (5 / 16)\n// 15 -> 0xffffff * (3 / 16)\n// 16 -> 0xffffff * (1 / 16)\n// @todo remove this old color distribution algo if the new one pans out\n// function distributeIdBAK(id: number): number {\n// \tif (id === 1) {\n// \t\treturn 0x000001;\n\n// \t} else {\n// \t\t// Finds the closest power of 2\n// \t\tconst base = Math.pow(2, Math.ceil(Math.log(id) / Math.log(2)));\n\n// \t\t// Translates the id into an odd fraction index\n// \t\tconst index = ((base - id) * 2) + 1;\n\n// \t\t// TODO is Math.round correct ?\n// \t\treturn Math.round(0xffffff * (index / base));\n// \t}\n// }\n\n/**\n * Function by smeans:\n * https://lowcode.life/generating-unique-contrasting-colors-in-javascript/\n * @ignore\n */\nfunction distributeId(id: number): number {\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 24; i++) {\n\t\trgb[i % 3] <<= 1;\n\t\trgb[i % 3] |= id & 0x01;\n\t\tid >>= 1;\n\t}\n\treturn (rgb[2] | 0) + (rgb[1] << 8) + (rgb[0] << 16);\n}\n\n/**\n * @ignore\n */\nfunction eachTargets(hitTarget: CanvasDisplayObject, f: (target: CanvasDisplayObject) => boolean): void {\n\tfor (; ;) {\n\t\tif (hitTarget.interactive) {\n\t\t\tif (!f(hitTarget)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (hitTarget._parent) {\n\t\t\thitTarget = hitTarget._parent;\n\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// TODO feature detection for mouse/touch/pointer\n/**\n * @ignore\n */\nfunction onPointerEvent(element: EventTarget, name: string, f: (event: Array<IPointerEvent>) => void): IDisposer {\n\treturn $utils.addEventListener(element, $utils.getRendererEvent(name), (event: MouseEvent | TouchEvent) => {\n\t\tlet touches = (<any>event).touches;\n\t\tif (touches) {\n\t\t\tif (touches.length == 0) {\n\t\t\t\ttouches = (<any>event).changedTouches;\n\t\t\t}\n\n\t\t\tf($array.copy(<TouchList>touches));\n\n\t\t} else {\n\t\t\tf([<MouseEvent>event]);\n\t\t}\n\t});\n}\n\n/**\n * @ignore\n */\nfunction isTainted(image: HTMLImageElement): boolean {\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = 1;\n\tcanvas.height = 1;\n\tconst context = canvas.getContext(\"2d\", { willReadFrequently: true })! as CanvasRenderingContext2D;\n\tcontext.drawImage(image, 0, 0, 1, 1);\n\n\ttry {\n\t\tcontext.getImageData(0, 0, 1, 1);\n\t\treturn false;\n\t}\n\tcatch (err) {\n\t\tconsole.warn(\"Image \\\"\" + image.src + \"\\\" is loaded from different host and is not covered by CORS policy. For more information about the implications read here: https://www.amcharts.com/docs/v5/concepts/cors\");\n\t\treturn true;\n\t}\n}\n\n/**\n * This is needed to workaround a bug in iOS which causes it to not GC canvas elements.\n *\n * @ignore\n */\nfunction clearCanvas(view: HTMLCanvasElement) {\n\tview.width = 0;\n\tview.height = 0;\n\tview.style.width = \"0px\";\n\tview.style.height = \"0px\";\n}\n\n/**\n * @ignore\n */\nexport class CanvasPivot implements IPoint {\n\tprotected _x: number = 0;\n\tprotected _y: number = 0;\n\n\tget x(): number {\n\t\treturn this._x;\n\t}\n\n\tget y(): number {\n\t\treturn this._y;\n\t}\n\n\tset x(value: number) {\n\t\tthis._x = value;\n\t}\n\n\tset y(value: number) {\n\t\tthis._y = value;\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasDisplayObject extends DisposerClass implements IDisplayObject, IDisposer {\n\tpublic _layer?: CanvasLayer;\n\n\tpublic mask: CanvasGraphics | null = null;\n\tpublic visible: boolean = true;\n\tpublic exportable?: boolean = true;\n\tpublic interactive: boolean = false;\n\tpublic inactive: boolean = false;\n\tpublic wheelable: boolean = false;\n\tpublic cancelTouch: boolean = false;\n\tpublic isMeasured: boolean = false;\n\tpublic buttonMode: boolean = false;\n\tpublic alpha: number = 1;\n\tpublic compoundAlpha: number = 1;\n\tpublic angle: number = 0;\n\tpublic scale: number = 1;\n\tpublic x: number = 0;\n\tpublic y: number = 0;\n\tpublic pivot: CanvasPivot = new CanvasPivot();\n\n\tpublic filter?: string;\n\n\tpublic cursorOverStyle?: string;\n\tpublic _replacedCursorStyle?: string;\n\n\tpublic _localMatrix: Matrix = new Matrix();\n\tpublic _matrix: Matrix = new Matrix();\n\t// TODO can this be replaced with _localMatrix ?\n\tprotected _uMatrix: Matrix = new Matrix();\n\n\tpublic _renderer: CanvasRenderer;\n\tpublic _parent: CanvasContainer | undefined;\n\n\tprotected _localBounds: IBounds | undefined;\n\tprotected _bounds: IBounds | undefined;\n\tpublic _colorId: string | undefined;\n\n\tconstructor(renderer: CanvasRenderer) {\n\t\tsuper();\n\t\tthis._renderer = renderer;\n\t}\n\n\tprotected _dispose(): void {\n\t\tthis._renderer._removeObject(this);\n\t}\n\n\tpublic getCanvas(): HTMLCanvasElement {\n\t\treturn this.getLayer().view;\n\t}\n\n\tpublic getLayer(): CanvasLayer {\n\t\tlet self: CanvasDisplayObject = this;\n\n\t\tfor (; ;) {\n\t\t\tif (self._layer) {\n\t\t\t\treturn self._layer;\n\n\t\t\t} else if (self._parent) {\n\t\t\t\tself = self._parent;\n\n\t\t\t} else {\n\t\t\t\treturn this._renderer.defaultLayer;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setLayer(order: number | undefined, visible: boolean = true): void {\n\t\tif (order == null) {\n\t\t\tthis._layer = undefined;\n\n\t\t} else {\n\t\t\tthis._layer = this._renderer.getLayer(order, visible);\n\t\t\tthis._layer.visible = visible;\n\t\t\tif (this._parent) {\n\t\t\t\tthis._parent.registerChildLayer(this._layer);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(): void {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.invalidateBounds();\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tthis._localBounds = undefined;\n\t}\n\n\tpublic _addBounds(_bounds: IBounds): void { }\n\n\tprotected _getColorId(): string {\n\t\tif (this._colorId === undefined) {\n\t\t\tthis._colorId = this._renderer.paintId(this);\n\t\t}\n\n\t\treturn this._colorId;\n\t}\n\n\tprotected _isInteractive(): boolean {\n\t\treturn this.inactive == false && (this.interactive || this._renderer._forceInteractive > 0);\n\t}\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this._isInteractive();\n\t}\n\n\tpublic contains(child: CanvasDisplayObject): boolean {\n\t\tfor (; ;) {\n\t\t\tif (child === this) {\n\t\t\t\treturn true;\n\n\t\t\t} else if (child._parent) {\n\t\t\t\tchild = child._parent;\n\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\ttoGlobal(point: IPoint): IPoint {\n\t\treturn this._matrix.apply(point);\n\t}\n\n\ttoLocal(point: IPoint): IPoint {\n\t\treturn this._matrix.applyInverse(point);\n\t}\n\n\tpublic getLocalMatrix(): Matrix {\n\t\tthis._uMatrix.setTransform(0, 0, this.pivot.x, this.pivot.y, this.angle * Math.PI / 180, this.scale);\n\t\treturn this._uMatrix;\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\t\t\tconst bn = 10000000;\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: bn,\n\t\t\t\ttop: bn,\n\t\t\t\tright: -bn,\n\t\t\t\tbottom: -bn\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tgetAdjustedBounds(bounds: IBounds): IBounds {\n\t\tthis._setMatrix();\n\n\t\tconst matrix = this.getLocalMatrix();\n\n\t\tconst p0 = matrix.apply({ x: bounds.left, y: bounds.top });\n\t\tconst p1 = matrix.apply({ x: bounds.right, y: bounds.top });\n\t\tconst p2 = matrix.apply({ x: bounds.right, y: bounds.bottom });\n\t\tconst p3 = matrix.apply({ x: bounds.left, y: bounds.bottom });\n\n\t\treturn {\n\t\t\tleft: Math.min(p0.x, p1.x, p2.x, p3.x),\n\t\t\ttop: Math.min(p0.y, p1.y, p2.y, p3.y),\n\t\t\tright: Math.max(p0.x, p1.x, p2.x, p3.x),\n\t\t\tbottom: Math.max(p0.y, p1.y, p2.y, p3.y)\n\t\t}\n\t}\n\n\ton<C, Key extends keyof IRendererEvents>(key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tif (this.interactive) {\n\t\t\treturn this._renderer._addEvent(this, key, callback, context);\n\n\t\t} else {\n\t\t\treturn new Disposer(() => { });\n\t\t}\n\t}\n\n\tpublic _setMatrix(): void {\n\t\t// TODO only calculate this if it has actually changed\n\t\tthis._localMatrix.setTransform(\n\t\t\tthis.x,\n\t\t\tthis.y,\n\t\t\tthis.pivot.x,\n\t\t\tthis.pivot.y,\n\t\t\t// Converts degrees to radians\n\t\t\tthis.angle * Math.PI / 180,\n\t\t\tthis.scale\n\t\t);\n\n\t\tthis._matrix.copyFrom(this._localMatrix);\n\n\t\tif (this._parent) {\n\t\t\t// TODO only calculate this if it has actually changed\n\t\t\tthis._matrix.prepend(this._parent._matrix);\n\t\t}\n\t}\n\n\tpublic _transform(context: CanvasRenderingContext2D, resolution: number): void {\n\t\tconst m = this._matrix;\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\tm.tx * resolution,\n\t\t\tm.ty * resolution\n\t\t);\n\t}\n\n\tpublic render(parentLayer: CanvasLayer): void {\n\t\tif (this.visible && (this.exportable !== false || !this._renderer._omitTainted)) {\n\t\t\tthis._setMatrix();\n\n\t\t\tconst resolution = this._renderer.resolution;\n\n\t\t\tconst layers = this._renderer.layers;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t}\n\n\t\t\t// TODO improve this\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tconst context = layer.context;\n\t\t\t\t\tcontext.save();\n\n\t\t\t\t\t// We must apply the mask before we transform the element\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tmask._transform(context, layer.scale || resolution);\n\t\t\t\t\t\tmask._runPath(context);\n\t\t\t\t\t\tcontext.clip();\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\t\t\tthis._transform(context, layer.scale || resolution);\n\n\t\t\t\t\tif (this.filter) {\n\t\t\t\t\t\tcontext.filter = this.filter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tghostContext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tif (mask && this._isInteractiveMask()) {\n\t\t\t\tmask._transform(ghostContext, resolution);\n\t\t\t\tmask._runPath(ghostContext);\n\t\t\t\tghostContext.clip();\n\t\t\t}\n\n\t\t\tthis._transform(ghostContext, resolution);\n\n\t\t\tthis._render(parentLayer);\n\n\t\t\tghostContext.restore();\n\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tlayer.context.restore();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tif (this.exportable === false) {\n\t\t\tconst layer = this._layer || parentLayer;\n\t\t\tlayer.tainted = true;\n\t\t}\n\t}\n\n\thovering(): boolean {\n\t\treturn this._renderer._hovering.has(this);\n\t}\n\n\tdragging(): boolean {\n\t\treturn this._renderer._dragging.some((x) => x.value === this);\n\t}\n\n\tpublic dispose() {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic shouldCancelTouch(): boolean {\n\t\tconst renderer = this._renderer;\n\t\tif (renderer.tapToActivate && !renderer._touchActive) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.cancelTouch) {\n\t\t\treturn true;\n\t\t}\n\t\telse if (this._parent) {\n\t\t\treturn this._parent.shouldCancelTouch();\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasContainer extends CanvasDisplayObject implements IContainer {\n\tpublic interactiveChildren: boolean = true;\n\tprivate _childLayers?: CanvasLayer[];\n\n\tprotected _children: Array<CanvasDisplayObject> = [];\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this.interactiveChildren || super._isInteractiveMask();\n\t}\n\n\taddChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = this;\n\t\tthis._children.push(child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\taddChildAt(child: CanvasDisplayObject, index: number): void {\n\t\tchild._parent = this;\n\t\tthis._children.splice(index, 0, child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\tremoveChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = undefined;\n\t\t$array.removeFirst(this._children, child);\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst renderer = this._renderer;\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t++renderer._forceInteractive;\n\t\t}\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t$array.each(this._children, (child) => {\n\t\t\tchild.compoundAlpha = this.compoundAlpha * this.alpha;\n\t\t\tchild.render(layer);\n\t\t});\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t--renderer._forceInteractive;\n\t\t}\n\t}\n\n\tregisterChildLayer(layer: CanvasLayer): void {\n\t\tif (!this._childLayers) {\n\t\t\tthis._childLayers = [];\n\t\t}\n\t\t$array.pushOne(this._childLayers, layer);\n\t\tif (this._parent) {\n\t\t\tthis._parent.registerChildLayer(layer);\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(deep: boolean = false): void {\n\t\tsuper.markDirtyLayer();\n\t\tif (deep && this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => layer.dirty = true);\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tsuper.dispose();\n\t\tif (this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => {\n\t\t\t\tlayer.dirty = true;\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction setPoint(bounds: IBounds, point: IPoint): void {\n\tbounds.left = Math.min(bounds.left, point.x);\n\tbounds.top = Math.min(bounds.top, point.y);\n\tbounds.right = Math.max(bounds.right, point.x);\n\tbounds.bottom = Math.max(bounds.bottom, point.y);\n}\n\n/**\n * @ignore\n */\nabstract class Op {\n\tpublic colorize(_context: CanvasRenderingContext2D, _forceColor: string | undefined): void { }\n\n\tpublic path(_context: CanvasRenderingContext2D): void { }\n\n\tpublic addBounds(_bounds: IBounds): void { }\n}\n\n/**\n * @ignore\n */\nclass BeginFill extends Op {\n\tconstructor(public color: string | CanvasGradient | CanvasPattern) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.fillStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndFill extends Op {\n\tconstructor(public clearShadow: boolean) { super(); }\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.fill();\n\t\tif (this.clearShadow) {\n\t\t\tcontext.shadowColor = \"\";\n\t\t\tcontext.shadowBlur = 0;\n\t\t\tcontext.shadowOffsetX = 0;\n\t\t\tcontext.shadowOffsetY = 0;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndStroke extends Op {\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.stroke();\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineStyle extends Op {\n\tconstructor(public width: number, public color: string | CanvasGradient | CanvasPattern, public lineJoin?: \"miter\" | \"round\" | \"bevel\") { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.strokeStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.strokeStyle = this.color;\n\t\t}\n\n\t\tcontext.lineWidth = this.width;\n\t\tif (this.lineJoin) {\n\t\t\tcontext.lineJoin = this.lineJoin;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDash extends Op {\n\tconstructor(public dash: number[]) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.setLineDash(this.dash);\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDashOffset extends Op {\n\tconstructor(public dashOffset: number) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.lineDashOffset = this.dashOffset;\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawRect extends Op {\n\tconstructor(public x: number, public y: number, public width: number, public height: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.rect(this.x, this.y, this.width, this.height);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tconst l = this.x;\n\t\tconst t = this.y;\n\t\tconst r = l + this.width;\n\t\tconst b = t + this.height;\n\n\t\tsetPoint(bounds, { x: l, y: t });\n\t\tsetPoint(bounds, { x: r, y: t });\n\t\tsetPoint(bounds, { x: l, y: b });\n\t\tsetPoint(bounds, { x: r, y: b });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawCircle extends Op {\n\tconstructor(public x: number, public y: number, public radius: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x + this.radius, this.y);\n\t\tcontext.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radius, y: this.y - this.radius });\n\t\tsetPoint(bounds, { x: this.x + this.radius, y: this.y + this.radius });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawEllipse extends Op {\n\tconstructor(public x: number, public y: number, public radiusX: number, public radiusY: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.ellipse(0, 0, this.radiusX, this.radiusY, 0, 0, Math.PI * 2);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radiusX, y: this.y - this.radiusY });\n\t\tsetPoint(bounds, { x: this.x + this.radiusX, y: this.y + this.radiusY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Arc extends Op {\n\tconstructor(\n\t\tpublic cx: number,\n\t\tpublic cy: number,\n\t\tpublic radius: number,\n\t\tpublic startAngle: number,\n\t\tpublic endAngle: number,\n\t\tpublic anticlockwise: boolean,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arc(this.cx, this.cy, this.radius, this.startAngle, this.endAngle, this.anticlockwise);\n\t\t}\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tlet arcBounds = $math.getArcBounds(this.cx, this.cy, this.startAngle * $math.DEGREES, this.endAngle * $math.DEGREES, this.radius);\n\t\tsetPoint(bounds, { x: arcBounds.left, y: arcBounds.top });\n\t\tsetPoint(bounds, { x: arcBounds.right, y: arcBounds.bottom });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ArcTo extends Op {\n\tconstructor(\n\t\tpublic x1: number,\n\t\tpublic y1: number,\n\t\tpublic x2: number,\n\t\tpublic y2: number,\n\t\tpublic radius: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\n\t\t}\n\t}\n\n\t// TODO: add points\n\tpublic addBounds(_bounds: IBounds): void {\n\t\t/*\n\t\t// not finished\n\t\thttps://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically\n\n\t\tif (prevPoint) {\n\t\t\tlet x1 = prevPoint.x;\n\t\t\tlet y1 = prevPoint.y;\n\t\t\tlet x2 = this.x2;\n\t\t\tlet y2 = this.y2;\n\t\t\tlet r = this.radius;\n\n\t\t\tlet xa = (x2 - x1) / 2;\n\t\t\tlet ya = (y2 - y1) / 2;\n\n\t\t\tlet x0 = x1 + xa;\n\t\t\tlet y0 = y1 + ya;\n\n\t\t\tlet a = Math.hypot(xa, ya);\n\t\t\tlet b = Math.sqrt(r * r - a * a);\n\n\t\t\tlet cx = x0 + b * ya / a;\n\t\t\tlet cy = y0 - b * xa / a;\n\n\t\t\tconsole.log(cx, cy);\n\t\t}*/\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.lineTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass MoveTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ClosePath extends Op {\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.closePath();\n\t}\n}\n\n/**\n * @ignore\n */\nclass BezierCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic cpX2: number,\n\t\tpublic cpY2: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.bezierCurveTo(this.cpX, this.cpY, this.cpX2, this.cpY2, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.cpX2, y: this.cpY2 });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass QuadraticCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.quadraticCurveTo(this.cpX, this.cpY, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Shadow extends Op {\n\tconstructor(\n\t\tpublic color: string,\n\t\tpublic blur: number,\n\t\tpublic offsetX: number,\n\t\tpublic offsetY: number,\n\t\tpublic opacity?: number\n\t) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tif (this.opacity) {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t\tcontext.shadowColor = this.color;\n\t\tcontext.shadowBlur = this.blur;\n\t\tcontext.shadowOffsetX = this.offsetX;\n\t\tcontext.shadowOffsetY = this.offsetY;\n\t}\n}\n\n/**\n * @ignore\n */\nclass GraphicsImage extends Op {\n\tconstructor(\n\t\tpublic image: HTMLImageElement,\n\t\tpublic width: number,\n\t\tpublic height: number,\n\t\tpublic x: number,\n\t\tpublic y: number\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.drawImage(this.image, this.x, this.y, this.width, this.height);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t\tsetPoint(bounds, { x: this.width, y: this.height });\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasGraphics extends CanvasDisplayObject implements IGraphics {\n\tprotected _operations: Array<Op> = [];\n\n\tpublic blendMode: BlendMode = BlendMode.NORMAL;\n\n\tprotected _hasShadows: boolean = false;\n\tprotected _fillAlpha?: number;\n\tprotected _strokeAlpha?: number;\n\n\tclear(): void {\n\t\tsuper.clear();\n\t\tthis._operations.length = 0;\n\t}\n\n\tprotected _pushOp(op: Op): void {\n\t\tthis._operations.push(op);\n\t}\n\n\tbeginFill(color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1): void {\n\t\tthis._fillAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new BeginFill(color.toCSS(alpha)));\n\n\t\t\t} else {\n\t\t\t\tthis.isMeasured = true;\n\t\t\t\tthis._pushOp(new BeginFill(color));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new BeginFill(\"rgba(0, 0, 0, \" + alpha + \")\"));\n\t\t}\n\t}\n\n\tendFill(): void {\n\t\tthis._pushOp(new EndFill(this._hasShadows));\n\t}\n\n\tendStroke(): void {\n\t\tthis._pushOp(new EndStroke());\n\t}\n\n\tlineStyle(width: number = 0, color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1, lineJoin?: \"miter\" | \"round\" | \"bevel\"): void {\n\t\tthis._strokeAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new LineStyle(width, color.toCSS(alpha), lineJoin));\n\t\t\t} else {\n\t\t\t\tthis._pushOp(new LineStyle(width, color, lineJoin));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new LineStyle(width, \"rgba(0, 0, 0, \" + alpha + \")\", lineJoin));\n\t\t}\n\t}\n\n\tsetLineDash(dash?: number[]): void {\n\t\tthis._pushOp(new LineDash(dash ? dash : []));\n\t}\n\n\tsetLineDashOffset(dashOffset: number = 0): void {\n\t\tthis._pushOp(new LineDashOffset(dashOffset));\n\t}\n\n\tdrawRect(x: number, y: number, width: number, height: number): void {\n\t\tthis._pushOp(new DrawRect(x, y, width, height));\n\t}\n\n\tdrawCircle(x: number, y: number, radius: number): void {\n\t\tthis._pushOp(new DrawCircle(x, y, radius));\n\t}\n\n\tdrawEllipse(x: number, y: number, radiusX: number, radiusY: number): void {\n\t\tthis._pushOp(new DrawEllipse(x, y, radiusX, radiusY));\n\t}\n\n\tarc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise: boolean = false): void {\n\t\tthis._pushOp(new Arc(cx, cy, radius, startAngle, endAngle, anticlockwise));\n\t}\n\n\tarcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n\t\tthis._pushOp(new ArcTo(x1, y1, x2, y2, radius));\n\t}\n\n\tlineTo(x: number, y: number): void {\n\t\tthis._pushOp(new LineTo(x, y));\n\t}\n\n\tmoveTo(x: number, y: number): void {\n\t\tthis._pushOp(new MoveTo(x, y));\n\t}\n\n\tbezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new BezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY));\n\t}\n\n\tquadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new QuadraticCurveTo(cpX, cpY, toX, toY));\n\t}\n\n\tclosePath(): void {\n\t\tthis._pushOp(new ClosePath());\n\t}\n\n\tshadow(color: Color, blur: number = 0, offsetX: number = 0, offsetY: number = 0, opacity?: number): void {\n\t\tthis._hasShadows = true;\n\t\tthis._pushOp(new Shadow(opacity ? color.toCSS(opacity) : color.toCSS(this._fillAlpha || this._strokeAlpha), blur, offsetX, offsetY));\n\t}\n\n\timage(image: HTMLImageElement, width: number, height: number, x: number, y: number): void {\n\t\tthis._pushOp(new GraphicsImage(image, width, height, x, y));\n\t}\n\n\t// https://svgwg.org/svg2-draft/paths.html#DProperty\n\t// TODO better error checking\n\tsvgPath(path: string): void {\n\t\tlet x = 0;\n\t\tlet y = 0;\n\t\tlet cpx: number | null = null;\n\t\tlet cpy: number | null = null;\n\t\tlet qcpx: number | null = null;\n\t\tlet qcpy: number | null = null;\n\n\t\tconst SEGMENTS_REGEXP = /([MmZzLlHhVvCcSsQqTtAa])([^MmZzLlHhVvCcSsQqTtAa]*)/g;\n\t\tconst ARGS_REGEXP = /[\\u0009\\u0020\\u000A\\u000C\\u000D]*([\\+\\-]?[0-9]*\\.?[0-9]+(?:[eE][\\+\\-]?[0-9]+)?)[\\u0009\\u0020\\u000A\\u000C\\u000D]*,?/g;\n\n\t\tlet match;\n\n\t\twhile ((match = SEGMENTS_REGEXP.exec(path)) !== null) {\n\t\t\tconst name = match[1];\n\t\t\tconst rest = match[2];\n\n\t\t\tconst args: Array<string> = [];\n\n\t\t\twhile ((match = ARGS_REGEXP.exec(rest)) !== null) {\n\t\t\t\targs.push(match[1]);\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"S\" && name !== \"s\" && name !== \"C\" && name !== \"c\") {\n\t\t\t\tcpx = null;\n\t\t\t\tcpy = null;\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"Q\" && name !== \"q\" && name !== \"T\" && name !== \"t\") {\n\t\t\t\tqcpx = null;\n\t\t\t\tqcpy = null;\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\tcase \"M\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx = +args[0];\n\t\t\t\t\ty = +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx += +args[0];\n\t\t\t\t\ty += +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"L\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"l\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"H\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"h\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"V\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"v\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"C\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i];\n\t\t\t\t\t\tconst y1 = +args[i + 1];\n\t\t\t\t\t\tcpx = +args[i + 2];\n\t\t\t\t\t\tcpy = +args[i + 3];\n\t\t\t\t\t\tx = +args[i + 4];\n\t\t\t\t\t\ty = +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"c\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i] + x;\n\t\t\t\t\t\tconst y1 = +args[i + 1] + y;\n\t\t\t\t\t\tcpx = +args[i + 2] + x;\n\t\t\t\t\t\tcpy = +args[i + 3] + y;\n\t\t\t\t\t\tx += +args[i + 4];\n\t\t\t\t\t\ty += +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"S\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i];\n\t\t\t\t\t\tcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"s\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i] + x;\n\t\t\t\t\t\tcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i];\n\t\t\t\t\t\tqcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i] + x;\n\t\t\t\t\t\tqcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"T\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"t\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"A\":\n\t\t\t\tcase \"a\":\n\t\t\t\t\tconst relative = (name === \"a\");\n\n\t\t\t\t\tsplitArcFlags(args);\n\t\t\t\t\tcheckEvenArgs(name, args.length, 7);\n\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 7) {\n\t\t\t\t\t\tlet cx = +args[i + 5];\n\t\t\t\t\t\tlet cy = +args[i + 6];\n\n\t\t\t\t\t\tif (relative) {\n\t\t\t\t\t\t\tcx += x;\n\t\t\t\t\t\t\tcy += y;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst bs = arcToBezier({\n\t\t\t\t\t\t\tpx: x,\n\t\t\t\t\t\t\tpy: y,\n\t\t\t\t\t\t\trx: +args[i],\n\t\t\t\t\t\t\try: +args[i + 1],\n\t\t\t\t\t\t\txAxisRotation: +args[i + 2],\n\t\t\t\t\t\t\tlargeArcFlag: assertBinary(+args[i + 3]),\n\t\t\t\t\t\t\tsweepFlag: assertBinary(+args[i + 4]),\n\t\t\t\t\t\t\tcx,\n\t\t\t\t\t\t\tcy,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$array.each(bs, (b) => {\n\t\t\t\t\t\t\tthis.bezierCurveTo(b.x1, b.y1, b.x2, b.y2, b.x, b.y);\n\t\t\t\t\t\t\tx = b.x;\n\t\t\t\t\t\t\ty = b.y;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"z\":\n\t\t\t\t\tcheckArgs(name, args.length, 0);\n\t\t\t\t\tthis.closePath();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpublic _runPath(context: CanvasRenderingContext2D): void {\n\t\tcontext.beginPath();\n\n\t\t$array.each(this._operations, (op) => {\n\t\t\top.path(context);\n\t\t});\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\tconst layerDirty = layer.dirty;\n\t\tconst interactive = this._isInteractive();\n\n\t\tif (layerDirty || interactive) {\n\n\t\t\tconst context = layer.context;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\tif (layerDirty) {\n\t\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\t\tcontext.beginPath();\n\t\t\t}\n\n\t\t\tlet color: string | undefined;\n\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.beginPath();\n\t\t\t\tcolor = this._getColorId();\n\t\t\t}\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\tif (layerDirty) {\n\t\t\t\t\top.path(context);\n\t\t\t\t\top.colorize(context, undefined);\n\t\t\t\t}\n\n\t\t\t\tif (interactive) {\n\t\t\t\t\top.path(ghostContext);\n\t\t\t\t\top.colorize(ghostContext, color);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic renderDetached(context: CanvasRenderingContext2D): void {\n\t\tif (this.visible) {\n\t\t\tthis._setMatrix();\n\n\t\t\tcontext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t\tmask._transform(context, 1);\n\t\t\t\tmask._runPath(context);\n\t\t\t\tcontext.clip();\n\t\t\t}\n\n\t\t\t// TODO handle compoundAlpha somehow ?\n\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\tthis._transform(context, 1);\n\n\t\t\tif (this.filter) {\n\t\t\t\tcontext.filter = this.filter;\n\t\t\t}\n\n\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\tcontext.beginPath();\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.path(context);\n\t\t\t\top.colorize(context, undefined);\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.addBounds(bounds);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface ILineChunk {\n\tstyle: string | undefined,\n\tfill: Color | undefined,\n\ttext: string,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\tascent: number,\n\toffsetX: number,\n\toffsetY: number,\n\ttextDecoration: string | undefined,\n\tverticalAlign?: \"baseline\" | \"sub\" | \"super\"\n}\n\n/**\n * @ignore\n */\ninterface ILine {\n\toffsetY: number,\n\tascent: number,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\ttextChunks: Array<ILineChunk>,\n}\n\n/**\n * @ignore\n */\nexport class CanvasText extends CanvasDisplayObject implements IText {\n\tpublic text: string;\n\tpublic style: CanvasTextStyle;\n\tpublic resolution: number = 1;\n\n\tprotected _textInfo: Array<ILine> | undefined;\n\tprotected _textVisible: boolean = true;\n\tprotected _originalScale?: number = 1;\n\n\tconstructor(renderer: CanvasRenderer, text: string, style: CanvasTextStyle) {\n\t\tsuper(renderer);\n\t\tthis.text = text;\n\t\tthis.style = style;\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tsuper.invalidateBounds();\n\t\tthis._textInfo = undefined;\n\t}\n\n\tprivate _shared(context: CanvasRenderingContext2D) {\n\t\tif (this.style.textAlign) {\n\t\t\tcontext.textAlign = this.style.textAlign;\n\t\t}\n\n\t\tif (this.style.direction) {\n\t\t\tcontext.direction = this.style.direction;\n\t\t}\n\n\t\tif (this.style.textBaseline) {\n\t\t\tcontext.textBaseline = this.style.textBaseline;\n\t\t}\n\n\t}\n\n\tprotected _prerender(layer: CanvasLayer, ignoreGhost = false, ignoreFontWeight = false): void {\n\t\tsuper._render(layer);\n\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t// Font style\n\n\t\tconst style = this.style;\n\t\tlet fontStyle = this._getFontStyle(undefined, ignoreFontWeight);\n\n\t\tcontext.font = fontStyle;\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.font = fontStyle;\n\t\t}\n\n\t\t// Other parameters\n\t\tif (style.fill) {\n\t\t\tif (style.fill instanceof Color) {\n\t\t\t\tcontext.fillStyle = style.fill.toCSS();\n\t\t\t} else {\n\t\t\t\tcontext.fillStyle = style.fill;\n\t\t\t}\n\t\t}\n\n\t\tif (style.shadowColor) {\n\t\t\tlayer.context.shadowColor = style.shadowColor.toCSS(style.shadowOpacity || 1);\n\t\t}\n\t\tif (style.shadowBlur) {\n\t\t\tlayer.context.shadowBlur = style.shadowBlur;\n\t\t}\n\t\tif (style.shadowOffsetX) {\n\t\t\tlayer.context.shadowOffsetX = style.shadowOffsetX;\n\t\t}\n\t\tif (style.shadowOffsetY) {\n\t\t\tlayer.context.shadowOffsetY = style.shadowOffsetY;\n\t\t}\n\n\t\tthis._shared(context);\n\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.fillStyle = this._getColorId();\n\t\t\tthis._shared(ghostContext);\n\t\t}\n\t}\n\n\tprotected _getFontStyle(style2?: ITextStyle, ignoreFontWeight = false): string {\n\n\t\t// Process defaults\n\t\tconst style = this.style;\n\t\tlet fontStyle: string[] = [];\n\n\t\tif (style2 && style2.fontVariant) {\n\t\t\tfontStyle.push(style2.fontVariant);\n\t\t}\n\t\telse if (style.fontVariant) {\n\t\t\tfontStyle.push(style.fontVariant);\n\t\t}\n\n\t\tif (!ignoreFontWeight) {\n\t\t\tif (style2 && style2.fontWeight) {\n\t\t\t\tfontStyle.push(style2.fontWeight);\n\t\t\t}\n\t\t\telse if (style.fontWeight) {\n\t\t\t\tfontStyle.push(style.fontWeight);\n\t\t\t}\n\t\t}\n\n\t\tif (style2 && style2.fontStyle) {\n\t\t\tfontStyle.push(style2.fontStyle);\n\t\t}\n\t\telse if (style.fontStyle) {\n\t\t\tfontStyle.push(style.fontStyle);\n\t\t}\n\n\t\tif (style2 && style2.fontSize) {\n\t\t\tif ($type.isNumber(style2.fontSize)) {\n\t\t\t\tstyle2.fontSize = style2.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style2.fontSize);\n\t\t}\n\t\telse if (style.fontSize) {\n\t\t\tif ($type.isNumber(style.fontSize)) {\n\t\t\t\tstyle.fontSize = style.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style.fontSize);\n\t\t}\n\n\t\tif (style2 && style2.fontFamily) {\n\t\t\tfontStyle.push(style2.fontFamily);\n\t\t}\n\t\telse if (style.fontFamily) {\n\t\t\tfontStyle.push(style.fontFamily);\n\t\t}\n\t\telse if (fontStyle.length) {\n\t\t\tfontStyle.push(\"Arial\");\n\t\t}\n\n\t\treturn fontStyle.join(\" \");\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t// We need measurements in order to properly position text for alignment\n\t\tif (!this._textInfo) {\n\t\t\tthis._measure(layer);\n\t\t}\n\n\t\tif (this._textVisible) {\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\tcontext.save();\n\t\t\tghostContext.save();\n\t\t\tthis._prerender(layer);\n\n\t\t\t// const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\t\t// const x = this._localBounds && (this._localBounds.left < 0) ? Math.abs(this._localBounds.left) : 0;\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (this._isInteractive()) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw text\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw underline\n\t\t\t\t\tif (chunk.textDecoration == \"underline\" || chunk.textDecoration == \"line-through\") {\n\n\t\t\t\t\t\tlet thickness = 1;\n\t\t\t\t\t\tlet offset = 1;\n\t\t\t\t\t\tlet fontSize = chunk.height;\n\n\t\t\t\t\t\tlet offsetX = chunk.offsetX;\n\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width / 2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\t\tconst format = TextFormatter.getTextStyle(chunk.style);\n\t\t\t\t\t\t\tswitch (format.fontWeight) {\n\t\t\t\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\t\t\t\tcase \"bold\":\n\t\t\t\t\t\t\t\tcase \"700\":\n\t\t\t\t\t\t\t\tcase \"800\":\n\t\t\t\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\t\t\t\tthickness = 2;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fontSize) {\n\t\t\t\t\t\t\toffset = fontSize / 20;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet y: number;\n\n\t\t\t\t\t\tif (chunk.textDecoration == \"line-through\") {\n\t\t\t\t\t\t\ty = thickness + line.offsetY + chunk.offsetY - chunk.height / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ty = thickness + offset * 1.5 + line.offsetY + chunk.offsetY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.beginPath();\n\t\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\t\tcontext.strokeStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style.fill && this.style.fill instanceof Color) {\n\t\t\t\t\t\t\tcontext.strokeStyle = this.style.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontext.lineWidth = thickness * offset;\n\t\t\t\t\t\tcontext.moveTo(offsetX, y);\n\t\t\t\t\t\tcontext.lineTo(offsetX + chunk.width, y);\n\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (interactive && this.interactive) {\n\t\t\t\t\t\t// Draw text in ghost canvas ONLY if it is set as interactive\n\t\t\t\t\t\t// explicitly. This way we avoid hit test anomalies caused by anti\n\t\t\t\t\t\t// aliasing of text.\n\t\t\t\t\t\tghostContext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t//if (this._textVisible) {\n\t\t\tconst x = this._measure(this.getLayer());\n\t\t\tsetPoint(bounds, { x: x.left, y: x.top });\n\t\t\tsetPoint(bounds, { x: x.right, y: x.bottom });\n\t\t\t//}\n\t\t}\n\t}\n\n\tprotected _ignoreFontWeight(): boolean {\n\t\treturn /apple/i.test(navigator.vendor);\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostContext;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\t// Reset text info\n\t\tthis._textInfo = [];\n\n\t\t// Init\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true, this._ignoreFontWeight());\n\n\t\t// Get default font metrix\n\t\tconst refText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \";\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet minX = 0;\n\t\tlet maxX = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\tlet currentStyle: string | undefined;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks: ITextChunk[];\n\t\t\tif (line == \"\") {\n\t\t\t\tchunks = [{\n\t\t\t\t\ttype: \"value\",\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\t\t\t}\n\n\t\t\twhile (chunks.length > 0) {\n\n\t\t\t\t// Init line object\n\t\t\t\tlet lineInfo: ILine = {\n\t\t\t\t\toffsetY: offsetY,\n\t\t\t\t\tascent: 0,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttextChunks: []\n\t\t\t\t};\n\n\t\t\t\t// Measure reference text\n\t\t\t\tconst metrics = this._measureText(refText, context);\n\n\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\tlineInfo.height = height;\n\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\n\t\t\t\tlet currentFormat: string;\n\t\t\t\tlet currentDecoration: string | undefined = this.style.textDecoration;\n\t\t\t\tlet currentFill: Color | undefined;\n\t\t\t\tlet currentChunkWidth: number | undefined;\n\t\t\t\tlet skipFurtherText = false;\n\t\t\t\tlet firstTextChunk = true;\n\t\t\t\tlet leftoverChunks: Array<ITextChunk> = [];\n\t\t\t\tlet currentVerticalAlign: \"baseline\" | \"sub\" | \"super\" | undefined;\n\t\t\t\t//let offsetX = 0;\n\t\t\t\t//let chunk;\n\n\t\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t\t$array.eachContinue(chunks, (chunk, index) => {\n\n\t\t\t\t\t// Format chunk\n\t\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t\t\tcurrentDecoration = this.style.textDecoration;\n\t\t\t\t\t\t\tcurrentVerticalAlign = undefined\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t\tif (format.textDecoration) {\n\t\t\t\t\t\t\t\tcurrentDecoration = format.textDecoration;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.verticalAlign) {\n\t\t\t\t\t\t\t\tcurrentVerticalAlign = format.verticalAlign;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyleRestored = false;\n\n\t\t\t\t\t\t\t// Measure reference text after change of format\n\t\t\t\t\t\t\tconst metrics = this._measureText(refText, context);\n\t\t\t\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\t\tif (height > lineInfo.height) {\n\t\t\t\t\t\t\t\tlineInfo.height = height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Text chunk\n\t\t\t\t\telse if (chunk.type == \"value\" && !skipFurtherText) {\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(chunk.text, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t// Check for fit\n\t\t\t\t\t\tif (truncate) {\n\n\t\t\t\t\t\t\t// Break words?\n\t\t\t\t\t\t\tlet breakWords = firstTextChunk || this.style.breakWords || false;\n\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\t\t\t\t\t\tconst ellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width - ellipsisWidth;\n\t\t\t\t\t\t\t\tchunk.text = this._truncateText(context, chunk.text, excessWidth, breakWords);\n\t\t\t\t\t\t\t\tchunk.text += ellipsis;\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (wrap) {\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width;\n\t\t\t\t\t\t\t\tconst tmpText = this._truncateText(\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tchunk.text,\n\t\t\t\t\t\t\t\t\texcessWidth,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t(firstTextChunk && this.style.oversizedBehavior != \"wrap-no-break\")\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (tmpText == \"\") {\n\t\t\t\t\t\t\t\t\t// Unable to fit a single letter - hide the whole label\n\t\t\t\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//skipFurtherText = true;\n\n\t\t\t\t\t\t\t\t//Add remaining chunks for the next line\n\t\t\t\t\t\t\t\tleftoverChunks = chunks.slice(index + 1);\n\n\t\t\t\t\t\t\t\t//Add remaining text of current chunk if it was forced-cut\n\t\t\t\t\t\t\t\tif ($utils.trim(tmpText) != $utils.trim(chunk.text)) {\n\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\ttype: \"value\",\n\t\t\t\t\t\t\t\t\t\ttext: chunk.text.substr(tmpText.length)\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (currentFormat) {\n\t\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"format\",\n\t\t\t\t\t\t\t\t\t\t\ttext: currentFormat\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Set current chunk (truncated)\n\t\t\t\t\t\t\t\tchunk.text = $utils.trim(tmpText);\n\n\t\t\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tlet leftBoundMod = 1;\n\t\t\t\t\t\tlet rightBoundMod = 1;\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\t// increase horizontal bounding boxes accordingly\n\t\t\t\t\t\t\tconst boundsMod = chunkWidth / currentChunkWidth\n\t\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\n\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft / leftBoundMod;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight / rightBoundMod;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: chunk.text,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: 0,\n\t\t\t\t\t\t\ttextDecoration: currentDecoration,\n\t\t\t\t\t\t\tverticalAlign: currentVerticalAlign\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//offsetX += chunkWidth;\n\n\t\t\t\t\t\tfirstTextChunk = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftoverChunks) {\n\t\t\t\t\t\t//return false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\t//}\n\t\t\t\t});\n\n\t\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight.value;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight || 1.2;\n\t\t\t\t}\n\n\t\t\t\tif (minX < lineInfo.left) {\n\t\t\t\t\tminX = lineInfo.left;\n\t\t\t\t}\n\n\t\t\t\tif (maxX < lineInfo.right) {\n\t\t\t\t\tmaxX = lineInfo.right;\n\t\t\t\t}\n\n\t\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\t\toffsetY += lineInfo.height;\n\n\t\t\t\t// Reset chunks so that it can proceed to the next line\n\t\t\t\tchunks = leftoverChunks || [];\n\t\t\t}\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo, _index: number) => {\n\t\t\tlet currentChunkOffset = 0\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetX = currentChunkOffset + chunk.left - lineInfo.left;\n\t\t\t\tchunk.offsetY += lineInfo.height - lineInfo.height * (this.style.baselineRatio || 0.19);\n\t\t\t\tcurrentChunkOffset += chunk.width;\n\n\t\t\t\tif (chunk.verticalAlign) {\n\t\t\t\t\tswitch (chunk.verticalAlign) {\n\t\t\t\t\t\tcase \"super\":\n\t\t\t\t\t\t\tchunk.offsetY -= lineInfo.height / 2 - chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sub\":\n\t\t\t\t\t\t\tchunk.offsetY += chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tconst bounds = {\n\t\t\tleft: rtl ? -maxX : -minX,\n\t\t\ttop: 0,\n\t\t\tright: rtl ? minX : maxX,\n\t\t\tbottom: offsetY,\n\t\t};\n\n\n\t\t// We need to fit?\n\t\tif (oversizedBehavior !== \"none\") {\n\t\t\tconst ratio = this._fitRatio(bounds);\n\t\t\tif (ratio < 1) {\n\t\t\t\tif (oversizedBehavior == \"fit\") {\n\t\t\t\t\tif ($type.isNumber(this.style.minScale) && (ratio < this.style.minScale)) {\n\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!this._originalScale || this._originalScale == 1) {\n\t\t\t\t\t\t\tthis._originalScale = this.scale;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.scale = ratio;\n\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (oversizedBehavior == \"hide\") {\n\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t}\n\t\t\t\telse {\n\n\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth;\n\t\t\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth / 2;\n\t\t\t\t\t\t\tbounds.right = maxWidth / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\t\t\tbounds.right = maxWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\t\tthis._originalScale = undefined;\n\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\tthis._originalScale = undefined;\n\t\t\t\tthis._textVisible = true;\n\t\t\t}\n\t\t}\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn bounds;\n\t}\n\n\tprotected _fitRatio(bounds: IBounds): number {\n\t\tconst maxW = this.style.maxWidth;\n\t\tconst maxH = this.style.maxHeight;\n\t\tif (!$type.isNumber(maxW) && !$type.isNumber(maxH)) {\n\t\t\treturn 1;\n\t\t}\n\t\tconst w = bounds.right - bounds.left;\n\t\tconst h = bounds.bottom - bounds.top;\n\t\treturn Math.min(maxW! / w || 1, maxH! / h || 1);\n\t}\n\n\tprotected _truncateText(context: CanvasRenderingContext2D, text: string, maxWidth: number, breakWords: boolean = false, fallbackBreakWords: boolean = true): string {\n\t\tlet width: number;\n\t\tdo {\n\t\t\tif (breakWords) {\n\t\t\t\ttext = text.slice(0, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet tmp = text.replace(/[^,;:!?\\\\\\/\\s]+[,;:!?\\\\\\/\\s]*$/g, \"\");\n\t\t\t\tif (tmp == \"\" && fallbackBreakWords) {\n\t\t\t\t\tbreakWords = true;\n\t\t\t\t}\n\t\t\t\telse if (tmp == \"\") {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst metrics = this._measureText(text, context);\n\t\t\twidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\t\t} while ((width > maxWidth) && text != \"\");\n\t\treturn text;\n\t}\n\n\tprotected _measureText(text: string, context: CanvasRenderingContext2D): TextMetrics {\n\t\tlet metrics = context.measureText(text);\n\t\tlet fakeMetrics: any = {};\n\t\tif (metrics.actualBoundingBoxAscent == null) {\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tdiv.innerText = text;\n\t\t\tdiv.style.visibility = \"hidden\";\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tdiv.style.top = \"-1000000px;\"\n\t\t\tdiv.style.fontFamily = this.style.fontFamily || \"\";\n\t\t\tdiv.style.fontSize = this.style.fontSize + \"\";\n\t\t\tdocument.body.appendChild(div);\n\t\t\tconst bbox = div.getBoundingClientRect();\n\t\t\tdocument.body.removeChild(div);\n\t\t\tconst h = bbox.height;\n\t\t\tconst w = metrics.width;\n\t\t\tlet left = 0;\n\t\t\tlet right = w;\n\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: h,\n\t\t\t\tactualBoundingBoxDescent: 0,\n\t\t\t\tactualBoundingBoxLeft: left,\n\t\t\t\tactualBoundingBoxRight: right,\n\t\t\t\tfontBoundingBoxAscent: h,\n\t\t\t\tfontBoundingBoxDescent: 0,\n\t\t\t\twidth: w\n\t\t\t}\n\t\t\t//return fake;\n\t\t}\n\t\telse {\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tactualBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\tactualBoundingBoxLeft: metrics.actualBoundingBoxLeft,\n\t\t\t\tactualBoundingBoxRight: metrics.actualBoundingBoxRight,\n\t\t\t\tfontBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tfontBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\twidth: metrics.width\n\t\t\t}\n\t\t}\n\n\t\tconst w = metrics.width;\n\t\tswitch (this.style.textAlign) {\n\t\t\tcase \"right\":\n\t\t\tcase \"end\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w / 2;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w / 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = 0;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w;\n\t\t}\n\n\t\treturn fakeMetrics;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasTextStyle implements ITextStyle {\n\t//public wordWrapWidth: number = 100;\n\tpublic fill?: Color | CanvasGradient | CanvasPattern;\n\tpublic textAlign?: \"start\" | \"end\" | \"left\" | \"right\" | \"center\";\n\tpublic fontFamily?: string;\n\tpublic fontSize?: string | number;\n\tpublic fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'\n\tpublic fontStyle?: 'normal' | 'italic' | 'oblique';\n\tpublic fontVariant?: \"normal\" | \"small-caps\";\n\tpublic textDecoration?: \"underline\" | \"line-through\";\n\tpublic shadowColor?: Color | null;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\t// leading?: number;\n\t// letterSpacing?: number;\n\tpublic lineHeight?: number | Percent = percent(120);\n\tpublic baselineRatio?: number = 0.19;\n\t// padding?: number;\n\t// stroke?: number;\n\t// strokeThickness?: number;\n\t// trim?: number;\n\t// wordWrap?: boolean;\n\tpublic direction?: \"ltr\" | \"rtl\";\n\tpublic textBaseline?: \"top\" | \"hanging\" | \"middle\" | \"alphabetic\" | \"ideographic\" | \"bottom\";\n\tpublic oversizedBehavior?: \"none\" | \"hide\" | \"fit\" | \"wrap\" | \"wrap-no-break\" | \"truncate\" = \"none\";\n\tpublic breakWords?: boolean = false;\n\tpublic ellipsis?: string = \"…\";\n\tpublic maxWidth?: number;\n\tpublic maxHeight?: number;\n\tpublic minScale?: number;\n\tpublic ignoreFormatting?: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRadialText extends CanvasText implements IRadialText {\n\tpublic textType?: \"regular\" | \"circular\" | \"radial\" | \"aligned\" | \"adjusted\" = \"circular\";\n\tpublic radius?: number;\n\tpublic startAngle?: number;\n\tpublic inside?: boolean = false;\n\tpublic orientation?: \"inward\" | \"outward\" | \"auto\" = \"auto\";\n\tpublic kerning?: number = 0;\n\n\tprivate _textReversed: boolean = false;\n\n\tpublic _render(parentLayer: CanvasLayer): void {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\tthis._renderCircular(parentLayer);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsuper._render(parentLayer);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpublic _renderCircular(parentLayer: CanvasLayer): void {\n\t\tif (this._textVisible) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tthis._prerender(layer);\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostContext;\n\n\t\t\t// Savepoint\n\t\t\tcontext.save();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.save();\n\t\t\t}\n\n\t\t\t// Init\n\t\t\tlet radius = (this.radius || 0);\n\t\t\tlet startAngle = (this.startAngle || 0);\n\t\t\tlet deltaAngle = 0;\n\t\t\tlet orientation = this.orientation;\n\t\t\tlet inward = orientation == \"auto\" ? \"auto\" : orientation == \"inward\";\n\t\t\tconst inside = this.inside;\n\t\t\tconst align = this.style.textAlign || \"left\";\n\t\t\tconst kerning = this.kerning || 0;\n\t\t\tlet clockwise = align == \"left\" ? 1 : -1;\n\t\t\tconst shouldReverse = !this._textReversed;\n\n\t\t\t// We need measurements in order to properly position text for alignment\n\t\t\tif (!this._textInfo) {\n\t\t\t\tthis._measure(layer);\n\t\t\t}\n\n\t\t\t// Check if we need to invert the whole stuff\n\t\t\tif (inward == \"auto\") {\n\t\t\t\t// Calc max angle so we know whether we need to flip it\n\t\t\t\tlet maxAngle = 0;\n\t\t\t\tlet midAngle = 0;\n\t\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t\tconst deltaAngle = startAngle + (line.width / (radius - line.height)) / 2 * -clockwise;\n\t\t\t\t\tif (deltaAngle > maxAngle) {\n\t\t\t\t\t\tmaxAngle = deltaAngle;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (align == \"left\") {\n\t\t\t\t\tmidAngle = (maxAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse if (align == \"right\") {\n\t\t\t\t\tmidAngle = (maxAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmidAngle = startAngle * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\tmidAngle = $math.normalizeAngle(midAngle);\n\t\t\t\tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t}\n\n\t\t\tif (inward == true && shouldReverse) {\n\t\t\t\tthis._textInfo!.reverse();\n\t\t\t\tthis._textReversed = true;\n\t\t\t}\n\n\t\t\t// if ((inward == false && align == \"left\") || (inward == true && align == \"right\")) {\n\t\t\t// \tclockwise *= -1;\n\t\t\t// }\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\n\t\t\t\tconst textHeight = line.height;\n\n\t\t\t\t// Adjust radius (for `inside = false`)\n\t\t\t\t// Radius adjustment for `inside = false` is below the line calculation\n\t\t\t\tif (!inside) {\n\t\t\t\t\tradius += textHeight;\n\t\t\t\t}\n\n\t\t\t\t// Reverse letters if we're painting them counter-clockwise\n\t\t\t\tif (((clockwise == -1 && inward) || (clockwise == 1 && !inward)) && shouldReverse) {\n\t\t\t\t\tline.textChunks.reverse();\n\t\t\t\t}\n\n\t\t\t\t// Init angles\n\t\t\t\tlet lineStartAngle = startAngle;\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t\t// Adjust for center-align\n\t\t\t\tif (align == \"center\") {\n\t\t\t\t\tlineStartAngle += (line.width / (radius - textHeight)) / 2 * -clockwise;\n\t\t\t\t\tdeltaAngle = lineStartAngle - startAngle;\n\t\t\t\t}\n\n\t\t\t\t// if (inward == \"auto\") {\n\t\t\t\t// \tlet midAngle;\n\t\t\t\t// \tif (align == \"left\") {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \telse if () {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t\t// }\n\n\t\t\t\t// Rotate letters if they are facing outward\n\t\t\t\tlineStartAngle += (Math.PI * (inward ? 0 : 1)); // Rotate 180 if outward\n\n\t\t\t\t// Savepoint\n\t\t\t\tcontext.save();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.save();\n\t\t\t\t}\n\n\t\t\t\t// Assume starting angle\n\t\t\t\tcontext.rotate(lineStartAngle);\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.rotate(lineStartAngle);\n\t\t\t\t}\n\n\t\t\t\tlet angleShift = 0;\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Draw the letter\n\t\t\t\t\tconst char = chunk.text;\n\t\t\t\t\tconst charWidth = chunk.width;\n\n\t\t\t\t\t// Rotate half a letter\n\t\t\t\t\tangleShift = (charWidth / 2) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Center letters\n\t\t\t\t\tcontext.textBaseline = \"middle\";\n\t\t\t\t\tcontext.textAlign = \"center\";\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.textBaseline = \"middle\";\n\t\t\t\t\t\tghostContext.textAlign = \"center\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Plop the letter\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Rotate half a letter and add spacing\n\t\t\t\t\tangleShift = (charWidth / 2 + kerning) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t// Restore angle\n\t\t\t\tcontext.restore();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.restore();\n\t\t\t\t}\n\n\t\t\t\t// Adjust radius (for `inside = true`)\n\t\t\t\tif (inside) {\n\t\t\t\t\tradius -= textHeight;\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t// Restore\n\t\t\tcontext.restore();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.restore();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\treturn this._measureCircular(layer);\n\t\t\tdefault:\n\t\t\t\treturn super._measure(layer);\n\t\t}\n\t}\n\n\tpublic _measureCircular(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostContext;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\tlet ellipsisMetrics: TextMetrics;\n\t\t//const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\n\t\t// Reset text info\n\t\tthis._textVisible = true;\n\t\tthis._textInfo = [];\n\t\tthis._textReversed = false;\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true);\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet totalWidth = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\n\t\t\t// Init line object\n\t\t\tlet lineInfo: ILine = {\n\t\t\t\toffsetY: offsetY,\n\t\t\t\tascent: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttextChunks: []\n\t\t\t};\n\n\t\t\tlet currentStyle: string | undefined;\n\t\t\tlet currentFill: Color | undefined;\n\t\t\tlet currentChunkWidth: number | undefined;\n\n\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t$array.each(chunks, (chunk, _index) => {\n\n\t\t\t\t// Format chunk\n\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyleRestored = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Text format\n\t\t\t\telse if (chunk.type == \"value\") {\n\n\t\t\t\t\t// Measure each letter\n\t\t\t\t\tconst chars = chunk.text.match(/./ug) || [];\n\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\tchars.reverse();\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < chars.length; i++) {\n\n\t\t\t\t\t\tconst char = chars[i];\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(char, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.width;\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: char,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight + metrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\ttotalWidth += chunkWidth;\n\n\t\t\t\t\t\t// Handle oversized behavior\n\t\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tif (!ellipsisMetrics) {\n\t\t\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\ttotalWidth += ellipsisWidth;\n\t\t\t\t\t\t\tif ((totalWidth + ellipsisWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tif (lineInfo.textChunks.length == 1) {\n\t\t\t\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlineInfo.width += ellipsisWidth;\n\t\t\t\t\t\t\t\t\tlineInfo.left += ellipsisMetrics.actualBoundingBoxLeft;\n\t\t\t\t\t\t\t\t\tlineInfo.right += ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\t\t\t\ttext: ellipsis,\n\t\t\t\t\t\t\t\t\t\twidth: ellipsisWidth,\n\t\t\t\t\t\t\t\t\t\theight: chunkHeight + ellipsisMetrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\t\t\t\tleft: ellipsisMetrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\t\t\t\tright: ellipsisMetrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\t\t\t\tascent: ellipsisMetrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t}\n\n\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\toffsetY += lineInfo.height;\n\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\n\t\tif (oversizedBehavior == \"hide\" && (totalWidth > maxWidth)) {\n\t\t\tthis._textVisible = false;\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo) => {\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetY += Math.round((lineInfo.height - chunk.height + (lineInfo.ascent - chunk.ascent)) / 2);\n\t\t\t});\n\t\t});\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t};\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasImage extends CanvasDisplayObject implements IPicture {\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic image: HTMLImageElement | undefined;\n\tpublic tainted?: boolean;\n\n\tpublic shadowColor?: Color;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\n\tprotected _imageMask: HTMLCanvasElement | undefined;\n\n\tconstructor(renderer: CanvasRenderer, image: HTMLImageElement | undefined) {\n\t\tsuper(renderer);\n\t\tthis.image = image;\n\t}\n\n\tprotected _dispose(): void {\n\t\tsuper._dispose();\n\n\t\tif (this._imageMask) {\n\t\t\tclearCanvas(this._imageMask);\n\t\t}\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\n\t\t\tlet w = 0;\n\t\t\tlet h = 0;\n\n\t\t\tif (this.width) {\n\t\t\t\tw = this.width;\n\t\t\t}\n\t\t\tif (this.height) {\n\t\t\t\th = this.height;\n\t\t\t}\n\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: w,\n\t\t\t\tbottom: h\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tif (this.image) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tif (this.tainted === undefined) {\n\t\t\t\tthis.tainted = isTainted(this.image);\n\t\t\t\tlayer.tainted = true;\n\t\t\t}\n\n\t\t\tif (this.tainted && this._renderer._omitTainted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (layer.dirty) {\n\n\t\t\t\tif (this.shadowColor) {\n\t\t\t\t\tlayer.context.shadowColor = this.shadowColor.toCSS(this.shadowOpacity || 1);\n\t\t\t\t}\n\t\t\t\tif (this.shadowBlur) {\n\t\t\t\t\tlayer.context.shadowBlur = this.shadowBlur;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetX) {\n\t\t\t\t\tlayer.context.shadowOffsetX = this.shadowOffsetX;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetY) {\n\t\t\t\t\tlayer.context.shadowOffsetY = this.shadowOffsetY;\n\t\t\t\t}\n\n\t\t\t\t// TODO should this round ?\n\t\t\t\tconst width = this.width || this.image.naturalWidth;\n\t\t\t\tconst height = this.height || this.image.naturalHeight;\n\n\t\t\t\tlayer.context.drawImage(this.image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tif (this.interactive && this._isInteractive()) {\n\t\t\t\tconst mask = this._getMask(this.image);\n\n\t\t\t\tthis._renderer._ghostContext.drawImage(mask, 0, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tsuper.clear();\n\t\tthis.image = undefined;\n\t\tthis._imageMask = undefined;\n\t}\n\n\tprotected _getMask(image: HTMLImageElement): HTMLCanvasElement {\n\t\tif (this._imageMask === undefined) {\n\t\t\t// TODO should this round ?\n\t\t\tconst width = this.width || image.naturalWidth;\n\t\t\tconst height = this.height || image.naturalHeight;\n\n\t\t\t// We need to create a second canvas because destination-in clears out the entire canvas\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\t\tcontext.imageSmoothingEnabled = false;\n\n\t\t\tcontext.fillStyle = this._getColorId();\n\t\t\tcontext.fillRect(0, 0, width, height);\n\n\t\t\tif (!isTainted(image)) {\n\t\t\t\tcontext.globalCompositeOperation = \"destination-in\";\n\t\t\t\tcontext.drawImage(image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tthis._imageMask = canvas;\n\t\t}\n\n\t\treturn this._imageMask;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasRendererEvent<A> implements IRendererEvent<A> {\n\tpublic id: Id;\n\tpublic simulated: boolean = false;\n\tpublic native: boolean = true;\n\n\tconstructor(public event: A, public point: IPoint, public bbox: DOMRect) {\n\t\tif ($utils.supports(\"touchevents\") && event instanceof Touch) {\n\t\t\tthis.id = event.identifier;\n\n\t\t} else {\n\t\t\tthis.id = null;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface Event<Key extends keyof IRendererEvents> {\n\tobject: CanvasDisplayObject;\n\tcontext: unknown;\n\tcallback: (event: IRendererEvents[Key]) => void;\n\tdisposed: boolean;\n}\n\n/**\n * @ignore\n */\ninterface Events<Key extends keyof IRendererEvents> {\n\tdisposer: IDisposer;\n\tcallbacks: Array<Event<Key>>;\n\tdispatching: boolean;\n\tcleanup: boolean;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRenderer extends ArrayDisposer implements IRenderer, IDisposer {\n\tpublic view: HTMLElement = document.createElement(\"div\");\n\tprotected _layerDom: HTMLElement = document.createElement(\"div\");\n\n\tpublic layers: Array<CanvasLayer> = [];\n\tpublic _dirtyLayers: Array<CanvasLayer> = [];\n\tpublic defaultLayer: CanvasLayer = this.getLayer(0);\n\n\tprotected _ghostView: HTMLCanvasElement;\n\tpublic _ghostContext: CanvasRenderingContext2D;\n\n\tprotected _patternCanvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\tprotected _patternContext: CanvasRenderingContext2D = this._patternCanvas.getContext(\"2d\")!;\n\n\tprotected _width: number = 0;\n\tprotected _height: number = 0;\n\n\tprotected _clientWidth: number = 0;\n\tprotected _clientHeight: number = 0;\n\n\tpublic resolution: number;\n\tpublic interactionsEnabled: boolean = true;\n\n\tprotected _listeners: { [key: string]: CounterDisposer } = {};\n\tprotected _events: { [Key in keyof IRendererEvents]?: Events<Key> } = {};\n\n\tprotected _colorId: number = 0;\n\tprotected _colorMap: { [color: string]: CanvasDisplayObject } = {};\n\n\tpublic _forceInteractive: number = 0;\n\tpublic _omitTainted: boolean = false;\n\n\t// TODO this should store the Id as well\n\tpublic _hovering: Set<CanvasDisplayObject> = new Set();\n\tpublic _dragging: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\tpublic _mousedown: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\n\tprotected _lastPointerMoveEvent: { events: Array<IPointerEvent>, native: boolean } | undefined;\n\n\tpublic tapToActivate: boolean = false;\n\tpublic tapToActivateTimeout: number = 3000;\n\tpublic _touchActive: boolean = false;\n\tprotected _touchActiveTimeout?: number;\n\n\t/*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\n\t\tthis._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\n\t});\n\t*/\n\n\tconstructor(resolution?: number) {\n\t\tsuper();\n\n\t\tif (resolution == null) {\n\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t} else {\n\t\t\tthis.resolution = resolution;\n\t\t}\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.appendChild(this._layerDom);\n\n\t\tthis._disposers.push(new Disposer(() => {\n\t\t\t$object.each(this._events, (_key, events) => {\n\t\t\t\tevents.disposer.dispose();\n\t\t\t});\n\n\t\t\t$array.each(this.layers, (layer) => {\n\t\t\t\tclearCanvas(layer.view);\n\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tclearCanvas(layer.exportableView);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tclearCanvas(this._ghostView);\n\t\t\tclearCanvas(this._patternCanvas);\n\t\t}));\n\n\t\t// @todo : do the same for ghost\n\t\tthis._ghostView = document.createElement(\"canvas\");\n\t\tthis._ghostContext = this._ghostView.getContext(\"2d\", { alpha: false, willReadFrequently: true })! as CanvasRenderingContext2D;\n\t\tthis._ghostContext.imageSmoothingEnabled = false;\n\n\t\tthis._ghostView.style.position = \"absolute\";\n\t\tthis._ghostView.style.top = \"0px\";\n\t\tthis._ghostView.style.left = \"0px\";\n\n\t\tthis._disposers.push($utils.addEventListener(this._ghostView, \"click\", (originalEvent: MouseEvent) => {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\t\t\tconsole.debug(target);\n\t\t}));\n\n\t\t// Monitor for possible pixel ratio changes (when page is zoomed)\n\t\tthis._disposers.push($utils.onZoom(() => {\n\t\t\tif (resolution == null) {\n\t\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t\t}\n\t\t}));\n\n\t\t// We need this in order top prevent default touch gestures when dragging\n\t\t// draggable elements\n\t\tif ($utils.supports(\"touchevents\")) {\n\t\t\tconst listener = (ev: any) => {\n\t\t\t\tif (this._dragging.length !== 0) {\n\t\t\t\t\t$array.eachContinue(this._dragging, (item) => {\n\t\t\t\t\t\tif (item.value.shouldCancelTouch()) {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If touch down happends, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"touchstart\", listener, { passive: false }));\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchstart\", listener, { passive: false }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchmove\", () => {\n\t\t\t\t// If touch is moving, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"click\", (_ev: any) => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"click\", (_ev: any) => {\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tthis._touchActive = true;\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}, 100);\n\t\t\t}, { passive: true }));\n\n\t\t}\n\n\t\t// Prevent scrolling of the window when hovering on \"wheelable\" object\n\t\tif ($utils.supports(\"wheelevents\")) {\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"wheel\", (ev) => {\n\t\t\t\tlet prevent = false;\n\t\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\t\tif (obj.wheelable) {\n\t\t\t\t\t\tprevent = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (prevent) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}, { passive: false }));\n\t\t}\n\n\t}\n\n\tprotected _delayTouchDeactivate(): void {\n\t\tif (this._touchActiveTimeout) {\n\t\t\tclearTimeout(this._touchActiveTimeout);\n\t\t}\n\t\tif (this.tapToActivateTimeout > 0) {\n\t\t\tthis._touchActiveTimeout = window.setTimeout(() => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, this.tapToActivateTimeout);\n\t\t}\n\t}\n\n\tpublic get debugGhostView(): boolean {\n\t\treturn !!this._ghostView.parentNode;\n\t}\n\n\tpublic set debugGhostView(value: boolean) {\n\t\tif (value) {\n\t\t\tif (!this._ghostView.parentNode) {\n\t\t\t\tthis.view.appendChild(this._ghostView);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (this._ghostView.parentNode) {\n\t\t\t\tthis._ghostView.parentNode.removeChild(this._ghostView);\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateLinearGradient(x1: number, y1: number, x2: number, y2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createLinearGradient(x1, y1, x2, y2);\n\t}\n\n\tcreateRadialGradient(x1: number, y1: number, radius1: number, x2: number, y2: number, radius2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);\n\t}\n\n\tcreatePattern(graphics: CanvasGraphics, background: CanvasGraphics, repetition: string, width: number, height: number): CanvasPattern {\n\t\t// const patternCanvas = document.createElement(\"canvas\");\n\t\t// const patternContext = patternCanvas.getContext(\"2d\")!;\n\t\t// patternCanvas.width = width;\n\t\t// patternCanvas.height = height;\n\t\t// if (fill) {\n\t\t// \tpatternContext.fillStyle = fill.toCSS();\n\t\t// \tpatternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\n\t\t// }\n\n\t\t// const layer = {\n\t\t// \tview: patternCanvas,\n\t\t// \tcontext: patternContext,\n\t\t// \tvisible: true,\n\t\t// \torder: 0,\n\t\t// \twidth: width,\n\t\t// \theight: height,\n\t\t// \tdirty: true\n\t\t// };\n\n\t\t// // patternContext.arc(0, 0, 50, 0, .5 * Math.PI);\n\t\t// // patternContext.stroke();\n\n\t\t// image.targetLayer = layer;\n\t\t// image.render(layer);\n\n\t\t//this._layerDom.appendChild(patternCanvas);\n\n\t\tthis._patternCanvas.width = width;\n\t\tthis._patternCanvas.height = height;\n\n\t\tthis._patternContext.clearRect(0, 0, width, height);\n\n\t\t// patternCanvas.style.width = width * this.resolution + \"px\";\n\t\t// patternCanvas.style.height = height * this.resolution + \"px\";\n\n\t\tbackground.renderDetached(this._patternContext);\n\t\tgraphics.renderDetached(this._patternContext);\n\n\t\treturn this._patternContext.createPattern(this._patternCanvas, repetition)!;\n\t}\n\n\tmakeContainer(): CanvasContainer {\n\t\treturn new CanvasContainer(this);\n\t}\n\n\tmakeGraphics(): CanvasGraphics {\n\t\treturn new CanvasGraphics(this);\n\t}\n\n\tmakeText(text: string, style: CanvasTextStyle): CanvasText {\n\t\treturn new CanvasText(this, text, style);\n\t}\n\n\tmakeTextStyle(): CanvasTextStyle {\n\t\treturn new CanvasTextStyle();\n\t}\n\n\tmakeRadialText(text: string, style: CanvasTextStyle): CanvasRadialText {\n\t\treturn new CanvasRadialText(this, text, style);\n\t}\n\n\tmakePicture(image: HTMLImageElement | undefined): CanvasImage {\n\t\treturn new CanvasImage(this, image);\n\t}\n\n\tresize(width: number, height: number): void {\n\t\tthis._clientWidth = width;\n\t\tthis._clientHeight = height;\n\t\tthis._width = Math.floor(width * this.resolution);\n\t\tthis._height = Math.floor(height * this.resolution);\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tlayer.dirty = true;\n\n\t\t\t\tif (layer.width != null) {\n\t\t\t\t\tlayer.view.width = layer.width;\n\t\t\t\t\tlayer.view.style.width = layer.width + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlayer.view.width = this._width;\n\t\t\t\t\tlayer.view.style.width = width + \"px\";\n\t\t\t\t}\n\n\t\t\t\tif (layer.height != null) {\n\t\t\t\t\tlayer.view.height = layer.height;\n\t\t\t\t\tlayer.view.style.height = layer.height + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlayer.view.height = this._height;\n\t\t\t\t\tlayer.view.style.height = height + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// @todo: do the same for ghost canvases\n\t\tthis._ghostView.width = this._width;\n\t\tthis._ghostView.height = this._height;\n\t\tthis._ghostView.style.width = width + \"px\";\n\t\tthis._ghostView.style.height = height + \"px\";\n\n\t\tthis.view.style.width = width + \"px\";\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tprivate createDetachedLayer(willReadFrequently: boolean = false): CanvasLayer {\n\t\tconst view = document.createElement(\"canvas\");\n\t\tconst context = view.getContext(\"2d\", { willReadFrequently: willReadFrequently })! as CanvasRenderingContext2D;\n\t\tconst layer = {\n\t\t\tview: view,\n\t\t\tcontext: context,\n\t\t\torder: 0,\n\t\t\tvisible: true,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tdirty: true,\n\t\t\ttainted: false\n\t\t};\n\n\t\tview.style.position = \"absolute\";\n\t\tview.style.top = \"0px\";\n\t\tview.style.left = \"0px\";\n\n\t\treturn layer;\n\t}\n\n\tgetLayerByOrder(order: number): CanvasLayer | undefined {\n\t\tconst layers = this.layers;\n\t\tconst length = layers.length;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst layer = layers[i];\n\t\t\tif (layer.order == order) {\n\t\t\t\treturn layer;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetLayer(order: number, visible: boolean = true): CanvasLayer {\n\t\tlet existingLayer = this.getLayerByOrder(order);\n\t\tif (existingLayer) {\n\t\t\treturn existingLayer;\n\t\t}\n\n\t\tconst layer = this.createDetachedLayer(order == 99);\n\t\tlayer.order = order;\n\t\tlayer.visible = visible;\n\n\t\tif (layer.visible && this._width) {\n\t\t\tlayer.view.width = this._width;\n\t\t\tlayer.view.style.width = this._clientWidth + \"px\";\n\t\t\tlayer.view.height = this._height;\n\t\t\tlayer.view.style.height = this._clientHeight + \"px\";\n\t\t}\n\n\t\tconst layers = this.layers;\n\n\t\tlayers.push(layer);\n\n\t\tlayers.sort((a, b) => {\n\t\t\tif (a.order > b.order) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a.order < b.order) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tconst length = layers.length;\n\t\tconst layerIndex = $array.indexOf(layers, layer);\n\t\tlet next;\n\n\t\tfor (let i = layerIndex + 1; i < length; i++) {\n\t\t\tif (layers[i].visible) {\n\t\t\t\tnext = layers[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (layer.visible) {\n\t\t\tif (next === undefined) {\n\t\t\t\tthis._layerDom.appendChild(layer.view);\n\n\t\t\t} else {\n\t\t\t\tthis._layerDom.insertBefore(layer.view, next.view);\n\t\t\t}\n\t\t}\n\n\t\treturn layer;\n\t}\n\n\trender(root: CanvasDisplayObject): void {\n\n\t\tthis._dirtyLayers.length = 0;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tif (layer.dirty && layer.visible) {\n\t\t\t\t\tconst context = layer.context;\n\n\t\t\t\t\tthis._dirtyLayers.push(layer);\n\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.clearRect(0, 0, this._width, this._height);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis._ghostContext.save();\n\t\t//this._ghostContext.clearRect(0, 0, this._width, this._height);\n\t\t//this._ghostContext.beginPath();\n\t\tthis._ghostContext.fillStyle = '#000';\n\t\tthis._ghostContext.fillRect(0, 0, this._width, this._height);\n\n\t\troot.render(this.defaultLayer);\n\n\t\tthis._ghostContext.restore();\n\n\t\t//setTimeout(() => {\n\n\t\t// Remove this after the Chrome bug is fixed:\n\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=1279394\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tconst context = layer.context;\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(0, 0);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t});\n\n\t\t$array.each(this._dirtyLayers, (layer) => {\n\t\t\tlayer.context.restore();\n\t\t\tlayer.dirty = false;\n\t\t});\n\t\t//}, 100)\n\n\t\tif (this._hovering.size && this._lastPointerMoveEvent) {\n\t\t\t//this._mouseMoveThrottler.run();\n\t\t\tconst native = this._lastPointerMoveEvent.native;\n\n\t\t\t$array.each(this._lastPointerMoveEvent.events, (event) => {\n\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t});\n\t\t}\n\t}\n\n\tpaintId(obj: CanvasDisplayObject): string {\n\t\tconst id = distributeId(++this._colorId);\n\t\tconst color = Color.fromHex(id).toCSS();\n\t\tthis._colorMap[color] = obj;\n\t\treturn color;\n\t}\n\n\t_removeObject(obj: CanvasDisplayObject): void {\n\t\tif (obj._colorId !== undefined) {\n\t\t\tdelete this._colorMap[obj._colorId];\n\t\t}\n\t}\n\n\t// protected _identifyObjectByColor(colorId: number): CanvasDisplayObject | undefined {\n\t// \treturn this._colorMap[colorId];\n\t// }\n\n\tpublic getEvent<A extends IPointerEvent>(originalEvent: A, adjustPoint: boolean = true): CanvasRendererEvent<A> {\n\t\tconst bbox: DOMRect = adjustPoint ? this.view.getBoundingClientRect() : new DOMRect(0, 0, 0, 0);\n\n\t\treturn new CanvasRendererEvent(\n\t\t\toriginalEvent,\n\t\t\t(originalEvent.clientX || originalEvent.clientY ? {\n\t\t\t\tx: originalEvent.clientX - (originalEvent.clientX ? bbox.left : 0),\n\t\t\t\ty: originalEvent.clientY - (originalEvent.clientY ? bbox.top : 0),\n\t\t\t} : {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}),\n\t\t\tbbox,\n\t\t);\n\t}\n\n\t_getHitTarget(point: IPoint, bbox: DOMRect): CanvasDisplayObject | undefined | false {\n\t\tif (bbox.width === 0 || bbox.height === 0 || point.x < 0 || point.x > bbox.width || point.y < 0 || point.y > bbox.height) {\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst pixel = this._ghostContext.getImageData(\n\t\t\t\t// TODO should this round ?\n\t\t\t\tMath.round((point.x / bbox.width) * this._width),\n\t\t\t\tMath.round((point.y / bbox.height) * this._height),\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t);\n\n\t\t\tif (pixel.data[0] === 0 && pixel.data[1] === 0 && pixel.data[2] === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst colorId = Color.fromRGB(pixel.data[0], pixel.data[1], pixel.data[2]).toCSS();\n\t\t\tconst hit = this._colorMap[colorId];\n\n\t\t\treturn hit;\n\t\t}\n\t}\n\n\t_withEvents<Key extends keyof IRendererEvents>(key: Key, f: (events: Events<Key>) => void): void {\n\t\tconst events = this._events[key] as Events<Key> | undefined;\n\n\t\tif (events !== undefined) {\n\t\t\tevents.dispatching = true;\n\n\t\t\ttry {\n\t\t\t\tf(events);\n\n\t\t\t} finally {\n\t\t\t\tevents.dispatching = false;\n\n\t\t\t\tif (events.cleanup) {\n\t\t\t\t\tevents.cleanup = false;\n\n\t\t\t\t\t$array.keepIf(events.callbacks, (callback) => {\n\t\t\t\t\t\treturn !callback.disposed;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (events.callbacks.length === 0) {\n\t\t\t\t\t\tevents.disposer.dispose();\n\t\t\t\t\t\tdelete this._events[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_dispatchEventAll<Key extends keyof IRendererEvents>(key: Key, event: IRendererEvents[Key]): void {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_dispatchEvent<Key extends keyof IRendererEvents>(key: Key, target: CanvasDisplayObject, event: IRendererEvents[Key]): boolean {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet dispatched = false;\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed && callback.object === target) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t\tdispatched = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn dispatched;\n\t}\n\n\t_dispatchMousedown(originalEvent: IPointerEvent): void {\n\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tif (button != 0 && button != 2 && button != 1 && button !== undefined) {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\n\t\tif (target) {\n\t\t\tconst id = event.id;\n\n\t\t\tlet dragged = false;\n\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tconst info = { id: id, value: obj };\n\n\t\t\t\tthis._mousedown.push(info);\n\n\t\t\t\tif (!dragged && this._dispatchEvent(\"pointerdown\", obj, event)) {\n\t\t\t\t\t// Only dispatch the first element which matches\n\t\t\t\t\tdragged = true;\n\n\t\t\t\t\tconst has = this._dragging.some((x) => {\n\t\t\t\t\t\treturn x.value === obj && x.id === id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!has) {\n\t\t\t\t\t\tthis._dragging.push(info);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchGlobalMousemove(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\t\tevent.native = native;\n\n\t\tif (target) {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (!obj.contains(target)) {\n\t\t\t\t\tthis._hovering.delete(obj);\n\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t\t}\n\t\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (event.native) {\n\t\t\t\teachTargets(target, (obj) => {\n\t\t\t\t\tif (!this._hovering.has(obj)) {\n\t\t\t\t\t\tthis._hovering.add(obj);\n\t\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t\tobj._replacedCursorStyle = $utils.getStyle(document.body, \"cursor\");\n\t\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj.cursorOverStyle);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._dispatchEvent(\"pointerover\", obj, event);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//} else if (target === false) {\n\t\t} else {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t}\n\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t});\n\n\t\t\tthis._hovering.clear();\n\t\t}\n\t\tthis._dispatchEventAll(\"globalpointermove\", event);\n\t}\n\n\t_dispatchGlobalMouseup(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tevent.native = native;\n\t\t//const target = this._getHitTarget(event.point);\n\t\tthis._dispatchEventAll(\"globalpointerup\", event);\n\t}\n\n\t_dispatchDragMove(originalEvent: IPointerEvent): void {\n\t\tif (this._dragging.length !== 0) {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst id = event.id;\n\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointermove\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchDragEnd(originalEvent: IPointerEvent): void {\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tlet clickevent: \"click\" | \"rightclick\" | \"middleclick\";\n\t\tif (button == 0 || button === undefined) {\n\t\t\tclickevent = \"click\";\n\t\t}\n\t\telse if (button == 2) {\n\t\t\tclickevent = \"rightclick\";\n\t\t}\n\t\telse if (button == 1) {\n\t\t\tclickevent = \"middleclick\";\n\t\t}\n\t\telse {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst id = event.id;\n\n\t\tif (this._mousedown.length !== 0) {\n\t\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\t\t\tif (target) {\n\t\t\t\tthis._mousedown.forEach((obj) => {\n\t\t\t\t\tif (obj.id === id && obj.value.contains(target)) {\n\t\t\t\t\t\tthis._dispatchEvent(clickevent, obj.value, event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._mousedown.length = 0;\n\t\t}\n\n\t\tif (this._dragging.length !== 0) {\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointerup\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._dragging.length = 0;\n\t\t}\n\t}\n\n\t_dispatchDoubleClick(originalEvent: IPointerEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"dblclick\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchWheel(originalEvent: WheelEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.point, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"wheel\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_makeSharedEvent(key: string, f: () => IDisposer): IDisposer {\n\t\tif (this._listeners[key] === undefined) {\n\t\t\tconst listener = f();\n\n\t\t\tthis._listeners[key] = new CounterDisposer(() => {\n\t\t\t\tdelete this._listeners[key];\n\t\t\t\tlistener.dispose();\n\t\t\t});\n\t\t}\n\n\t\treturn this._listeners[key].increment();\n\t}\n\n\t_onPointerEvent(name: string, f: (event: Array<IPointerEvent>, native: boolean) => void): IDisposer {\n\t\tlet native = false;\n\t\tlet timer: number | null = null;\n\n\t\tfunction clear() {\n\t\t\ttimer = null;\n\t\t\tnative = false;\n\t\t}\n\n\t\treturn new MultiDisposer([\n\t\t\tnew Disposer(() => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\tclear();\n\t\t\t}),\n\n\t\t\t$utils.addEventListener(this.view, $utils.getRendererEvent(name), (_) => {\n\t\t\t\tnative = true;\n\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\ttimer = window.setTimeout(clear, 0);\n\t\t\t}),\n\n\t\t\tonPointerEvent(window, name, (ev) => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = null;\n\t\t\t\t}\n\n\t\t\t\tf(ev, native);\n\n\t\t\t\tnative = false;\n\t\t\t}),\n\t\t]);\n\t}\n\n\t// This ensures that only a single DOM event is added (e.g. only a single mousemove event listener)\n\t_initEvent(key: keyof IRendererEvents): IDisposer | undefined {\n\t\tswitch (key) {\n\t\t\tcase \"globalpointermove\":\n\t\t\tcase \"pointerover\":\n\t\t\tcase \"pointerout\":\n\t\t\t\treturn this._makeSharedEvent(\"pointermove\", () => {\n\t\t\t\t\tconst listener = (events: Array<IPointerEvent>, native: boolean) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\treturn new MultiDisposer([\n\t\t\t\t\t\tthis._onPointerEvent(\"pointerdown\", listener),\n\t\t\t\t\t\tthis._onPointerEvent(\"pointermove\", listener),\n\t\t\t\t\t]);\n\t\t\t\t});\n\t\t\tcase \"globalpointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerup\", () => {\n\t\t\t\t\tvar mouseup = this._onPointerEvent(\"pointerup\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\tvar pointercancel = this._onPointerEvent(\"pointercancel\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"click\":\n\t\t\tcase \"rightclick\":\n\t\t\tcase \"middleclick\":\n\t\t\tcase \"pointerdown\":\n\t\t\t/*\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"pointerdown\", (event, native) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { event, native };\n\t\t\t\t\t\tthis._dispatchMousedown(event)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t*/\n\t\t\tcase \"pointermove\":\n\t\t\tcase \"pointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\t//const throttler = new Throttler();\n\n\t\t\t\t\tconst mousedown = onPointerEvent(this.view, \"pointerdown\", (events) => {\n\t\t\t\t\t\t$array.each(events, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchMousedown(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO handle throttling properly for multitouch\n\t\t\t\t\tconst mousemove = this._onPointerEvent(\"pointermove\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t//throttler.throttle(() => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragMove(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst mouseup = this._onPointerEvent(\"pointerup\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst pointercancel = this._onPointerEvent(\"pointercancel\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmousedown.dispose();\n\t\t\t\t\t\tmousemove.dispose();\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"dblclick\":\n\t\t\t\treturn this._makeSharedEvent(\"dblclick\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"dblclick\", (ev) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDoubleClick(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"wheel\":\n\t\t\t\treturn this._makeSharedEvent(\"wheel\", () => {\n\t\t\t\t\treturn $utils.addEventListener(window, $utils.getRendererEvent(\"wheel\"), (event: WheelEvent) => {\n\t\t\t\t\t\tthis._dispatchWheel(event);\n\t\t\t\t\t}, { passive: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_addEvent<C, Key extends keyof IRendererEvents>(object: CanvasDisplayObject, key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tlet events: Events<Key> | undefined = this._events[key] as any;\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._events[key] = {\n\t\t\t\tdisposer: this._initEvent(key)!,\n\t\t\t\tcallbacks: [],\n\t\t\t\tdispatching: false,\n\t\t\t\tcleanup: false,\n\t\t\t};\n\t\t}\n\n\t\tconst listener = { object, context, callback, disposed: false };\n\n\t\tevents!.callbacks.push(listener);\n\n\t\treturn new Disposer(() => {\n\t\t\tlistener.disposed = true;\n\n\t\t\tif (events!.dispatching) {\n\t\t\t\tevents!.cleanup = true;\n\n\t\t\t} else {\n\t\t\t\t$array.removeFirst(events!.callbacks, listener);\n\n\t\t\t\tif (events!.callbacks.length === 0) {\n\t\t\t\t\tevents!.disposer.dispose();\n\t\t\t\t\tdelete this._events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getCanvas(root: CanvasDisplayObject, options?: ICanvasOptions): HTMLCanvasElement {\n\n\t\t// Make sure everything is rendered\n\t\tthis.render(root);\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tlet scale: number = this.resolution;\n\n\t\t// Check if we need to scale\n\t\tif (options.minWidth && (options.minWidth > this._width)) {\n\t\t\tlet minScale = options.minWidth / this._width;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.minHeight && (options.minHeight > this._height)) {\n\t\t\tlet minScale = options.minHeight / this._height;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxWidth && (options.maxWidth < this._width)) {\n\t\t\tlet maxScale = options.maxWidth / this._width;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxHeight && (options.maxHeight > this._height)) {\n\t\t\tlet maxScale = options.maxHeight / this._height;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\t// Check if we need to compensate for pixel ratio\n\t\tif (options.maintainPixelRatio) {\n\t\t\tscale /= this.resolution;\n\t\t}\n\n\t\t// Init list canvases to remove from DOM after export\n\t\tconst canvases: HTMLCanvasElement[] = [];\n\n\t\t// Set up new canvas for export\n\t\tlet forceRender = false;\n\t\tlet canvasWidth = this._width;\n\t\tlet canvasHeight = this._height;\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tif (scale != this.resolution) {\n\t\t\tforceRender = true;\n\t\t\tcanvasWidth = this._width * scale / this.resolution;\n\t\t\tcanvasHeight = this._height * scale / this.resolution;\n\t\t}\n\n\t\tcanvas.width = canvasWidth;\n\t\tcanvas.height = canvasHeight;\n\n\t\t// Add to DOM so it inherits CSS\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis.view.appendChild(canvas);\n\t\tcanvases.push(canvas);\n\n\t\t// Context\n\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\tlet width = 0;\n\t\tlet height = 0;\n\t\tlet needRerender = false;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\t\t\t\tif (layer.tainted || forceRender) {\n\t\t\t\t\tneedRerender = true;\n\n\t\t\t\t\tlayer.exportableView = layer.view;\n\t\t\t\t\tlayer.exportableContext = layer.context;\n\n\t\t\t\t\tlayer.view = document.createElement(\"canvas\");\n\n\t\t\t\t\t// Add to DOM so it inherits CSS\n\t\t\t\t\tlayer.view.style.position = \"fixed\";\n\t\t\t\t\tlayer.view.style.top = \"-10000px\";\n\t\t\t\t\tthis.view.appendChild(layer.view);\n\t\t\t\t\tcanvases.push(layer.view);\n\n\t\t\t\t\tlayer.view.width = canvasWidth;\n\t\t\t\t\tlayer.view.height = canvasHeight;\n\n\t\t\t\t\tlayer.context = layer.view.getContext(\"2d\")!;\n\n\t\t\t\t\tlayer.dirty = true;\n\t\t\t\t\tlayer.scale = scale;\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (needRerender) {\n\t\t\tthis._omitTainted = true;\n\t\t\tthis.render(root);\n\t\t\tthis._omitTainted = false;\n\t\t}\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\n\t\t\t\t// Layer is fine. Just plop it into our target canvas\n\t\t\t\tcontext.drawImage(layer.view, 0, 0);\n\n\t\t\t\t// Restore layer original canvas\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tlayer.view = layer.exportableView;\n\t\t\t\t\tlayer.exportableView = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (layer.exportableContext) {\n\t\t\t\t\tlayer.context = layer.exportableContext;\n\t\t\t\t\tlayer.exportableContext = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (width < layer.view.clientWidth) {\n\t\t\t\t\twidth = layer.view.clientWidth;\n\t\t\t\t}\n\t\t\t\tif (height < layer.view.clientHeight) {\n\t\t\t\t\theight = layer.view.clientHeight;\n\t\t\t\t}\n\n\t\t\t\tlayer.scale = undefined;\n\t\t\t}\n\t\t});\n\n\t\tcanvas.style.width = width + \"px\";\n\t\tcanvas.style.height = height + \"px\";\n\n\t\t$array.each(canvases, (canvas) => {\n\t\t\tcanvas.style.position = \"\";\n\t\t\tcanvas.style.top = \"\";\n\t\t\tthis.view.removeChild(canvas);\n\t\t})\n\n\t\treturn canvas;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport interface CanvasLayer extends ILayer {\n\tview: HTMLCanvasElement;\n\tcontext: CanvasRenderingContext2D;\n\ttainted?: boolean;\n\texportableView?: HTMLCanvasElement;\n\texportableContext?: CanvasRenderingContext2D;\n\tscale?: number;\n}\n"]}