Fix iOS/macOS keycode handling regression for textoverlay example, update and use keycodes.hpp defines for iOS/macOS

This commit is contained in:
Stephen Saunders 2022-05-13 21:57:30 -04:00
parent 8080b7a91b
commit a1e19ea5de
5 changed files with 43 additions and 49 deletions

View file

@ -40,11 +40,12 @@
#define GAMEPAD_BUTTON_START 0x1006
#define TOUCH_DOUBLE_TAP 0x1100
#elif defined(VK_USE_PLATFORM_IOS_MVK)
// Use numeric keys instead of function keys.
// Use main keyboard plus/minus instead of keypad plus/minus
// Use Delete key instead of Escape key.
#define KEY_ESCAPE 0x33
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
#if !defined(VK_EXAMPLE_XCODE_GENERATED)
// For iOS and macOS pre-configured Xcode example project: Use character keycodes
// - Use numeric keys instead of function keys.
#define KEY_DELETE 0x7F
#define KEY_ESCAPE 0x1B
#define KEY_F1 '1'
#define KEY_F2 '2'
#define KEY_F3 '3'
@ -62,14 +63,18 @@
#define KEY_L 'l'
#define KEY_N 'n'
#define KEY_O 'o'
#define KEY_Q 'q'
#define KEY_T 't'
#define KEY_Z 'z'
#elif defined(VK_USE_PLATFORM_MACOS_MVK)
// For compatibility with iOS UX and absent keypad on MacBook:
#else // defined(VK_EXAMPLE_XCODE_GENERATED)
// For cross-platform cmake-generated Xcode project: Use ANSI keyboard keycodes
// - Use numeric keys instead of function keys
// - Use main keyboard plus/minus instead of keypad plus/minus
// - Use Delete key instead of Escape key
#define KEY_ESCAPE 0x33
// Note: Carbon kVK_* definitions are used instead of these in vulkanexamplebase.cpp
// Currently only KEY_SPACE and KEY_KPADD are used in textoverlay.cpp example
#define KEY_DELETE 0x33
#define KEY_ESCAPE 0x35
#define KEY_F1 0x12
#define KEY_F2 0x13
#define KEY_F3 0x14
@ -87,7 +92,10 @@
#define KEY_L 0x25
#define KEY_N 0x2D
#define KEY_O 0x1F
#define KEY_Q 0x0C
#define KEY_T 0x11
#define KEY_Z 0x06
#endif
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
#define KEY_ESCAPE DIKS_ESCAPE

View file

@ -1601,6 +1601,7 @@ static CVReturn displayLinkOutputCallback(CVDisplayLinkRef displayLink, const CV
case kVK_ANSI_P:
vulkanExample->paused = !vulkanExample->paused;
break;
case kVK_Delete: // support keyboards with no escape key
case kVK_Escape:
[NSApp terminate:nil];
break;
@ -1617,6 +1618,7 @@ static CVReturn displayLinkOutputCallback(CVDisplayLinkRef displayLink, const CV
vulkanExample->camera.keys.right = true;
break;
default:
vulkanExample->keyPressed(event.keyCode); // handle example-specific key press events
break;
}
}

View file

@ -21,11 +21,10 @@ void MVKExample::setRefreshPeriod(double refreshPeriod) { // SRS - set Vul
_vulkanExample->refreshPeriod = refreshPeriod;
}
void MVKExample::keyPressed(uint32_t keyChar) { // SRS - handle iOS virtual screen keyboard presses
void MVKExample::keyPressed(uint32_t keyChar) { // SRS - handle keyboard key presses only (e.g. Pause, Space, etc)
switch (keyChar)
{
case 'p':
case 'P':
case KEY_P:
_vulkanExample->paused = !_vulkanExample->paused;
break;
default:
@ -34,34 +33,25 @@ void MVKExample::keyPressed(uint32_t keyChar) { // SRS - handle iOS virtual
}
}
void MVKExample::keyDown(uint32_t keyChar) { // SRS - handle physical keyboard key down/up actions
void MVKExample::keyDown(uint32_t keyChar) { // SRS - handle physical keyboard key down/up actions and presses
switch (keyChar)
{
case 'p':
case 'P':
_vulkanExample->paused = !_vulkanExample->paused;
break;
case 'w':
case 'W':
case 'z': // for French AZERTY keyboards
case 'Z':
case KEY_W:
case KEY_Z: // for French AZERTY keyboards
_vulkanExample->camera.keys.up = true;
break;
case 's':
case 'S':
case KEY_S:
_vulkanExample->camera.keys.down = true;
break;
case 'a':
case 'A':
case 'q': // for French AZERTY keyboards
case 'Q':
case KEY_A:
case KEY_Q: // for French AZERTY keyboards
_vulkanExample->camera.keys.left = true;
break;
case 'd':
case 'D':
case KEY_D:
_vulkanExample->camera.keys.right = true;
break;
default:
MVKExample::keyPressed(keyChar);
break;
}
}
@ -69,24 +59,18 @@ void MVKExample::keyDown(uint32_t keyChar) { // SRS - handle physical keyboa
void MVKExample::keyUp(uint32_t keyChar) {
switch (keyChar)
{
case 'w':
case 'W':
case 'z': // for French AZERTY keyboards
case 'Z':
case KEY_W:
case KEY_Z: // for French AZERTY keyboards
_vulkanExample->camera.keys.up = false;
break;
case 's':
case 'S':
case KEY_S:
_vulkanExample->camera.keys.down = false;
break;
case 'a':
case 'A':
case 'q': // for French AZERTY keyboards
case 'Q':
case KEY_A:
case KEY_Q: // for French AZERTY keyboards
_vulkanExample->camera.keys.left = false;
break;
case 'd':
case 'D':
case KEY_D:
_vulkanExample->camera.keys.right = false;
break;
default:

View file

@ -97,13 +97,13 @@ const std::string getAssetPath() {
// A key on the keyboard has been pressed.
-(void) insertText: (NSString*) text {
unichar keychar = (text.length > 0) ? [text characterAtIndex: 0] : 0;
unichar keychar = (text.length > 0) ? [text.lowercaseString characterAtIndex: 0] : 0;
_mvkExample->keyPressed(keychar);
}
// The delete backward key has been pressed.
-(void) deleteBackward {
_mvkExample->keyPressed(0x7F);
_mvkExample->keyPressed(KEY_DELETE);
}

View file

@ -91,13 +91,13 @@ MVKExample* _mvkExample;
// SRS - Handle keyboard events
-(void) keyDown:(NSEvent*) theEvent {
NSString *text = [theEvent charactersIgnoringModifiers];
unichar keychar = (text.length > 0) ? [text characterAtIndex: 0] : 0;
unichar keychar = (text.length > 0) ? [text.lowercaseString characterAtIndex: 0] : 0;
_mvkExample->keyDown(keychar);
}
-(void) keyUp:(NSEvent*) theEvent {
NSString *text = [theEvent charactersIgnoringModifiers];
unichar keychar = (text.length > 0) ? [text characterAtIndex: 0] : 0;
unichar keychar = (text.length > 0) ? [text.lowercaseString characterAtIndex: 0] : 0;
_mvkExample->keyUp(keychar);
}