Merge pull request #18106 from endragor/iphone-x
iPhone X support and iOS-related fixes
|
@ -288,6 +288,10 @@ void _OS::set_window_size(const Size2 &p_size) {
|
||||||
OS::get_singleton()->set_window_size(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) {
|
void _OS::set_window_fullscreen(bool p_enabled) {
|
||||||
OS::get_singleton()->set_window_fullscreen(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("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("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("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("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("is_window_fullscreen"), &_OS::is_window_fullscreen);
|
||||||
ClassDB::bind_method(D_METHOD("set_window_resizable", "enabled"), &_OS::set_window_resizable);
|
ClassDB::bind_method(D_METHOD("set_window_resizable", "enabled"), &_OS::set_window_resizable);
|
||||||
|
|
|
@ -162,6 +162,7 @@ public:
|
||||||
virtual void set_window_position(const Point2 &p_position);
|
virtual void set_window_position(const Point2 &p_position);
|
||||||
virtual Size2 get_window_size() const;
|
virtual Size2 get_window_size() const;
|
||||||
virtual Size2 get_real_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_size(const Size2 &p_size);
|
||||||
virtual void set_window_fullscreen(bool p_enabled);
|
virtual void set_window_fullscreen(bool p_enabled);
|
||||||
virtual bool is_window_fullscreen() const;
|
virtual bool is_window_fullscreen() const;
|
||||||
|
|
12
core/os/os.h
|
@ -205,6 +205,18 @@ public:
|
||||||
virtual void request_attention() {}
|
virtual void request_attention() {}
|
||||||
virtual void center_window();
|
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 void set_borderless_window(bool p_borderless) {}
|
||||||
virtual bool get_borderless_window() { return 0; }
|
virtual bool get_borderless_window() { return 0; }
|
||||||
|
|
||||||
|
|
|
@ -22,14 +22,6 @@
|
||||||
1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1841F584E3F00A41E41 /* GameKit.framework */; };
|
1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1841F584E3F00A41E41 /* GameKit.framework */; };
|
||||||
1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1861F584E5600A41E41 /* StoreKit.framework */; };
|
1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1861F584E5600A41E41 /* StoreKit.framework */; };
|
||||||
1FF4C1871F584E7600A41E41 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1881F584E7600A41E41 /* 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 */; };
|
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; };
|
||||||
D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
|
D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
|
||||||
D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.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; };
|
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 = "<group>"; };
|
1FF4C1881F584E6300A41E41 /* $binary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = $binary.entitlements; sourceTree = "<group>"; };
|
||||||
1FF8DBB01FBA9DE1009DE660 /* dummy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dummy.cpp; sourceTree = "<group>"; };
|
1FF8DBB01FBA9DE1009DE660 /* dummy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dummy.cpp; sourceTree = "<group>"; };
|
||||||
D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-736h@3x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h@3x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-1366h@2x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-1366h@2x.png"; sourceTree = "<group>"; };
|
|
||||||
D07CD44D1C5D589C00B7FB28 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
D07CD44D1C5D589C00B7FB28 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||||
D0BCFE3418AEBDA2004A7AAE /* $binary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = $binary.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
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; };
|
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;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
1FF4C1881F584E6300A41E41 /* $binary.entitlements */,
|
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 */,
|
D07CD44D1C5D589C00B7FB28 /* Images.xcassets */,
|
||||||
D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
|
D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
|
||||||
1FF8DBB01FBA9DE1009DE660 /* dummy.cpp */,
|
1FF8DBB01FBA9DE1009DE660 /* dummy.cpp */,
|
||||||
|
@ -254,14 +230,6 @@
|
||||||
1F1575721F582BE20003B888 /* dylibs in Resources */,
|
1F1575721F582BE20003B888 /* dylibs in Resources */,
|
||||||
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */,
|
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */,
|
||||||
D0BCFE7818AEBFEB004A7AAE /* $binary.pck 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 */,
|
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
|
||||||
$additional_pbx_resources_build
|
$additional_pbx_resources_build
|
||||||
);
|
);
|
||||||
|
@ -377,6 +345,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$godot_archs";
|
ARCHS = "$godot_archs";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||||
CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements;
|
CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "$code_sign_identity_debug";
|
CODE_SIGN_IDENTITY = "$code_sign_identity_debug";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug";
|
||||||
|
@ -401,6 +370,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$godot_archs";
|
ARCHS = "$godot_archs";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||||
CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements;
|
CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "$code_sign_identity_release";
|
CODE_SIGN_IDENTITY = "$code_sign_identity_release";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release";
|
||||||
|
|
BIN
misc/dist/ios_xcode/godot_ios/Default-568h@2x.png
vendored
Before Width: | Height: | Size: 564 B |
BIN
misc/dist/ios_xcode/godot_ios/Default-667h@2x.png
vendored
Before Width: | Height: | Size: 817 B |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 32 KiB |
102
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Contents.json
vendored
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "2436h",
|
||||||
|
"filename" : "Default-Portrait-X.png",
|
||||||
|
"minimum-system-version" : "11.0",
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "2436h",
|
||||||
|
"filename" : "Default-Landscape-X.png",
|
||||||
|
"minimum-system-version" : "11.0",
|
||||||
|
"orientation" : "landscape",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "736h",
|
||||||
|
"filename" : "Default-Portrait-736h@3x.png",
|
||||||
|
"minimum-system-version" : "8.0",
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "736h",
|
||||||
|
"filename" : "Default-Landscape-736h@3x.png",
|
||||||
|
"minimum-system-version" : "8.0",
|
||||||
|
"orientation" : "landscape",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "667h",
|
||||||
|
"filename" : "Default-667h@2x.png",
|
||||||
|
"minimum-system-version" : "8.0",
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Default-480h@2x.png",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "retina4",
|
||||||
|
"filename" : "Default-568h@2x.png",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Default-Portrait.png",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"orientation" : "landscape",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Default-Landscape.png",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Default-Portrait@2x.png",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"orientation" : "landscape",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Default-Landscape@2x.png",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "2x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-480h@2x.png
vendored
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png
vendored
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png
vendored
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png
vendored
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png
vendored
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png
vendored
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png
vendored
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png
vendored
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png
vendored
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png
vendored
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png
vendored
Normal file
After Width: | Height: | Size: 61 KiB |
|
@ -79,6 +79,7 @@ static ViewController *mainViewController = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMutableDictionary *ios_joysticks = nil;
|
NSMutableDictionary *ios_joysticks = nil;
|
||||||
|
NSMutableArray *pending_ios_joysticks = nil;
|
||||||
|
|
||||||
- (GCControllerPlayerIndex)getFreePlayerIndex {
|
- (GCControllerPlayerIndex)getFreePlayerIndex {
|
||||||
bool have_player_1 = false;
|
bool have_player_1 = false;
|
||||||
|
@ -115,6 +116,30 @@ NSMutableDictionary *ios_joysticks = nil;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void _ios_add_joystick(GCController *controller, AppDelegate *delegate) {
|
||||||
|
// 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 = [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 {
|
- (void)controllerWasConnected:(NSNotification *)notification {
|
||||||
// create our dictionary if we don't have one yet
|
// create our dictionary if we don't have one yet
|
||||||
if (ios_joysticks == nil) {
|
if (ios_joysticks == nil) {
|
||||||
|
@ -127,28 +152,12 @@ NSMutableDictionary *ios_joysticks = nil;
|
||||||
printf("Couldn't retrieve new controller\n");
|
printf("Couldn't retrieve new controller\n");
|
||||||
} else if ([[ios_joysticks allKeysForObject:controller] count] != 0) {
|
} else if ([[ios_joysticks allKeysForObject:controller] count] != 0) {
|
||||||
printf("Controller is already registered\n");
|
printf("Controller is already registered\n");
|
||||||
|
} else if (frame_count > 1) {
|
||||||
|
_ios_add_joystick(controller, self);
|
||||||
} else {
|
} else {
|
||||||
// get a new id for our controller
|
if (pending_ios_joysticks == nil)
|
||||||
int joy_id = OSIPhone::get_singleton()->get_unused_joy_id();
|
pending_ios_joysticks = [[NSMutableArray alloc] init];
|
||||||
if (joy_id != -1) {
|
[pending_ios_joysticks addObject:controller];
|
||||||
// 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");
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -352,14 +361,14 @@ NSMutableDictionary *ios_joysticks = nil;
|
||||||
[ios_joysticks dealloc];
|
[ios_joysticks dealloc];
|
||||||
ios_joysticks = nil;
|
ios_joysticks = nil;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (pending_ios_joysticks != nil) {
|
||||||
|
[pending_ios_joysticks dealloc];
|
||||||
|
pending_ios_joysticks = nil;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
static int frame_count = 0;
|
OS::VideoMode _get_video_mode() {
|
||||||
- (void)drawView:(GLView *)view;
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (frame_count) {
|
|
||||||
case 0: {
|
|
||||||
int backingWidth;
|
int backingWidth;
|
||||||
int backingHeight;
|
int backingHeight;
|
||||||
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
|
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
|
||||||
|
@ -372,7 +381,16 @@ static int frame_count = 0;
|
||||||
vm.width = backingWidth;
|
vm.width = backingWidth;
|
||||||
vm.height = backingHeight;
|
vm.height = backingHeight;
|
||||||
vm.resizable = false;
|
vm.resizable = false;
|
||||||
OS::get_singleton()->set_video_mode(vm);
|
return vm;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int frame_count = 0;
|
||||||
|
- (void)drawView:(GLView *)view;
|
||||||
|
{
|
||||||
|
|
||||||
|
switch (frame_count) {
|
||||||
|
case 0: {
|
||||||
|
OS::get_singleton()->set_video_mode(_get_video_mode());
|
||||||
|
|
||||||
if (!OS::get_singleton()) {
|
if (!OS::get_singleton()) {
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -410,6 +428,14 @@ static int frame_count = 0;
|
||||||
Main::setup2();
|
Main::setup2();
|
||||||
++frame_count;
|
++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
|
// this might be necessary before here
|
||||||
NSDictionary *dict = [[NSBundle mainBundle] infoDictionary];
|
NSDictionary *dict = [[NSBundle mainBundle] infoDictionary];
|
||||||
for (NSString *key in dict) {
|
for (NSString *key in dict) {
|
||||||
|
@ -562,18 +588,13 @@ static int frame_count = 0;
|
||||||
//[glView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
|
//[glView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
|
||||||
// UIViewAutoresizingFlexibleWidth];
|
// UIViewAutoresizingFlexibleWidth];
|
||||||
|
|
||||||
int backingWidth;
|
OS::VideoMode vm = _get_video_mode();
|
||||||
int backingHeight;
|
|
||||||
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
|
|
||||||
GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
|
|
||||||
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
|
|
||||||
GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
|
|
||||||
|
|
||||||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
|
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
|
||||||
NSUserDomainMask, YES);
|
NSUserDomainMask, YES);
|
||||||
NSString *documentsDirectory = [paths objectAtIndex:0];
|
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) {
|
if (err != 0) {
|
||||||
// bail, things did not go very well for us, should probably output a message on screen with our error code...
|
// bail, things did not go very well for us, should probably output a message on screen with our error code...
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
|
@ -147,6 +147,26 @@ Vector<EditorExportPlatformIOS::ExportArchitecture> EditorExportPlatformIOS::_ge
|
||||||
return archs;
|
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<ExportOption> *r_options) {
|
void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) {
|
||||||
|
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "zip"), ""));
|
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<ExportOption> *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/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/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/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
|
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<ExportOption> *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_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, "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
|
for (int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) {
|
||||||
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, loading_screen_infos[i].preset_key, PROPERTY_HINT_FILE, "png"), ""));
|
||||||
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
|
|
||||||
|
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), false));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), false));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), 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/iphone_120x120", "iphone", "Icon-120.png", "120", "3x", "40x40", true },
|
||||||
|
|
||||||
{ "required_icons/ipad_76x76", "ipad", "Icon-76.png", "76", "1x", "76x76", false },
|
{ "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 },
|
{ "optional_icons/iphone_180x180", "iphone", "Icon-180.png", "180", "3x", "60x60", false },
|
||||||
|
|
||||||
|
@ -380,23 +396,6 @@ Error EditorExportPlatformIOS::_export_icons(const Ref<EditorExportPreset> &p_pr
|
||||||
return OK;
|
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<EditorExportPreset> &p_preset, const String &p_dest_dir) {
|
Error EditorExportPlatformIOS::_export_loading_screens(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir) {
|
||||||
DirAccess *da = DirAccess::open(p_dest_dir);
|
DirAccess *da = DirAccess::open(p_dest_dir);
|
||||||
ERR_FAIL_COND_V(!da, ERR_CANT_OPEN);
|
ERR_FAIL_COND_V(!da, ERR_CANT_OPEN);
|
||||||
|
@ -404,6 +403,7 @@ Error EditorExportPlatformIOS::_export_loading_screens(const Ref<EditorExportPre
|
||||||
for (int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) {
|
for (int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) {
|
||||||
LoadingScreenInfo info = loading_screen_infos[i];
|
LoadingScreenInfo info = loading_screen_infos[i];
|
||||||
String loading_screen_file = p_preset->get(info.preset_key);
|
String loading_screen_file = p_preset->get(info.preset_key);
|
||||||
|
if (loading_screen_file.size() > 0) {
|
||||||
Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name);
|
Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name);
|
||||||
if (err) {
|
if (err) {
|
||||||
memdelete(da);
|
memdelete(da);
|
||||||
|
@ -412,6 +412,7 @@ Error EditorExportPlatformIOS::_export_loading_screens(const Ref<EditorExportPre
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
memdelete(da);
|
memdelete(da);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
@ -887,7 +888,7 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p
|
||||||
if (err)
|
if (err)
|
||||||
return 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)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
@property(strong, nonatomic) MPMoviePlayerController *moviePlayerController;
|
@property(strong, nonatomic) MPMoviePlayerController *moviePlayerController;
|
||||||
@property(strong, nonatomic) UIWindow *backgroundWindow;
|
@property(strong, nonatomic) UIWindow *backgroundWindow;
|
||||||
|
|
||||||
|
@property(nonatomic) UITextAutocorrectionType autocorrectionType;
|
||||||
|
|
||||||
- (void)startAnimation;
|
- (void)startAnimation;
|
||||||
- (void)stopAnimation;
|
- (void)stopAnimation;
|
||||||
- (void)drawView;
|
- (void)drawView;
|
||||||
|
|
|
@ -78,6 +78,16 @@ void _hide_keyboard() {
|
||||||
keyboard_text = "";
|
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) {
|
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);
|
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
|
// Generate IDs for a framebuffer object and a color renderbuffer
|
||||||
UIScreen *mainscr = [UIScreen mainScreen];
|
UIScreen *mainscr = [UIScreen mainScreen];
|
||||||
printf("******** screen size %i, %i\n", (int)mainscr.currentMode.size.width, (int)mainscr.currentMode.size.height);
|
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);
|
self.contentScaleFactor = mainscr.nativeScale;
|
||||||
float minScreenSize = MIN(mainscr.currentMode.size.width, mainscr.currentMode.size.height);
|
|
||||||
self.contentScaleFactor = minScreenSize / minPointSize;
|
|
||||||
|
|
||||||
glGenFramebuffersOES(1, &viewFramebuffer);
|
glGenFramebuffersOES(1, &viewFramebuffer);
|
||||||
glGenRenderbuffersOES(1, &viewRenderbuffer);
|
glGenRenderbuffersOES(1, &viewRenderbuffer);
|
||||||
|
@ -627,6 +635,7 @@ static void clear_touches() {
|
||||||
}
|
}
|
||||||
init_touches();
|
init_touches();
|
||||||
self.multipleTouchEnabled = YES;
|
self.multipleTouchEnabled = YES;
|
||||||
|
self.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||||
|
|
||||||
printf("******** adding observer for sound routing changes\n");
|
printf("******** adding observer for sound routing changes\n");
|
||||||
[[NSNotificationCenter defaultCenter]
|
[[NSNotificationCenter defaultCenter]
|
||||||
|
|
|
@ -504,6 +504,12 @@ Size2 OSIPhone::get_window_size() const {
|
||||||
return Vector2(video_mode.width, video_mode.height);
|
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 {
|
bool OSIPhone::has_touchscreen_ui_hint() const {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -177,6 +177,7 @@ public:
|
||||||
virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot);
|
virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot);
|
||||||
|
|
||||||
virtual Size2 get_window_size() const;
|
virtual Size2 get_window_size() const;
|
||||||
|
virtual Rect2 get_window_safe_area() const;
|
||||||
|
|
||||||
virtual bool has_touchscreen_ui_hint() const;
|
virtual bool has_touchscreen_ui_hint() const;
|
||||||
|
|
||||||
|
|