summaryrefslogtreecommitdiff
path: root/Source/3rdParty/SDL2/src/video/uikit
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/SDL2/src/video/uikit')
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitappdelegate.m25
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmessagebox.m2
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmetalview.m18
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.h4
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.m56
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitopenglview.m2
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitvideo.m11
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitview.m36
-rw-r--r--Source/3rdParty/SDL2/src/video/uikit/SDL_uikitviewcontroller.m109
9 files changed, 171 insertions, 92 deletions
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitappdelegate.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitappdelegate.m
index a942dfd..15762d2 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitappdelegate.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitappdelegate.m
@@ -445,30 +445,7 @@ SDL_LoadLaunchImageNamed(NSString *name, int screenh)
#if !TARGET_OS_TV
- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{
- BOOL isLandscape = UIInterfaceOrientationIsLandscape(application.statusBarOrientation);
- SDL_VideoDevice *_this = SDL_GetVideoDevice();
-
- if (_this && _this->num_displays > 0) {
- SDL_DisplayMode *desktopmode = &_this->displays[0].desktop_mode;
- SDL_DisplayMode *currentmode = &_this->displays[0].current_mode;
-
- /* The desktop display mode should be kept in sync with the screen
- * orientation so that updating a window's fullscreen state to
- * SDL_WINDOW_FULLSCREEN_DESKTOP keeps the window dimensions in the
- * correct orientation. */
- if (isLandscape != (desktopmode->w > desktopmode->h)) {
- int height = desktopmode->w;
- desktopmode->w = desktopmode->h;
- desktopmode->h = height;
- }
-
- /* Same deal with the current mode + SDL_GetCurrentDisplayMode. */
- if (isLandscape != (currentmode->w > currentmode->h)) {
- int height = currentmode->w;
- currentmode->w = currentmode->h;
- currentmode->h = height;
- }
- }
+ SDL_OnApplicationDidChangeStatusBarOrientation();
}
#endif
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmessagebox.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmessagebox.m
index 7950c8e..cf2a8f3 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmessagebox.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmessagebox.m
@@ -109,6 +109,7 @@ UIKit_ShowMessageBoxAlertController(const SDL_MessageBoxData *messageboxdata, in
alertwindow.hidden = YES;
}
+#if !TARGET_OS_TV
/* Force the main SDL window to re-evaluate home indicator state */
SDL_Window *focus = SDL_GetFocusWindow();
if (focus) {
@@ -120,6 +121,7 @@ UIKit_ShowMessageBoxAlertController(const SDL_MessageBoxData *messageboxdata, in
}
}
}
+#endif /* !TARGET_OS_TV */
*buttonid = messageboxdata->buttons[clickedindex].buttonid;
return YES;
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmetalview.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmetalview.m
index 104189d..436e742 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmetalview.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmetalview.m
@@ -49,9 +49,8 @@
{
if ((self = [super initWithFrame:frame])) {
self.tag = METALVIEW_TAG;
- /* Set the desired scale. The default drawableSize of a CAMetalLayer
- * is its bounds x its scale so nothing further needs to be done. */
self.layer.contentsScale = scale;
+ [self updateDrawableSize];
}
return self;
@@ -61,6 +60,15 @@
- (void)layoutSubviews
{
[super layoutSubviews];
+ [self updateDrawableSize];
+}
+
+- (void)updateDrawableSize
+{
+ CGSize size = self.bounds.size;
+ size.width *= self.layer.contentsScale;
+ size.height *= self.layer.contentsScale;
+ ((CAMetalLayer *)self.layer).drawableSize = size;
}
@end
@@ -72,9 +80,9 @@ UIKit_Mtl_AddMetalView(SDL_Window* window)
SDL_uikitview *view = (SDL_uikitview*)data.uiwindow.rootViewController.view;
CGFloat scale = 1.0;
- if ([view isKindOfClass:[SDL_uikitmetalview class]]) {
- return (SDL_uikitmetalview *)view;
- }
+ if ([view isKindOfClass:[SDL_uikitmetalview class]]) {
+ return (SDL_uikitmetalview *)view;
+ }
if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
/* Set the scale to the natural scale factor of the screen - then
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.h b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.h
index a1df0d4..b5c0c65 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.h
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.h
@@ -45,6 +45,10 @@ extern int UIKit_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMo
extern void UIKit_QuitModes(_THIS);
extern int UIKit_GetDisplayUsableBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect);
+#if !TARGET_OS_TV
+extern void SDL_OnApplicationDidChangeStatusBarOrientation(void);
+#endif
+
#endif /* SDL_uikitmodes_h_ */
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.m
index 75e256b..7ddf107 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitmodes.m
@@ -25,6 +25,8 @@
#include "SDL_assert.h"
#include "SDL_uikitmodes.h"
+#include "../../events/SDL_events_c.h"
+
@implementation SDL_DisplayData
@synthesize uiscreen;
@@ -188,6 +190,9 @@ UIKit_InitModes(_THIS)
return -1;
}
}
+#if !TARGET_OS_TV
+ SDL_OnApplicationDidChangeStatusBarOrientation();
+#endif
}
return 0;
@@ -319,6 +324,57 @@ UIKit_QuitModes(_THIS)
}
}
+#if !TARGET_OS_TV
+void SDL_OnApplicationDidChangeStatusBarOrientation()
+{
+ BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
+ SDL_VideoDisplay *display = SDL_GetDisplay(0);
+
+ if (display) {
+ SDL_DisplayMode *desktopmode = &display->desktop_mode;
+ SDL_DisplayMode *currentmode = &display->current_mode;
+ SDL_DisplayOrientation orientation = SDL_ORIENTATION_UNKNOWN;
+
+ /* The desktop display mode should be kept in sync with the screen
+ * orientation so that updating a window's fullscreen state to
+ * SDL_WINDOW_FULLSCREEN_DESKTOP keeps the window dimensions in the
+ * correct orientation. */
+ if (isLandscape != (desktopmode->w > desktopmode->h)) {
+ int height = desktopmode->w;
+ desktopmode->w = desktopmode->h;
+ desktopmode->h = height;
+ }
+
+ /* Same deal with the current mode + SDL_GetCurrentDisplayMode. */
+ if (isLandscape != (currentmode->w > currentmode->h)) {
+ int height = currentmode->w;
+ currentmode->w = currentmode->h;
+ currentmode->h = height;
+ }
+
+ switch ([UIApplication sharedApplication].statusBarOrientation) {
+ case UIInterfaceOrientationPortrait:
+ orientation = SDL_ORIENTATION_PORTRAIT;
+ break;
+ case UIInterfaceOrientationPortraitUpsideDown:
+ orientation = SDL_ORIENTATION_PORTRAIT_FLIPPED;
+ break;
+ case UIInterfaceOrientationLandscapeLeft:
+ /* Bug: UIInterfaceOrientationLandscapeLeft/Right are reversed - http://openradar.appspot.com/7216046 */
+ orientation = SDL_ORIENTATION_LANDSCAPE_FLIPPED;
+ break;
+ case UIInterfaceOrientationLandscapeRight:
+ /* Bug: UIInterfaceOrientationLandscapeLeft/Right are reversed - http://openradar.appspot.com/7216046 */
+ orientation = SDL_ORIENTATION_LANDSCAPE;
+ break;
+ default:
+ break;
+ }
+ SDL_SendDisplayEvent(display, SDL_DISPLAYEVENT_ORIENTATION, orientation);
+ }
+}
+#endif /* !TARGET_OS_TV */
+
#endif /* SDL_VIDEO_DRIVER_UIKIT */
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitopenglview.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitopenglview.m
index b0628bf..9024376 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitopenglview.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitopenglview.m
@@ -101,7 +101,7 @@
SDL_SetError("sRGB drawables are not supported.");
return nil;
}
- } else if (rBits >= 8 || gBits >= 8 || bBits >= 8) {
+ } else if (rBits >= 8 || gBits >= 8 || bBits >= 8 || aBits > 0) {
/* if user specifically requests rbg888 or some color format higher than 16bpp */
colorFormat = kEAGLColorFormatRGBA8;
colorBufferFormat = GL_RGBA8;
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitvideo.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitvideo.m
index e74339f..10d1dde 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitvideo.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitvideo.m
@@ -233,6 +233,17 @@ void SDL_NSLog(const char *text)
NSLog(@"%s", text);
}
+/*
+ * iOS Tablet detection
+ *
+ * This doesn't really have aything to do with the interfaces of the SDL video
+ * subsystem, but we need to stuff this into an Objective-C source code file.
+ */
+SDL_bool SDL_IsIPad(void)
+{
+ return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
+}
+
#endif /* SDL_VIDEO_DRIVER_UIKIT */
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitview.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitview.m
index bd60c55..caabfac 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitview.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitview.m
@@ -252,34 +252,34 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick;
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
{
- if (!SDL_AppleTVRemoteOpenedAsJoystick) {
- for (UIPress *press in presses) {
- SDL_Scancode scancode = [self scancodeFromPressType:press.type];
- SDL_SendKeyboardKey(SDL_PRESSED, scancode);
- }
- }
+ if (!SDL_AppleTVRemoteOpenedAsJoystick) {
+ for (UIPress *press in presses) {
+ SDL_Scancode scancode = [self scancodeFromPressType:press.type];
+ SDL_SendKeyboardKey(SDL_PRESSED, scancode);
+ }
+ }
[super pressesBegan:presses withEvent:event];
}
- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
{
- if (!SDL_AppleTVRemoteOpenedAsJoystick) {
- for (UIPress *press in presses) {
- SDL_Scancode scancode = [self scancodeFromPressType:press.type];
- SDL_SendKeyboardKey(SDL_RELEASED, scancode);
- }
- }
+ if (!SDL_AppleTVRemoteOpenedAsJoystick) {
+ for (UIPress *press in presses) {
+ SDL_Scancode scancode = [self scancodeFromPressType:press.type];
+ SDL_SendKeyboardKey(SDL_RELEASED, scancode);
+ }
+ }
[super pressesEnded:presses withEvent:event];
}
- (void)pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
{
- if (!SDL_AppleTVRemoteOpenedAsJoystick) {
- for (UIPress *press in presses) {
- SDL_Scancode scancode = [self scancodeFromPressType:press.type];
- SDL_SendKeyboardKey(SDL_RELEASED, scancode);
- }
- }
+ if (!SDL_AppleTVRemoteOpenedAsJoystick) {
+ for (UIPress *press in presses) {
+ SDL_Scancode scancode = [self scancodeFromPressType:press.type];
+ SDL_SendKeyboardKey(SDL_RELEASED, scancode);
+ }
+ }
[super pressesCancelled:presses withEvent:event];
}
diff --git a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitviewcontroller.m b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitviewcontroller.m
index 2962742..49a39b6 100644
--- a/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitviewcontroller.m
+++ b/Source/3rdParty/SDL2/src/video/uikit/SDL_uikitviewcontroller.m
@@ -74,6 +74,8 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
#if SDL_IPHONE_KEYBOARD
UITextField *textField;
BOOL rotatingOrientation;
+ NSString *changeText;
+ NSString *obligateForBackspace;
#endif
}
@@ -250,10 +252,12 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
/* Set ourselves up as a UITextFieldDelegate */
- (void)initKeyboard
{
+ changeText = nil;
+ obligateForBackspace = @" "; /* 64 space */
textField = [[UITextField alloc] initWithFrame:CGRectZero];
textField.delegate = self;
/* placeholder so there is something to delete! */
- textField.text = @" ";
+ textField.text = obligateForBackspace;
/* set UITextInputTrait properties, mostly to defaults */
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
@@ -267,11 +271,12 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
textField.hidden = YES;
keyboardVisible = NO;
-#if !TARGET_OS_TV
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+#if !TARGET_OS_TV
[center addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[center addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
#endif
+ [center addObserver:self selector:@selector(textFieldTextDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
}
- (void)setView:(UIView *)view
@@ -310,11 +315,12 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
- (void)deinitKeyboard
{
-#if !TARGET_OS_TV
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+#if !TARGET_OS_TV
[center removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[center removeObserver:self name:UIKeyboardWillHideNotification object:nil];
#endif
+ [center removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
}
/* reveal onscreen virtual keyboard */
@@ -354,6 +360,50 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
[self setKeyboardHeight:0];
}
+- (void)textFieldTextDidChange:(NSNotification *)notification
+{
+ if (changeText!=nil && textField.markedTextRange == nil)
+ {
+ NSUInteger len = changeText.length;
+ if (len > 0) {
+ /* Go through all the characters in the string we've been sent and
+ * convert them to key presses */
+ int i;
+ for (i = 0; i < len; i++) {
+ unichar c = [changeText characterAtIndex:i];
+ SDL_Scancode code;
+ Uint16 mod;
+
+ if (c < 127) {
+ /* Figure out the SDL_Scancode and SDL_keymod for this unichar */
+ code = unicharToUIKeyInfoTable[c].code;
+ mod = unicharToUIKeyInfoTable[c].mod;
+ } else {
+ /* We only deal with ASCII right now */
+ code = SDL_SCANCODE_UNKNOWN;
+ mod = 0;
+ }
+
+ if (mod & KMOD_SHIFT) {
+ /* If character uses shift, press shift down */
+ SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LSHIFT);
+ }
+
+ /* send a keydown and keyup even for the character */
+ SDL_SendKeyboardKey(SDL_PRESSED, code);
+ SDL_SendKeyboardKey(SDL_RELEASED, code);
+
+ if (mod & KMOD_SHIFT) {
+ /* If character uses shift, press shift back up */
+ SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT);
+ }
+ }
+ SDL_SendKeyboardText([changeText UTF8String]);
+ }
+ changeText = nil;
+ }
+}
+
- (void)updateKeyboard
{
CGAffineTransform t = self.view.transform;
@@ -392,49 +442,20 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
- (BOOL)textField:(UITextField *)_textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSUInteger len = string.length;
-
if (len == 0) {
- /* it wants to replace text with nothing, ie a delete */
- SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_BACKSPACE);
- SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_BACKSPACE);
- } else {
- /* go through all the characters in the string we've been sent and
- * convert them to key presses */
- int i;
- for (i = 0; i < len; i++) {
- unichar c = [string characterAtIndex:i];
- Uint16 mod = 0;
- SDL_Scancode code;
-
- if (c < 127) {
- /* figure out the SDL_Scancode and SDL_keymod for this unichar */
- code = unicharToUIKeyInfoTable[c].code;
- mod = unicharToUIKeyInfoTable[c].mod;
- } else {
- /* we only deal with ASCII right now */
- code = SDL_SCANCODE_UNKNOWN;
- mod = 0;
- }
-
- if (mod & KMOD_SHIFT) {
- /* If character uses shift, press shift down */
- SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LSHIFT);
- }
-
- /* send a keydown and keyup even for the character */
- SDL_SendKeyboardKey(SDL_PRESSED, code);
- SDL_SendKeyboardKey(SDL_RELEASED, code);
-
- if (mod & KMOD_SHIFT) {
- /* If character uses shift, press shift back up */
- SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT);
- }
+ changeText = nil;
+ if (textField.markedTextRange == nil) {
+ /* it wants to replace text with nothing, ie a delete */
+ SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_BACKSPACE);
+ SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_BACKSPACE);
}
-
- SDL_SendKeyboardText([string UTF8String]);
+ if (textField.text.length < 16) {
+ textField.text = obligateForBackspace;
+ }
+ } else {
+ changeText = string;
}
-
- return NO; /* don't allow the edit! (keep placeholder text there) */
+ return YES;
}
/* Terminates the editing session */
@@ -498,7 +519,7 @@ UIKit_IsScreenKeyboardShown(_THIS, SDL_Window *window)
@autoreleasepool {
SDL_uikitviewcontroller *vc = GetWindowViewController(window);
if (vc != nil) {
- return vc.isKeyboardVisible;
+ return vc.keyboardVisible;
}
return SDL_FALSE;
}