Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d88bac3

Browse files
authored
Replace deprecated [UIScreen mainScreen] in FlutterView.mm (#46802)
Addresses: flutter/flutter#130828
1 parent 799e8de commit d88bac3

3 files changed

Lines changed: 16 additions & 1 deletion

File tree

shell/platform/darwin/ios/framework/Source/FlutterView.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
opaque:(BOOL)opaque
4747
enableWideGamut:(BOOL)isWideGamutEnabled NS_DESIGNATED_INITIALIZER;
4848

49+
- (UIScreen*)screen;
50+
4951
// Set by FlutterEngine or FlutterViewController to override software rendering.
5052
@property(class, nonatomic) BOOL forceSoftwareRendering;
5153
@end

shell/platform/darwin/ios/framework/Source/FlutterView.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ - (void)layoutSubviews {
100100
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
101101
CAMetalLayer* layer = (CAMetalLayer*)self.layer;
102102
#pragma clang diagnostic pop
103-
CGFloat screenScale = [UIScreen mainScreen].scale;
103+
CGFloat screenScale = self.screen.scale;
104104
layer.allowsGroupOpacity = YES;
105105
layer.contentsScale = screenScale;
106106
layer.rasterizationScale = screenScale;

shell/platform/darwin/ios/framework/Source/FlutterViewTest.mm

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,17 @@ - (void)testIgnoreWideColorWithoutImpeller {
6969
XCTAssertEqual(layer.pixelFormat, MTLPixelFormatBGRA8Unorm);
7070
}
7171

72+
- (void)testLayerScalesMatchScreenAfterLayoutSubviews {
73+
FakeDelegate* delegate = [[[FakeDelegate alloc] init] autorelease];
74+
FlutterView* view = [[FlutterView alloc] initWithDelegate:delegate opaque:NO enableWideGamut:NO];
75+
view.layer.contentsScale = CGFloat(-99.0);
76+
view.layer.rasterizationScale = CGFloat(-99.0);
77+
UIScreen* screen = [view screen];
78+
XCTAssertNotEqual(view.layer.contentsScale, screen.scale);
79+
XCTAssertNotEqual(view.layer.rasterizationScale, screen.scale);
80+
[view layoutSubviews];
81+
XCTAssertEqual(view.layer.contentsScale, screen.scale);
82+
XCTAssertEqual(view.layer.rasterizationScale, screen.scale);
83+
}
84+
7285
@end

0 commit comments

Comments
 (0)