diff options
-rw-r--r-- | include/cru/osx/gui/Keyboard.hpp | 7 | ||||
-rw-r--r-- | include/cru/platform/gui/Keyboard.hpp | 5 | ||||
-rw-r--r-- | src/osx/gui/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/osx/gui/Keyboard.mm | 176 | ||||
-rw-r--r-- | src/osx/gui/Window.mm | 12 |
5 files changed, 201 insertions, 1 deletions
diff --git a/include/cru/osx/gui/Keyboard.hpp b/include/cru/osx/gui/Keyboard.hpp new file mode 100644 index 00000000..b31bcf2b --- /dev/null +++ b/include/cru/osx/gui/Keyboard.hpp @@ -0,0 +1,7 @@ +#pragma once +#include "cru/platform/gui/Keyboard.hpp" + +namespace cru::platform::gui::osx { +KeyCode KeyCodeFromOsxToCru(unsigned short n); +unsigned short KeyCodeFromOsxToCru(KeyCode k); +} // namespace cru::platform::gui::osx diff --git a/include/cru/platform/gui/Keyboard.hpp b/include/cru/platform/gui/Keyboard.hpp index b025d86e..80524133 100644 --- a/include/cru/platform/gui/Keyboard.hpp +++ b/include/cru/platform/gui/Keyboard.hpp @@ -107,7 +107,10 @@ enum class KeyCode { NumPad6, NumPad7, NumPad8, - NumPad9 + NumPad9, + LeftCommand, + RightCommand, + Return }; namespace details { diff --git a/src/osx/gui/CMakeLists.txt b/src/osx/gui/CMakeLists.txt index a9a75d76..06ab92db 100644 --- a/src/osx/gui/CMakeLists.txt +++ b/src/osx/gui/CMakeLists.txt @@ -1,12 +1,14 @@ set(CRU_OSX_GUI_INCLUDE_DIR ${CRU_INCLUDE_DIR}/cru/osx/gui) add_library(cru_osx_gui SHARED + Keyboard.mm Resource.cpp UiApplication.mm Window.mm ) target_sources(cru_osx_gui PUBLIC + ${CRU_OSX_GUI_INCLUDE_DIR}/Keyboard.hpp ${CRU_OSX_GUI_INCLUDE_DIR}/Resource.hpp ${CRU_OSX_GUI_INCLUDE_DIR}/UiApplication.hpp ${CRU_OSX_GUI_INCLUDE_DIR}/Window.hpp diff --git a/src/osx/gui/Keyboard.mm b/src/osx/gui/Keyboard.mm new file mode 100644 index 00000000..f9b0c92d --- /dev/null +++ b/src/osx/gui/Keyboard.mm @@ -0,0 +1,176 @@ +#include "cru/osx/gui/Keyboard.hpp" + +#include <Carbon/Carbon.h> + +namespace cru::platform::gui::osx { +KeyCode KeyCodeFromOsxToCru(unsigned short n) { + switch (n) { +#define CRU_DEFINE_KEYCODE_MAP(osx, cru) \ + case osx: \ + return cru; + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_0, KeyCode::N0) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_1, KeyCode::N1) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_2, KeyCode::N2) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_3, KeyCode::N3) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_4, KeyCode::N4) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_5, KeyCode::N5) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_6, KeyCode::N6) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_7, KeyCode::N7) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_8, KeyCode::N8) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_9, KeyCode::N9) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_A, KeyCode::A) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_B, KeyCode::B) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_C, KeyCode::C) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_D, KeyCode::D) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_E, KeyCode::E) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_F, KeyCode::F) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_G, KeyCode::G) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_H, KeyCode::H) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_I, KeyCode::I) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_J, KeyCode::J) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_K, KeyCode::K) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_L, KeyCode::L) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_M, KeyCode::M) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_N, KeyCode::N) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_O, KeyCode::O) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_P, KeyCode::P) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Q, KeyCode::Q) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_R, KeyCode::R) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_S, KeyCode::S) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_T, KeyCode::T) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_U, KeyCode::U) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_V, KeyCode::V) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_W, KeyCode::W) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_X, KeyCode::X) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Y, KeyCode::Y) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Z, KeyCode::Z) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Comma, KeyCode::Comma) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Period, KeyCode::Period) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Slash, KeyCode::Slash) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Semicolon, KeyCode::Semicolon) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Quote, KeyCode::Quote) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_LeftBracket, KeyCode::LeftSquareBracket) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_RightBracket, KeyCode::RightSquareBracket) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Minus, KeyCode::Minus) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Equal, KeyCode::Equal) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Backslash, KeyCode::BackSlash) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Grave, KeyCode::GraveAccent) + CRU_DEFINE_KEYCODE_MAP(kVK_Escape, KeyCode::Escape) + CRU_DEFINE_KEYCODE_MAP(kVK_Tab, KeyCode::Tab) + CRU_DEFINE_KEYCODE_MAP(kVK_CapsLock, KeyCode::CapsLock) + CRU_DEFINE_KEYCODE_MAP(kVK_Shift, KeyCode::LeftShift) + CRU_DEFINE_KEYCODE_MAP(kVK_RightShift, KeyCode::RightShift) + CRU_DEFINE_KEYCODE_MAP(kVK_Control, KeyCode::LeftCtrl) + CRU_DEFINE_KEYCODE_MAP(kVK_RightControl, KeyCode::RightCtrl) + CRU_DEFINE_KEYCODE_MAP(kVK_Option, KeyCode::LeftAlt) + CRU_DEFINE_KEYCODE_MAP(kVK_RightOption, KeyCode::RightAlt) + CRU_DEFINE_KEYCODE_MAP(kVK_Command, KeyCode::LeftCommand) + CRU_DEFINE_KEYCODE_MAP(kVK_RightCommand, KeyCode::RightCommand) + CRU_DEFINE_KEYCODE_MAP(kVK_ForwardDelete, KeyCode::Backspace) + CRU_DEFINE_KEYCODE_MAP(kVK_Return, KeyCode::Return) + CRU_DEFINE_KEYCODE_MAP(kVK_Delete, KeyCode::Delete) + CRU_DEFINE_KEYCODE_MAP(kVK_Home, KeyCode::Home) + CRU_DEFINE_KEYCODE_MAP(kVK_End, KeyCode::End) + CRU_DEFINE_KEYCODE_MAP(kVK_PageUp, KeyCode::PageUp) + CRU_DEFINE_KEYCODE_MAP(kVK_PageDown, KeyCode::PageDown) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad0, KeyCode::NumPad0) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad1, KeyCode::NumPad1) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad2, KeyCode::NumPad2) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad3, KeyCode::NumPad3) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad4, KeyCode::NumPad4) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad5, KeyCode::NumPad5) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad6, KeyCode::NumPad6) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad7, KeyCode::NumPad7) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad8, KeyCode::NumPad8) + CRU_DEFINE_KEYCODE_MAP(kVK_ANSI_Keypad9, KeyCode::NumPad9) + default: + return KeyCode::Unknown; + } + +#undef CRU_DEFINE_KEYCODE_MAP +} +unsigned short KeyCodeFromOsxToCru(KeyCode k) { + switch (k) { +#define CRU_DEFINE_KEYCODE_MAP(cru, osx) \ + case cru: \ + return osx; + CRU_DEFINE_KEYCODE_MAP(KeyCode::N0, kVK_ANSI_0) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N1, kVK_ANSI_1) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N2, kVK_ANSI_2) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N3, kVK_ANSI_3) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N4, kVK_ANSI_4) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N5, kVK_ANSI_5) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N6, kVK_ANSI_6) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N7, kVK_ANSI_7) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N8, kVK_ANSI_8) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N9, kVK_ANSI_9) + CRU_DEFINE_KEYCODE_MAP(KeyCode::A, kVK_ANSI_A) + CRU_DEFINE_KEYCODE_MAP(KeyCode::B, kVK_ANSI_B) + CRU_DEFINE_KEYCODE_MAP(KeyCode::C, kVK_ANSI_C) + CRU_DEFINE_KEYCODE_MAP(KeyCode::D, kVK_ANSI_D) + CRU_DEFINE_KEYCODE_MAP(KeyCode::E, kVK_ANSI_E) + CRU_DEFINE_KEYCODE_MAP(KeyCode::F, kVK_ANSI_F) + CRU_DEFINE_KEYCODE_MAP(KeyCode::G, kVK_ANSI_G) + CRU_DEFINE_KEYCODE_MAP(KeyCode::H, kVK_ANSI_H) + CRU_DEFINE_KEYCODE_MAP(KeyCode::I, kVK_ANSI_I) + CRU_DEFINE_KEYCODE_MAP(KeyCode::J, kVK_ANSI_J) + CRU_DEFINE_KEYCODE_MAP(KeyCode::K, kVK_ANSI_K) + CRU_DEFINE_KEYCODE_MAP(KeyCode::L, kVK_ANSI_L) + CRU_DEFINE_KEYCODE_MAP(KeyCode::M, kVK_ANSI_M) + CRU_DEFINE_KEYCODE_MAP(KeyCode::N, kVK_ANSI_N) + CRU_DEFINE_KEYCODE_MAP(KeyCode::O, kVK_ANSI_O) + CRU_DEFINE_KEYCODE_MAP(KeyCode::P, kVK_ANSI_P) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Q, kVK_ANSI_Q) + CRU_DEFINE_KEYCODE_MAP(KeyCode::R, kVK_ANSI_R) + CRU_DEFINE_KEYCODE_MAP(KeyCode::S, kVK_ANSI_S) + CRU_DEFINE_KEYCODE_MAP(KeyCode::T, kVK_ANSI_T) + CRU_DEFINE_KEYCODE_MAP(KeyCode::U, kVK_ANSI_U) + CRU_DEFINE_KEYCODE_MAP(KeyCode::V, kVK_ANSI_V) + CRU_DEFINE_KEYCODE_MAP(KeyCode::W, kVK_ANSI_W) + CRU_DEFINE_KEYCODE_MAP(KeyCode::X, kVK_ANSI_X) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Y, kVK_ANSI_Y) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Z, kVK_ANSI_Z) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Comma, kVK_ANSI_Comma) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Period, kVK_ANSI_Period) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Slash, kVK_ANSI_Slash) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Semicolon, kVK_ANSI_Semicolon) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Quote, kVK_ANSI_Quote) + CRU_DEFINE_KEYCODE_MAP(KeyCode::LeftSquareBracket, kVK_ANSI_LeftBracket) + CRU_DEFINE_KEYCODE_MAP(KeyCode::RightSquareBracket, kVK_ANSI_RightBracket) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Minus, kVK_ANSI_Minus) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Equal, kVK_ANSI_Equal) + CRU_DEFINE_KEYCODE_MAP(KeyCode::BackSlash, kVK_ANSI_Backslash) + CRU_DEFINE_KEYCODE_MAP(KeyCode::GraveAccent, kVK_ANSI_Grave) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Escape, kVK_Escape) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Tab, kVK_Tab) + CRU_DEFINE_KEYCODE_MAP(KeyCode::CapsLock, kVK_CapsLock) + CRU_DEFINE_KEYCODE_MAP(KeyCode::LeftShift, kVK_Shift) + CRU_DEFINE_KEYCODE_MAP(KeyCode::RightShift, kVK_RightShift) + CRU_DEFINE_KEYCODE_MAP(KeyCode::LeftCtrl, kVK_Control) + CRU_DEFINE_KEYCODE_MAP(KeyCode::RightCtrl, kVK_RightControl) + CRU_DEFINE_KEYCODE_MAP(KeyCode::LeftAlt, kVK_Option) + CRU_DEFINE_KEYCODE_MAP(KeyCode::RightAlt, kVK_RightOption) + CRU_DEFINE_KEYCODE_MAP(KeyCode::LeftCommand, kVK_Command) + CRU_DEFINE_KEYCODE_MAP(KeyCode::RightCommand, kVK_RightCommand) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Backspace, kVK_ForwardDelete) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Return, kVK_Return) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Delete, kVK_Delete) + CRU_DEFINE_KEYCODE_MAP(KeyCode::Home, kVK_Home) + CRU_DEFINE_KEYCODE_MAP(KeyCode::End, kVK_End) + CRU_DEFINE_KEYCODE_MAP(KeyCode::PageUp, kVK_PageUp) + CRU_DEFINE_KEYCODE_MAP(KeyCode::PageDown, kVK_PageDown) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad0, kVK_ANSI_Keypad0) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad1, kVK_ANSI_Keypad1) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad2, kVK_ANSI_Keypad2) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad3, kVK_ANSI_Keypad3) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad4, kVK_ANSI_Keypad4) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad5, kVK_ANSI_Keypad5) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad6, kVK_ANSI_Keypad6) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad7, kVK_ANSI_Keypad7) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad8, kVK_ANSI_Keypad8) + CRU_DEFINE_KEYCODE_MAP(KeyCode::NumPad9, kVK_ANSI_Keypad9) + default: + return 0; + } +} +} diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm index 441c2f73..4e3b19ed 100644 --- a/src/osx/gui/Window.mm +++ b/src/osx/gui/Window.mm @@ -22,6 +22,8 @@ namespace cru::platform::gui::osx { namespace details { + + class OsxWindowPrivate { friend OsxWindow; @@ -214,6 +216,16 @@ void OsxWindow::CreateWindow() { Point(event.locationInWindow.x, event.locationInWindow.y), key_modifer}); break; + case NSEventTypeScrollWheel: + this->mouse_wheel_event_.Raise(NativeMouseWheelEventArgs{ + static_cast<float>(event.scrollingDeltaY), + Point(event.locationInWindow.x, event.locationInWindow.y), + key_modifer}); + break; + case NSEventTypeKeyDown: + + case NSEventTypeKeyUp: + default: break; } |