SDL to CEGUI keytable
From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
As this was a very boring thing to do, I'll share it with the rest of you ;)
With this function injecting KeyDown and KeyUp events to CEGUI works like you'd expect.
<cpp/>
/************************************************************************ Translate a SDLKey to the proper CEGUI::Key *************************************************************************/ CEGUI::uint SDLKeyToCEGUIKey(SDLKey key) { using namespace CEGUI; switch (key) { case SDLK_BACKSPACE: return Key::Backspace; case SDLK_TAB: return Key::Tab; case SDLK_RETURN: return Key::Return; case SDLK_PAUSE: return Key::Pause; case SDLK_ESCAPE: return Key::Escape; case SDLK_SPACE: return Key::Space; case SDLK_COMMA: return Key::Comma; case SDLK_MINUS: return Key::Minus; case SDLK_PERIOD: return Key::Period; case SDLK_SLASH: return Key::Slash; case SDLK_0: return Key::Zero; case SDLK_1: return Key::One; case SDLK_2: return Key::Two; case SDLK_3: return Key::Three; case SDLK_4: return Key::Four; case SDLK_5: return Key::Five; case SDLK_6: return Key::Six; case SDLK_7: return Key::Seven; case SDLK_8: return Key::Eight; case SDLK_9: return Key::Nine; case SDLK_COLON: return Key::Colon; case SDLK_SEMICOLON: return Key::Semicolon; case SDLK_EQUALS: return Key::Equals; case SDLK_LEFTBRACKET: return Key::LeftBracket; case SDLK_BACKSLASH: return Key::Backslash; case SDLK_RIGHTBRACKET: return Key::RightBracket; case SDLK_a: return Key::A; case SDLK_b: return Key::B; case SDLK_c: return Key::C; case SDLK_d: return Key::D; case SDLK_e: return Key::E; case SDLK_f: return Key::F; case SDLK_g: return Key::G; case SDLK_h: return Key::H; case SDLK_i: return Key::I; case SDLK_j: return Key::J; case SDLK_k: return Key::K; case SDLK_l: return Key::L; case SDLK_m: return Key::M; case SDLK_n: return Key::N; case SDLK_o: return Key::O; case SDLK_p: return Key::P; case SDLK_q: return Key::Q; case SDLK_r: return Key::R; case SDLK_s: return Key::S; case SDLK_t: return Key::T; case SDLK_u: return Key::U; case SDLK_v: return Key::V; case SDLK_w: return Key::W; case SDLK_x: return Key::X; case SDLK_y: return Key::Y; case SDLK_z: return Key::Z; case SDLK_DELETE: return Key::Delete; case SDLK_KP0: return Key::Numpad0; case SDLK_KP1: return Key::Numpad1; case SDLK_KP2: return Key::Numpad2; case SDLK_KP3: return Key::Numpad3; case SDLK_KP4: return Key::Numpad4; case SDLK_KP5: return Key::Numpad5; case SDLK_KP6: return Key::Numpad6; case SDLK_KP7: return Key::Numpad7; case SDLK_KP8: return Key::Numpad8; case SDLK_KP9: return Key::Numpad9; case SDLK_KP_PERIOD: return Key::Decimal; case SDLK_KP_DIVIDE: return Key::Divide; case SDLK_KP_MULTIPLY: return Key::Multiply; case SDLK_KP_MINUS: return Key::Subtract; case SDLK_KP_PLUS: return Key::Add; case SDLK_KP_ENTER: return Key::NumpadEnter; case SDLK_KP_EQUALS: return Key::NumpadEquals; case SDLK_UP: return Key::ArrowUp; case SDLK_DOWN: return Key::ArrowDown; case SDLK_RIGHT: return Key::ArrowRight; case SDLK_LEFT: return Key::ArrowLeft; case SDLK_INSERT: return Key::Insert; case SDLK_HOME: return Key::Home; case SDLK_END: return Key::End; case SDLK_PAGEUP: return Key::PageUp; case SDLK_PAGEDOWN: return Key::PageDown; case SDLK_F1: return Key::F1; case SDLK_F2: return Key::F2; case SDLK_F3: return Key::F3; case SDLK_F4: return Key::F4; case SDLK_F5: return Key::F5; case SDLK_F6: return Key::F6; case SDLK_F7: return Key::F7; case SDLK_F8: return Key::F8; case SDLK_F9: return Key::F9; case SDLK_F10: return Key::F10; case SDLK_F11: return Key::F11; case SDLK_F12: return Key::F12; case SDLK_F13: return Key::F13; case SDLK_F14: return Key::F14; case SDLK_F15: return Key::F15; case SDLK_NUMLOCK: return Key::NumLock; case SDLK_SCROLLOCK: return Key::ScrollLock; case SDLK_RSHIFT: return Key::RightShift; case SDLK_LSHIFT: return Key::LeftShift; case SDLK_RCTRL: return Key::RightControl; case SDLK_LCTRL: return Key::LeftControl; case SDLK_RALT: return Key::RightAlt; case SDLK_LALT: return Key::LeftAlt; case SDLK_LSUPER: return Key::LeftWindows; case SDLK_RSUPER: return Key::RightWindows; case SDLK_SYSREQ: return Key::SysRq; case SDLK_MENU: return Key::AppMenu; case SDLK_POWER: return Key::Power; default: return 0; } return 0; }
Usage is like so:
<cpp/>
SDL_Event e; while (SDL_PollEvent(&e)) { if (e.type == SDL_KEYDOWN) { CEGUI::uint kc = SDLKeyToCEGUIKey(e.key.keysym.sym); CEGUI::System::getSingleton().injectKeyDown(kc); } }
--lindquist 19:24, 8 Nov 2005 (CET)