@@ -58,7 +58,7 @@ class BitmapCanvas extends EngineCanvas {
58
58
static const int kPaddingPixels = 1 ;
59
59
60
60
@override
61
- final html. Element rootElement = html. Element . tag ('flt-canvas' );
61
+ final DomElement rootElement = createDomElement ('flt-canvas' );
62
62
63
63
final CanvasPool _canvasPool;
64
64
@@ -239,7 +239,7 @@ class BitmapCanvas extends EngineCanvas {
239
239
for (int i = 0 ; i < len; i++ ) {
240
240
final html.Element child = _children[i];
241
241
// Don't remove children that have been reused by CrossFrameCache.
242
- if (child.parent == rootElement) {
242
+ if (child.parent == rootElement as html. Element ) {
243
243
child.remove ();
244
244
}
245
245
}
@@ -458,11 +458,11 @@ class BitmapCanvas extends EngineCanvas {
458
458
ui.Offset .zero,
459
459
transformWithOffset (_canvasPool.currentTransform, offset));
460
460
for (final html.Element clipElement in clipElements) {
461
- rootElement.append (clipElement);
461
+ rootElement.append (clipElement as DomElement );
462
462
_children.add (clipElement);
463
463
}
464
464
} else {
465
- rootElement.append (element);
465
+ rootElement.append (element as DomElement );
466
466
_children.add (element);
467
467
}
468
468
final ui.BlendMode ? blendMode = paint.blendMode;
@@ -675,7 +675,7 @@ class BitmapCanvas extends EngineCanvas {
675
675
final List <html.Element > clipElements = _clipContent (
676
676
_canvasPool.clipStack! , imgElement, p, _canvasPool.currentTransform);
677
677
for (final html.Element clipElement in clipElements) {
678
- rootElement.append (clipElement);
678
+ rootElement.append (clipElement as DomElement );
679
679
_children.add (clipElement);
680
680
}
681
681
} else {
@@ -687,7 +687,7 @@ class BitmapCanvas extends EngineCanvas {
687
687
// Reset width/height since they may have been previously set.
688
688
..removeProperty ('width' )
689
689
..removeProperty ('height' );
690
- rootElement.append (imgElement);
690
+ rootElement.append (imgElement as DomElement );
691
691
_children.add (imgElement);
692
692
}
693
693
return imgElement;
@@ -851,7 +851,7 @@ class BitmapCanvas extends EngineCanvas {
851
851
SurfacePaintData paint) {
852
852
// For srcIn blendMode, we use an svg filter to apply to image element.
853
853
final SvgFilter svgFilter = svgFilterFromBlendMode (filterColor, colorFilterBlendMode);
854
- rootElement.append (svgFilter.element);
854
+ rootElement.append (svgFilter.element as DomElement );
855
855
_children.add (svgFilter.element);
856
856
final html.HtmlElement imgElement = _reuseOrCreateImage (image);
857
857
imgElement.style.filter = 'url(#${svgFilter .id })' ;
@@ -866,7 +866,7 @@ class BitmapCanvas extends EngineCanvas {
866
866
HtmlImage image, List <double > matrix, SurfacePaintData paint) {
867
867
// For srcIn blendMode, we use an svg filter to apply to image element.
868
868
final SvgFilter svgFilter = svgFilterFromColorMatrix (matrix);
869
- rootElement.append (svgFilter.element);
869
+ rootElement.append (svgFilter.element as DomElement );
870
870
_children.add (svgFilter.element);
871
871
final html.HtmlElement imgElement = _reuseOrCreateImage (image);
872
872
imgElement.style.filter = 'url(#${svgFilter .id })' ;
@@ -971,15 +971,15 @@ class BitmapCanvas extends EngineCanvas {
971
971
offset,
972
972
_canvasPool.currentTransform);
973
973
for (final html.Element clipElement in clipElements) {
974
- rootElement.append (clipElement);
974
+ rootElement.append (clipElement as DomElement );
975
975
_children.add (clipElement);
976
976
}
977
977
} else {
978
978
setElementTransform (
979
979
paragraphElement,
980
980
transformWithOffset (_canvasPool.currentTransform, offset).storage,
981
981
);
982
- rootElement.append (paragraphElement);
982
+ rootElement.append (paragraphElement as DomElement );
983
983
}
984
984
_children.add (paragraphElement);
985
985
// If there is a prior sibling such as img prevent left/top shift.
@@ -1068,21 +1068,25 @@ class BitmapCanvas extends EngineCanvas {
1068
1068
void endOfPaint () {
1069
1069
_canvasPool.endOfPaint ();
1070
1070
_elementCache? .commitFrame ();
1071
- // Wrap all elements in translate3d (workaround for webkit paint order bug).
1072
1071
if (_contains3dTransform && browserEngine == BrowserEngine .webkit) {
1073
- for (final html.Element element in rootElement.children) {
1074
- final html.DivElement paintOrderElement = html.DivElement ()
1072
+ // Copy the children list to avoid concurrent modification.
1073
+ final List <DomElement > children = rootElement.children.toList ();
1074
+ for (final DomElement element in children) {
1075
+ final DomHTMLDivElement paintOrderElement = createDomHTMLDivElement ()
1075
1076
..style.transform = 'translate3d(0,0,0)' ;
1076
1077
paintOrderElement.append (element);
1077
1078
rootElement.append (paintOrderElement);
1078
- _children.add (paintOrderElement);
1079
+ _children.add (paintOrderElement as html. Element );
1079
1080
}
1080
1081
}
1081
- final html.Node ? firstChild = rootElement.firstChild;
1082
- if (firstChild != null && firstChild is html.HtmlElement &&
1083
- firstChild.tagName.toLowerCase () ==
1084
- 'canvas' ) {
1085
- firstChild.style.zIndex = '-1' ;
1082
+ final DomNode ? firstChild = rootElement.firstChild;
1083
+ if (firstChild != null ) {
1084
+ if (domInstanceOfString (firstChild, 'HTMLElement' )) {
1085
+ final DomHTMLElement maybeCanvas = firstChild as DomHTMLElement ;
1086
+ if (maybeCanvas.tagName.toLowerCase () == 'canvas' ) {
1087
+ maybeCanvas.style.zIndex = '-1' ;
1088
+ }
1089
+ }
1086
1090
}
1087
1091
}
1088
1092
@@ -1368,7 +1372,7 @@ List<html.Element> _clipContent(List<SaveClipEntry> clipStack,
1368
1372
final SaveClipEntry entry = clipStack[clipIndex];
1369
1373
final html.HtmlElement newElement = html.DivElement ();
1370
1374
newElement.style.position = 'absolute' ;
1371
- applyWebkitClipFix (newElement);
1375
+ applyWebkitClipFix (newElement as DomElement );
1372
1376
if (root == null ) {
1373
1377
root = newElement;
1374
1378
} else {
@@ -1428,7 +1432,8 @@ List<html.Element> _clipContent(List<SaveClipEntry> clipStack,
1428
1432
..transform = matrix4ToCssTransform (newClipTransform)
1429
1433
..transformOrigin = '0 0 0' ;
1430
1434
final html.Element clipElement =
1431
- createSvgClipDef (curElement as html.HtmlElement , entry.path! );
1435
+ createSvgClipDef (curElement as DomElement , entry.path! ) as
1436
+ html.Element ;
1432
1437
clipDefs.add (clipElement);
1433
1438
}
1434
1439
}
0 commit comments