From 77b060fc3ecaa14c044c5c37f1f5170973b447f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20A=2E=20A=CC=81lvarez?= Date: Sat, 30 Mar 2024 13:15:52 +0100 Subject: [PATCH] adjust screen scaling for known watch sizes --- .../InterfaceController.m | 25 ++++++++++++++++++- Mini vMac WatchKit Extension/UIKit+Watch.h | 8 ++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Mini vMac WatchKit Extension/InterfaceController.m b/Mini vMac WatchKit Extension/InterfaceController.m index eee68d7..bde7fb8 100644 --- a/Mini vMac WatchKit Extension/InterfaceController.m +++ b/Mini vMac WatchKit Extension/InterfaceController.m @@ -162,7 +162,8 @@ static NSObject *sharedEmulator = nil; sharedEmulator.screenLayer = fullScreenView.layer; sharedEmulator.speed = sharedEmulator.initialSpeed; [sharedEmulator.screenLayer setContentsGravity:@"CAGravityResizeAspectFill"]; - [sharedEmulator.screenLayer setAffineTransform:CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI_2), 0.375, 0.375)]; + CGFloat scale = [self bestScaleForScreen]; + [sharedEmulator.screenLayer setAffineTransform:CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI_2), scale, scale)]; [sharedEmulator.screenLayer setMinificationFilter:@"CAFilterTrilinear"]; #if TARGET_OS_SIMULATOR [sharedEmulator performSelector:@selector(run) withObject:nil afterDelay:0.1]; @@ -176,6 +177,28 @@ static NSObject *sharedEmulator = nil; [runtimeSession start]; } +- (CGFloat)bestScaleForScreen { + CGSize screenSize = [UIScreen mainScreen].bounds.size; + NSInteger screenWidthAndHeight = (NSInteger)(screenSize.width) * 1000 + (NSInteger)(screenSize.height); + // manually selected scales to account for non-square screens + switch (screenWidthAndHeight) { + // 38 40 41 42 44 45 49 + case 136170: // 38mm + return 0.33; + case 176215: // 41mm + return 0.40; + case 184224: // 44mm + return 0.42; + case 198242: // 45mm + case 205251: // 49mm + return 0.455; + case 162197: // 40mm + case 156195: // 42mm + default: + return 0.375; + } +} + - (void)extendedRuntimeSessionDidStart:(WKExtendedRuntimeSession *)extendedRuntimeSession { #if TARGET_OS_SIMULATOR == 0 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback diff --git a/Mini vMac WatchKit Extension/UIKit+Watch.h b/Mini vMac WatchKit Extension/UIKit+Watch.h index 5615cc7..3b37af0 100644 --- a/Mini vMac WatchKit Extension/UIKit+Watch.h +++ b/Mini vMac WatchKit Extension/UIKit+Watch.h @@ -41,6 +41,14 @@ NS_ASSUME_NONNULL_BEGIN @end +@interface UIScreen : NSObject + +@property(nonatomic, readonly) CGRect bounds; + ++ (instancetype)mainScreen; + +@end + NS_ASSUME_NONNULL_END #endif /* UIKit_h */