Improved iOS Bluetooth keyboard support
* Don't stop text input after the return key is pressed * Handle arrow and escape keys
parent
50aab19877
commit
7ec514d48f
|
@ -73,6 +73,7 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
|
||||||
|
|
||||||
#if SDL_IPHONE_KEYBOARD
|
#if SDL_IPHONE_KEYBOARD
|
||||||
UITextField *textField;
|
UITextField *textField;
|
||||||
|
BOOL hardwareKeyboard;
|
||||||
BOOL showingKeyboard;
|
BOOL showingKeyboard;
|
||||||
BOOL rotatingOrientation;
|
BOOL rotatingOrientation;
|
||||||
NSString *changeText;
|
NSString *changeText;
|
||||||
|
@ -89,7 +90,9 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
|
||||||
|
|
||||||
#if SDL_IPHONE_KEYBOARD
|
#if SDL_IPHONE_KEYBOARD
|
||||||
[self initKeyboard];
|
[self initKeyboard];
|
||||||
rotatingOrientation = FALSE;
|
hardwareKeyboard = NO;
|
||||||
|
showingKeyboard = NO;
|
||||||
|
rotatingOrientation = NO;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TARGET_OS_TV
|
#if TARGET_OS_TV
|
||||||
|
@ -280,6 +283,41 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
|
||||||
[center addObserver:self selector:@selector(textFieldTextDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
|
[center addObserver:self selector:@selector(textFieldTextDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSArray *) keyCommands {
|
||||||
|
NSMutableArray *commands = [[NSMutableArray alloc] init];
|
||||||
|
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow modifierFlags:kNilOptions action:@selector(handleCommand:)]];
|
||||||
|
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow modifierFlags:kNilOptions action:@selector(handleCommand:)]];
|
||||||
|
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputLeftArrow modifierFlags:kNilOptions action:@selector(handleCommand:)]];
|
||||||
|
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputRightArrow modifierFlags:kNilOptions action:@selector(handleCommand:)]];
|
||||||
|
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputEscape modifierFlags:kNilOptions action:@selector(handleCommand:)]];
|
||||||
|
return [NSArray arrayWithArray:commands];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) handleCommand: (UIKeyCommand *) keyCommand {
|
||||||
|
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
|
||||||
|
|
||||||
|
if (keyCommand.input == UIKeyInputUpArrow) {
|
||||||
|
scancode = SDL_SCANCODE_UP;
|
||||||
|
} else if (keyCommand.input == UIKeyInputDownArrow) {
|
||||||
|
scancode = SDL_SCANCODE_DOWN;
|
||||||
|
} else if (keyCommand.input == UIKeyInputLeftArrow) {
|
||||||
|
scancode = SDL_SCANCODE_LEFT;
|
||||||
|
} else if (keyCommand.input == UIKeyInputRightArrow) {
|
||||||
|
scancode = SDL_SCANCODE_RIGHT;
|
||||||
|
} else if (keyCommand.input == UIKeyInputEscape) {
|
||||||
|
scancode = SDL_SCANCODE_ESCAPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scancode != SDL_SCANCODE_UNKNOWN) {
|
||||||
|
SDL_SendKeyboardKey(SDL_PRESSED, scancode);
|
||||||
|
SDL_SendKeyboardKey(SDL_RELEASED, scancode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) downArrow: (UIKeyCommand *) keyCommand {
|
||||||
|
NSLog(@"down arrow!");
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setView:(UIView *)view
|
- (void)setView:(UIView *)view
|
||||||
{
|
{
|
||||||
[super setView:view];
|
[super setView:view];
|
||||||
|
@ -296,21 +334,21 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
|
||||||
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||||
{
|
{
|
||||||
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||||
rotatingOrientation = TRUE;
|
rotatingOrientation = YES;
|
||||||
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {}
|
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {}
|
||||||
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
|
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
|
||||||
rotatingOrientation = FALSE;
|
rotatingOrientation = NO;
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
|
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
|
||||||
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
|
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
|
||||||
rotatingOrientation = TRUE;
|
rotatingOrientation = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
|
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
|
||||||
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
|
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
|
||||||
rotatingOrientation = FALSE;
|
rotatingOrientation = NO;
|
||||||
}
|
}
|
||||||
#endif /* TARGET_OS_TV || __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000 */
|
#endif /* TARGET_OS_TV || __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000 */
|
||||||
|
|
||||||
|
@ -466,7 +504,8 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
|
||||||
{
|
{
|
||||||
SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_RETURN);
|
SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_RETURN);
|
||||||
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RETURN);
|
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RETURN);
|
||||||
if (SDL_GetHintBoolean(SDL_HINT_RETURN_KEY_HIDES_IME, SDL_FALSE)) {
|
if (keyboardVisible &&
|
||||||
|
SDL_GetHintBoolean(SDL_HINT_RETURN_KEY_HIDES_IME, SDL_FALSE)) {
|
||||||
SDL_StopTextInput();
|
SDL_StopTextInput();
|
||||||
}
|
}
|
||||||
return YES;
|
return YES;
|
||||||
|
|
Loading…
Reference in New Issue