| 516 | } |
| 517 | |
| 518 | std::optional<sf::String> sfScanToConsumerKeyName(sf::Keyboard::Scancode code) |
| 519 | { |
| 520 | // Convert an SFML scancode to a Windows consumer keyboard key name |
| 521 | // Reference: https://learn.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#keystroke-messages |
| 522 | // clang-format off |
| 523 | switch (code) |
| 524 | { |
| 525 | case sf::Keyboard::Scan::MediaNextTrack: return "Next Track"; |
| 526 | case sf::Keyboard::Scan::MediaPreviousTrack: return "Previous Track"; |
| 527 | case sf::Keyboard::Scan::MediaStop: return "Stop"; |
| 528 | case sf::Keyboard::Scan::MediaPlayPause: return "Play/Pause"; |
| 529 | case sf::Keyboard::Scan::VolumeMute: return "Mute"; |
| 530 | case sf::Keyboard::Scan::VolumeUp: return "Volume Increment"; |
| 531 | case sf::Keyboard::Scan::VolumeDown: return "Volume Decrement"; |
| 532 | case sf::Keyboard::Scan::LaunchMediaSelect: return "Consumer Control Configuration"; |
| 533 | case sf::Keyboard::Scan::LaunchMail: return "Email Reader"; |
| 534 | case sf::Keyboard::Scan::LaunchApplication2: return "Calculator"; |
| 535 | case sf::Keyboard::Scan::LaunchApplication1: return "Local Machine Browser"; |
| 536 | case sf::Keyboard::Scan::Search: return "Search"; |
| 537 | case sf::Keyboard::Scan::HomePage: return "Home"; |
| 538 | case sf::Keyboard::Scan::Back: return "Back"; |
| 539 | case sf::Keyboard::Scan::Forward: return "Forward"; |
| 540 | case sf::Keyboard::Scan::Stop: return "Stop"; |
| 541 | case sf::Keyboard::Scan::Refresh: return "Refresh"; |
| 542 | case sf::Keyboard::Scan::Favorites: return "Bookmarks"; |
| 543 | |
| 544 | // Not a consumer key |
| 545 | default: return std::nullopt; |
| 546 | } |
| 547 | // clang-format on |
| 548 | } |
| 549 | |
| 550 | /// Ensure the mappings are generated from/to Key and Scancode. |
| 551 | void ensureMappings() |