From 1d9a3a9b1c9ef7db26e53c8aeaab731992cffd6e Mon Sep 17 00:00:00 2001 From: Ruslan Mustakov Date: Tue, 10 Apr 2018 17:35:30 +0700 Subject: [PATCH] iPhone X support and iOS-related fixes Starting from April 2018 Apple no longer accepts apps that do not support iPhone X. For games this mainly means respecting the safe area, unobstructed by notch and virtual home button. UI controls must be placed within the safe area so that users can interact with them. This commit: - Adds OS::get_window_safe_area method that returns unobscured area of the window, where interactive controls should be rendered. - Reorganizes how launch screens are exported - the previous way was incorrect and modern iPhones did not pick up the correct screens and because of that used a non-native resolution to render the game. - Adds launch screen options for iPhone X. - Makes launch screens optional in the export template. If not specified, a white screen will be used. - Adds App Store icon (1024x1024) export option as it now has to be bundled with the app instead of being provided in iTunes Connect. - Fixes crash when launching games in iOS Simulator. It happened because controllerWasConnected callback came before the engine was initialized. Now in such case the controllers will be queued up and registered after initialization is done. - Fixes issue with the virtual keyboard where for some reason autocorrection panel would intersect with the keyboard itself and not allow you to use the top row of the keyboard. This is fixed by disabling autocorrection altogether. Closes #17358. Fixes #17428. Fixes #17331. --- core/bind/core_bind.cpp | 5 + core/bind/core_bind.h | 1 + core/os/os.h | 12 ++ .../godot_ios.xcodeproj/project.pbxproj | 34 +----- .../ios_xcode/godot_ios/Default-568h@2x.png | Bin 564 -> 0 bytes .../ios_xcode/godot_ios/Default-667h@2x.png | Bin 817 -> 0 bytes .../godot_ios/Default-Landscape-1366h@2x.png | Bin 32836 -> 0 bytes .../godot_ios/Default-Landscape-736h@3x.png | Bin 2582 -> 0 bytes .../godot_ios/Default-Landscape@2x.png | Bin 3131 -> 0 bytes .../godot_ios/Default-Portrait-1366h@2x.png | Bin 33309 -> 0 bytes .../godot_ios/Default-Portrait-736h@3x.png | Bin 1676 -> 0 bytes .../godot_ios/Default-Portrait@2x.png | Bin 33309 -> 0 bytes .../LaunchImage.launchimage/Contents.json | 102 +++++++++++++++++ .../Default-480h@2x.png | Bin 0 -> 13558 bytes .../Default-568h@2x.png | Bin 0 -> 17911 bytes .../Default-667h@2x.png | Bin 0 -> 23513 bytes .../Default-Landscape-736h@3x.png | Bin 0 -> 53789 bytes .../Default-Landscape-X.png | Bin 0 -> 51462 bytes .../Default-Landscape.png | Bin 0 -> 18386 bytes .../Default-Landscape@2x.png | Bin 0 -> 61558 bytes .../Default-Portrait-736h@3x.png | Bin 0 -> 56053 bytes .../Default-Portrait-X.png | Bin 0 -> 53983 bytes .../Default-Portrait.png | Bin 0 -> 18753 bytes .../Default-Portrait@2x.png | Bin 0 -> 62336 bytes platform/iphone/app_delegate.mm | 103 +++++++++++------- platform/iphone/export/export.cpp | 67 ++++++------ platform/iphone/gl_view.h | 2 + platform/iphone/gl_view.mm | 15 ++- platform/iphone/os_iphone.cpp | 6 + platform/iphone/os_iphone.h | 1 + 30 files changed, 239 insertions(+), 109 deletions(-) delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-568h@2x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-667h@2x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Landscape@2x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait-736h@3x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-480h@2x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png create mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index a977fd3da4..85793f127d 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -288,6 +288,10 @@ void _OS::set_window_size(const Size2 &p_size) { OS::get_singleton()->set_window_size(p_size); } +Rect2 _OS::get_window_safe_area() const { + return OS::get_singleton()->get_window_safe_area(); +} + void _OS::set_window_fullscreen(bool p_enabled) { OS::get_singleton()->set_window_fullscreen(p_enabled); } @@ -1046,6 +1050,7 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("set_window_position", "position"), &_OS::set_window_position); ClassDB::bind_method(D_METHOD("get_window_size"), &_OS::get_window_size); ClassDB::bind_method(D_METHOD("set_window_size", "size"), &_OS::set_window_size); + ClassDB::bind_method(D_METHOD("get_window_safe_area"), &_OS::get_window_safe_area); ClassDB::bind_method(D_METHOD("set_window_fullscreen", "enabled"), &_OS::set_window_fullscreen); ClassDB::bind_method(D_METHOD("is_window_fullscreen"), &_OS::is_window_fullscreen); ClassDB::bind_method(D_METHOD("set_window_resizable", "enabled"), &_OS::set_window_resizable); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index c40abd51f6..1790c68757 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -162,6 +162,7 @@ public: virtual void set_window_position(const Point2 &p_position); virtual Size2 get_window_size() const; virtual Size2 get_real_window_size() const; + virtual Rect2 get_window_safe_area() const; virtual void set_window_size(const Size2 &p_size); virtual void set_window_fullscreen(bool p_enabled); virtual bool is_window_fullscreen() const; diff --git a/core/os/os.h b/core/os/os.h index 5a2c998782..943c0498f1 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -205,6 +205,18 @@ public: virtual void request_attention() {} virtual void center_window(); + // Returns window area free of hardware controls and other obstacles. + // The application should use this to determine where to place UI elements. + // + // Keep in mind the area returned is in window coordinates rather than + // viewport coordinates - you should perform the conversion on your own. + // + // The maximum size of the area is Rect2(0, 0, window_size.width, window_size.height). + virtual Rect2 get_window_safe_area() const { + Size2 window_size = get_window_size(); + return Rect2(0, 0, window_size.width, window_size.height); + } + virtual void set_borderless_window(bool p_borderless) {} virtual bool get_borderless_window() { return 0; } diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj index ab15e35f63..a9a40c0508 100644 --- a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj @@ -22,14 +22,6 @@ 1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1841F584E3F00A41E41 /* GameKit.framework */; }; 1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1861F584E5600A41E41 /* StoreKit.framework */; }; 1FF4C1871F584E7600A41E41 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1881F584E7600A41E41 /* StoreKit.framework */; }; - D07CD43F1C5D573600B7FB28 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */; }; - D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */; }; - D07CD4421C5D573600B7FB28 /* Default-Portrait-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */; }; - D07CD4441C5D573600B7FB28 /* Default-Landscape-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */; }; - D07CD4451C5D573600B7FB28 /* Default-Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */; }; - D07CD4461C5D573600B7FB28 /* Default-Landscape-1366h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */; }; - D07CD4471C5D573600B7FB28 /* Default-Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */; }; - D07CD4481C5D573600B7FB28 /* Default-Portrait-1366h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */; }; D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; }; D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; }; D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; }; @@ -57,14 +49,6 @@ 1FF4C1881F584E7600A41E41 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 1FF4C1881F584E6300A41E41 /* $binary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = $binary.entitlements; sourceTree = ""; }; 1FF8DBB01FBA9DE1009DE660 /* dummy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dummy.cpp; sourceTree = ""; }; - D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = ""; }; - D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-736h@3x.png"; sourceTree = ""; }; - D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h@3x.png"; sourceTree = ""; }; - D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x.png"; sourceTree = ""; }; - D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-1366h@2x.png"; sourceTree = ""; }; - D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x.png"; sourceTree = ""; }; - D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-1366h@2x.png"; sourceTree = ""; }; D07CD44D1C5D589C00B7FB28 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; D0BCFE3418AEBDA2004A7AAE /* $binary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = $binary.app; sourceTree = BUILT_PRODUCTS_DIR; }; D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -159,14 +143,6 @@ isa = PBXGroup; children = ( 1FF4C1881F584E6300A41E41 /* $binary.entitlements */, - D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */, - D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */, - D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */, - D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */, - D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */, - D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */, - D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */, - D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */, D07CD44D1C5D589C00B7FB28 /* Images.xcassets */, D0BCFE4218AEBDA2004A7AAE /* Supporting Files */, 1FF8DBB01FBA9DE1009DE660 /* dummy.cpp */, @@ -254,14 +230,6 @@ 1F1575721F582BE20003B888 /* dylibs in Resources */, D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */, D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */, - D07CD4471C5D573600B7FB28 /* Default-Portrait@2x.png in Resources */, - D07CD4461C5D573600B7FB28 /* Default-Landscape-1366h@2x.png in Resources */, - D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */, - D07CD43F1C5D573600B7FB28 /* Default-568h@2x.png in Resources */, - D07CD4451C5D573600B7FB28 /* Default-Landscape@2x.png in Resources */, - D07CD4441C5D573600B7FB28 /* Default-Landscape-736h@3x.png in Resources */, - D07CD4421C5D573600B7FB28 /* Default-Portrait-736h@3x.png in Resources */, - D07CD4481C5D573600B7FB28 /* Default-Portrait-1366h@2x.png in Resources */, D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */, $additional_pbx_resources_build ); @@ -377,6 +345,7 @@ buildSettings = { ARCHS = "$godot_archs"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements; CODE_SIGN_IDENTITY = "$code_sign_identity_debug"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug"; @@ -401,6 +370,7 @@ buildSettings = { ARCHS = "$godot_archs"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements; CODE_SIGN_IDENTITY = "$code_sign_identity_release"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release"; diff --git a/misc/dist/ios_xcode/godot_ios/Default-568h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-568h@2x.png deleted file mode 100644 index 1d5e472665dd29d2e3cb12eecf60b8e448734440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sU@2e(3NQqHxv>^Vv7|ftIx;Y}EiimBEgr~c zO7eDhVPL%5CA+YZQJFY)wsWq-gXCZsK@vQ{aUfq^mD)5S5Q z;?~ozbJ;RYQcU)oEeCC`DQj)E{Czd3fW7l;AuWV2G=hxJHzu zB$lLFB^RXvDF!10Lo;0iGhHL25F-OCV@oR|Gi?JSD+7a*Yfk{98A(HKeoAIqC2kEn TJ`}tIYGCkm^>bP0l+XkK%j27z diff --git a/misc/dist/ios_xcode/godot_ios/Default-667h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-667h@2x.png deleted file mode 100644 index b51598fed085f77a9576e56794d7ea047f03200b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmeAS@N?(olHy`uVBq!ia0y~yU^Qc4V0y<06kymhyCf1wv7|ftIx;Y}EiimBEgr~c zO7eDhVPL%5CANVnW)YDr=Quftmt5 zT^vIyZoNIn$jhK0z_9TB{F}bX6@DHE-l(tHY5U;|1mt}FqBDv{Lx4aC{P|MJpp%$W zckt*nR$y{dEpd$~Nl7e8wMs5Z1yT$~28L$324=cOMj=K9R>qcAMrPUuMpgy}C)b_; grg0<G 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 diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png deleted file mode 100644 index 2a025b745b37557cd2c2262e8430f3afb92663bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2582 zcmeAS@N?(olHy`uVBq!ia0y~y;8?)Gz;cTbD8S&}xUmpOv7|ftIx;Y}EiimBEgr~c zO7eDhVPL%5CA+YZQJFY)wsWq-gXCZsK@vQ{Y;sLa&U#WAGf z*4qn?f(!~g2R8gP=ViKPZzIII_gv!4>x}kBsxyRqIG3>mH)$T6lHg@9${h`j(Zn#C z7ePwp4*)5abVpxD2FA7phA*bY1Nlrz z-tI08jCZ?)mjHR31s;*b3=Di~KokBmeh7a087RnJ;_2(k{(wzPNLy58tx_xl19z0C zi(^Q|t+y8(1%Z|{82p}oO``gQP{A2Hb1R4J2EGeY3z)aCyt%5YL;jLQY8c~vxSdwa$T$Bo=7>o=I z&2$aSbd8Kcj0~)dEv<~qv<-}`3=B@LJppX(BWcLZPsvQH#I0e+hk|!N4Gf;HelF{r G5}E+ltwB)$ diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png deleted file mode 100644 index a6d054ba2abb2b45094c8c0c5cbc94f45be70d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33309 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 diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png deleted file mode 100644 index a6d054ba2abb2b45094c8c0c5cbc94f45be70d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33309 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 Be>wmF literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1c489de69f524bbd6867e31c40f88583e33b7f37 GIT binary patch literal 23513 zcmeHPTWlLe6dlJYn2@%nr6T3kty>_atasOs*jYKoZCpqK4#5Nw9ztI4u9FqE*X(X; z7f^`{lvebkl%hU(BZ?3os31N-6_8R13Z(oX0Uv-05>lm>O1ykLi79k;z@*BP9ij~%XJQJ`S=SzesL_-dV7cZ zdwZE7L(gbg6`{_@cPX4A5Bg%Q;syKMj7?aU~1%DMf>uGWmdeB!$s9^F4L zmVMx-$8$ShML)f>`GtM^9=USsM#eReTs;tb)7-d5y*YE=bz3*B;9p8EiTu3d zSL?!U?d?aFcErA2aPyzt?n|HDmL7GdT@&u7Rver>`rgiR`TK=yr(W7smdXp9&eOvW z@7}xI`OrkvdFb8lkM^xohvbeu+m?2?eso;@?7-az54f^;t{Ay5nLy~iD-fD^2%$et zmEyjdL<9w0}qaDtcTn!yTVx}}?A zdcp4HG^~AjRt0KFo5e1px)-sNB4qwWay>gv9C>SA zv!cETb<51=x?d}(n+y%BlL#y-R3VLR4f3|9M4UdV*(17!tZgQF{aU6Iuek842-j4s zshVCrs~ZVjQKSAwSiQLcMO-ZoX(cr~64$T;P1<3)XUYZG|N^dDhvKs9Q2K~V* ztf6@(f*QNMZY&h!8*MdQX+SEnn9+@#WJR@{G^%oi{Ah%$H#SJ(6(c5av@4P&#U)FP z`goy>6?oPc8ukfdASn8RtND<~W2LbNqJfAk4N#uc{NQDLt$P}x_N;O1;c4Jpadi~Ehq}>QzSJIPWv-y zJ`>?8+8f}r+mK|M2xPjRlp3_!IujP*DieMdIYJ(j@}sH}FGzv!PHr9SCOpX@w8hdihU$XG-hUf9JW1Kc`0)4brBO7{QAW zU+6z`RnBc>XTa+&sH(=>(5RM|vTI1cp;?buQ`)?U2U7L74j`rLsJL~;`K@%^5 zr(t>1kb#(nL`IS$WN+BA=#B~dG!!RLkiBm$5Kv`7Npn`{k0A^?d1Bm$5K_P26CA^?d1Bm(`$8b|~n5$HE9 za1sGdB9I~pNCY4efJCqlhrvk%IEer!5$J(MAQ6B>01^R61X>-CX#f%dNCY4e;AB6o z4uC`;)d8GDpwGI@PYBr-^3kjNmB mRc=Y(z&qIy{?k+QW#`6$1!FBwFEGe&Mfa~8jK8)vwdpT~! literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d82dfce9363bf46b166d0cd53db715e5f6f428a8 GIT binary patch literal 53789 zcmeHPeQXow9e$md&ZIysQbu6yxCW@gz_HICNo+ZuLqbVtLsK{1=+;d+pU;U^$LHA& zNvet^bSuzh5@S>_+O>2l(zHJ&I&IRVs#`V~qg`lKRazx9O$=#TrST8@QoFWe@A)Hs z-#5O)o3uYzo=TK(ckjnN@9%k@-}}4E9U0oYdv(*sCPK*Sf&RW2A&%38*e^S7qet|A z&i#%M+lEwc@6bSRuQZg?lc}^uNZYs6k&#&cj<$=++L4iqm$q+f%1y=&AD)YieD&h| z>+=iJ!u(tF&z^kju`4akE9Z#avvJ*%uU?pUe9!&ogA2br{_ER+8jF47+p~Y$B)z$} zz3nr~$jAcu(X+p~zbSg{)6y5WZ2Q#0mq~oR?QTaxx4rVtJ=dB?0?vQjefHE*X;k{K z@#v)!_M~t2+SU6Hom~-4fB!W}dhg`17mxpd{N=T$UpjN<>-QcxAUXELw(p7lIDeo= zdnozDeMb&%_PiWh7yj$9zZdSDTea%ahL-3b);#oa(0SJjbMaAU+%e;PZu2kZul)S@ z?Cc-!*tziXiCJZKO=IJY;jf)Mbx-3{Gm*w~KMTHoW|uakwtQ!9LyP0O?d^?wN!mcwENpVt&t{4lES$}G8F5(uiTvetGjiqP{@Yd?#ao? z_DNs6o*Q+`!C=ts@w&ZU7rnxjpUxDNDOV=HxztIepFS0O3z3}ze-%6D0H{B z8UroVV|qc)kLlUPS#oU`Pn&k2O{Gl6HO`ne zOQ?$jW+!s#A}9&ft);bbEmO$Tc5==6(#2V9$jx+0$(jyE8x0OxHyak~Ou+qIugzq*Qak-`T4A>({{!dS>hGO0qu8!j%3c(}T*rB)B- zQnWk8Xcm#nP1s}1^@}SNqViEzk4TRZ+fr=zPN|JXT-Ua+yXIvzyXn=_dTvlpXb~UV zta_MfWh`}QC^e;}_w}Xd0_Kegd%d2nu)F3dv1zf>hqH>RMLGfjU!dHKIV`p)4)$nu zFxl&;m{td4PBBdrYAC7a#+5=OHLi?m?rdf>?5-YUuB0Io8l-ejC4Uja=%d)Xo*UNn zbU8AHD(si2<{ynUHg+FTW zz!0!>s;FaGC70I>-gLKCh_fhsi#-`_iu?=Z^<-gE$!R^KlnwPvy;ig8^cP1ccRx9% z(P%Ya-%@YItIRt|W%30jqiO?v5ei&;DwPNYyL_E$Q1iMJxue775Be3CqQpI}WH9OX z$2)wo+^K}!rQVt5=3^*oQ3=#yJS8ek%SXj#VRs4eTWBHFF(osqB_i(1tyK<)_f`#! z|JB+l0go0>_s5|gWL)7SI$xzG?rCcnb zt8|#Em&sj$PBkERx`JxJ?~-M$!xis}CtL}?-;?ksx;)7ae+4V1v+_VCWSLy6l*kqN zLo>NZ6Kz__3L{OA-1W^52#Jz`zMkPJ+qKKDtR~VbyF7B^yEeJu-O$IKpL^rE4}YJv zJDgH-4r>E?eos|Zh-6BN?p1fc+YGq~(cYgM!Go;rZ zwcFc{ymhjUSw?5BexlO3)dY^skgeA@G~XN_hhylYI>w!eu63T?5>e}b$7XwGQyt?v z`x_dLpC5hTW(!E~R*GJ4w7S^}AOq2vWAD$ctRpJyZ3pTYH!7`k46S`pwvMpk=riP3 zchoViV~fqU=c@1CI)cJ^`u#e_B?w0Ag+wr#a}mL4sVY!Lb7O!qn$wE<0BqWVS+HqK zV@J+to*f})tmL{i`GuU(oLShwnA3`S88$E$%))Nka^H{LwD}$sr5($%2ueHV%tC3$ zoK}XHp|oSZ2SsV8W`bM+45b~EcDMk6O~a-|x4~{2yJ>Dyh@yAJKWmBwir$>1@Z}a1 zz0Jjh<{~J1^Wnlq5{llO3d5#p$p9M|Y+zW8z$;{y8i7~HEZi4$M$uCEG#7P79uKx+ zjXEQz!eSB!n}$tu0fIVX&C)?dfblqx6;~cA*mNaIM3pV!1e=CUb8dsTcFe_uZU^wz zj=7$|rg`rXc8{=Wb7sM&&1q#AH*6X<4V%W}K*3V@oF0z@c|6z}!t#0?sF3}KE8hYr zV}hC^8xBj{1T{y_UbyE%c!Ot2xUh*n-r%ud7AzZ<&4~#%GZt*I<5MT*H3EZ3u<7Ms z(^t+ue#lQhdb;Y|N3Xtc_-*=K)HS<{x>48Hf_B(!Z`A#@AagjY1(|vJ6{j8be#Hq> z6y?6mXrO2UOeqBE?@b^UO%MR1O@OI9!-eRWa0{Yi0t`gQl2X*OAUc)^*`9&um~acC zV*(6B$C6SI9m_f^c7W9_>C!lY=sG8Xhem0J?xK zECNWzkc^24Ecd-jbN{rb@+|;CK0zH+$xtQZ5kN}8ssb+<$iR6#gttJJyVF>JgTzcs zOV~mXw*3N=Sa2XZ7Q8}f-U1wm4n#*p03OY1D<`|4ix?~%RM;3`W56N+x_~Ys0&o{j zGXHPsGJE+ay&LHVs-9N<^`!^TkF9v#f2bMX?=k)QF1BzMyA*8UEWm-uiWb8OEOJuT zV)!_M=nN=GJDQ=SlI<##9-l|f=9E#!pkl^n#ThkjYpwE46s@P zx_~YM0&o|&3yT1fF(hLm0@%B-Cd&CM=pqIS2Nm3f)mGkmk&N+paJ)i&(E=QZ4n#*p z03OX54=cN%ix?~%RPbmvSa{imNAq~VqfuWJVt~~W&;@i65P-YDU04K=jNQt~Sgw8j zJA~Z!$$`F}VMF-AZZ@`g>4O>acnEm|Hmq#s#DN2iyp=U_x$5F9S$Tf-*_Y0(8>7G2 PKn8a0?fc=*k%RvRLZt`T literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png new file mode 100644 index 0000000000000000000000000000000000000000..5120595df85244c398ae8e7a7c77b52d25c1e44a GIT binary patch literal 51462 zcmeI4UuauZ9LG=6v`f3Tv~0{GD3?2^tgQLFb?Y?^jmcb!?d-Y=*@K$f_GSi~+>qSb zR0UI8aGMWfs8D3S$k^j>Z=%R*hvI{8BB&2KL1a2n5Jda~dT;*R^GkY@-j_Xed<$cz z=bm%#Iluckzu))#PMQnTr%v{CJ=nz<>zRnhW*F;SXUwIzJM@~iXHFl`|8t#-Ohp*G zacS?ra=ZS!Fdv_pV(i61#!7nQzxArp9mbY?jQyNsOxj@Vf!vi3PKWdhow@kg0%Lpk z8UGyY?JEQNZR6?LgqE0^l;+ipM_y3p6i+de(_1qZDoT1WqiC{F%q(ULQgKWyw~+L* zQSB9laueh%S@fxxidVz{u9)#T!Ews5d=liGb^N?|^q&S_~iD;W2c=hP)_Ocad= znLpKWW^(3(vW4ob^!a&%m~PU|xKim>Hb!NPA>E?V zl)8{kt;A$a2?u=s5ymwM#>FW3Q;1$>o(o z!FbBiY8P5Z+8aia%Ckts(itUN?h`l?90_?XFEw_Js*7s=OirFxjQNzikgCSkGB(a8Vv*URJv7s8bA|)!Kee6{ zx4-D@kT0LS7_s$Mm}AZNQ0o_GK6gB}DIESi?zcI^WZ$(mKB|_T&btTJPdt36!v;pi zXu7vFo0D_)JJ#O&?BFLhXIP4C^xAyYf|%?(uyS?4<_vxAFKkZE4VcNA0L%m%z-;;= zcxLL-;F*av;F(DXgUlep12TiC703+83~Ln)nE{zW;wgs&GJ}`}G6OP$L=eafvQdT1 z;1PtH1=$Q@4af`*3G&P&ArF}WnL#25WCmmg--B?UNkWMWhbGh-kQu}pkQsc*KxRN@ zkc}#224n_z4#a0tv*6H#SObS9M2kXZkR=0|!959N24n_g25}A~f*_kgA_##5GJ`+@ znL!|d%pjfwG6OP$Y}KkQpR`KxXg=Ld^o1L979p!68951KA7` zK_D|o1cA(e%;0+v?lVa!!Dln-%(6>m#?TXY9JTKPz+Y-t10vFN#QW`1umLk*-mdNd zGl}5X4Dtw$%^)^|+uemxgPb!qgG3GyNbcRy_G?c+dd-mK13!NE$IFM`8vlMlyxli) z$o98N9bf;NyEfwSEq3^W&R+Qq(e@W9MK^i~4#a0{dtMSl=H`Z#IVu2yxD$W@Ff1K3 zzyKHkgQzWXK4WI45lRqBEafP`02lzn^pi~r&=}Ad&=}Ad$QGH|s}d4id_5qI$O9+9 z;Mq(!zyKIzg8`4hbtJ$57?wLvfB`T72F|c6p#rHF9x{=vC7uyr01V{h_>RIdWWr;> zV*m`kqcGE#bp?bHgc5`jgc2O@m~IhSd}Q&hK1fyq7ytucn0~TJ0q1^PbKid+gMIYu zp4xW-(A^bw+t_VW9?UfWFaQR?FqcD<0@5%@!ypZVGz`)(=C0!Y)6O&uLKZ<5Q65ZP z05AXsz%Z9XlLGWI^fL4^^fL4^^fEb=G6Uy5K7^S5@P)}X#!9}=Z{GbYF|@kXY3Ym_ z*5~SlQuM200T(@em;ae244@z77@)2 zFaQRZ3jl+pBmf4$u+)(N17H9Q9HNy^6_Ld!Arm<{?im3Fz^EN!aK)h401SWuFvwQZ zQcEF}Ad~=%y1=o0$sm;Mj!^Q7^yQn3wYw%_ky*a1>)$6F9=8m*-W^=?HwKo;8>{o$ fV3}BE!|i(aR`;j#gF`8%|4f`X6}$de^40$V<&1XO literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6cf1347ad48f8483b21ac1e683f3282be00be1 GIT binary patch literal 18386 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 literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f951deac758621c13bbe238ad75b4a7dd7a81b GIT binary patch literal 56053 zcmeHPe{36P8UCDPotyqLbk)+eqt_IslwzNMC$=2RN!%{!<~DOPk&O!Ze0NSx*gj)B zjXPDFlLlx-k-AdUE=6N4tAr5RIy6ln*a%dDP9(62KQ@&=R*)D)1O#*-Dg@=bU%s>B zpcDzANYA9M?%nsk-}(FA@A;nZdEfKN;R6qEXn&xc5VB!tFrFl&?K&a$7wl{3mEWB? z_#7d&tsdaPN)CRa>l*jrRO;Hop55)m$>fO>r;@2>uFbtU zH_yz^{e14(^M?=L=y2S)O4{5HY&rJ5AJ5q@vA>_5|Iyi>tou$f`Nc0!eXxW1*#TGA z$GKE$o_zZ&KYgSWT`%Utf*FS&p^5xGxbn&#!v_nlh5eqn1z>{lBf`)A0p{rOYrF-O{7bzIo>!?_zjI6F1< zn@#=mFP@v?rZ%>=-Wi!WKfAN_cs1I3^^MS*m-mXpe8+RAwszS6Y+GRVvxmAaY@%bu z@Po+&Ay0jbkm_+lZr`DQ-y|eyC$=r4goMu#a=-k}lRHk+wrdN6Pm~B*w^{jPBeP%a zAf&xV8W}B*CLRs*a?ZsGa$0m%as}F&kVqv=Kjy?T$5e9Jd?{S%?NnQY>1X9K+sUX+ z%Ae`&98C-}19DMh0xrMH-5G6X7$#B_GT~%=pKeb7)!R8`%X+;|+QL~nnlEz|XTG#cb7J_3izU7&70QyFXB59&TAnEPc6KTq)&A3-vn*xI zp7JIAYtb*rDtB0q%gr`3D~!u!xil^pYEM~bTf4oi1F<44)30)8Su=sJby%1vX4OFv zcvj4cIWb=@Q9Do5=cSWVGpu{k3RhURGisDb{AaUVu4#9r^4=qK!1W1i+F@zrXhCF? zVo9DT^5Whj^zqGEq>~g;#y_mw&rT>4`FLI`N4*hsS{g5#^Qu`LEK1ZJr#Hi0|W?r^fDN`LDmMUU) zG%nEzEGZA{^}2f^Y|~qfrmE9J1&$Y^!9c(l(9JBD8!gn%o-jM}c>Q!t&CV>hET#e< z&d9|aSB^?KZcJng`LPIVUbM8NArnr}R}~bEG-*+(20;TM_1y*(z3ya>Rm35$Z}SXjA3K-Gjz+L-!Q;* zeNxH`@??pIit@FrCiUJDiSVFQD$B*AD(uzJNX5TH;%DoxD(gT2u&kuwSb-~+L}lId zb{Y$(27EP7ijBJd!X-IVp5%&R-xysDD|z&0X6ED9deGfZj*B!}m!DtFo7!r5CsMvt z=JLEa6pzw@b4ijA4)yrD`H<*!a-Lw&=@0oiCT&P*ud_ostCkEff9u$p&^`SN{m zyov<88c%{@s$Xq1i?G^&ucC?I$GQBNC`4J~s~Hy>znd8v|Esy<0&X!a_>syP3NZcSQW}W=@;W`jw?F(xxjhLW7Xr7+M;YEBj_k z%*`p#UDJJNOv-cFxXe!|d$u0!OL9C0$v%(72c&^RydtFZ1*Sy7_>o+Zo~m zey7JH2A%1iwBQu{ez)Kkdfb_y-xw>4Grc2iWG!4vBXa8cp-e8?PE8F~7;S%i`%|s)Azx9zJ2RlhrhdH@%uO5e?zXc*&R%*N^C8b569Mi>*e>N zo0nX7Fn?;B2@W*5?y%c)wo98WJ`Arj!EI>IV0;h{)`f<6Ks+EGuwS&${S^D71N&nQ z3=j_riNyYh{js(r5D%8a8Snx4U_GoO9uNgx(0f5&1ae<1}srJOmyB4}pikL*QY3aVYc?=qJ!mpr1fLfqnx0 z#LAHo4~PfE1Nb5MA^0KqA^0Kq0Qdm-0Qdm-0QkWFnGdwyzV&zGw*c@ii8UN4KqJ?Q zT&H!PMm!)M5D&eVjYSL-T@#Kyg6;lx9hc1BnB zT(sfQl}0ItNK`tY(!qpClv(L#EL1uu7y;1%q60(+%WkP0woziM4G1b7 zQ0btna1b3V7y;1%qJzn(QR#5^l@8Od{q{-Yw*WvwYw|YAZRxT?<_noGy`&JCuNpKU z^QG;$D7Qtqt@*Yo%5C*y2}tPOlTZ-P+U^443F2v@DoUEv75l@xJ2wzQuDb8MG?u=yX5;MF z*W$Oju%6A-H`eoNTF*Gg;~bB3ym?kpkFiJ~A%SG-8Au=@fn3U$E$*l zwpoDpgZJw%%22e#t5eFRiC3reh(PfG-850PimFxpUom}>)~14IY?h^g=hhz<}POh%1Lht(@O#GZfo zAR!z7I27+2F&8*k5Ll3&iv$Y-3#yk6ka|Jt#f%7~Ui57fENJzzATS?`5U3>!p#OmR mfccpF9P}R(Bv-rs!~E;YmdN!zp*VfriVW>N5PzvZHT`dqE=K|Y literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png new file mode 100644 index 0000000000000000000000000000000000000000..06d16412e2e2db67257f104e122dc1bde75e1869 GIT binary patch literal 53983 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 OWU&8G^hf*R$Nml0Gget_unused_joy_id(); + if (joy_id != -1) { + // assign our player index + if (controller.playerIndex == GCControllerPlayerIndexUnset) { + controller.playerIndex = [delegate getFreePlayerIndex]; + }; + + // tell Godot about our new controller + OSIPhone::get_singleton()->joy_connection_changed( + joy_id, true, [controller.vendorName UTF8String]); + + // add it to our dictionary, this will retain our controllers + [ios_joysticks setObject:controller + forKey:[NSNumber numberWithInt:joy_id]]; + + // set our input handler + [delegate setControllerInputHandler:controller]; + } else { + printf("Couldn't retrieve new joy id\n"); + }; +} + - (void)controllerWasConnected:(NSNotification *)notification { // create our dictionary if we don't have one yet if (ios_joysticks == nil) { @@ -127,28 +152,12 @@ NSMutableDictionary *ios_joysticks = nil; printf("Couldn't retrieve new controller\n"); } else if ([[ios_joysticks allKeysForObject:controller] count] != 0) { printf("Controller is already registered\n"); + } else if (frame_count > 1) { + _ios_add_joystick(controller, self); } else { - // get a new id for our controller - int joy_id = OSIPhone::get_singleton()->get_unused_joy_id(); - if (joy_id != -1) { - // assign our player index - if (controller.playerIndex == GCControllerPlayerIndexUnset) { - controller.playerIndex = [self getFreePlayerIndex]; - }; - - // tell Godot about our new controller - OSIPhone::get_singleton()->joy_connection_changed( - joy_id, true, [controller.vendorName UTF8String]); - - // add it to our dictionary, this will retain our controllers - [ios_joysticks setObject:controller - forKey:[NSNumber numberWithInt:joy_id]]; - - // set our input handler - [self setControllerInputHandler:controller]; - } else { - printf("Couldn't retrieve new joy id\n"); - }; + if (pending_ios_joysticks == nil) + pending_ios_joysticks = [[NSMutableArray alloc] init]; + [pending_ios_joysticks addObject:controller]; }; }; @@ -352,6 +361,27 @@ NSMutableDictionary *ios_joysticks = nil; [ios_joysticks dealloc]; ios_joysticks = nil; }; + + if (pending_ios_joysticks != nil) { + [pending_ios_joysticks dealloc]; + pending_ios_joysticks = nil; + }; +}; + +OS::VideoMode _get_video_mode() { + int backingWidth; + int backingHeight; + glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, + GL_RENDERBUFFER_WIDTH_OES, &backingWidth); + glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, + GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); + + OS::VideoMode vm; + vm.fullscreen = true; + vm.width = backingWidth; + vm.height = backingHeight; + vm.resizable = false; + return vm; }; static int frame_count = 0; @@ -360,19 +390,7 @@ static int frame_count = 0; switch (frame_count) { case 0: { - int backingWidth; - int backingHeight; - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, - GL_RENDERBUFFER_WIDTH_OES, &backingWidth); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, - GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); - - OS::VideoMode vm; - vm.fullscreen = true; - vm.width = backingWidth; - vm.height = backingHeight; - vm.resizable = false; - OS::get_singleton()->set_video_mode(vm); + OS::get_singleton()->set_video_mode(_get_video_mode()); if (!OS::get_singleton()) { exit(0); @@ -410,6 +428,14 @@ static int frame_count = 0; Main::setup2(); ++frame_count; + if (pending_ios_joysticks != nil) { + for (GCController *controller in pending_ios_joysticks) { + _ios_add_joystick(controller, self); + } + [pending_ios_joysticks dealloc]; + pending_ios_joysticks = nil; + } + // this might be necessary before here NSDictionary *dict = [[NSBundle mainBundle] infoDictionary]; for (NSString *key in dict) { @@ -562,18 +588,13 @@ static int frame_count = 0; //[glView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | // UIViewAutoresizingFlexibleWidth]; - int backingWidth; - int backingHeight; - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, - GL_RENDERBUFFER_WIDTH_OES, &backingWidth); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, - GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); + OS::VideoMode vm = _get_video_mode(); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; - int err = iphone_main(backingWidth, backingHeight, gargc, gargv, String::utf8([documentsDirectory UTF8String])); + int err = iphone_main(vm.width, vm.height, gargc, gargv, String::utf8([documentsDirectory UTF8String])); if (err != 0) { // bail, things did not go very well for us, should probably output a message on screen with our error code... exit(0); diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index e3119814f4..4c1e02baf7 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -147,6 +147,26 @@ Vector EditorExportPlatformIOS::_ge return archs; } +struct LoadingScreenInfo { + const char *preset_key; + const char *export_name; +}; + +static const LoadingScreenInfo loading_screen_infos[] = { + { "landscape_launch_screens/iphone_2436x1125", "Default-Landscape-X.png" }, + { "landscape_launch_screens/iphone_2208x1242", "Default-Landscape-736h@3x.png" }, + { "landscape_launch_screens/ipad_1024x768", "Default-Landscape.png" }, + { "landscape_launch_screens/ipad_2048x1536", "Default-Landscape@2x.png" }, + + { "portrait_launch_screens/iphone_640x960", "Default-480h@2x.png" }, + { "portrait_launch_screens/iphone_640x1136", "Default-568h@2x.png" }, + { "portrait_launch_screens/iphone_750x1334", "Default-667h@2x.png" }, + { "portrait_launch_screens/iphone_1125x2436", "Default-Portrait-X.png" }, + { "portrait_launch_screens/ipad_768x1024", "Default-Portrait.png" }, + { "portrait_launch_screens/ipad_1536x2048", "Default-Portrait@2x.png" }, + { "portrait_launch_screens/iphone_1242x2208", "Default-Portrait-736h@3x.png" } +}; + void EditorExportPlatformIOS::get_export_options(List *r_options) { r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "zip"), "")); @@ -172,6 +192,7 @@ void EditorExportPlatformIOS::get_export_options(List *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/iphone_120x120", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPhone/iPod Touch with retina display r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/ipad_76x76", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/app_store_1024x1024", PROPERTY_HINT_FILE, "png"), "")); // App Store r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/iphone_180x180", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPhone with retina HD display r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/ipad_152x152", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad with retina display @@ -179,15 +200,9 @@ void EditorExportPlatformIOS::get_export_options(List *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_40x40", PROPERTY_HINT_FILE, "png"), "")); // Spotlight r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_80x80", PROPERTY_HINT_FILE, "png"), "")); // Spotlight on devices with retina display - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/iphone_2208x1242", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6 Plus, 6s Plus, 7 Plus - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/ipad_2732x2048", PROPERTY_HINT_FILE, "png"), "")); // 12.9-inch iPad Pro - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/ipad_2048x1536", PROPERTY_HINT_FILE, "png"), "")); // Other iPads - - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_640x1136", PROPERTY_HINT_FILE, "png"), "")); // iPhone 5, 5s, SE - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_750x1334", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6, 6s, 7 - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_1242x2208", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6 Plus, 6s Plus, 7 Plus - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/ipad_2048x2732", PROPERTY_HINT_FILE, "png"), "")); // 12.9-inch iPad Pro - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/ipad_1536x2048", PROPERTY_HINT_FILE, "png"), "")); // Other iPads + for (int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, loading_screen_infos[i].preset_key, PROPERTY_HINT_FILE, "png"), "")); + } r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false)); @@ -313,6 +328,7 @@ static const IconInfo icon_infos[] = { { "required_icons/iphone_120x120", "iphone", "Icon-120.png", "120", "3x", "40x40", true }, { "required_icons/ipad_76x76", "ipad", "Icon-76.png", "76", "1x", "76x76", false }, + { "required_icons/app_store_1024x1024", "ios-marketing", "Icon-1024.png", "1024", "1x", "1024x1024", false }, { "optional_icons/iphone_180x180", "iphone", "Icon-180.png", "180", "3x", "60x60", false }, @@ -380,23 +396,6 @@ Error EditorExportPlatformIOS::_export_icons(const Ref &p_pr return OK; } -struct LoadingScreenInfo { - const char *preset_key; - const char *export_name; -}; - -static const LoadingScreenInfo loading_screen_infos[] = { - { "landscape_launch_screens/iphone_2208x1242", "Default-Landscape-736h@3x.png" }, - { "landscape_launch_screens/ipad_2732x2048", "Default-Landscape-1366h@2x.png" }, - { "landscape_launch_screens/ipad_2048x1536", "Default-Landscape@2x.png" }, - - { "portrait_launch_screens/iphone_640x1136", "Default-568h@2x.png" }, - { "portrait_launch_screens/iphone_750x1334", "Default-667h@2x.png" }, - { "portrait_launch_screens/iphone_1242x2208", "Default-Portrait-736h@3x.png" }, - { "portrait_launch_screens/ipad_2048x2732", "Default-Portrait-1366h@2x.png" }, - { "portrait_launch_screens/ipad_1536x2048", "Default-Portrait@2x.png" } -}; - Error EditorExportPlatformIOS::_export_loading_screens(const Ref &p_preset, const String &p_dest_dir) { DirAccess *da = DirAccess::open(p_dest_dir); ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); @@ -404,12 +403,14 @@ Error EditorExportPlatformIOS::_export_loading_screens(const Refget(info.preset_key); - Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name); - if (err) { - memdelete(da); - String err_str = String("Failed to export loading screen (") + info.preset_key + ") from path: " + loading_screen_file; - ERR_PRINT(err_str.utf8().get_data()); - return err; + if (loading_screen_file.size() > 0) { + Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name); + if (err) { + memdelete(da); + String err_str = String("Failed to export loading screen (") + info.preset_key + ") from path: " + loading_screen_file; + ERR_PRINT(err_str.utf8().get_data()); + return err; + } } } memdelete(da); @@ -887,7 +888,7 @@ Error EditorExportPlatformIOS::export_project(const Ref &p_p if (err) return err; - err = _export_loading_screens(p_preset, dest_dir + binary_name + "/"); + err = _export_loading_screens(p_preset, dest_dir + binary_name + "/Images.xcassets/LaunchImage.launchimage/"); if (err) return err; diff --git a/platform/iphone/gl_view.h b/platform/iphone/gl_view.h index 85376ebc08..0d101eb696 100644 --- a/platform/iphone/gl_view.h +++ b/platform/iphone/gl_view.h @@ -83,6 +83,8 @@ @property(strong, nonatomic) MPMoviePlayerController *moviePlayerController; @property(strong, nonatomic) UIWindow *backgroundWindow; +@property(nonatomic) UITextAutocorrectionType autocorrectionType; + - (void)startAnimation; - (void)stopAnimation; - (void)drawView; diff --git a/platform/iphone/gl_view.mm b/platform/iphone/gl_view.mm index 69116c64c6..ff95cf6e5f 100644 --- a/platform/iphone/gl_view.mm +++ b/platform/iphone/gl_view.mm @@ -78,6 +78,16 @@ void _hide_keyboard() { keyboard_text = ""; }; +Rect2 _get_ios_window_safe_area(float p_window_width, float p_window_height) { + UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 0, 0); + if (_instance != nil && [_instance respondsToSelector:@selector(safeAreaInsets)]) { + insets = [_instance safeAreaInsets]; + } + ERR_FAIL_COND_V(insets.left < 0 || insets.top < 0 || insets.right < 0 || insets.bottom < 0, + Rect2(0, 0, p_window_width, p_window_height)); + return Rect2(insets.left, insets.top, p_window_width - insets.right - insets.left, p_window_height - insets.bottom - insets.top); +} + bool _play_video(String p_path, float p_volume, String p_audio_track, String p_subtitle_track) { p_path = ProjectSettings::get_singleton()->globalize_path(p_path); @@ -326,9 +336,7 @@ static void clear_touches() { // Generate IDs for a framebuffer object and a color renderbuffer UIScreen *mainscr = [UIScreen mainScreen]; printf("******** screen size %i, %i\n", (int)mainscr.currentMode.size.width, (int)mainscr.currentMode.size.height); - float minPointSize = MIN(mainscr.bounds.size.width, mainscr.bounds.size.height); - float minScreenSize = MIN(mainscr.currentMode.size.width, mainscr.currentMode.size.height); - self.contentScaleFactor = minScreenSize / minPointSize; + self.contentScaleFactor = mainscr.nativeScale; glGenFramebuffersOES(1, &viewFramebuffer); glGenRenderbuffersOES(1, &viewRenderbuffer); @@ -627,6 +635,7 @@ static void clear_touches() { } init_touches(); self.multipleTouchEnabled = YES; + self.autocorrectionType = UITextAutocorrectionTypeNo; printf("******** adding observer for sound routing changes\n"); [[NSNotificationCenter defaultCenter] diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp index c4c59431f2..97ebc19335 100644 --- a/platform/iphone/os_iphone.cpp +++ b/platform/iphone/os_iphone.cpp @@ -504,6 +504,12 @@ Size2 OSIPhone::get_window_size() const { return Vector2(video_mode.width, video_mode.height); } +extern Rect2 _get_ios_window_safe_area(float p_window_width, float p_window_height); + +Rect2 OSIPhone::get_window_safe_area() const { + return _get_ios_window_safe_area(video_mode.width, video_mode.height); +} + bool OSIPhone::has_touchscreen_ui_hint() const { return true; diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h index 2e4458aeed..00d9efb01a 100644 --- a/platform/iphone/os_iphone.h +++ b/platform/iphone/os_iphone.h @@ -177,6 +177,7 @@ public: virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot); virtual Size2 get_window_size() const; + virtual Rect2 get_window_safe_area() const; virtual bool has_touchscreen_ui_hint() const;