22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
44
5- import 'dart:html' as html;
65import 'dart:math' as math;
76import 'dart:typed_data' ;
87
@@ -46,17 +45,17 @@ import 'window.dart';
4645/// can be reused, [CanvasPool] will move canvas(s) from pool to reusablePool
4746/// to prevent reallocation.
4847class CanvasPool extends _SaveStackTracking {
49- html. CanvasRenderingContext2D ? _context;
48+ DomCanvasRenderingContext2D ? _context;
5049 ContextStateHandle ? _contextHandle;
5150 final int _widthInBitmapPixels, _heightInBitmapPixels;
5251 // List of canvases that have been allocated and used in this paint cycle.
53- List <html. CanvasElement >? _activeCanvasList;
52+ List <DomCanvasElement >? _activeCanvasList;
5453 // List of canvases available to reuse from prior paint cycle.
55- List <html. CanvasElement >? _reusablePool;
54+ List <DomCanvasElement >? _reusablePool;
5655 // Current canvas element or null if marked for lazy allocation.
57- html. CanvasElement ? _canvas;
56+ DomCanvasElement ? _canvas;
5857
59- html. HtmlElement ? _rootElement;
58+ DomHTMLElement ? _rootElement;
6059 int _saveContextCount = 0 ;
6160 final double _density;
6261
@@ -65,7 +64,7 @@ class CanvasPool extends _SaveStackTracking {
6564 this ._density);
6665
6766 /// Initializes canvas pool to be hosted on a surface.
68- void mount (html. HtmlElement rootElement) {
67+ void mount (DomHTMLElement rootElement) {
6968 _rootElement = rootElement;
7069 }
7170
@@ -78,8 +77,8 @@ class CanvasPool extends _SaveStackTracking {
7877 }
7978
8079 /// Returns [CanvasRenderingContext2D] api to draw into this canvas.
81- html. CanvasRenderingContext2D get context {
82- html. CanvasRenderingContext2D ? ctx = _context;
80+ DomCanvasRenderingContext2D get context {
81+ DomCanvasRenderingContext2D ? ctx = _context;
8382 if (ctx == null ) {
8483 _createCanvas ();
8584 ctx = _context! ;
@@ -128,7 +127,7 @@ class CanvasPool extends _SaveStackTracking {
128127 if (_canvas != null ) {
129128 _restoreContextSave ();
130129 _contextHandle! .reset ();
131- _activeCanvasList ?? = < html. CanvasElement > [];
130+ _activeCanvasList ?? = < DomCanvasElement > [];
132131 _activeCanvasList! .add (_canvas! );
133132 _canvas = null ;
134133 _context = null ;
@@ -139,7 +138,7 @@ class CanvasPool extends _SaveStackTracking {
139138 void _createCanvas () {
140139 bool requiresClearRect = false ;
141140 bool reused = false ;
142- html. CanvasElement ? canvas;
141+ DomCanvasElement ? canvas;
143142 if (_canvas != null ) {
144143 _canvas! .width = 0 ;
145144 _canvas! .height = 0 ;
@@ -214,13 +213,13 @@ class CanvasPool extends _SaveStackTracking {
214213 _replayClipStack ();
215214 }
216215
217- html. CanvasElement ? _allocCanvas (int width, int height) {
216+ DomCanvasElement ? _allocCanvas (int width, int height) {
218217 // The dartdocs for `tryCreateCanvasElement` on why we don't use the
219- // `html.CanvasElement ` constructor.
218+ // `DomCanvasElement ` constructor.
220219 return tryCreateCanvasElement (
221220 (width * _density).ceil (),
222221 (height * _density).ceil (),
223- );
222+ ) as DomCanvasElement ? ;
224223 }
225224
226225 @override
@@ -229,7 +228,7 @@ class CanvasPool extends _SaveStackTracking {
229228
230229 if (_canvas != null ) {
231230 // Restore to the state where we have only applied the scaling.
232- final html. CanvasRenderingContext2D ? ctx = _context;
231+ final DomCanvasRenderingContext2D ? ctx = _context;
233232 if (ctx != null ) {
234233 try {
235234 ctx.font = '' ;
@@ -247,7 +246,7 @@ class CanvasPool extends _SaveStackTracking {
247246
248247 int _replaySingleSaveEntry (int clipDepth, Matrix4 prevTransform,
249248 Matrix4 transform, List <SaveClipEntry >? clipStack) {
250- final html. CanvasRenderingContext2D ctx = context;
249+ final DomCanvasRenderingContext2D ctx = context;
251250 if (clipStack != null ) {
252251 for (final int clipCount = clipStack.length;
253252 clipDepth < clipCount;
@@ -306,7 +305,7 @@ class CanvasPool extends _SaveStackTracking {
306305
307306 void _replayClipStack () {
308307 // Replay save/clip stack on this canvas now.
309- final html. CanvasRenderingContext2D ctx = context;
308+ final DomCanvasRenderingContext2D ctx = context;
310309 int clipDepth = 0 ;
311310 Matrix4 prevTransform = Matrix4 .identity ();
312311 final int len = _saveStack.length;
@@ -327,7 +326,7 @@ class CanvasPool extends _SaveStackTracking {
327326 if (_canvas != null ) {
328327 _restoreContextSave ();
329328 _contextHandle! .reset ();
330- _activeCanvasList ?? = < html. CanvasElement > [];
329+ _activeCanvasList ?? = < DomCanvasElement > [];
331330 _activeCanvasList! .add (_canvas! );
332331 _context = null ;
333332 _contextHandle = null ;
@@ -344,7 +343,7 @@ class CanvasPool extends _SaveStackTracking {
344343 /// that are reused from last instance can be cleanup.
345344 void endOfPaint () {
346345 if (_reusablePool != null ) {
347- for (final html. CanvasElement e in _reusablePool! ) {
346+ for (final DomCanvasElement e in _reusablePool! ) {
348347 if (browserEngine == BrowserEngine .webkit) {
349348 e.width = e.height = 0 ;
350349 }
@@ -366,7 +365,7 @@ class CanvasPool extends _SaveStackTracking {
366365 /// coordinate system, and the pixel ratio is applied such that CSS pixels are
367366 /// translated to bitmap pixels.
368367 void _initializeViewport (bool clearCanvas) {
369- final html. CanvasRenderingContext2D ctx = context;
368+ final DomCanvasRenderingContext2D ctx = context;
370369 // Save the canvas state with top-level transforms so we can undo
371370 // any clips later when we reuse the canvas.
372371 ctx.save ();
@@ -390,7 +389,7 @@ class CanvasPool extends _SaveStackTracking {
390389 EnginePlatformDispatcher .browserDevicePixelRatio * _density;
391390
392391 void _resetTransform () {
393- final html. CanvasElement ? canvas = _canvas;
392+ final DomCanvasElement ? canvas = _canvas;
394393 if (canvas != null ) {
395394 canvas.style.transformOrigin = '' ;
396395 canvas.style.transform = '' ;
@@ -399,7 +398,7 @@ class CanvasPool extends _SaveStackTracking {
399398
400399 /// Returns a "data://" URI containing a representation of the image in this
401400 /// canvas in PNG format.
402- String toDataUrl () => _canvas? .toDataUrl ( ) ?? '' ;
401+ String toDataUrl () => _canvas? .toDataURL ( 'image/png' ) ?? '' ;
403402
404403 @override
405404 void save () {
@@ -498,7 +497,7 @@ class CanvasPool extends _SaveStackTracking {
498497 }
499498 }
500499
501- void _clipRect (html. CanvasRenderingContext2D ctx, ui.Rect rect) {
500+ void _clipRect (DomCanvasRenderingContext2D ctx, ui.Rect rect) {
502501 ctx.beginPath ();
503502 ctx.rect (rect.left, rect.top, rect.width, rect.height);
504503 ctx.clip ();
@@ -512,7 +511,7 @@ class CanvasPool extends _SaveStackTracking {
512511 }
513512 }
514513
515- void _clipRRect (html. CanvasRenderingContext2D ctx, ui.RRect rrect) {
514+ void _clipRRect (DomCanvasRenderingContext2D ctx, ui.RRect rrect) {
516515 final ui.Path path = ui.Path ()..addRRect (rrect);
517516 _runPath (ctx, path as SurfacePath );
518517 ctx.clip ();
@@ -522,7 +521,7 @@ class CanvasPool extends _SaveStackTracking {
522521 void clipPath (ui.Path path) {
523522 super .clipPath (path);
524523 if (_canvas != null ) {
525- final html. CanvasRenderingContext2D ctx = context;
524+ final DomCanvasRenderingContext2D ctx = context;
526525 _runPath (ctx, path as SurfacePath );
527526 if (path.fillType == ui.PathFillType .nonZero) {
528527 ctx.clip ();
@@ -534,7 +533,7 @@ class CanvasPool extends _SaveStackTracking {
534533
535534 /// Fill a virtually infinite rect with a color and optional blendMode.
536535 void drawColor (ui.Color color, ui.BlendMode blendMode) {
537- final html. CanvasRenderingContext2D ctx = context;
536+ final DomCanvasRenderingContext2D ctx = context;
538537 contextHandle.blendMode = blendMode;
539538 contextHandle.fillStyle = colorToCssString (color);
540539 contextHandle.strokeStyle = '' ;
@@ -548,7 +547,7 @@ class CanvasPool extends _SaveStackTracking {
548547
549548 /// Fill a virtually infinite rect with the color.
550549 void fill () {
551- final html. CanvasRenderingContext2D ctx = context;
550+ final DomCanvasRenderingContext2D ctx = context;
552551 ctx.beginPath ();
553552 // We can't use (0, 0, width, height) because the current transform can
554553 // cause it to not fill the entire clip.
@@ -557,7 +556,7 @@ class CanvasPool extends _SaveStackTracking {
557556
558557 /// Draws a line from [p1] to [p2] .
559558 void strokeLine (ui.Offset p1, ui.Offset p2) {
560- final html. CanvasRenderingContext2D ctx = context;
559+ final DomCanvasRenderingContext2D ctx = context;
561560 ctx.beginPath ();
562561 final ui.Rect ? shaderBounds = contextHandle._shaderBounds;
563562 if (shaderBounds == null ) {
@@ -573,7 +572,7 @@ class CanvasPool extends _SaveStackTracking {
573572 /// Draws a set of points with given radius, lines between points or
574573 /// a polygon.
575574 void drawPoints (ui.PointMode pointMode, Float32List points, double radius) {
576- final html. CanvasRenderingContext2D ctx = context;
575+ final DomCanvasRenderingContext2D ctx = context;
577576 final int len = points.length;
578577 final ui.Rect ? shaderBounds = contextHandle._shaderBounds;
579578 final double offsetX = shaderBounds == null ? 0 : - shaderBounds.left;
@@ -611,7 +610,7 @@ class CanvasPool extends _SaveStackTracking {
611610 static Float32List _runBuffer = Float32List (PathRefIterator .kMaxBufferSize);
612611
613612 /// 'Runs' the given [path] by applying all of its commands to the canvas.
614- void _runPath (html. CanvasRenderingContext2D ctx, SurfacePath path) {
613+ void _runPath (DomCanvasRenderingContext2D ctx, SurfacePath path) {
615614 ctx.beginPath ();
616615 final Float32List p = _runBuffer;
617616 final PathRefIterator iter = PathRefIterator (path.pathRef);
@@ -668,7 +667,7 @@ class CanvasPool extends _SaveStackTracking {
668667 /// Applies path to drawing context, preparing for fill and other operations.
669668 ///
670669 /// WARNING: Don't refactor _runPath/_runPathWithOffset. Latency sensitive
671- void _runPathWithOffset (html. CanvasRenderingContext2D ctx, SurfacePath path,
670+ void _runPathWithOffset (DomCanvasRenderingContext2D ctx, SurfacePath path,
672671 double offsetX, double offsetY) {
673672 ctx.beginPath ();
674673 final Float32List p = _runBuffer;
@@ -857,7 +856,7 @@ class CanvasPool extends _SaveStackTracking {
857856
858857 void _clearActiveCanvasList () {
859858 if (_activeCanvasList != null ) {
860- for (final html. CanvasElement c in _activeCanvasList! ) {
859+ for (final DomCanvasElement c in _activeCanvasList! ) {
861860 if (browserEngine == BrowserEngine .webkit) {
862861 c.width = c.height = 0 ;
863862 }
@@ -874,7 +873,7 @@ class CanvasPool extends _SaveStackTracking {
874873/// to initialize current values.
875874class ContextStateHandle {
876875 /// Associated canvas element context tracked by this context state.
877- final html. CanvasRenderingContext2D context;
876+ final DomCanvasRenderingContext2D context;
878877 final CanvasPool _canvasPool;
879878 /// Dpi of context.
880879 final double density;
@@ -890,7 +889,7 @@ class ContextStateHandle {
890889 Object ? _currentStrokeStyle;
891890 double _currentLineWidth = 1.0 ;
892891
893- /// See [html.CanvasRenderingContext2D ] .
892+ /// See [DomCanvasRenderingContext2D ] .
894893 set blendMode (ui.BlendMode ? blendMode) {
895894 if (blendMode != _currentBlendMode) {
896895 _currentBlendMode = blendMode;
@@ -899,7 +898,7 @@ class ContextStateHandle {
899898 }
900899 }
901900
902- /// See [html.CanvasRenderingContext2D ] .
901+ /// See [DomCanvasRenderingContext2D ] .
903902 set strokeCap (ui.StrokeCap ? strokeCap) {
904903 strokeCap ?? = ui.StrokeCap .butt;
905904 if (strokeCap != _currentStrokeCap) {
@@ -908,15 +907,15 @@ class ContextStateHandle {
908907 }
909908 }
910909
911- /// See [html.CanvasRenderingContext2D ] .
910+ /// See [DomCanvasRenderingContext2D ] .
912911 set lineWidth (double lineWidth) {
913912 if (lineWidth != _currentLineWidth) {
914913 _currentLineWidth = lineWidth;
915914 context.lineWidth = lineWidth;
916915 }
917916 }
918917
919- /// See [html.CanvasRenderingContext2D ] .
918+ /// See [DomCanvasRenderingContext2D ] .
920919 set strokeJoin (ui.StrokeJoin ? strokeJoin) {
921920 strokeJoin ?? = ui.StrokeJoin .miter;
922921 if (strokeJoin != _currentStrokeJoin) {
@@ -925,15 +924,15 @@ class ContextStateHandle {
925924 }
926925 }
927926
928- /// See [html.CanvasRenderingContext2D ] .
927+ /// See [DomCanvasRenderingContext2D ] .
929928 set fillStyle (Object ? colorOrGradient) {
930929 if (! identical (colorOrGradient, _currentFillStyle)) {
931930 _currentFillStyle = colorOrGradient;
932931 context.fillStyle = colorOrGradient;
933932 }
934933 }
935934
936- /// See [html.CanvasRenderingContext2D ] .
935+ /// See [DomCanvasRenderingContext2D ] .
937936 set strokeStyle (Object ? colorOrGradient) {
938937 if (! identical (colorOrGradient, _currentStrokeStyle)) {
939938 _currentStrokeStyle = colorOrGradient;
@@ -984,9 +983,7 @@ class ContextStateHandle {
984983 if (paint.shader is EngineGradient ) {
985984 final EngineGradient engineShader = paint.shader! as EngineGradient ;
986985 final Object paintStyle =
987- engineShader.createPaintStyle (_canvasPool.context as
988- DomCanvasRenderingContext2D , shaderBounds,
989- density);
986+ engineShader.createPaintStyle (_canvasPool.context, shaderBounds, density);
990987 fillStyle = paintStyle;
991988 strokeStyle = paintStyle;
992989 _shaderBounds = shaderBounds;
@@ -995,9 +992,7 @@ class ContextStateHandle {
995992 } else if (paint.shader is EngineImageShader ) {
996993 final EngineImageShader imageShader = paint.shader! as EngineImageShader ;
997994 final Object paintStyle =
998- imageShader.createPaintStyle (_canvasPool.context as
999- DomCanvasRenderingContext2D , shaderBounds,
1000- density);
995+ imageShader.createPaintStyle (_canvasPool.context, shaderBounds, density);
1001996 fillStyle = paintStyle;
1002997 strokeStyle = paintStyle;
1003998 if (imageShader.requiresTileOffset) {
@@ -1117,7 +1112,7 @@ class ContextStateHandle {
11171112 }
11181113
11191114 /// Resets drawing context state to defaults for
1120- /// [html.CanvasRenderingContext2D ] .
1115+ /// [DomCanvasRenderingContext2D ] .
11211116 void reset () {
11221117 context.fillStyle = '' ;
11231118 // Read back fillStyle/strokeStyle values from context so that input such
0 commit comments