From 327eba81d85e0a77563f1626df50698dbaa68905 Mon Sep 17 00:00:00 2001 From: joshualitt Date: Mon, 14 Nov 2022 15:56:05 -0800 Subject: [PATCH] Revert "[web] Switch to doubles (#37336)" This reverts commit 6976132e5c794423693ac40ec4c705a9c736285c. --- lib/web_ui/lib/src/engine/assets.dart | 2 +- .../lib/src/engine/browser_detection.dart | 2 +- .../lib/src/engine/canvaskit/canvas.dart | 4 +- .../src/engine/canvaskit/canvaskit_api.dart | 112 +++++----- .../lib/src/engine/canvaskit/image.dart | 16 +- .../engine/canvaskit/image_wasm_codecs.dart | 6 +- .../engine/canvaskit/image_web_codecs.dart | 16 +- .../lib/src/engine/canvaskit/surface.dart | 6 +- lib/web_ui/lib/src/engine/canvaskit/text.dart | 14 +- lib/web_ui/lib/src/engine/canvaskit/util.dart | 4 +- lib/web_ui/lib/src/engine/configuration.dart | 5 +- lib/web_ui/lib/src/engine/dom.dart | 199 +++++++++++------- lib/web_ui/lib/src/engine/embedder.dart | 24 +-- lib/web_ui/lib/src/engine/html/scene.dart | 4 +- .../lib/src/engine/html/surface_stats.dart | 4 +- .../lib/src/engine/html_image_codec.dart | 12 +- .../lib/src/engine/keyboard_binding.dart | 4 +- lib/web_ui/lib/src/engine/picture.dart | 4 +- .../lib/src/engine/platform_dispatcher.dart | 6 +- .../lib/src/engine/pointer_binding.dart | 73 ++++--- .../lib/src/engine/safe_browser_api.dart | 28 +-- .../lib/src/engine/semantics/scrollable.dart | 12 +- .../lib/src/engine/text/font_collection.dart | 2 +- .../lib/src/engine/text/line_breaker.dart | 4 +- .../lib/src/engine/text/measurement.dart | 2 +- lib/web_ui/lib/src/engine/text/ruler.dart | 4 +- .../src/engine/text_editing/text_editing.dart | 8 +- lib/web_ui/lib/src/engine/window.dart | 14 +- .../engine/surface/scene_builder_test.dart | 10 +- .../test/engine/surface/surface_test.dart | 4 +- 30 files changed, 323 insertions(+), 282 deletions(-) diff --git a/lib/web_ui/lib/src/engine/assets.dart b/lib/web_ui/lib/src/engine/assets.dart index bfc7bba0e46e9..0fdb7006072a3 100644 --- a/lib/web_ui/lib/src/engine/assets.dart +++ b/lib/web_ui/lib/src/engine/assets.dart @@ -84,7 +84,7 @@ class AssetManager { printWarning('Asset manifest does not exist at `$url` – ignoring.'); return Uint8List.fromList(utf8.encode('{}')).buffer.asByteData(); } - throw AssetManagerException(url, request.status!.toInt()); + throw AssetManagerException(url, request.status!); } final String? constructorName = target == null ? 'null' : diff --git a/lib/web_ui/lib/src/engine/browser_detection.dart b/lib/web_ui/lib/src/engine/browser_detection.dart index 3ff3c714e0907..769b2812f512b 100644 --- a/lib/web_ui/lib/src/engine/browser_detection.dart +++ b/lib/web_ui/lib/src/engine/browser_detection.dart @@ -142,7 +142,7 @@ OperatingSystem detectOperatingSystem({ // iDevices requesting a "desktop site" spoof their UA so it looks like a Mac. // This checks if we're in a touch device, or on a real mac. final int maxTouchPoints = - overrideMaxTouchPoints ?? domWindow.navigator.maxTouchPoints?.toInt() ?? 0; + overrideMaxTouchPoints ?? domWindow.navigator.maxTouchPoints ?? 0; if (maxTouchPoints > 2) { return OperatingSystem.iOs; } diff --git a/lib/web_ui/lib/src/engine/canvaskit/canvas.dart b/lib/web_ui/lib/src/engine/canvaskit/canvas.dart index 2c17785969c1b..b499f95abe3a6 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvas.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvas.dart @@ -35,7 +35,7 @@ class CkCanvas { final SkCanvas skCanvas; - int? get saveCount => skCanvas.getSaveCount().toInt(); + int? get saveCount => skCanvas.getSaveCount(); void clear(ui.Color color) { skCanvas.clear(toSharedSkColor1(color)); @@ -272,7 +272,7 @@ class CkCanvas { } int save() { - return skCanvas.save().toInt(); + return skCanvas.save(); } void saveLayer(ui.Rect bounds, CkPaint? paint) { diff --git a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart index 25e5f79e83874..dc35f568d231c 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart @@ -96,10 +96,10 @@ extension CanvasKitExtension on CanvasKit { ); // Text decoration enum is embedded in the CanvasKit object itself. - external double get NoDecoration; - external double get UnderlineDecoration; - external double get OverlineDecoration; - external double get LineThroughDecoration; + external int get NoDecoration; + external int get UnderlineDecoration; + external int get OverlineDecoration; + external int get LineThroughDecoration; // End of text decoration enum. external SkTextDecorationStyleEnum get DecorationStyle; @@ -109,7 +109,7 @@ extension CanvasKitExtension on CanvasKit { external SkFontMgrNamespace get FontMgr; external TypefaceFontProviderNamespace get TypefaceFontProvider; external SkTypefaceFactory get Typeface; - external double GetWebGLContext( + external int GetWebGLContext( DomCanvasElement canvas, SkWebGLContextOptions options); external SkGrContext MakeGrContext(int glContext); external SkSurface? MakeOnScreenGLSurface( @@ -195,8 +195,8 @@ class SkSurface {} extension SkSurfaceExtension on SkSurface { external SkCanvas getCanvas(); external void flush(); - external double width(); - external double height(); + external int width(); + external int height(); external void dispose(); external SkImage makeImageSnapshot(); } @@ -226,7 +226,7 @@ extension SkFontSlantEnumExtension on SkFontSlantEnum { class SkFontSlant {} extension SkFontSlantExtension on SkFontSlant { - external double get value; + external int get value; } final List _skFontSlants = [ @@ -260,7 +260,7 @@ extension SkFontWeightEnumExtension on SkFontWeightEnum { class SkFontWeight {} extension SkFontWeightExtension on SkFontWeight { - external double get value; + external int get value; } final List _skFontWeights = [ @@ -293,7 +293,7 @@ extension SkAffinityEnumExtension on SkAffinityEnum { class SkAffinity {} extension SkAffinityExtension on SkAffinity { - external double get value; + external int get value; } final List _skAffinitys = [ @@ -319,7 +319,7 @@ extension SkTextDirectionEnumExtension on SkTextDirectionEnum { class SkTextDirection {} extension SkTextDirectionExtension on SkTextDirection { - external double get value; + external int get value; } // Flutter enumerates text directions as RTL, LTR, while CanvasKit @@ -351,7 +351,7 @@ extension SkTextAlignEnumExtension on SkTextAlignEnum { class SkTextAlign {} extension SkTextAlignExtension on SkTextAlign { - external double get value; + external int get value; } final List _skTextAligns = [ @@ -383,7 +383,7 @@ extension SkTextHeightBehaviorEnumExtension on SkTextHeightBehaviorEnum { class SkTextHeightBehavior {} extension SkTextHeightBehaviorExtension on SkTextHeightBehavior { - external double get value; + external int get value; } final List _skTextHeightBehaviors = @@ -418,7 +418,7 @@ extension SkRectHeightStyleEnumExtension on SkRectHeightStyleEnum { class SkRectHeightStyle {} extension SkRectHeightStyleExtension on SkRectHeightStyle { - external double get value; + external int get value; } final List _skRectHeightStyles = [ @@ -448,7 +448,7 @@ extension SkRectWidthStyleEnumExtension on SkRectWidthStyleEnum { class SkRectWidthStyle {} extension SkRectWidthStyleExtension on SkRectWidthStyle { - external double get value; + external int get value; } final List _skRectWidthStyles = [ @@ -476,7 +476,7 @@ extension SkVertexModeEnumExtension on SkVertexModeEnum { class SkVertexMode {} extension SkVertexModeExtension on SkVertexMode { - external double get value; + external int get value; } final List _skVertexModes = [ @@ -504,7 +504,7 @@ extension SkPointModeEnumExtension on SkPointModeEnum { class SkPointMode {} extension SkPointModeExtension on SkPointMode { - external double get value; + external int get value; } final List _skPointModes = [ @@ -531,7 +531,7 @@ extension SkClipOpEnumExtension on SkClipOpEnum { class SkClipOp {} extension SkClipOpExtension on SkClipOp { - external double get value; + external int get value; } final List _skClipOps = [ @@ -557,7 +557,7 @@ extension SkFillTypeEnumExtension on SkFillTypeEnum { class SkFillType {} extension SkFillTypeExtension on SkFillType { - external double get value; + external int get value; } final List _skFillTypes = [ @@ -586,7 +586,7 @@ extension SkPathOpEnumExtension on SkPathOpEnum { class SkPathOp {} extension SkPathOpExtension on SkPathOp { - external double get value; + external int get value; } final List _skPathOps = [ @@ -617,7 +617,7 @@ extension SkBlurStyleEnumExtension on SkBlurStyleEnum { class SkBlurStyle {} extension SkBlurStyleExtension on SkBlurStyle { - external double get value; + external int get value; } final List _skBlurStyles = [ @@ -646,7 +646,7 @@ extension SkStrokeCapEnumExtension on SkStrokeCapEnum { class SkStrokeCap {} extension SkStrokeCapExtension on SkStrokeCap { - external double get value; + external int get value; } final List _skStrokeCaps = [ @@ -673,7 +673,7 @@ extension SkPaintStyleEnumExtension on SkPaintStyleEnum { class SkPaintStyle {} extension SkPaintStyleExtension on SkPaintStyle { - external double get value; + external int get value; } final List _skPaintStyles = [ @@ -726,7 +726,7 @@ extension SkBlendModeEnumExtension on SkBlendModeEnum { class SkBlendMode {} extension SkBlendModeExtension on SkBlendMode { - external double get value; + external int get value; } final List _skBlendModes = [ @@ -780,7 +780,7 @@ extension SkStrokeJoinEnumExtension on SkStrokeJoinEnum { class SkStrokeJoin {} extension SkStrokeJoinExtension on SkStrokeJoin { - external double get value; + external int get value; } final List _skStrokeJoins = [ @@ -809,7 +809,7 @@ extension SkTileModeEnumExtension on SkTileModeEnum { class SkTileMode {} extension SkTileModeExtension on SkTileMode { - external double get value; + external int get value; } final List _skTileModes = [ @@ -837,7 +837,7 @@ extension SkFilterModeEnumExtension on SkFilterModeEnum { class SkFilterMode {} extension SkFilterModeExtension on SkFilterMode { - external double get value; + external int get value; } SkFilterMode toSkFilterMode(ui.FilterQuality filterQuality) { @@ -861,7 +861,7 @@ extension SkMipmapModeEnumExtension on SkMipmapModeEnum { class SkMipmapMode {} extension SkMipmapModeExtension on SkMipmapMode { - external double get value; + external int get value; } SkMipmapMode toSkMipmapMode(ui.FilterQuality filterQuality) { @@ -885,7 +885,7 @@ extension SkAlphaTypeEnumExtension on SkAlphaTypeEnum { class SkAlphaType {} extension SkAlphaTypeExtension on SkAlphaType { - external double get value; + external int get value; } @JS() @@ -911,7 +911,7 @@ extension SkColorTypeEnumExtension on SkColorTypeEnum { class SkColorType {} extension SkColorTypeExtension on SkColorType { - external double get value; + external int get value; } @JS() @@ -920,19 +920,19 @@ extension SkColorTypeExtension on SkColorType { class SkAnimatedImage {} extension SkAnimatedImageExtension on SkAnimatedImage { - external double getFrameCount(); + external int getFrameCount(); - external double getRepetitionCount(); + external int getRepetitionCount(); /// Returns duration in milliseconds. - external double currentFrameDuration(); + external int currentFrameDuration(); /// Advances to the next frame and returns its duration in milliseconds. - external double decodeNextFrame(); + external int decodeNextFrame(); external SkImage makeImageAtCurrentFrame(); - external double width(); - external double height(); + external int width(); + external int height(); /// Deletes the C++ object. /// @@ -948,8 +948,8 @@ class SkImage {} extension SkImageExtension on SkImage { external void delete(); - external double width(); - external double height(); + external int width(); + external int height(); external SkShader makeShaderCubic( SkTileMode tileModeX, SkTileMode tileModeY, @@ -1786,8 +1786,8 @@ extension SkCanvasExtension on SkCanvas { SkBlendMode blendMode, SkPaint paint, ); - external double save(); - external double getSaveCount(); + external int save(); + external int getSaveCount(); external void saveLayer( SkPaint? paint, Float32List? bounds, @@ -1902,7 +1902,7 @@ extension SkTextDecorationStyleEnumExtension on SkTextDecorationStyleEnum { class SkTextDecorationStyle {} extension SkTextDecorationStyleExtension on SkTextDecorationStyle { - external double get value; + external int get value; } final List _skTextDecorationStyles = @@ -1932,7 +1932,7 @@ extension SkTextBaselineEnumExtension on SkTextBaselineEnum { class SkTextBaseline {} extension SkTextBaselineExtension on SkTextBaseline { - external double get value; + external int get value; } final List _skTextBaselines = [ @@ -1962,7 +1962,7 @@ extension SkPlaceholderAlignmentEnumExtension on SkPlaceholderAlignmentEnum { class SkPlaceholderAlignment {} extension SkPlaceholderAlignmentExtension on SkPlaceholderAlignment { - external double get value; + external int get value; } final List _skPlaceholderAlignments = @@ -2120,10 +2120,10 @@ extension TypefaceFontProviderExtension on TypefaceFontProvider { class SkLineMetrics {} extension SkLineMetricsExtension on SkLineMetrics { - external double get startIndex; - external double get endIndex; - external double get endExcludingWhitespaces; - external double get endIncludingNewline; + external int get startIndex; + external int get endIndex; + external int get endExcludingWhitespaces; + external int get endIncludingNewline; external bool get isHardBreak; external double get ascent; external double get descent; @@ -2131,7 +2131,7 @@ extension SkLineMetricsExtension on SkLineMetrics { external double get width; external double get left; external double get baseline; - external double get lineNumber; + external int get lineNumber; } @JS() @@ -2171,7 +2171,7 @@ class SkTextPosition {} extension SkTextPositionExtnsion on SkTextPosition { external SkAffinity get affinity; - external double get pos; + external int get pos; } @JS() @@ -2179,8 +2179,8 @@ extension SkTextPositionExtnsion on SkTextPosition { class SkTextRange {} extension SkTextRangeExtension on SkTextRange { - external double get start; - external double get end; + external int get start; + external int get end; } @JS() @@ -2475,7 +2475,7 @@ void debugResetBrowserSupportsFinalizationRegistry() { class SkData {} extension SkDataExtension on SkData { - external double size(); + external int size(); external bool isEmpty(); external Uint8List bytes(); external void delete(); @@ -2498,11 +2498,11 @@ extension SkImageInfoExtension on SkImageInfo { external SkAlphaType get alphaType; external ColorSpace get colorSpace; external SkColorType get colorType; - external double get height; + external int get height; external bool get isEmpty; external bool get isOpaque; external Float32List get bounds; - external double get width; + external int get width; external SkImageInfo makeAlphaType(SkAlphaType alphaType); external SkImageInfo makeColorSpace(ColorSpace colorSpace); external SkImageInfo makeColorType(SkColorType colorType); @@ -2526,8 +2526,8 @@ extension SkPartialImageInfoExtension on SkPartialImageInfo { external SkAlphaType get alphaType; external ColorSpace get colorSpace; external SkColorType get colorType; - external double get height; - external double get width; + external int get height; + external int get width; } /// Helper interop methods for [patchCanvasKitModule]. diff --git a/lib/web_ui/lib/src/engine/canvaskit/image.dart b/lib/web_ui/lib/src/engine/canvaskit/image.dart index ad570e4110326..88d0d9fe8dc0a 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/image.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/image.dart @@ -111,7 +111,7 @@ Future fetchImage( if (chunkCallback != null) { request.addEventListener('progress', allowInterop((DomEvent event) { event = event as DomProgressEvent; - chunkCallback.call(event.loaded!.toInt(), event.total!.toInt()); + chunkCallback.call(event.loaded!, event.total!); })); } @@ -123,7 +123,7 @@ Future fetchImage( })); request.addEventListener('load', allowInterop((DomEvent event) { - final int status = request.status!.toInt(); + final int status = request.status!; final bool accepted = status >= 200 && status < 300; final bool fileUri = status == 0; // file:// URIs have status of 0. final bool notModified = status == 304; @@ -173,8 +173,8 @@ class CkImage implements ui.Image, StackTraceDebugger { 'be able to resurrect it once it has been garbage collected.'); return; } - final int originalWidth = skImage.width().toInt(); - final int originalHeight = skImage.height().toInt(); + final int originalWidth = skImage.width(); + final int originalHeight = skImage.height(); box = SkiaObjectBox.resurrectable(this, skImage, () { final SkImage? skImage = canvasKit.MakeImage( SkImageInfo( @@ -277,13 +277,13 @@ class CkImage implements ui.Image, StackTraceDebugger { @override int get width { assert(_debugCheckIsNotDisposed()); - return skImage.width().toInt(); + return skImage.width(); } @override int get height { assert(_debugCheckIsNotDisposed()); - return skImage.height().toInt(); + return skImage.height(); } @override @@ -328,8 +328,8 @@ class CkImage implements ui.Image, StackTraceDebugger { alphaType: alphaType, colorType: colorType, colorSpace: colorSpace, - width: skImage.width().toInt(), - height: skImage.height().toInt(), + width: skImage.width(), + height: skImage.height(), ); bytes = skImage.readPixels(0, 0, imageInfo); } else { diff --git a/lib/web_ui/lib/src/engine/canvaskit/image_wasm_codecs.dart b/lib/web_ui/lib/src/engine/canvaskit/image_wasm_codecs.dart index e7772d7a10cb8..15a6a93834ee2 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/image_wasm_codecs.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/image_wasm_codecs.dart @@ -45,8 +45,8 @@ class CkAnimatedImage extends ManagedSkiaObject ); } - _frameCount = animatedImage.getFrameCount().toInt(); - _repetitionCount = animatedImage.getRepetitionCount().toInt(); + _frameCount = animatedImage.getFrameCount(); + _repetitionCount = animatedImage.getRepetitionCount(); // Normally CanvasKit initializes `SkAnimatedImage` to point to the first // frame in the animation. However, if the Skia object has been deleted then @@ -116,7 +116,7 @@ class CkAnimatedImage extends ManagedSkiaObject // current Skia frame, then advance SkAnimatedImage to the next frame, and // return the current frame. final ui.FrameInfo currentFrame = AnimatedImageFrameInfo( - Duration(milliseconds: animatedImage.currentFrameDuration().toInt()), + Duration(milliseconds: animatedImage.currentFrameDuration()), CkImage(animatedImage.makeImageAtCurrentFrame()), ); diff --git a/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart b/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart index 3bb0f20b82050..c3ffcc7719fc9 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart @@ -179,8 +179,8 @@ class CkBrowserImageDecoder implements ui.Codec { // package:js bindings don't work with getters that return a Promise, which // is why js_util is used instead. await promiseToFuture(getJsProperty(webDecoder, 'completed')); - frameCount = webDecoder.tracks.selectedTrack!.frameCount.toInt(); - repetitionCount = webDecoder.tracks.selectedTrack!.repetitionCount.toInt(); + frameCount = webDecoder.tracks.selectedTrack!.frameCount; + repetitionCount = webDecoder.tracks.selectedTrack!.repetitionCount; _cachedWebDecoder = webDecoder; @@ -234,15 +234,15 @@ class CkBrowserImageDecoder implements ui.Codec { alphaType: canvasKit.AlphaType.Premul, colorType: canvasKit.ColorType.RGBA_8888, colorSpace: SkColorSpaceSRGB, - width: frame.displayWidth.toInt(), - height: frame.displayHeight.toInt(), + width: frame.displayWidth, + height: frame.displayHeight, ), ); // Duration can be null if the image is not animated. However, Flutter // requires a non-null value. 0 indicates that the frame is meant to be // displayed indefinitely, which is fine for a static image. - final Duration duration = Duration(microseconds: frame.duration?.toInt() ?? 0); + final Duration duration = Duration(microseconds: frame.duration ?? 0); if (skImage == null) { throw ImageCodecException( @@ -445,7 +445,7 @@ bool _shouldReadPixelsUnmodified(VideoFrame videoFrame, ui.ImageByteFormat forma } Future readVideoFramePixelsUnmodified(VideoFrame videoFrame) async { - final int size = videoFrame.allocationSize().toInt(); + final int size = videoFrame.allocationSize(); final Uint8List destination = Uint8List(size); final JsPromise copyPromise = videoFrame.copyTo(destination); await promiseToFuture(copyPromise); @@ -453,8 +453,8 @@ Future readVideoFramePixelsUnmodified(VideoFrame videoFrame) async { } Future encodeVideoFrameAsPng(VideoFrame videoFrame) async { - final int width = videoFrame.displayWidth.toInt(); - final int height = videoFrame.displayHeight.toInt(); + final int width = videoFrame.displayWidth; + final int height = videoFrame.displayHeight; final DomCanvasElement canvas = createDomCanvasElement(width: width, height: height); final DomCanvasRenderingContext2D ctx = canvas.context2D; diff --git a/lib/web_ui/lib/src/engine/canvaskit/surface.dart b/lib/web_ui/lib/src/engine/canvaskit/surface.dart index d0fc7a3ee4bfe..728913ad16342 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/surface.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/surface.dart @@ -327,7 +327,7 @@ class Surface { antialias: _kUsingMSAA ? 1 : 0, majorVersion: webGLVersion, ), - ).toInt(); + ); _glContext = glContext; @@ -429,8 +429,8 @@ class CkSurface { int? get context => _glContext; - int width() => surface.width().toInt(); - int height() => surface.height().toInt(); + int width() => surface.width(); + int height() => surface.height(); void dispose() { if (_isDisposed) { diff --git a/lib/web_ui/lib/src/engine/canvaskit/text.dart b/lib/web_ui/lib/src/engine/canvaskit/text.dart index 0828763cdb531..67d9630cc6919 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/text.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/text.dart @@ -363,15 +363,15 @@ class CkTextStyle implements ui.TextStyle { } if (decoration != null) { - int decorationValue = canvasKit.NoDecoration.toInt(); + int decorationValue = canvasKit.NoDecoration; if (decoration.contains(ui.TextDecoration.underline)) { - decorationValue |= canvasKit.UnderlineDecoration.toInt(); + decorationValue |= canvasKit.UnderlineDecoration; } if (decoration.contains(ui.TextDecoration.overline)) { - decorationValue |= canvasKit.OverlineDecoration.toInt(); + decorationValue |= canvasKit.OverlineDecoration; } if (decoration.contains(ui.TextDecoration.lineThrough)) { - decorationValue |= canvasKit.LineThroughDecoration.toInt(); + decorationValue |= canvasKit.LineThroughDecoration; } properties.decoration = decorationValue; } @@ -785,7 +785,7 @@ class CkParagraph extends SkiaObject implements ui.Paragraph { break; } final SkTextRange skRange = paragraph.getWordBoundary(characterPosition); - return ui.TextRange(start: skRange.start.toInt(), end: skRange.end.toInt()); + return ui.TextRange(start: skRange.start, end: skRange.end); } @override @@ -808,7 +808,7 @@ class CkParagraph extends SkiaObject implements ui.Paragraph { final int offset = position.offset; for (final SkLineMetrics metric in metrics) { if (offset >= metric.startIndex && offset <= metric.endIndex) { - return ui.TextRange(start: metric.startIndex.toInt(), end: metric.endIndex.toInt()); + return ui.TextRange(start: metric.startIndex, end: metric.endIndex); } } return ui.TextRange.empty; @@ -876,7 +876,7 @@ class CkLineMetrics implements ui.LineMetrics { double get width => skLineMetrics.width; @override - int get lineNumber => skLineMetrics.lineNumber.toInt(); + int get lineNumber => skLineMetrics.lineNumber; } class CkParagraphBuilder implements ui.ParagraphBuilder { diff --git a/lib/web_ui/lib/src/engine/canvaskit/util.dart b/lib/web_ui/lib/src/engine/canvaskit/util.dart index b1906dac741e9..7700abaf28ce7 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/util.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/util.dart @@ -35,9 +35,9 @@ Float32List makeFreshSkColor(ui.Color color) { ui.TextPosition fromPositionWithAffinity(SkTextPosition positionWithAffinity) { final ui.TextAffinity affinity = - ui.TextAffinity.values[positionWithAffinity.affinity.value.toInt()]; + ui.TextAffinity.values[positionWithAffinity.affinity.value]; return ui.TextPosition( - offset: positionWithAffinity.pos.toInt(), + offset: positionWithAffinity.pos, affinity: affinity, ); } diff --git a/lib/web_ui/lib/src/engine/configuration.dart b/lib/web_ui/lib/src/engine/configuration.dart index 1e89528992962..3cd9d1d5644f4 100644 --- a/lib/web_ui/lib/src/engine/configuration.dart +++ b/lib/web_ui/lib/src/engine/configuration.dart @@ -204,8 +204,7 @@ class FlutterConfiguration { /// /// This value can be specified using either the `FLUTTER_WEB_MAXIMUM_SURFACES` /// environment variable, or using the runtime configuration. - int get canvasKitMaximumSurfaces => - _configuration?.canvasKitMaximumSurfaces?.toInt() ?? _defaultCanvasKitMaximumSurfaces; + int get canvasKitMaximumSurfaces => _configuration?.canvasKitMaximumSurfaces ?? _defaultCanvasKitMaximumSurfaces; static const int _defaultCanvasKitMaximumSurfaces = int.fromEnvironment( 'FLUTTER_WEB_MAXIMUM_SURFACES', defaultValue: 8, @@ -252,7 +251,7 @@ class JsFlutterConfiguration {} extension JsFlutterConfigurationExtension on JsFlutterConfiguration { external String? get canvasKitBaseUrl; external bool? get canvasKitForceCpuOnly; - external double? get canvasKitMaximumSurfaces; + external int? get canvasKitMaximumSurfaces; external bool? get debugShowSemanticsNodes; external DomElement? get hostElement; external String? get renderer; diff --git a/lib/web_ui/lib/src/engine/dom.dart b/lib/web_ui/lib/src/engine/dom.dart index 8d60a25b358a7..0975d736212e4 100644 --- a/lib/web_ui/lib/src/engine/dom.dart +++ b/lib/web_ui/lib/src/engine/dom.dart @@ -28,11 +28,13 @@ class DomWindow extends DomEventTarget {} extension DomWindowExtension on DomWindow { external DomConsole get console; - external double get devicePixelRatio; + external num get devicePixelRatio; external DomDocument get document; external DomHistory get history; - external double? get innerHeight; - external double? get innerWidth; + int? get innerHeight => + js_util.getProperty(this, 'innerHeight')?.toInt(); + int? get innerWidth => + js_util.getProperty(this, 'innerWidth')?.toInt(); external DomLocation get location; external DomNavigator get navigator; external DomVisualViewport? get visualViewport; @@ -50,7 +52,9 @@ extension DomWindowExtension on DomWindow { if (pseudoElt != null) pseudoElt ]) as DomCSSStyleDeclaration; external DomScreen? get screen; - external double requestAnimationFrame(DomRequestAnimationFrameCallback callback); + int requestAnimationFrame(DomRequestAnimationFrameCallback callback) => + js_util.callMethod(this, 'requestAnimationFrame', + [callback]).toInt(); void postMessage(Object message, String targetOrigin, [List? messagePorts]) => js_util.callMethod(this, 'postMessage', [ @@ -88,7 +92,8 @@ class DomNavigator {} extension DomNavigatorExtension on DomNavigator { external DomClipboard? get clipboard; - external double? get maxTouchPoints; + int? get maxTouchPoints => + js_util.getProperty(this, 'maxTouchPoints')?.toInt(); external String get vendor; external String get language; external String? get platform; @@ -174,7 +179,7 @@ class DomEvent {} extension DomEventExtension on DomEvent { external DomEventTarget? get target; - external double? get timeStamp; + external num? get timeStamp; external String get type; external void preventDefault(); external void stopPropagation(); @@ -198,8 +203,10 @@ DomEvent createDomEvent(String type, String name) { class DomProgressEvent extends DomEvent {} extension DomProgressEventExtension on DomProgressEvent { - external double? get loaded; - external double? get total; + int? get loaded => + js_util.getProperty(this, 'loaded')?.toInt(); + int? get total => + js_util.getProperty(this, 'total')?.toInt(); } @JS() @@ -250,8 +257,10 @@ DomElement createDomElement(String tag) => domDocument.createElement(tag); extension DomElementExtension on DomElement { Iterable get children => createDomListWrapper( js_util.getProperty<_DomList>(this, 'children')); - external double get clientHeight; - external double get clientWidth; + int get clientHeight => + js_util.getProperty(this, 'clientHeight').toInt(); + int get clientWidth => + js_util.getProperty(this, 'clientWidth').toInt(); external String get id; external set id(String id); external set innerHtml(String? html); @@ -271,13 +280,18 @@ extension DomElementExtension on DomElement { external void setAttribute(String name, Object value); void appendText(String text) => append(createDomText(text)); external void removeAttribute(String name); - external set tabIndex(double? value); - external double? get tabIndex; + set tabIndex(int? value) => + js_util.setProperty(this, 'tabIndex', value?.toDouble()); + int? get tabIndex => + js_util.getProperty(this, 'tabIndex')?.toInt(); external void focus(); - external double get scrollTop; - external set scrollTop(double value); - external double get scrollLeft; - external set scrollLeft(double value); + int get scrollTop => js_util.getProperty(this, 'scrollTop').toInt(); + set scrollTop(int value) => + js_util.setProperty(this, 'scrollTop', value.toDouble()); + int get scrollLeft => + js_util.getProperty(this, 'scrollLeft').toInt(); + set scrollLeft(int value) => + js_util.setProperty(this, 'scrollLeft', value.toDouble()); external DomTokenList get classList; external set className(String value); external String get className; @@ -457,7 +471,8 @@ extension DomCSSStyleDeclarationExtension on DomCSSStyleDeclaration { class DomHTMLElement extends DomElement {} extension DomHTMLElementExtension on DomHTMLElement { - external double get offsetWidth; + int get offsetWidth => + js_util.getProperty(this, 'offsetWidth').toInt(); } @JS() @@ -495,10 +510,14 @@ extension DomHTMLImageElementExtension on DomHTMLImageElement { external set alt(String? value); external String? get src; external set src(String? value); - external double get naturalWidth; - external double get naturalHeight; - external set width(double? value); - external set height(double? value); + int get naturalWidth => + js_util.getProperty(this, 'naturalWidth').toInt(); + int get naturalHeight => + js_util.getProperty(this, 'naturalHeight').toInt(); + set width(int? value) => + js_util.setProperty(this, 'width', value?.toDouble()); + set height(int? value) => + js_util.setProperty(this, 'height', value?.toDouble()); Future decode() => js_util.promiseToFuture(js_util.callMethod(this, 'decode', [])); } @@ -581,19 +600,23 @@ DomCanvasElement createDomCanvasElement({int? width, int? height}) { final DomCanvasElement canvas = domWindow.document.createElement('canvas') as DomCanvasElement; if (width != null) { - canvas.width = width.toDouble(); + canvas.width = width; } if (height != null) { - canvas.height = height.toDouble(); + canvas.height = height; } return canvas; } extension DomCanvasElementExtension on DomCanvasElement { - external double? get width; - external set width(double? value); - external double? get height; - external set height(double? value); + int? get width => + js_util.getProperty(this, 'width')?.toInt(); + set width(int? value) => + js_util.setProperty(this, 'width', value?.toDouble()); + int? get height => + js_util.getProperty(this, 'height')?.toInt(); + set height(int? value) => + js_util.setProperty(this, 'height', value?.toDouble()); external bool? get isConnected; String toDataURL([String type = 'image/png']) => js_util.callMethod(this, 'toDataURL', [type]); @@ -729,7 +752,8 @@ extension DomXMLHttpRequestExtension on DomXMLHttpRequest { external dynamic get response; external String? get responseText; external String get responseType; - external double? get status; + int? get status => + js_util.getProperty(this, 'status')?.toInt(); external set responseType(String value); void open(String method, String url, [bool? async]) => js_util.callMethod( this, 'open', [method, url, if (async != null) async]); @@ -747,7 +771,7 @@ Future domHttpRequest(String url, } xhr.addEventListener('load', allowInterop((DomEvent e) { - final int status = xhr.status!.toInt(); + final int status = xhr.status!; final bool accepted = status >= 200 && status < 300; final bool fileUri = status == 0; final bool notModified = status == 304; @@ -783,7 +807,7 @@ DomText createDomText(String data) => domDocument.createTextNode(data); class DomTextMetrics {} extension DomTextMetricsExtension on DomTextMetrics { - external double? get width; + external num? get width; } @JS() @@ -801,14 +825,14 @@ extension DomExceptionExtension on DomException { class DomRectReadOnly {} extension DomRectReadOnlyExtension on DomRectReadOnly { - external double get x; - external double get y; - external double get width; - external double get height; - external double get top; - external double get right; - external double get bottom; - external double get left; + external num get x; + external num get y; + external num get width; + external num get height; + external num get top; + external num get right; + external num get bottom; + external num get left; } DomRect createDomRectFromPoints(DomPoint a, DomPoint b) { @@ -860,8 +884,8 @@ typedef DomFontFaceSetForEachCallback = void Function( class DomVisualViewport extends DomEventTarget {} extension DomVisualViewportExtension on DomVisualViewport { - external double? get height; - external double? get width; + external num? get height; + external num? get width; } @JS() @@ -876,10 +900,10 @@ extension DomHTMLTextAreaElementExtension on DomHTMLTextAreaElement { external void select(); external set placeholder(String? value); external set name(String value); - external double? get selectionStart; - external double? get selectionEnd; - external set selectionStart(double? value); - external set selectionEnd(double? value); + external int? get selectionStart; + external int? get selectionEnd; + external set selectionStart(int? value); + external set selectionEnd(int? value); external String? get value; void setSelectionRange(int start, int end, [String? direction]) => js_util.callMethod(this, 'setSelectionRange', @@ -925,8 +949,10 @@ extension DomKeyboardEventExtension on DomKeyboardEvent { external String? get code; external bool get ctrlKey; external String? get key; - external double get keyCode; - external double get location; + int get keyCode => + js_util.getProperty(this, 'keyCode').toInt(); + int get location => + js_util.getProperty(this, 'location').toInt(); external bool get metaKey; external bool? get repeat; external bool get shiftKey; @@ -1081,14 +1107,16 @@ DomPath2D createDomPath2D([Object? path]) => class DomMouseEvent extends DomUIEvent {} extension DomMouseEventExtension on DomMouseEvent { - external double get clientX; - external double get clientY; - external double get offsetX; - external double get offsetY; + external num get clientX; + external num get clientY; + external num get offsetX; + external num get offsetY; DomPoint get client => DomPoint(clientX, clientY); DomPoint get offset => DomPoint(offsetX, offsetY); - external double get button; - external double? get buttons; + int get button => + js_util.getProperty(this, 'button').toInt(); + int? get buttons => + js_util.getProperty(this, 'buttons')?.toInt(); external bool getModifierState(String keyArg); } @@ -1101,11 +1129,14 @@ DomMouseEvent createDomMouseEvent(String type, [Map? init]) => class DomPointerEvent extends DomMouseEvent {} extension DomPointerEventExtension on DomPointerEvent { - external double? get pointerId; + int? get pointerId => + js_util.getProperty(this, 'pointerId')?.toInt(); external String? get pointerType; - external double? get pressure; - external double? get tiltX; - external double? get tiltY; + external num? get pressure; + int? get tiltX => + js_util.getProperty(this, 'tiltX')?.toInt(); + int? get tiltY => + js_util.getProperty(this, 'tiltY')?.toInt(); List getCoalescedEvents() => js_util.callMethod>( this, 'getCoalescedEvents', []).cast(); @@ -1121,9 +1152,10 @@ DomPointerEvent createDomPointerEvent(String type, class DomWheelEvent extends DomMouseEvent {} extension DomWheelEventExtension on DomWheelEvent { - external double get deltaX; - external double get deltaY; - external double get deltaMode; + external num get deltaX; + external num get deltaY; + int get deltaMode => + js_util.getProperty(this, 'deltaMode').toInt(); } @JS() @@ -1145,9 +1177,10 @@ extension DomTouchEventExtension on DomTouchEvent { class DomTouch {} extension DomTouchExtension on DomTouch { - external double? get identifier; - external double get clientX; - external double get clientY; + int? get identifier => + js_util.getProperty(this, 'identifier')?.toInt(); + external num get clientX; + external num get clientY; DomPoint get client => DomPoint(clientX, clientY); } @@ -1187,10 +1220,14 @@ extension DomHTMLInputElementExtension on DomHTMLInputElement { external set placeholder(String? value); external set name(String? value); external set autocomplete(String value); - external double? get selectionStart; - external double? get selectionEnd; - external set selectionStart(double? value); - external set selectionEnd(double? value); + int? get selectionStart => + js_util.getProperty(this, 'selectionStart')?.toInt(); + int? get selectionEnd => + js_util.getProperty(this, 'selectionEnd')?.toInt(); + set selectionStart(int? value) => + js_util.setProperty(this, 'selectionStart', value?.toDouble()); + set selectionEnd(int? value) => + js_util.setProperty(this, 'selectionEnd', value?.toDouble()); void setSelectionRange(int start, int end, [String? direction]) => js_util.callMethod(this, 'setSelectionRange', [start.toDouble(), end.toDouble(), @@ -1239,10 +1276,14 @@ DomHTMLLabelElement createDomHTMLLabelElement() => class DomOffscreenCanvas extends DomEventTarget {} extension DomOffscreenCanvasExtension on DomOffscreenCanvas { - external double? get height; - external double? get width; - external set height(double? value); - external set width(double? value); + int? get height => + js_util.getProperty(this, 'height')?.toInt(); + int? get width => + js_util.getProperty(this, 'width')?.toInt(); + set height(int? value) => + js_util.setProperty(this, 'height', value?.toDouble()); + set width(int? value) => + js_util.setProperty(this, 'width', value?.toDouble()); Object? getContext(String contextType, [Map? attributes]) { return js_util.callMethod(this, 'getContext', [ contextType, @@ -1307,10 +1348,10 @@ class DomCSSStyleSheet extends DomStyleSheet {} extension DomCSSStyleSheetExtension on DomCSSStyleSheet { external DomCSSRuleList get cssRules; - double insertRule(String rule, [int? index]) => js_util + int insertRule(String rule, [int? index]) => js_util .callMethod( this, 'insertRule', - [rule, if (index != null) index.toDouble()]); + [rule, if (index != null) index.toDouble()]).toInt(); } @JS() @@ -1419,7 +1460,8 @@ extension DomMessageChannelExtension on DomMessageChannel { class DomCSSRuleList {} extension DomCSSRuleListExtension on DomCSSRuleList { - external double get length; + int get length => + js_util.getProperty(this, 'length').toInt(); } /// A factory to create `TrustedTypePolicy` objects. @@ -1578,7 +1620,8 @@ bool domInstanceOfString(Object? element, String objectType) => class _DomList {} extension DomListExtension on _DomList { - external double get length; + int get length => + js_util.getProperty(this, 'length').toInt(); DomNode item(int index) => js_util.callMethod(this, 'item', [index.toDouble()]); } @@ -1612,7 +1655,7 @@ class _DomListWrapper extends Iterable { /// Override the length to avoid iterating through the whole collection. @override - int get length => list.length.toInt(); + int get length => list.length; } /// This is a work around for a `TypeError` which can be triggered by calling @@ -1638,9 +1681,9 @@ class DomV8BreakIterator {} extension DomV8BreakIteratorExtension on DomV8BreakIterator { external void adoptText(String text); - external double first(); - external double next(); - external double current(); + external int first(); + external int next(); + external int current(); external String breakType(); } diff --git a/lib/web_ui/lib/src/engine/embedder.dart b/lib/web_ui/lib/src/engine/embedder.dart index 0c98a3d259d86..42479a07c8b2f 100644 --- a/lib/web_ui/lib/src/engine/embedder.dart +++ b/lib/web_ui/lib/src/engine/embedder.dart @@ -340,7 +340,7 @@ class FlutterViewEmbedder { // Firefox returns correct values for innerHeight, innerWidth. // Firefox also triggers domWindow.onResize therefore this timer does // not need to be set up for Firefox. - final int initialInnerWidth = domWindow.innerWidth!.toInt(); + final int initialInnerWidth = domWindow.innerWidth!; // Counts how many times screen size was checked. It is checked up to 5 // times. int checkCount = 0; @@ -551,7 +551,7 @@ void applyGlobalCssRulesToSheet( // - See: https://github.com/flutter/flutter/issues/44803 sheet.insertRule( 'flt-paragraph, flt-span {line-height: 100%;}', - sheet.cssRules.length.toInt(), + sheet.cssRules.length, ); } @@ -571,7 +571,7 @@ void applyGlobalCssRulesToSheet( left: 0; } ''', - sheet.cssRules.length.toInt(), + sheet.cssRules.length, ); if (isWebKit) { @@ -579,7 +579,7 @@ void applyGlobalCssRulesToSheet( 'flt-semantics input[type=range]::-webkit-slider-thumb {' ' -webkit-appearance: none;' '}', - sheet.cssRules.length.toInt()); + sheet.cssRules.length); } if (isFirefox) { @@ -587,12 +587,12 @@ void applyGlobalCssRulesToSheet( 'input::-moz-selection {' ' background-color: transparent;' '}', - sheet.cssRules.length.toInt()); + sheet.cssRules.length); sheet.insertRule( 'textarea::-moz-selection {' ' background-color: transparent;' '}', - sheet.cssRules.length.toInt()); + sheet.cssRules.length); } else { // On iOS, the invisible semantic text field has a visible cursor and // selection highlight. The following 2 CSS rules force everything to be @@ -601,12 +601,12 @@ void applyGlobalCssRulesToSheet( 'input::selection {' ' background-color: transparent;' '}', - sheet.cssRules.length.toInt()); + sheet.cssRules.length); sheet.insertRule( 'textarea::selection {' ' background-color: transparent;' '}', - sheet.cssRules.length.toInt()); + sheet.cssRules.length); } sheet.insertRule(''' flt-semantics input, @@ -614,7 +614,7 @@ void applyGlobalCssRulesToSheet( flt-semantics [contentEditable="true"] { caret-color: transparent; } - ''', sheet.cssRules.length.toInt()); + ''', sheet.cssRules.length); // By default on iOS, Safari would highlight the element that's being tapped // on using gray background. This CSS rule disables that. @@ -623,7 +623,7 @@ void applyGlobalCssRulesToSheet( $glassPaneTagName * { -webkit-tap-highlight-color: transparent; } - ''', sheet.cssRules.length.toInt()); + ''', sheet.cssRules.length); } // Hide placeholder text @@ -633,7 +633,7 @@ void applyGlobalCssRulesToSheet( opacity: 0; } ''', - sheet.cssRules.length.toInt(), + sheet.cssRules.length, ); // This css prevents an autofill overlay brought by the browser during @@ -647,7 +647,7 @@ void applyGlobalCssRulesToSheet( .transparentTextEditing:-webkit-autofill:active { -webkit-transition-delay: 99999s; } - ''', sheet.cssRules.length.toInt()); + ''', sheet.cssRules.length); } } diff --git a/lib/web_ui/lib/src/engine/html/scene.dart b/lib/web_ui/lib/src/engine/html/scene.dart index 9beba6a4a6537..44831d6a8876c 100644 --- a/lib/web_ui/lib/src/engine/html/scene.dart +++ b/lib/web_ui/lib/src/engine/html/scene.dart @@ -48,8 +48,8 @@ class PersistedScene extends PersistedContainerSurface { // TODO(yjbanov): in the add2app scenario where we might be hosted inside // a custom element, this will be different. We will need to // update this code when we add add2app support. - final double screenWidth = domWindow.innerWidth!; - final double screenHeight = domWindow.innerHeight!; + final double screenWidth = domWindow.innerWidth!.toDouble(); + final double screenHeight = domWindow.innerHeight!.toDouble(); localClipBounds = ui.Rect.fromLTRB(0, 0, screenWidth, screenHeight); projectedClip = null; } diff --git a/lib/web_ui/lib/src/engine/html/surface_stats.dart b/lib/web_ui/lib/src/engine/html/surface_stats.dart index 841c318c441ed..339bf85ec2d05 100644 --- a/lib/web_ui/lib/src/engine/html/surface_stats.dart +++ b/lib/web_ui/lib/src/engine/html/surface_stats.dart @@ -97,7 +97,7 @@ class DebugSurfaceStats { DomCanvasRenderingContext2D? _debugSurfaceStatsOverlayCtx; void debugRepaintSurfaceStatsOverlay(PersistedScene scene) { - final int overlayWidth = domWindow.innerWidth!.toInt(); + final int overlayWidth = domWindow.innerWidth!; const int rowHeight = 30; const int rowCount = 4; const int overlayHeight = rowHeight * rowCount; @@ -296,7 +296,7 @@ void debugPrintSurfaceStats(PersistedScene scene, int frameNumber) { final int pixelCount = canvasElements .cast() .map((DomCanvasElement e) { - final int pixels = (e.width! * e.height!).toInt(); + final int pixels = e.width! * e.height!; canvasInfo.writeln(' - ${e.width!} x ${e.height!} = $pixels pixels'); return pixels; }).fold(0, (int total, int pixels) => total + pixels); diff --git a/lib/web_ui/lib/src/engine/html_image_codec.dart b/lib/web_ui/lib/src/engine/html_image_codec.dart index 742464446b1cc..11c4d29428d4d 100644 --- a/lib/web_ui/lib/src/engine/html_image_codec.dart +++ b/lib/web_ui/lib/src/engine/html_image_codec.dart @@ -53,8 +53,8 @@ class HtmlCodec implements ui.Codec { // ignore: unawaited_futures imgElement.decode().then((dynamic _) { chunkCallback?.call(100, 100); - int naturalWidth = imgElement.naturalWidth.toInt(); - int naturalHeight = imgElement.naturalHeight.toInt(); + int naturalWidth = imgElement.naturalWidth; + int naturalHeight = imgElement.naturalHeight; // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=700533. if (naturalWidth == 0 && naturalHeight == 0 && browserEngine == BrowserEngine.firefox) { const int kDefaultImageSizeFallback = 300; @@ -103,8 +103,8 @@ class HtmlCodec implements ui.Codec { imgElement.removeEventListener('error', errorListener); final HtmlImage image = HtmlImage( imgElement, - imgElement.naturalWidth.toInt(), - imgElement.naturalHeight.toInt(), + imgElement.naturalWidth, + imgElement.naturalHeight, ); completer.complete(SingleFrameInfo(image)); }); @@ -188,8 +188,8 @@ class HtmlImage implements ui.Image { case ui.ImageByteFormat.rawRgba: case ui.ImageByteFormat.rawStraightRgba: final DomCanvasElement canvas = createDomCanvasElement() - ..width = width.toDouble() - ..height = height.toDouble(); + ..width = width + ..height = height; final DomCanvasRenderingContext2D ctx = canvas.context2D; ctx.drawImage(imgElement, 0, 0); final DomImageData imageData = ctx.getImageData(0, 0, width, height); diff --git a/lib/web_ui/lib/src/engine/keyboard_binding.dart b/lib/web_ui/lib/src/engine/keyboard_binding.dart index 0e8226a15aa01..b5403ac3eedee 100644 --- a/lib/web_ui/lib/src/engine/keyboard_binding.dart +++ b/lib/web_ui/lib/src/engine/keyboard_binding.dart @@ -190,9 +190,9 @@ class FlutterHtmlKeyboardEvent { String get type => _event.type; String? get code => _event.code; String? get key => _event.key; - int get keyCode => _event.keyCode.toInt(); + int get keyCode => _event.keyCode; bool? get repeat => _event.repeat; - int? get location => _event.location.toInt(); + int? get location => _event.location; num? get timeStamp => _event.timeStamp; bool get altKey => _event.altKey; bool get ctrlKey => _event.ctrlKey; diff --git a/lib/web_ui/lib/src/engine/picture.dart b/lib/web_ui/lib/src/engine/picture.dart index 3b9083ff04231..074dc9f27856d 100644 --- a/lib/web_ui/lib/src/engine/picture.dart +++ b/lib/web_ui/lib/src/engine/picture.dart @@ -64,8 +64,8 @@ class EnginePicture implements ui.Picture { final String imageDataUrl = canvas.toDataUrl(); final DomHTMLImageElement imageElement = createDomHTMLImageElement() ..src = imageDataUrl - ..width = width.toDouble() - ..height = height.toDouble(); + ..width = width + ..height = height; // The image loads asynchronously. We need to wait before returning, // otherwise the returned HtmlImage will be temporarily unusable. diff --git a/lib/web_ui/lib/src/engine/platform_dispatcher.dart b/lib/web_ui/lib/src/engine/platform_dispatcher.dart index e7d6f80b7f355..3cfbffeb1fcc2 100644 --- a/lib/web_ui/lib/src/engine/platform_dispatcher.dart +++ b/lib/web_ui/lib/src/engine/platform_dispatcher.dart @@ -185,9 +185,9 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher { /// Returns device pixel ratio returned by browser. static double get browserDevicePixelRatio { - final double ratio = domWindow.devicePixelRatio; - // Guard against WebOS returning 0. - return (ratio == 0.0) ? 1.0 : ratio; + final double? ratio = domWindow.devicePixelRatio as double?; + // Guard against WebOS returning 0 and other browsers returning null. + return (ratio == null || ratio == 0.0) ? 1.0 : ratio; } /// A callback invoked when any window begins a frame. diff --git a/lib/web_ui/lib/src/engine/pointer_binding.dart b/lib/web_ui/lib/src/engine/pointer_binding.dart index 639814d3a9dfb..72f646c7c473a 100644 --- a/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -342,9 +342,9 @@ mixin _WheelEventListenerMixin on _BaseAdapter { // Flutter only supports pixel scroll delta. Convert deltaMode values // to pixels. - double deltaX = event.deltaX; - double deltaY = event.deltaY; - switch (event.deltaMode.toInt()) { + double deltaX = event.deltaX as double; + double deltaY = event.deltaY as double; + switch (event.deltaMode) { case domDeltaLine: _defaultScrollLineHeight ??= _computeDefaultScrollLineHeight(); deltaX *= _defaultScrollLineHeight!; @@ -374,9 +374,9 @@ mixin _WheelEventListenerMixin on _BaseAdapter { kind: ui.PointerDeviceKind.mouse, signalKind: ui.PointerSignalKind.scroll, device: _mouseDeviceId, - physicalX: event.clientX * ui.window.devicePixelRatio, - physicalY: event.clientY * ui.window.devicePixelRatio, - buttons: event.buttons!.toInt(), + physicalX: event.clientX.toDouble() * ui.window.devicePixelRatio, + physicalY: event.clientY.toDouble() * ui.window.devicePixelRatio, + buttons: event.buttons!, pressure: 1.0, pressureMax: 1.0, scrollDeltaX: deltaX, @@ -647,14 +647,14 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final List pointerData = []; final _ButtonSanitizer sanitizer = _ensureSanitizer(device); final _SanitizedDetails? up = - sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!.toInt()); + sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!); if (up != null) { _convertEventsToPointerData(data: pointerData, event: event, details: up); } final _SanitizedDetails down = sanitizer.sanitizeDownEvent( - button: event.button.toInt(), - buttons: event.buttons!.toInt(), + button: event.button, + buttons: event.buttons!, ); _convertEventsToPointerData(data: pointerData, event: event, details: down); _callback(pointerData); @@ -666,11 +666,11 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final List pointerData = []; final List expandedEvents = _expandEvents(event); for (final DomPointerEvent event in expandedEvents) { - final _SanitizedDetails? up = sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!.toInt()); + final _SanitizedDetails? up = sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!); if (up != null) { _convertEventsToPointerData(data: pointerData, event: event, details: up); } - final _SanitizedDetails move = sanitizer.sanitizeMoveEvent(buttons: event.buttons!.toInt()); + final _SanitizedDetails move = sanitizer.sanitizeMoveEvent(buttons: event.buttons!); _convertEventsToPointerData(data: pointerData, event: event, details: move); } _callback(pointerData); @@ -680,7 +680,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final int device = _getPointerId(event); final _ButtonSanitizer sanitizer = _ensureSanitizer(device); final List pointerData = []; - final _SanitizedDetails? details = sanitizer.sanitizeLeaveEvent(buttons: event.buttons!.toInt()); + final _SanitizedDetails? details = sanitizer.sanitizeLeaveEvent(buttons: event.buttons!); if (details != null) { _convertEventsToPointerData(data: pointerData, event: event, details: details); _callback(pointerData); @@ -691,7 +691,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final int device = _getPointerId(event); if (_hasSanitizer(device)) { final List pointerData = []; - final _SanitizedDetails? details = _getSanitizer(device).sanitizeUpEvent(buttons: event.buttons?.toInt()); + final _SanitizedDetails? details = _getSanitizer(device).sanitizeUpEvent(buttons: event.buttons); _removePointerIfUnhoverable(event); if (details != null) { _convertEventsToPointerData(data: pointerData, event: event, details: details); @@ -739,8 +739,8 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { kind: kind, signalKind: ui.PointerSignalKind.none, device: _getPointerId(event), - physicalX: event.clientX * ui.window.devicePixelRatio, - physicalY: event.clientY * ui.window.devicePixelRatio, + physicalX: event.clientX.toDouble() * ui.window.devicePixelRatio, + physicalY: event.clientY.toDouble() * ui.window.devicePixelRatio, buttons: details.buttons, pressure: pressure == null ? 0.0 : pressure.toDouble(), pressureMax: 1.0, @@ -781,13 +781,12 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { // might come before any PointerEvents, and since wheel events don't contain // pointerId we always assign `device: _mouseDeviceId` to them. final ui.PointerDeviceKind kind = _pointerTypeToDeviceKind(event.pointerType!); - return kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : - event.pointerId!.toInt(); + return kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId!; } /// Tilt angle is -90 to + 90. Take maximum deflection and convert to radians. double _computeHighestTilt(DomPointerEvent e) => - (e.tiltX!.abs() > e.tiltY!.abs() ? e.tiltX : e.tiltY)! / + (e.tiltX!.abs() > e.tiltY!.abs() ? e.tiltX : e.tiltY)!.toDouble() / 180.0 * math.pi; } @@ -834,9 +833,9 @@ class _TouchAdapter extends _BaseAdapter { final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (final DomTouch touch in event.changedTouches!.cast()) { - final bool nowPressed = _isTouchPressed(touch.identifier!.toInt()); + final bool nowPressed = _isTouchPressed(touch.identifier!); if (!nowPressed) { - _pressTouch(touch.identifier!.toInt()); + _pressTouch(touch.identifier!); _convertEventToPointerData( data: pointerData, change: ui.PointerChange.down, @@ -854,7 +853,7 @@ class _TouchAdapter extends _BaseAdapter { final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (final DomTouch touch in event.changedTouches!.cast()) { - final bool nowPressed = _isTouchPressed(touch.identifier!.toInt()); + final bool nowPressed = _isTouchPressed(touch.identifier!); if (nowPressed) { _convertEventToPointerData( data: pointerData, @@ -875,9 +874,9 @@ class _TouchAdapter extends _BaseAdapter { final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (final DomTouch touch in event.changedTouches!.cast()) { - final bool nowPressed = _isTouchPressed(touch.identifier!.toInt()); + final bool nowPressed = _isTouchPressed(touch.identifier!); if (nowPressed) { - _unpressTouch(touch.identifier!.toInt()); + _unpressTouch(touch.identifier!); _convertEventToPointerData( data: pointerData, change: ui.PointerChange.up, @@ -894,9 +893,9 @@ class _TouchAdapter extends _BaseAdapter { final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (final DomTouch touch in event.changedTouches!.cast()) { - final bool nowPressed = _isTouchPressed(touch.identifier!.toInt()); + final bool nowPressed = _isTouchPressed(touch.identifier!); if (nowPressed) { - _unpressTouch(touch.identifier!.toInt()); + _unpressTouch(touch.identifier!); _convertEventToPointerData( data: pointerData, change: ui.PointerChange.cancel, @@ -922,9 +921,9 @@ class _TouchAdapter extends _BaseAdapter { change: change, timeStamp: timeStamp, signalKind: ui.PointerSignalKind.none, - device: touch.identifier!.toInt(), - physicalX: touch.clientX * ui.window.devicePixelRatio, - physicalY: touch.clientY * ui.window.devicePixelRatio, + device: touch.identifier!, + physicalX: touch.clientX.toDouble() * ui.window.devicePixelRatio, + physicalY: touch.clientY.toDouble() * ui.window.devicePixelRatio, buttons: pressed ? _kPrimaryMouseButton : 0, pressure: 1.0, pressureMax: 1.0, @@ -993,14 +992,14 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addMouseEventListener(glassPaneElement, 'mousedown', (DomMouseEvent event) { final List pointerData = []; final _SanitizedDetails? up = - _sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!.toInt()); + _sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!); if (up != null) { _convertEventsToPointerData(data: pointerData, event: event, details: up); } final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeDownEvent( - button: event.button.toInt(), - buttons: event.buttons!.toInt(), + button: event.button, + buttons: event.buttons!, ); _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); @@ -1008,18 +1007,18 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addMouseEventListener(domWindow, 'mousemove', (DomMouseEvent event) { final List pointerData = []; - final _SanitizedDetails? up = _sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!.toInt()); + final _SanitizedDetails? up = _sanitizer.sanitizeMissingRightClickUp(buttons: event.buttons!); if (up != null) { _convertEventsToPointerData(data: pointerData, event: event, details: up); } - final _SanitizedDetails move = _sanitizer.sanitizeMoveEvent(buttons: event.buttons!.toInt()); + final _SanitizedDetails move = _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); _convertEventsToPointerData(data: pointerData, event: event, details: move); _callback(pointerData); }); _addMouseEventListener(glassPaneElement, 'mouseleave', (DomMouseEvent event) { final List pointerData = []; - final _SanitizedDetails? details = _sanitizer.sanitizeLeaveEvent(buttons: event.buttons!.toInt()); + final _SanitizedDetails? details = _sanitizer.sanitizeLeaveEvent(buttons: event.buttons!); if (details != null) { _convertEventsToPointerData(data: pointerData, event: event, details: details); _callback(pointerData); @@ -1028,7 +1027,7 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addMouseEventListener(domWindow, 'mouseup', (DomMouseEvent event) { final List pointerData = []; - final _SanitizedDetails? sanitizedDetails = _sanitizer.sanitizeUpEvent(buttons: event.buttons?.toInt()); + final _SanitizedDetails? sanitizedDetails = _sanitizer.sanitizeUpEvent(buttons: event.buttons); if (sanitizedDetails != null) { _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); @@ -1057,8 +1056,8 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { kind: ui.PointerDeviceKind.mouse, signalKind: ui.PointerSignalKind.none, device: _mouseDeviceId, - physicalX: event.clientX * ui.window.devicePixelRatio, - physicalY: event.clientY * ui.window.devicePixelRatio, + physicalX: event.clientX.toDouble() * ui.window.devicePixelRatio, + physicalY: event.clientY.toDouble() * ui.window.devicePixelRatio, buttons: details.buttons, pressure: 1.0, pressureMax: 1.0, diff --git a/lib/web_ui/lib/src/engine/safe_browser_api.dart b/lib/web_ui/lib/src/engine/safe_browser_api.dart index 77323d7780959..b534fa3085485 100644 --- a/lib/web_ui/lib/src/engine/safe_browser_api.dart +++ b/lib/web_ui/lib/src/engine/safe_browser_api.dart @@ -202,8 +202,8 @@ DomCanvasElement? tryCreateCanvasElement(int width, int height) { return null; } try { - canvas.width = width.toDouble(); - canvas.height = height.toDouble(); + canvas.width = width; + canvas.height = height; } catch (e) { // It seems the tribal knowledge of why we anticipate an exception while // setting width/height on a non-null canvas and why it's OK to return null @@ -336,14 +336,14 @@ class DecodeOptions { class VideoFrame implements DomCanvasImageSource {} extension VideoFrameExtension on VideoFrame { - external double allocationSize(); + external int allocationSize(); external JsPromise copyTo(Uint8List destination); external String? get format; - external double get codedWidth; - external double get codedHeight; - external double get displayWidth; - external double get displayHeight; - external double? get duration; + external int get codedWidth; + external int get codedHeight; + external int get displayWidth; + external int get displayHeight; + external int? get duration; external VideoFrame clone(); external void close(); } @@ -374,8 +374,8 @@ extension ImageTrackListExtension on ImageTrackList { class ImageTrack {} extension ImageTrackExtension on ImageTrack { - external double get repetitionCount; - external double get frameCount; + external int get repetitionCount; + external int get frameCount; } void scaleCanvas2D(Object context2d, num x, num y) { @@ -990,11 +990,11 @@ class OffScreenCanvas { width = requestedWidth; height = requestedHeight; if(offScreenCanvas != null) { - offScreenCanvas!.width = requestedWidth.toDouble(); - offScreenCanvas!.height = requestedHeight.toDouble(); + offScreenCanvas!.width = requestedWidth; + offScreenCanvas!.height = requestedHeight; } else if (canvasElement != null) { - canvasElement!.width = requestedWidth.toDouble(); - canvasElement!.height = requestedHeight.toDouble(); + canvasElement!.width = requestedWidth; + canvasElement!.height = requestedHeight; _updateCanvasCssSize(canvasElement!); } } diff --git a/lib/web_ui/lib/src/engine/semantics/scrollable.dart b/lib/web_ui/lib/src/engine/semantics/scrollable.dart index 06910c7baaa76..839a9c7bd5128 100644 --- a/lib/web_ui/lib/src/engine/semantics/scrollable.dart +++ b/lib/web_ui/lib/src/engine/semantics/scrollable.dart @@ -131,10 +131,10 @@ class Scrollable extends RoleManager { /// The value of "scrollTop" or "scrollLeft", depending on the scroll axis. int get _domScrollPosition { if (semanticsObject.isVerticalScrollContainer) { - return semanticsObject.element.scrollTop.toInt(); + return semanticsObject.element.scrollTop; } else { assert(semanticsObject.isHorizontalScrollContainer); - return semanticsObject.element.scrollLeft.toInt(); + return semanticsObject.element.scrollLeft; } } @@ -167,9 +167,9 @@ class Scrollable extends RoleManager { ..width = '${rect.width.round()}px' ..height = '${canonicalNeutralScrollPosition}px'; - element.scrollTop = canonicalNeutralScrollPosition.toDouble(); + element.scrollTop = canonicalNeutralScrollPosition; // Read back because the effective value depends on the amount of content. - _effectiveNeutralScrollPosition = element.scrollTop.toInt(); + _effectiveNeutralScrollPosition = element.scrollTop; semanticsObject ..verticalContainerAdjustment = _effectiveNeutralScrollPosition.toDouble() @@ -184,9 +184,9 @@ class Scrollable extends RoleManager { ..width = '${canonicalNeutralScrollPosition}px' ..height = '${rect.height.round()}px'; - element.scrollLeft = canonicalNeutralScrollPosition.toDouble(); + element.scrollLeft = canonicalNeutralScrollPosition; // Read back because the effective value depends on the amount of content. - _effectiveNeutralScrollPosition = element.scrollLeft.toInt(); + _effectiveNeutralScrollPosition = element.scrollLeft; semanticsObject ..verticalContainerAdjustment = 0.0 ..horizontalContainerAdjustment = diff --git a/lib/web_ui/lib/src/engine/text/font_collection.dart b/lib/web_ui/lib/src/engine/text/font_collection.dart index 6133ade36050b..029d5ee2c679f 100644 --- a/lib/web_ui/lib/src/engine/text/font_collection.dart +++ b/lib/web_ui/lib/src/engine/text/font_collection.dart @@ -289,7 +289,7 @@ class _PolyfillFontManager extends FontManager { paragraph.text = _testString; domDocument.body!.append(paragraph); - final int sansSerifWidth = paragraph.offsetWidth.toInt(); + final int sansSerifWidth = paragraph.offsetWidth; paragraph.style.fontFamily = "'$family', $fallbackFontName"; diff --git a/lib/web_ui/lib/src/engine/text/line_breaker.dart b/lib/web_ui/lib/src/engine/text/line_breaker.dart index c2bf0ab1e2090..5c30f81ce95c9 100644 --- a/lib/web_ui/lib/src/engine/text/line_breaker.dart +++ b/lib/web_ui/lib/src/engine/text/line_breaker.dart @@ -80,7 +80,7 @@ class V8LineBreakFragmenter extends TextFragmenter implements LineBreakFragmente while (iterator.next() != -1) { final LineBreakType type = _getBreakType(iterator); - final int fragmentEnd = iterator.current().toInt(); + final int fragmentEnd = iterator.current(); int trailingNewlines = 0; int trailingSpaces = 0; @@ -128,7 +128,7 @@ class V8LineBreakFragmenter extends TextFragmenter implements LineBreakFragmente /// Gets break type from v8BreakIterator. LineBreakType _getBreakType(DomV8BreakIterator iterator) { - final int fragmentEnd = iterator.current().toInt(); + final int fragmentEnd = iterator.current(); // I don't know why v8BreakIterator uses the type "none" to mean "soft break". if (iterator.breakType() != 'none') { diff --git a/lib/web_ui/lib/src/engine/text/measurement.dart b/lib/web_ui/lib/src/engine/text/measurement.dart index 0a8ccddfe16e1..6eb95a971575d 100644 --- a/lib/web_ui/lib/src/engine/text/measurement.dart +++ b/lib/web_ui/lib/src/engine/text/measurement.dart @@ -102,7 +102,7 @@ double measureSubstring( } else { final String sub = start == 0 && end == text.length ? text : text.substring(start, end); - width = canvasContext.measureText(sub).width!; + width = canvasContext.measureText(sub).width!.toDouble(); } _lastStart = start; diff --git a/lib/web_ui/lib/src/engine/text/ruler.dart b/lib/web_ui/lib/src/engine/text/ruler.dart index bce0e6bbd08ff..18c2d80821e91 100644 --- a/lib/web_ui/lib/src/engine/text/ruler.dart +++ b/lib/web_ui/lib/src/engine/text/ruler.dart @@ -137,7 +137,7 @@ class TextDimensions { /// The height of the paragraph being measured. double get height { - double cachedHeight = _readAndCacheMetrics().height; + double cachedHeight = _readAndCacheMetrics().height as double; if (browserEngine == BrowserEngine.firefox && // In the flutter tester environment, we use a predictable-size for font // measurement tests. @@ -170,7 +170,7 @@ class TextHeightRuler { final TextDimensions _dimensions = TextDimensions(domDocument.createElement('flt-paragraph')); /// The alphabetic baseline for this ruler's [textHeightStyle]. - late final double alphabeticBaseline = _probe.getBoundingClientRect().bottom; + late final double alphabeticBaseline = _probe.getBoundingClientRect().bottom.toDouble(); /// The height for this ruler's [textHeightStyle]. late final double height = _dimensions.height; diff --git a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart index 76b5b4543ca2a..fda0324a3f506 100644 --- a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart @@ -724,15 +724,15 @@ class EditingState { final DomHTMLInputElement element = domElement! as DomHTMLInputElement; return EditingState( text: element.value, - baseOffset: element.selectionStart?.toInt(), - extentOffset: element.selectionEnd?.toInt()); + baseOffset: element.selectionStart, + extentOffset: element.selectionEnd); } else if (domInstanceOfString(domElement, 'HTMLTextAreaElement')) { final DomHTMLTextAreaElement element = domElement! as DomHTMLTextAreaElement; return EditingState( text: element.value, - baseOffset: element.selectionStart?.toInt(), - extentOffset: element.selectionEnd?.toInt()); + baseOffset: element.selectionStart, + extentOffset: element.selectionEnd); } else { throw UnsupportedError('Initialized with unsupported input type'); } diff --git a/lib/web_ui/lib/src/engine/window.dart b/lib/web_ui/lib/src/engine/window.dart index 7010ece2079c6..953235213008e 100644 --- a/lib/web_ui/lib/src/engine/window.dart +++ b/lib/web_ui/lib/src/engine/window.dart @@ -247,14 +247,14 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow { /// text editing to make sure inset is correctly reported to /// framework. final double docWidth = - domDocument.documentElement!.clientWidth; + domDocument.documentElement!.clientWidth.toDouble(); final double docHeight = - domDocument.documentElement!.clientHeight; + domDocument.documentElement!.clientHeight.toDouble(); windowInnerWidth = docWidth * devicePixelRatio; windowInnerHeight = docHeight * devicePixelRatio; } else { - windowInnerWidth = viewport.width! * devicePixelRatio; - windowInnerHeight = viewport.height! * devicePixelRatio; + windowInnerWidth = viewport.width!.toDouble() * devicePixelRatio; + windowInnerHeight = viewport.height!.toDouble() * devicePixelRatio; } } else { windowInnerWidth = domWindow.innerWidth! * devicePixelRatio; @@ -280,7 +280,7 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow { windowInnerHeight = domDocument.documentElement!.clientHeight * devicePixelRatio; } else { - windowInnerHeight = viewport.height! * devicePixelRatio; + windowInnerHeight = viewport.height!.toDouble() * devicePixelRatio; } } else { windowInnerHeight = domWindow.innerHeight! * devicePixelRatio; @@ -309,8 +309,8 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow { double width = 0; if (domWindow.visualViewport != null) { height = - domWindow.visualViewport!.height! * devicePixelRatio; - width = domWindow.visualViewport!.width! * devicePixelRatio; + domWindow.visualViewport!.height!.toDouble() * devicePixelRatio; + width = domWindow.visualViewport!.width!.toDouble() * devicePixelRatio; } else { height = domWindow.innerHeight! * devicePixelRatio; width = domWindow.innerWidth! * devicePixelRatio; diff --git a/lib/web_ui/test/engine/surface/scene_builder_test.dart b/lib/web_ui/test/engine/surface/scene_builder_test.dart index e0535d7351847..05dd5b7d1c38c 100644 --- a/lib/web_ui/test/engine/surface/scene_builder_test.dart +++ b/lib/web_ui/test/engine/surface/scene_builder_test.dart @@ -35,7 +35,7 @@ void testMain() { test('pushTransform implements surface lifecycle', () { testLayerLifeCycle((ui.SceneBuilder sceneBuilder, ui.EngineLayer? oldLayer) { return sceneBuilder.pushTransform( - (Matrix4.identity()..scale(domWindow.devicePixelRatio)).toFloat64()); + (Matrix4.identity()..scale(domWindow.devicePixelRatio as double)).toFloat64()); }, () { return ''''''; }); @@ -595,8 +595,8 @@ void testMain() { final DomElement content = builder.build().webOnlyRootElement!; final DomCanvasElement canvas = content.querySelector('canvas')! as DomCanvasElement; - final int unscaledWidth = canvas.width!.toInt(); - final int unscaledHeight = canvas.height!.toInt(); + final int unscaledWidth = canvas.width!; + final int unscaledHeight = canvas.height!; // Force update to scene which will utilize reuse code path. final SurfaceSceneBuilder builder2 = SurfaceSceneBuilder(); @@ -627,8 +627,8 @@ void testMain() { final DomElement content = builder.build().webOnlyRootElement!; final DomCanvasElement canvas = content.querySelector('canvas')! as DomCanvasElement; - final int unscaledWidth = canvas.width!.toInt(); - final int unscaledHeight = canvas.height!.toInt(); + final int unscaledWidth = canvas.width!; + final int unscaledHeight = canvas.height!; // Force update to scene which will utilize reuse code path. final SurfaceSceneBuilder builder2 = SurfaceSceneBuilder(); diff --git a/lib/web_ui/test/engine/surface/surface_test.dart b/lib/web_ui/test/engine/surface/surface_test.dart index 4b78dec4f7238..5a57d85ed6c59 100644 --- a/lib/web_ui/test/engine/surface/surface_test.dart +++ b/lib/web_ui/test/engine/surface/surface_test.dart @@ -160,7 +160,7 @@ void testMain() { final SurfaceSceneBuilder builder1 = SurfaceSceneBuilder(); final PersistedTransform a1 = builder1.pushTransform( - (Matrix4.identity()..scale(domWindow.devicePixelRatio)).toFloat64()) as PersistedTransform; + (Matrix4.identity()..scale(domWindow.devicePixelRatio as double)).toFloat64()) as PersistedTransform; final PersistedOpacity b1 = builder1.pushOpacity(100) as PersistedOpacity; final PersistedTransform c1 = builder1.pushTransform(Matrix4.identity().toFloat64()) as PersistedTransform; @@ -181,7 +181,7 @@ void testMain() { final SurfaceSceneBuilder builder2 = SurfaceSceneBuilder(); final PersistedTransform a2 = builder2.pushTransform( - (Matrix4.identity()..scale(domWindow.devicePixelRatio)).toFloat64(), + (Matrix4.identity()..scale(domWindow.devicePixelRatio as double)).toFloat64(), oldLayer: a1) as PersistedTransform; final PersistedTransform c2 = builder2.pushTransform(Matrix4.identity().toFloat64(), oldLayer: c1) as PersistedTransform;