| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  view_controller.mm                                                    */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*                         This file is part of:                          */ | 
					
						
							|  |  |  | /*                             GODOT ENGINE                               */ | 
					
						
							|  |  |  | /*                        https://godotengine.org                         */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ | 
					
						
							|  |  |  | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining  */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the        */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including    */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,    */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to     */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to  */ | 
					
						
							|  |  |  | /* the following conditions:                                              */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be         */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.        */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #import "view_controller.h" | 
					
						
							| 
									
										
										
										
											2023-06-08 14:51:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #import "display_server_ios.h" | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | #import "godot_view.h" | 
					
						
							|  |  |  | #import "godot_view_renderer.h" | 
					
						
							| 
									
										
										
										
											2022-12-11 01:21:22 +02:00
										 |  |  | #import "key_mapping_ios.h" | 
					
						
							| 
									
										
										
										
											2020-11-15 15:11:25 +03:00
										 |  |  | #import "keyboard_input_view.h" | 
					
						
							| 
									
										
										
										
											2023-06-08 14:51:32 +02:00
										 |  |  | #import "os_ios.h" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "core/config/project_settings.h" | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-13 18:24:39 +03:00
										 |  |  | #import <AVFoundation/AVFoundation.h> | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | #import <GameController/GameController.h> | 
					
						
							| 
									
										
										
										
											2019-12-09 20:38:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-27 15:04:13 +03:00
										 |  |  | @interface ViewController () <GodotViewDelegate> | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | @property(strong, nonatomic) GodotViewRenderer *renderer; | 
					
						
							| 
									
										
										
										
											2020-11-15 15:11:25 +03:00
										 |  |  | @property(strong, nonatomic) GodotKeyboardInputView *keyboardView; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-27 15:04:13 +03:00
										 |  |  | @property(strong, nonatomic) UIView *godotLoadingOverlay; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | @end | 
					
						
							| 
									
										
										
										
											2014-03-13 22:57:24 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | @implementation ViewController | 
					
						
							| 
									
										
										
										
											2014-03-13 22:57:24 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | - (GodotView *)godotView { | 
					
						
							|  |  |  | 	return (GodotView *)self.view; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-03-13 22:57:24 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-11 01:21:22 +02:00
										 |  |  | - (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { | 
					
						
							|  |  |  | 	[super pressesBegan:presses withEvent:event]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!DisplayServerIOS::get_singleton() || DisplayServerIOS::get_singleton()->is_keyboard_active()) { | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (@available(iOS 13.4, *)) { | 
					
						
							|  |  |  | 		for (UIPress *press in presses) { | 
					
						
							|  |  |  | 			String u32lbl = String::utf8([press.key.charactersIgnoringModifiers UTF8String]); | 
					
						
							|  |  |  | 			String u32text = String::utf8([press.key.characters UTF8String]); | 
					
						
							|  |  |  | 			Key key = KeyMappingIOS::remap_key(press.key.keyCode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (press.key.keyCode == 0 && u32text.is_empty() && u32lbl.is_empty()) { | 
					
						
							|  |  |  | 				continue; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			char32_t us = 0; | 
					
						
							|  |  |  | 			if (!u32lbl.is_empty() && !u32lbl.begins_with("UIKey")) { | 
					
						
							|  |  |  | 				us = u32lbl[0]; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!u32text.is_empty() && !u32text.begins_with("UIKey")) { | 
					
						
							|  |  |  | 				for (int i = 0; i < u32text.length(); i++) { | 
					
						
							|  |  |  | 					const char32_t c = u32text[i]; | 
					
						
							|  |  |  | 					DisplayServerIOS::get_singleton()->key(fix_keycode(us, key), c, fix_key_label(us, key), key, press.key.modifierFlags, true); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				DisplayServerIOS::get_singleton()->key(fix_keycode(us, key), 0, fix_key_label(us, key), key, press.key.modifierFlags, true); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { | 
					
						
							|  |  |  | 	[super pressesEnded:presses withEvent:event]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!DisplayServerIOS::get_singleton() || DisplayServerIOS::get_singleton()->is_keyboard_active()) { | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (@available(iOS 13.4, *)) { | 
					
						
							|  |  |  | 		for (UIPress *press in presses) { | 
					
						
							|  |  |  | 			String u32lbl = String::utf8([press.key.charactersIgnoringModifiers UTF8String]); | 
					
						
							|  |  |  | 			Key key = KeyMappingIOS::remap_key(press.key.keyCode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (press.key.keyCode == 0 && u32lbl.is_empty()) { | 
					
						
							|  |  |  | 				continue; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			char32_t us = 0; | 
					
						
							|  |  |  | 			if (!u32lbl.is_empty() && !u32lbl.begins_with("UIKey")) { | 
					
						
							|  |  |  | 				us = u32lbl[0]; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			DisplayServerIOS::get_singleton()->key(fix_keycode(us, key), 0, fix_key_label(us, key), key, press.key.modifierFlags, false); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | - (void)loadView { | 
					
						
							|  |  |  | 	GodotView *view = [[GodotView alloc] init]; | 
					
						
							|  |  |  | 	GodotViewRenderer *renderer = [[GodotViewRenderer alloc] init]; | 
					
						
							| 
									
										
										
										
											2014-03-13 22:57:24 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	self.renderer = renderer; | 
					
						
							|  |  |  | 	self.view = view; | 
					
						
							| 
									
										
										
										
											2017-04-09 14:18:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	view.renderer = self.renderer; | 
					
						
							| 
									
										
										
										
											2020-07-27 15:04:13 +03:00
										 |  |  | 	view.delegate = self; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { | 
					
						
							|  |  |  | 	self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	if (self) { | 
					
						
							|  |  |  | 		[self godot_commonInit]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (instancetype)initWithCoder:(NSCoder *)coder { | 
					
						
							|  |  |  | 	self = [super initWithCoder:coder]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (self) { | 
					
						
							|  |  |  | 		[self godot_commonInit]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (void)godot_commonInit { | 
					
						
							| 
									
										
										
										
											2020-10-02 13:10:47 +03:00
										 |  |  | 	// Initialize view controller values. | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | - (void)didReceiveMemoryWarning { | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	[super didReceiveMemoryWarning]; | 
					
						
							| 
									
										
										
										
											2023-03-15 10:40:36 +02:00
										 |  |  | 	print_verbose("Did receive memory warning!"); | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-21 18:55:21 +02:00
										 |  |  | - (void)viewDidLoad { | 
					
						
							|  |  |  | 	[super viewDidLoad]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	[self observeKeyboard]; | 
					
						
							| 
									
										
										
										
											2020-07-27 15:04:13 +03:00
										 |  |  | 	[self displayLoadingOverlay]; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-27 21:15:17 +03:00
										 |  |  | 	[self setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; | 
					
						
							| 
									
										
										
										
											2019-08-21 18:55:21 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | - (void)observeKeyboard { | 
					
						
							| 
									
										
										
										
											2023-03-15 10:40:36 +02:00
										 |  |  | 	print_verbose("Setting up keyboard input view."); | 
					
						
							| 
									
										
										
										
											2020-11-15 15:11:25 +03:00
										 |  |  | 	self.keyboardView = [GodotKeyboardInputView new]; | 
					
						
							|  |  |  | 	[self.view addSubview:self.keyboardView]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-15 10:40:36 +02:00
										 |  |  | 	print_verbose("Adding observer for keyboard show/hide."); | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	[[NSNotificationCenter defaultCenter] | 
					
						
							|  |  |  | 			addObserver:self | 
					
						
							|  |  |  | 			   selector:@selector(keyboardOnScreen:) | 
					
						
							|  |  |  | 				   name:UIKeyboardDidShowNotification | 
					
						
							|  |  |  | 				 object:nil]; | 
					
						
							|  |  |  | 	[[NSNotificationCenter defaultCenter] | 
					
						
							|  |  |  | 			addObserver:self | 
					
						
							|  |  |  | 			   selector:@selector(keyboardHidden:) | 
					
						
							|  |  |  | 				   name:UIKeyboardDidHideNotification | 
					
						
							|  |  |  | 				 object:nil]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-27 15:04:13 +03:00
										 |  |  | - (void)displayLoadingOverlay { | 
					
						
							|  |  |  | 	NSBundle *bundle = [NSBundle mainBundle]; | 
					
						
							|  |  |  | 	NSString *storyboardName = @"Launch Screen"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if ([bundle pathForResource:storyboardName ofType:@"storyboardc"] == nil) { | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	UIStoryboard *launchStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:bundle]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	UIViewController *controller = [launchStoryboard instantiateInitialViewController]; | 
					
						
							|  |  |  | 	self.godotLoadingOverlay = controller.view; | 
					
						
							|  |  |  | 	self.godotLoadingOverlay.frame = self.view.bounds; | 
					
						
							|  |  |  | 	self.godotLoadingOverlay.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	[self.view addSubview:self.godotLoadingOverlay]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (BOOL)godotViewFinishedSetup:(GodotView *)view { | 
					
						
							|  |  |  | 	[self.godotLoadingOverlay removeFromSuperview]; | 
					
						
							|  |  |  | 	self.godotLoadingOverlay = nil; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return YES; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | - (void)dealloc { | 
					
						
							| 
									
										
										
										
											2020-11-15 15:11:25 +03:00
										 |  |  | 	self.keyboardView = nil; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	self.renderer = nil; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-27 15:04:13 +03:00
										 |  |  | 	if (self.godotLoadingOverlay) { | 
					
						
							|  |  |  | 		[self.godotLoadingOverlay removeFromSuperview]; | 
					
						
							|  |  |  | 		self.godotLoadingOverlay = nil; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	[[NSNotificationCenter defaultCenter] removeObserver:self]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // MARK: Orientation | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-21 18:55:21 +02:00
										 |  |  | - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { | 
					
						
							| 
									
										
										
										
											2022-10-12 15:17:36 -04:00
										 |  |  | 	if (GLOBAL_GET("display/window/ios/suppress_ui_gesture")) { | 
					
						
							|  |  |  | 		return UIRectEdgeAll; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		return UIRectEdgeNone; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-08-21 18:55:21 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | - (BOOL)shouldAutorotate { | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  | 	if (!DisplayServerIOS::get_singleton()) { | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		return NO; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  | 	switch (DisplayServerIOS::get_singleton()->screen_get_orientation(DisplayServer::SCREEN_OF_MAIN_WINDOW)) { | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_SENSOR: | 
					
						
							|  |  |  | 		case DisplayServer::SCREEN_SENSOR_LANDSCAPE: | 
					
						
							|  |  |  | 		case DisplayServer::SCREEN_SENSOR_PORTRAIT: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return YES; | 
					
						
							| 
									
										
										
										
											2017-04-09 14:18:49 +02:00
										 |  |  | 		default: | 
					
						
							|  |  |  | 			return NO; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | - (UIInterfaceOrientationMask)supportedInterfaceOrientations { | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  | 	if (!DisplayServerIOS::get_singleton()) { | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		return UIInterfaceOrientationMaskAll; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  | 	switch (DisplayServerIOS::get_singleton()->screen_get_orientation(DisplayServer::SCREEN_OF_MAIN_WINDOW)) { | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_PORTRAIT: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskPortrait; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_REVERSE_LANDSCAPE: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskLandscapeRight; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_REVERSE_PORTRAIT: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskPortraitUpsideDown; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_SENSOR_LANDSCAPE: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskLandscape; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_SENSOR_PORTRAIT: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_SENSOR: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskAll; | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 		case DisplayServer::SCREEN_LANDSCAPE: | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 			return UIInterfaceOrientationMaskLandscapeLeft; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2022-02-16 13:56:32 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-06-29 13:53:12 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-09 21:22:40 +10:00
										 |  |  | - (BOOL)prefersStatusBarHidden { | 
					
						
							| 
									
										
										
										
											2022-10-12 15:17:36 -04:00
										 |  |  | 	if (GLOBAL_GET("display/window/ios/hide_status_bar")) { | 
					
						
							|  |  |  | 		return YES; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		return NO; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-03-13 22:57:24 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-09 20:38:22 +01:00
										 |  |  | - (BOOL)prefersHomeIndicatorAutoHidden { | 
					
						
							|  |  |  | 	if (GLOBAL_GET("display/window/ios/hide_home_indicator")) { | 
					
						
							|  |  |  | 		return YES; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		return NO; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | // MARK: Keyboard | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (void)keyboardOnScreen:(NSNotification *)notification { | 
					
						
							|  |  |  | 	NSDictionary *info = notification.userInfo; | 
					
						
							|  |  |  | 	NSValue *value = info[UIKeyboardFrameEndUserInfoKey]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CGRect rawFrame = [value CGRectValue]; | 
					
						
							|  |  |  | 	CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  | 	if (DisplayServerIOS::get_singleton()) { | 
					
						
							|  |  |  | 		DisplayServerIOS::get_singleton()->virtual_keyboard_set_height(keyboardFrame.size.height); | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (void)keyboardHidden:(NSNotification *)notification { | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  | 	if (DisplayServerIOS::get_singleton()) { | 
					
						
							|  |  |  | 		DisplayServerIOS::get_singleton()->virtual_keyboard_set_height(0); | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | @end |