diff --git a/CMakeLists.txt b/CMakeLists.txt
index 094e03d9de..5c5228f9d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1371,8 +1371,6 @@ elseif(IOS AND NOT LIBRETRO)
ios/AppDelegate.h
ios/SceneDelegate.mm
ios/SceneDelegate.h
- ios/DisplayManager.h
- ios/DisplayManager.mm
ios/Controls.h
ios/Controls.mm
ios/ViewControllerCommon.h
@@ -1421,7 +1419,6 @@ elseif(IOS AND NOT LIBRETRO)
ios/CameraHelper.mm
ios/AudioEngine.mm
ios/LocationHelper.mm
- ios/DisplayManager.mm
ios/Controls.mm
UI/DarwinFileSystemServices.mm
Common/Battery/AppleBatteryClient.m
diff --git a/Windows/PPSSPP.vcxproj b/Windows/PPSSPP.vcxproj
index 4d0ffa6c42..ce02ea5f10 100644
--- a/Windows/PPSSPP.vcxproj
+++ b/Windows/PPSSPP.vcxproj
@@ -804,14 +804,6 @@
true
true
-
- true
- true
- true
- true
- true
- true
-
true
true
@@ -1241,14 +1233,6 @@
true
true
-
- true
- true
- true
- true
- true
- true
-
true
true
@@ -1442,4 +1426,4 @@
-
\ No newline at end of file
+
diff --git a/Windows/PPSSPP.vcxproj.filters b/Windows/PPSSPP.vcxproj.filters
index 1a9b175941..0c700e2048 100644
--- a/Windows/PPSSPP.vcxproj.filters
+++ b/Windows/PPSSPP.vcxproj.filters
@@ -433,9 +433,6 @@
Other Platforms\iOS
-
- Other Platforms\iOS
-
Other Platforms\iOS
@@ -689,9 +686,6 @@
Other Platforms\iOS
-
- Other Platforms\iOS
-
Other Platforms\iOS
@@ -871,4 +865,4 @@
Other Platforms\SDL
-
\ No newline at end of file
+
diff --git a/ios/DisplayManager.h b/ios/DisplayManager.h
deleted file mode 100644
index fb46707a19..0000000000
--- a/ios/DisplayManager.h
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// DisplayManager.h
-// native
-//
-// Created by xieyi on 2019/6/9.
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface DisplayManager : NSObject
-
-- (void)setupDisplayListener;
-- (void)updateResolution:(UIScreen *)screen;
-
-@property (nonatomic, strong) UIScreen *mainScreen;
-
-@property (class, readonly, strong) DisplayManager *shared;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ios/DisplayManager.mm b/ios/DisplayManager.mm
index a8b72cb912..e69de29bb2 100644
--- a/ios/DisplayManager.mm
+++ b/ios/DisplayManager.mm
@@ -1,167 +0,0 @@
-//
-// DisplayManager.m
-// native
-//
-// Created by xieyi on 2019/6/9.
-//
-
-#import "DisplayManager.h"
-#import "iOSCoreAudio.h"
-#import "ViewController.h"
-#import "AppDelegate.h"
-#include "Common/System/Display.h"
-#include "Common/System/System.h"
-#include "Common/System/NativeApp.h"
-#include "Core/System.h"
-#include "Core/Config.h"
-#include "Core/ConfigValues.h"
-
-#import
-
-#define IS_IPAD() ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
-
-@interface DisplayManager ()
-
-@property BOOL listenerActive;
-@property (atomic, retain) NSMutableArray *extDisplays;
-@property CGRect originalFrame;
-@property CGRect originalBounds;
-@property CGAffineTransform originalTransform;
-
-- (void)updateScreen:(UIScreen *)screen;
-
-@end
-
-@implementation DisplayManager
-
-- (instancetype)init
-{
- self = [super init];
- if (self) {
- [self setListenerActive:NO];
- [self setExtDisplays:[[NSMutableArray alloc] init]];
- }
- return self;
-}
-
-+ (DisplayManager *)shared {
- static DisplayManager *sharedInstance = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- sharedInstance = [[DisplayManager alloc] init];
- });
- return sharedInstance;
-}
-
-- (void)setupDisplayListener {
- // Disable external display by default
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"enable_external_display"] == NO) {
- return;
- }
- if ([self listenerActive]) {
- NSLog(@"setupDisplayListener already called");
- return;
- }
- NSLog(@"Setting up display manager");
- [self setMainScreen:[UIScreen mainScreen]];
- UIWindow *gameWindow = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
- [self setOriginalFrame: [gameWindow frame]];
- [self setOriginalBounds:[gameWindow bounds]];
- [self setOriginalTransform:[gameWindow transform]];
-
- // TODO: From iOS 13, should use UIScreenDidConnectNotification instead of the below.
-
- // Display connected
- [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenDidConnectNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull notification) {
- UIScreen *screen = (UIScreen *) notification.object;
- NSLog(@"New display connected: %@", [screen debugDescription]);
- [[self extDisplays] addObject:screen];
- // Do not switch to second connected display
- if ([self mainScreen] != [UIScreen mainScreen]) {
- return;
- }
- // Ignore mute switch when connected to external display
- iOSCoreAudioSetDisplayConnected(true);
- [self updateScreen:screen];
- }];
- // Display disconnected
- [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenDidDisconnectNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull notification) {
- UIScreen *screen = (UIScreen *) notification.object;
- NSLog(@"Display disconnected: %@", [screen debugDescription]);
- if ([[self extDisplays] containsObject:screen]) {
- [[self extDisplays] removeObject:screen];
- }
- if ([[self extDisplays] count] > 0) {
- UIScreen *newScreen = [[self extDisplays] lastObject];
- [self updateScreen:newScreen];
- } else {
- iOSCoreAudioSetDisplayConnected(false);
- [self updateScreen:[UIScreen mainScreen]];
- }
- }];
- [self setListenerActive:YES];
-}
-
-- (void)updateScreen:(UIScreen *)screen {
- [self setMainScreen:screen];
- UIWindow *gameWindow = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
- // Hide before moving window to external display, otherwise iPhone won't switch to it
- [gameWindow setHidden:YES];
- [gameWindow setScreen:screen];
- // Set optimal resolution
- // Dispatch later to prevent "no window is preset" error
- dispatch_async(dispatch_get_main_queue(), ^{
- if (screen != [UIScreen mainScreen]) {
- NSUInteger count = [[screen availableModes] count];
- UIScreenMode* mode = [screen availableModes][count - 1];
- [screen setCurrentMode:mode];
- mode = [screen currentMode];
- // Fix overscan
- // TODO: Hacky solution. Screen is still scaled even if UIScreenOverscanCompensationNone is set.
- [screen setOverscanCompensation:UIScreenOverscanCompensationNone];
- CGSize fullSize = mode.size;
- UIEdgeInsets insets = [screen overscanCompensationInsets];
- fullSize.width -= insets.left + insets.right;
- fullSize.height -= insets.top + insets.bottom;
- [gameWindow setFrame:CGRectMake(insets.left, insets.top, fullSize.width, fullSize.height)];
- [gameWindow setBounds:CGRectMake(0, 0, fullSize.width, fullSize.height)];
- [self updateResolution:screen];
- [gameWindow setTransform:CGAffineTransformMakeScale(mode.size.width / fullSize.width, mode.size.height / fullSize.height)];
- } else {
- [gameWindow setTransform:[self originalTransform]];
- [gameWindow setFrame:[self originalFrame]];
- [gameWindow setBounds:[self originalBounds]];
- [self updateResolution:screen];
- }
- [gameWindow setHidden:NO];
- });
-}
-
-- (void)updateResolution:(UIScreen *)screen {
- float scale = screen.nativeScale;
- CGSize size = screen.bounds.size;
-
- float dpi;
- if (screen == [UIScreen mainScreen]) {
- dpi = (IS_IPAD() ? 200.0f : 150.0f) * scale;
- } else {
- float diagonal = sqrt(size.height * size.height + size.width * size.width);
- dpi = diagonal * scale * 0.1f;
- }
-
- const float dpi_scale_x = 240.0f / dpi;
- const float dpi_scale_y = 240.0f / dpi;
- g_display.Recalculate(size.width * scale, size.height * scale, dpi_scale_x, dpi_scale_y, UIScaleFactorToMultiplier(g_Config.iUIScaleFactor));
-
- [[sharedViewController getView] setContentScaleFactor:scale];
-
- // PSP native resize
- PSP_CoreParameter().pixelWidth = g_display.pixel_xres;
- PSP_CoreParameter().pixelHeight = g_display.pixel_yres;
-
- NativeResized();
-
- NSLog(@"Updated display resolution: (%d, %d) @%.1fx", g_display.pixel_xres, g_display.pixel_yres, scale);
-}
-
-@end
diff --git a/ios/ViewController.mm b/ios/ViewController.mm
index 3cd171d3f2..f555f5f435 100644
--- a/ios/ViewController.mm
+++ b/ios/ViewController.mm
@@ -7,7 +7,6 @@
#import "AppDelegate.h"
#import "ViewController.h"
-#import "DisplayManager.h"
#import "iOSCoreAudio.h"
#import
@@ -216,8 +215,6 @@ void GLRenderLoop(IOSGLESContext *graphicsContext) {
self.lastTimestamp = 0;
- [[DisplayManager shared] setupDisplayListener];
-
UIScreen* screen = [(AppDelegate*)[UIApplication sharedApplication].delegate screen];
self.view.frame = [screen bounds];
self.view.multipleTouchEnabled = YES;
@@ -317,7 +314,7 @@ void GLRenderLoop(IOSGLESContext *graphicsContext) {
INFO_LOG(Log::System, "didBecomeActive begin");
[self runGLRenderLoop];
- [[DisplayManager shared] updateResolution:[UIScreen mainScreen]];
+ [self updateResolution:[UIScreen mainScreen]];
INFO_LOG(Log::System, "didBecomeActive end");
@@ -387,7 +384,7 @@ void GLRenderLoop(IOSGLESContext *graphicsContext) {
// Reinitialize graphics context to match new size
[self requestExitGLRenderLoop];
[self runGLRenderLoop];
- [[DisplayManager shared] updateResolution:[UIScreen mainScreen]];
+ [self updateResolution:[UIScreen mainScreen]];
}];
}
diff --git a/ios/ViewControllerCommon.h b/ios/ViewControllerCommon.h
index 6307ea0244..76e4e93b78 100644
--- a/ios/ViewControllerCommon.h
+++ b/ios/ViewControllerCommon.h
@@ -32,6 +32,7 @@
- (void)uiStateChanged;
- (void)pickPhoto:(NSString *)saveFilename requestId:(int)requestId;
+- (void)updateResolution:(UIScreen *)screen;
@end
diff --git a/ios/ViewControllerCommon.mm b/ios/ViewControllerCommon.mm
index 8019daa8cc..05cb249cf3 100644
--- a/ios/ViewControllerCommon.mm
+++ b/ios/ViewControllerCommon.mm
@@ -5,6 +5,7 @@
#include "Common/System/Request.h"
#include "Common/Input/InputState.h"
#include "Common/System/NativeApp.h"
+#include "Common/System/Display.h"
#include "Common/Log.h"
#include "Core/HLE/sceUsbCam.h"
#include "Core/HLE/sceUsbGps.h"
@@ -441,4 +442,25 @@ extern float g_safeInsetBottom;
[self setNeedsStatusBarAppearanceUpdate];
}
+- (void)updateResolution:(UIScreen *)screen {
+ float scale = screen.nativeScale;
+ CGSize size = screen.bounds.size;
+
+ float dpi = (IS_IPAD() ? 200.0f : 150.0f) * scale;
+
+ const float dpi_scale_x = 240.0f / dpi;
+ const float dpi_scale_y = 240.0f / dpi;
+ g_display.Recalculate(size.width * scale, size.height * scale, dpi_scale_x, dpi_scale_y, UIScaleFactorToMultiplier(g_Config.iUIScaleFactor));
+
+ [[sharedViewController getView] setContentScaleFactor:scale];
+
+ // PSP native resize
+ PSP_CoreParameter().pixelWidth = g_display.pixel_xres;
+ PSP_CoreParameter().pixelHeight = g_display.pixel_yres;
+
+ NativeResized();
+
+ NSLog(@"Updated display resolution: (%d, %d) @%.1fx", g_display.pixel_xres, g_display.pixel_yres, scale);
+}
+
@end
diff --git a/ios/ViewControllerMetal.mm b/ios/ViewControllerMetal.mm
index da01243c39..e3f71d5a59 100644
--- a/ios/ViewControllerMetal.mm
+++ b/ios/ViewControllerMetal.mm
@@ -1,6 +1,5 @@
#import "AppDelegate.h"
#import "ViewControllerMetal.h"
-#import "DisplayManager.h"
#import "iOSCoreAudio.h"
#include "Common/Log.h"
@@ -296,7 +295,7 @@ void VulkanRenderLoop(IOSVulkanContext *graphicsContext, CAMetalLayer *metalLaye
// Spin up the emu thread. It will in turn spin up the Vulkan render thread
// on its own.
[self runVulkanRenderLoop];
- [[DisplayManager shared] updateResolution:[UIScreen mainScreen]];
+ [self updateResolution:[UIScreen mainScreen]];
}
- (void)willResignActive {
@@ -340,8 +339,6 @@ void VulkanRenderLoop(IOSVulkanContext *graphicsContext, CAMetalLayer *metalLaye
[super viewDidLoad];
[self hideKeyboard];
- [[DisplayManager shared] setupDisplayListener];
-
INFO_LOG(Log::System, "Metal viewDidLoad");
UIScreen* screen = [(AppDelegate*)[UIApplication sharedApplication].delegate screen];
@@ -352,7 +349,7 @@ void VulkanRenderLoop(IOSVulkanContext *graphicsContext, CAMetalLayer *metalLaye
graphicsContext = new IOSVulkanContext();
- [[DisplayManager shared] updateResolution:[UIScreen mainScreen]];
+ [self updateResolution:[UIScreen mainScreen]];
if (!graphicsContext->InitAPI()) {
_assert_msg_(false, "Failed to init Vulkan");
@@ -403,7 +400,7 @@ void VulkanRenderLoop(IOSVulkanContext *graphicsContext, CAMetalLayer *metalLaye
// Reinitialize graphics context to match new size
[self requestExitVulkanRenderLoop];
[self runVulkanRenderLoop];
- [[DisplayManager shared] updateResolution:[UIScreen mainScreen]];
+ [self updateResolution:[UIScreen mainScreen]];
}];
}