summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
Diffstat (limited to 'platform')
-rw-r--r--platform/iphone/SCsub2
-rw-r--r--platform/iphone/game_center.h2
-rw-r--r--platform/iphone/game_center.mm28
-rw-r--r--platform/iphone/godot_view_gesture_recognizer.h2
-rw-r--r--platform/iphone/godot_view_gesture_recognizer.mm (renamed from platform/iphone/godot_view_gesture_recognizer.m)15
-rw-r--r--platform/iphone/os_iphone.mm1
-rw-r--r--platform/osx/display_server_osx.mm13
7 files changed, 32 insertions, 31 deletions
diff --git a/platform/iphone/SCsub b/platform/iphone/SCsub
index 49c77468ed..848fd9713a 100644
--- a/platform/iphone/SCsub
+++ b/platform/iphone/SCsub
@@ -18,7 +18,7 @@ iphone_lib = [
"godot_view.mm",
"display_layer.mm",
"godot_view_renderer.mm",
- "godot_view_gesture_recognizer.m",
+ "godot_view_gesture_recognizer.mm",
]
env_ios = env.Clone()
diff --git a/platform/iphone/game_center.h b/platform/iphone/game_center.h
index 1e9a68fe48..6705674ac6 100644
--- a/platform/iphone/game_center.h
+++ b/platform/iphone/game_center.h
@@ -48,7 +48,7 @@ class GameCenter : public Object {
void return_connect_error(const char *p_error_description);
public:
- void connect();
+ Error authenticate();
bool is_authenticated();
Error post_score(Dictionary p_score);
diff --git a/platform/iphone/game_center.mm b/platform/iphone/game_center.mm
index 4481775c32..b237ba6bb6 100644
--- a/platform/iphone/game_center.mm
+++ b/platform/iphone/game_center.mm
@@ -52,6 +52,7 @@ extern "C" {
GameCenter *GameCenter::instance = NULL;
void GameCenter::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("authenticate"), &GameCenter::authenticate);
ClassDB::bind_method(D_METHOD("is_authenticated"), &GameCenter::is_authenticated);
ClassDB::bind_method(D_METHOD("post_score"), &GameCenter::post_score);
@@ -66,34 +67,17 @@ void GameCenter::_bind_methods() {
ClassDB::bind_method(D_METHOD("pop_pending_event"), &GameCenter::pop_pending_event);
};
-void GameCenter::return_connect_error(const char *p_error_description) {
- authenticated = false;
- Dictionary ret;
- ret["type"] = "authentication";
- ret["result"] = "error";
- ret["error_code"] = 0;
- ret["error_description"] = p_error_description;
- pending_events.push_back(ret);
-}
-
-void GameCenter::connect() {
+Error GameCenter::authenticate() {
//if this class isn't available, game center isn't implemented
if ((NSClassFromString(@"GKLocalPlayer")) == nil) {
- return_connect_error("GameCenter not available");
- return;
+ return ERR_UNAVAILABLE;
}
GKLocalPlayer *player = [GKLocalPlayer localPlayer];
- if (![player respondsToSelector:@selector(authenticateHandler)]) {
- return_connect_error("GameCenter doesn't respond to 'authenticateHandler'");
- return;
- }
+ ERR_FAIL_COND_V(![player respondsToSelector:@selector(authenticateHandler)], ERR_UNAVAILABLE);
ViewController *root_controller = (ViewController *)((AppDelegate *)[[UIApplication sharedApplication] delegate]).window.rootViewController;
- if (!root_controller) {
- return_connect_error("Window doesn't have root ViewController");
- return;
- }
+ ERR_FAIL_COND_V(!root_controller, FAILED);
// This handler is called several times. First when the view needs to be shown, then again
// after the view is cancelled or the user logs in. Or if the user's already logged in, it's
@@ -126,6 +110,8 @@ void GameCenter::connect() {
pending_events.push_back(ret);
};
});
+
+ return OK;
};
bool GameCenter::is_authenticated() {
diff --git a/platform/iphone/godot_view_gesture_recognizer.h b/platform/iphone/godot_view_gesture_recognizer.h
index 8d84914712..1431a9fb89 100644
--- a/platform/iphone/godot_view_gesture_recognizer.h
+++ b/platform/iphone/godot_view_gesture_recognizer.h
@@ -39,6 +39,8 @@
@interface GodotViewGestureRecognizer : UIGestureRecognizer
+@property(nonatomic, readonly, assign) NSTimeInterval delayTimeInterval;
+
- (instancetype)init;
@end
diff --git a/platform/iphone/godot_view_gesture_recognizer.m b/platform/iphone/godot_view_gesture_recognizer.mm
index 377ccd52a5..99ee42ecb3 100644
--- a/platform/iphone/godot_view_gesture_recognizer.m
+++ b/platform/iphone/godot_view_gesture_recognizer.mm
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* godot_view_gesture_recognizer.m */
+/* godot_view_gesture_recognizer.mm */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -30,8 +30,7 @@
#import "godot_view_gesture_recognizer.h"
-// Using same delay interval that is used for `UIScrollView`
-const NSTimeInterval kGLGestureDelayInterval = 0.150;
+#include "core/project_settings.h"
// Minimum distance for touches to move to fire
// a delay timer before scheduled time.
@@ -41,6 +40,12 @@ const CGFloat kGLGestureMovementDistance = 0.5;
@interface GodotViewGestureRecognizer ()
+@property(nonatomic, readwrite, assign) NSTimeInterval delayTimeInterval;
+
+@end
+
+@interface GodotViewGestureRecognizer ()
+
// Timer used to delay begin touch message.
// Should work as simple emulation of UIDelayedAction
@property(strong, nonatomic) NSTimer *delayTimer;
@@ -60,6 +65,8 @@ const CGFloat kGLGestureMovementDistance = 0.5;
self.delaysTouchesBegan = YES;
self.delaysTouchesEnded = YES;
+ self.delayTimeInterval = GLOBAL_GET("input_devices/pointing/ios/touch_delay");
+
return self;
}
@@ -87,7 +94,7 @@ const CGFloat kGLGestureMovementDistance = 0.5;
self.delayedEvent = event;
self.delayTimer = [NSTimer
- scheduledTimerWithTimeInterval:kGLGestureDelayInterval
+ scheduledTimerWithTimeInterval:self.delayTimeInterval
target:self
selector:@selector(fireDelayedTouches:)
userInfo:nil
diff --git a/platform/iphone/os_iphone.mm b/platform/iphone/os_iphone.mm
index 946fd51923..5baa5b66fc 100644
--- a/platform/iphone/os_iphone.mm
+++ b/platform/iphone/os_iphone.mm
@@ -128,7 +128,6 @@ void OSIPhone::initialize_modules() {
#ifdef GAME_CENTER_ENABLED
game_center = memnew(GameCenter);
Engine::get_singleton()->add_singleton(Engine::Singleton("GameCenter", game_center));
- game_center->connect();
#endif
#ifdef STOREKIT_ENABLED
diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm
index 49f0e7bfa3..cd5b71890c 100644
--- a/platform/osx/display_server_osx.mm
+++ b/platform/osx/display_server_osx.mm
@@ -2246,11 +2246,18 @@ int DisplayServerOSX::screen_get_dpi(int p_screen) const {
NSArray *screenArray = [NSScreen screens];
if ((NSUInteger)p_screen < [screenArray count]) {
NSDictionary *description = [[screenArray objectAtIndex:p_screen] deviceDescription];
- NSSize displayDPI = [[description objectForKey:NSDeviceResolution] sizeValue];
- return (displayDPI.width + displayDPI.height) / 2;
+
+ const NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue];
+ const CGSize displayPhysicalSize = CGDisplayScreenSize([[description objectForKey:@"NSScreenNumber"] unsignedIntValue]);
+ float scale = [[screenArray objectAtIndex:p_screen] backingScaleFactor];
+
+ float den2 = (displayPhysicalSize.width / 25.4f) * (displayPhysicalSize.width / 25.4f) + (displayPhysicalSize.height / 25.4f) * (displayPhysicalSize.height / 25.4f);
+ if (den2 > 0.0f) {
+ return ceil(sqrt(displayPixelSize.width * displayPixelSize.width + displayPixelSize.height * displayPixelSize.height) / sqrt(den2) * scale);
+ }
}
- return 96;
+ return 72;
}
float DisplayServerOSX::screen_get_scale(int p_screen) const {