File tree Expand file tree Collapse file tree 4 files changed +27
-2
lines changed
engine/src/flutter/lib/web_ui Expand file tree Collapse file tree 4 files changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -40,9 +40,16 @@ class EngineFlutterDisplay extends ui.Display {
4040 ///
4141 /// This value cannot be overriden by tests, for example.
4242 double get browserDevicePixelRatio {
43- final double ratio = domWindow.devicePixelRatio;
43+ double ratio = domWindow.devicePixelRatio;
4444 // Guard against WebOS returning 0.
45- return (ratio == 0.0 ) ? 1.0 : ratio;
45+ ratio = (ratio == 0.0 ) ? 1.0 : ratio;
46+
47+ // The device pixel ratio is also affected by the scale factor of the
48+ // viewport. For example, on Chrome for Android, if the page is requested
49+ // with "Request Desktop Site" enabled, then the viewport size will be
50+ // very large, with the viewport scale less than 1.
51+ final double scale = domWindow.visualViewport? .scale ?? 1.0 ;
52+ return ratio * scale;
4653 }
4754
4855 /// Overrides the default device pixel ratio.
Original file line number Diff line number Diff line change @@ -2139,6 +2139,10 @@ extension DomVisualViewportExtension on DomVisualViewport {
21392139 @JS ('width' )
21402140 external JSNumber ? get _width;
21412141 double ? get width => _width? .toDartDouble;
2142+
2143+ @JS ('scale' )
2144+ external JSNumber ? get _scale;
2145+ double ? get scale => _scale? .toDartDouble;
21422146}
21432147
21442148@JS ()
Original file line number Diff line number Diff line change @@ -904,6 +904,9 @@ class BitmapSize {
904904 @override
905905 int get hashCode => Object .hash (width, height);
906906
907+ @override
908+ String toString () => 'BitmapSize($width , $height )' ;
909+
907910 ui.Size toSize () {
908911 return ui.Size (width.toDouble (), height.toDouble ());
909912 }
Original file line number Diff line number Diff line change @@ -27,5 +27,16 @@ void testMain() {
2727 display.debugOverrideDevicePixelRatio (null );
2828 expect (display.devicePixelRatio, originalDevicePixelRatio);
2929 });
30+
31+ test ('computes device pixel ratio using window.devicePixelRatio and visualViewport.scale' , () {
32+ final EngineFlutterDisplay display = EngineFlutterDisplay (
33+ id: 0 ,
34+ size: const ui.Size (100.0 , 100.0 ),
35+ refreshRate: 60.0 ,
36+ );
37+ final double windowDpr = domWindow.devicePixelRatio;
38+ final double visualViewportScale = domWindow.visualViewport! .scale! ;
39+ expect (display.browserDevicePixelRatio, windowDpr * visualViewportScale);
40+ });
3041 });
3142}
You can’t perform that action at this time.
0 commit comments