1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-27 21:49:10 +02:00

Merge pull request #1493 from kambala-decapitator/ios-spacebar

[iOS] use pinch gesture as Spacebar hotkey instead of Tab
This commit is contained in:
Andrey Filipenkov 2023-01-25 18:32:40 +03:00 committed by GitHub
commit 7e78e0abdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 20 deletions

View File

@ -10,11 +10,13 @@
#import <UIKit/UIKit.h>
#include <SDL_events.h>
NS_ASSUME_NONNULL_BEGIN
@interface GameChatKeyboardHandler : NSObject
- (void)triggerInput;
+ (void)sendKeyEventWithKeyCode:(SDL_KeyCode)keyCode;
@end

View File

@ -10,20 +10,8 @@
#import "GameChatKeyboardHandler.h"
#include <SDL_events.h>
static int watchReturnKey(void * userdata, SDL_Event * event);
static void sendKeyEvent(SDL_KeyCode keyCode)
{
SDL_Event keyEvent;
keyEvent.key = (SDL_KeyboardEvent){
.type = SDL_KEYDOWN,
.keysym.sym = keyCode,
};
SDL_PushEvent(&keyEvent);
}
@interface GameChatKeyboardHandler ()
@property (nonatomic) BOOL wasChatMessageSent;
@ -31,28 +19,40 @@ static void sendKeyEvent(SDL_KeyCode keyCode)
@implementation GameChatKeyboardHandler
- (void)triggerInput {
+ (void)sendKeyEventWithKeyCode:(SDL_KeyCode)keyCode
{
SDL_Event keyEvent;
keyEvent.key = (SDL_KeyboardEvent){
.type = SDL_KEYDOWN,
.state = SDL_PRESSED,
.keysym.sym = keyCode,
};
SDL_PushEvent(&keyEvent);
}
- (instancetype)init {
self = [super init];
__auto_type notificationCenter = NSNotificationCenter.defaultCenter;
[notificationCenter addObserver:self selector:@selector(textDidBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil];
[notificationCenter addObserver:self selector:@selector(textDidEndEditing:) name:UITextFieldTextDidEndEditingNotification object:nil];
self.wasChatMessageSent = NO;
sendKeyEvent(SDLK_TAB);
return self;
}
#pragma mark - Notifications
- (void)textDidBeginEditing:(NSNotification *)n {
self.wasChatMessageSent = NO;
// watch for pressing Return to ignore sending Escape key after keyboard is closed
SDL_AddEventWatch(watchReturnKey, (__bridge void *)self);
}
- (void)textDidEndEditing:(NSNotification *)n {
[NSNotificationCenter.defaultCenter removeObserver:self];
// discard chat message
if(!self.wasChatMessageSent)
sendKeyEvent(SDLK_ESCAPE);
[[self class] sendKeyEventWithKeyCode:SDLK_ESCAPE];
}
@end

View File

@ -95,7 +95,7 @@
- (void)handlePinch:(UIGestureRecognizer *)gesture {
if(gesture.state != UIGestureRecognizerStateBegan || CSH->state != EClientState::GAMEPLAY)
return;
[self.gameChatHandler triggerInput];
[GameChatKeyboardHandler sendKeyEventWithKeyCode:SDLK_SPACE];
}
#pragma mark - UIGestureRecognizerDelegate