From 45c1fe434894e222c2cd895a3da1228605fe4366 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Thu, 25 May 2023 09:46:58 -0700 Subject: [PATCH] Implement PlatformDispatcher.displays on web (flutter/engine#42297) I missed this before. --- .../lib/src/engine/platform_dispatcher.dart | 27 ++++++++++++++++++- .../lib/web_ui/lib/src/engine/window.dart | 25 +---------------- .../platform_dispatcher_test.dart | 4 +++ 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart index 4dee3ef5724..7ff4c674121 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart @@ -73,6 +73,24 @@ class HighContrastSupport { } } +class EngineFlutterDisplay extends ui.Display { + EngineFlutterDisplay({ + required this.id, + required this.devicePixelRatio, + required this.size, + required this.refreshRate, + }); + + @override + final int id; + @override + final double devicePixelRatio; + @override + final ui.Size size; + @override + final double refreshRate; +} + /// Platform event dispatcher. /// /// This is the central entry point for platform messages and configuration @@ -135,7 +153,14 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher { } @override - Iterable get displays => []; + Iterable get displays => [ + EngineFlutterDisplay( + id: 0, + size: ui.Size(domWindow.screen?.width ?? 0, domWindow.screen?.height ?? 0), + devicePixelRatio: domWindow.devicePixelRatio, + refreshRate: 60, + ) + ]; /// The current list of windows. @override diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/window.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/window.dart index 3076ada9d2d..1370d458029 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/window.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/window.dart @@ -29,24 +29,6 @@ const bool debugPrintPlatformMessages = false; /// The view ID for the implicit flutter view provided by the platform. const int kImplicitViewId = 0; -class EngineFlutterDisplay extends ui.Display { - EngineFlutterDisplay({ - required this.id, - required this.devicePixelRatio, - required this.size, - required this.refreshRate, - }); - - @override - final int id; - @override - final double devicePixelRatio; - @override - final ui.Size size; - @override - final double refreshRate; -} - /// The Web implementation of [ui.SingletonFlutterWindow]. class EngineFlutterWindow extends ui.SingletonFlutterWindow { EngineFlutterWindow(this.viewId, this.platformDispatcher) { @@ -66,12 +48,7 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow { @override ui.Display get display { - return EngineFlutterDisplay( - id: 0, - size: ui.Size(domWindow.screen?.width ?? 0, domWindow.screen?.height ?? 0), - devicePixelRatio: domWindow.devicePixelRatio, - refreshRate: 60, - ); + return ui.PlatformDispatcher.instance.displays.first; } @override diff --git a/engine/src/flutter/lib/web_ui/test/engine/platform_dispatcher/platform_dispatcher_test.dart b/engine/src/flutter/lib/web_ui/test/engine/platform_dispatcher/platform_dispatcher_test.dart index 7cecb112425..366011e9625 100644 --- a/engine/src/flutter/lib/web_ui/test/engine/platform_dispatcher/platform_dispatcher_test.dart +++ b/engine/src/flutter/lib/web_ui/test/engine/platform_dispatcher/platform_dispatcher_test.dart @@ -18,6 +18,10 @@ void testMain() { ensureFlutterViewEmbedderInitialized(); group('PlatformDispatcher', () { + test('reports at least one display', () { + expect(ui.PlatformDispatcher.instance.displays.length, greaterThan(0)); + }); + test('high contrast in accessibilityFeatures has the correct value', () { final MockHighContrastSupport mockHighContrast = MockHighContrastSupport();