Crazy Eddie's GUI System
0.8.4
|
00001 /*********************************************************************** 00002 created: 12/22/2004 00003 author: Thomas Suter 00004 *************************************************************************/ 00005 /*************************************************************************** 00006 * Copyright (C) 2004 - 2009 Paul D Turner & The CEGUI Development Team 00007 * 00008 * Permission is hereby granted, free of charge, to any person obtaining 00009 * a copy of this software and associated documentation files (the 00010 * "Software"), to deal in the Software without restriction, including 00011 * without limitation the rights to use, copy, modify, merge, publish, 00012 * distribute, sublicense, and/or sell copies of the Software, and to 00013 * permit persons to whom the Software is furnished to do so, subject to 00014 * the following conditions: 00015 * 00016 * The above copyright notice and this permission notice shall be 00017 * included in all copies or substantial portions of the Software. 00018 * 00019 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00020 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00021 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00022 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 00023 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00024 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00025 * OTHER DEALINGS IN THE SOFTWARE. 00026 ***************************************************************************/ 00027 #ifndef CCEGUIEVENTPUSHER_H_INCLUDED 00028 #define CCEGUIEVENTPUSHER_H_INCLUDED 00029 00030 #include "../../CEGUI.h" 00031 #include <irrlicht.h> 00032 00033 namespace CEGUI 00034 { 00035 using namespace irr; 00036 00037 class IrrlichtEventPusher 00038 { 00039 gui::ICursorControl* d_cursorctrl; 00040 00041 public : 00042 IrrlichtEventPusher(irr::gui::ICursorControl* ctrl) : 00043 d_cursorctrl(ctrl) 00044 { 00045 initCodes(); 00046 }; 00047 00048 virtual ~IrrlichtEventPusher(){}; 00049 00050 bool OnEvent(const SEvent& event) 00051 { 00052 switch (event.EventType) 00053 { 00054 case EET_KEY_INPUT_EVENT : 00055 if (event.KeyInput.PressedDown) 00056 return OnKeyDown(event.KeyInput.Key, event.KeyInput.Char, event.KeyInput.Control, event.KeyInput.Shift); 00057 else 00058 return OnKeyUp(event.KeyInput.Key, event.KeyInput.Char, event.KeyInput.Control, event.KeyInput.Shift); 00059 break; 00060 00061 case EET_MOUSE_INPUT_EVENT : 00062 return OnMouse(event.MouseInput.X, event.MouseInput.Y, event.MouseInput.Wheel, event.MouseInput.Event); 00063 break; 00064 00065 default: 00066 break; 00067 } 00068 00069 return false; 00070 } 00071 00072 bool OnKeyDown(EKEY_CODE key, wchar_t wch, bool /*ctrl*/, bool /*shift*/) 00073 { 00074 bool handled = false; 00075 CEGUI::GUIContext& cegui = CEGUI::System::getSingleton().getDefaultGUIContext(); 00076 handled = cegui.injectKeyDown(getKeyCode(key)); 00077 handled = cegui.injectChar(wch) || handled; 00078 return handled; 00079 } 00080 00081 bool OnKeyUp(EKEY_CODE key, wchar_t /*wch*/, bool /*ctrl*/, bool /*shift*/) 00082 { 00083 bool handled = false; 00084 CEGUI::GUIContext& cegui = CEGUI::System::getSingleton().getDefaultGUIContext(); 00085 handled = cegui.injectKeyUp(getKeyCode(key)); 00086 return handled; 00087 } 00088 00089 bool OnMouse(s32 x, s32 y, f32 w, EMOUSE_INPUT_EVENT e) 00090 { 00091 using namespace irr; 00092 bool handled = false; 00093 00094 switch (e) 00095 { 00097 case EMIE_LMOUSE_PRESSED_DOWN: 00098 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::LeftButton); 00099 break; 00101 case EMIE_RMOUSE_PRESSED_DOWN: 00102 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::RightButton); 00103 break; 00105 case EMIE_MMOUSE_PRESSED_DOWN: 00106 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::MiddleButton); 00107 break; 00109 case EMIE_LMOUSE_LEFT_UP: 00110 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::LeftButton); 00111 break; 00113 case EMIE_RMOUSE_LEFT_UP: 00114 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::RightButton); 00115 break; 00117 case EMIE_MMOUSE_LEFT_UP: 00118 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::MiddleButton); 00119 break; 00121 case EMIE_MOUSE_MOVED: 00122 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMousePosition( 00123 static_cast<float>(x), static_cast<float>(y)); 00124 break; 00127 case EMIE_MOUSE_WHEEL: 00128 handled = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseWheelChange(w); 00129 break; 00130 default: 00131 break; 00132 } 00133 return handled; 00134 00135 } 00136 00144 CEGUI::Key::Scan getKeyCode(irr::EKEY_CODE kc) const 00145 { 00146 return irr2ceCODE[kc]; 00147 } 00148 00149 protected: 00150 CEGUI::Key::Scan irr2ceCODE[irr::KEY_KEY_CODES_COUNT]; 00151 00152 void initCodes() 00153 { 00154 using namespace irr; 00155 memset(irr2ceCODE, Key::Unknown, KEY_KEY_CODES_COUNT); 00156 00157 irr2ceCODE[KEY_LBUTTON ] = Key::Unknown; // Left mouse button 00158 irr2ceCODE[KEY_RBUTTON ] = Key::Unknown; // Right mouse button 00159 irr2ceCODE[KEY_CANCEL ] = Key::Unknown; // Control-break processing 00160 irr2ceCODE[KEY_MBUTTON ] = Key::Unknown; // Middle mouse button (three-button mouse) 00161 irr2ceCODE[KEY_XBUTTON1 ] = Key::Unknown; // Windows 2000/XP: X1 mouse button 00162 irr2ceCODE[KEY_XBUTTON2 ] = Key::Unknown; // Windows 2000/XP: X2 mouse button 00163 irr2ceCODE[KEY_BACK ] = Key::Backspace; //0x08; // BACKSPACE key 00164 irr2ceCODE[KEY_TAB ] = Key::Tab; //0x09; // TAB key 00165 irr2ceCODE[KEY_CLEAR ] = Key::Unknown; // CLEAR key 00166 irr2ceCODE[KEY_RETURN ] = Key::Return; //0x0D; // ENTER key 00167 irr2ceCODE[KEY_SHIFT ] = Key::LeftShift; // SHIFT key 00168 irr2ceCODE[KEY_CONTROL ] = Key::LeftControl; // CTRL key 00169 irr2ceCODE[KEY_MENU ] = Key::LeftAlt; // ALT key 00170 irr2ceCODE[KEY_PAUSE ] = Key::Pause; // PAUSE key 00171 irr2ceCODE[KEY_CAPITAL ] = Key::Capital; // CAPS LOCK key 00172 irr2ceCODE[KEY_KANA ] = Key::Kana; // IME Kana mode 00173 irr2ceCODE[KEY_HANGUEL ] = Key::Unknown; // IME Hanguel mode 00174 irr2ceCODE[KEY_HANGUL ] = Key::Unknown; // IME Hangul mode 00175 irr2ceCODE[KEY_JUNJA ] = Key::Unknown; // IME Junja mode 00176 irr2ceCODE[KEY_FINAL ] = Key::Unknown; // IME final mode 00177 irr2ceCODE[KEY_HANJA ] = Key::Unknown; // IME Hanja mode 00178 irr2ceCODE[KEY_KANJI ] = Key::Unknown; // IME Kanji mode 00179 irr2ceCODE[KEY_ESCAPE ] = Key::Escape; // ESC key 00180 irr2ceCODE[KEY_CONVERT ] = Key::Convert; // IME convert 00181 irr2ceCODE[KEY_NONCONVERT] = Key::NoConvert; // IME nonconvert 00182 irr2ceCODE[KEY_ACCEPT ] = Key::Unknown; // IME accept 00183 irr2ceCODE[KEY_MODECHANGE] = Key::Unknown; // IME mode change request 00184 irr2ceCODE[KEY_SPACE ] = Key::Space; // SPACEBAR 00185 irr2ceCODE[KEY_PRIOR ] = Key::PageUp; // PAGE UP key 00186 irr2ceCODE[KEY_NEXT ] = Key::PageDown; // PAGE DOWN key 00187 irr2ceCODE[KEY_END ] = Key::End; // END key 00188 irr2ceCODE[KEY_HOME ] = Key::Home; // HOME key 00189 irr2ceCODE[KEY_LEFT ] = Key::ArrowLeft; // LEFT ARROW key 00190 irr2ceCODE[KEY_UP ] = Key::ArrowUp; // UP ARROW key 00191 irr2ceCODE[KEY_RIGHT ] = Key::ArrowRight; // RIGHT ARROW key 00192 irr2ceCODE[KEY_DOWN ] = Key::ArrowDown; // DOWN ARROW key 00193 irr2ceCODE[KEY_SELECT ] = Key::Unknown; // SELECT key 00194 irr2ceCODE[KEY_PRINT ] = Key::SysRq; // PRINT key 00195 irr2ceCODE[KEY_EXECUT ] = Key::Unknown; // EXECUTE key 00196 irr2ceCODE[KEY_SNAPSHOT ] = Key::Unknown; // PRINT SCREEN key 00197 irr2ceCODE[KEY_INSERT ] = Key::Insert;//0x2D; // INS key 00198 irr2ceCODE[KEY_DELETE ] = Key::Delete;//0x2E; // DEL key 00199 irr2ceCODE[KEY_HELP ] = Key::Unknown; // HELP key 00200 irr2ceCODE[KEY_KEY_0 ] = Key::Zero; // 0 key 00201 irr2ceCODE[KEY_KEY_1 ] = Key::One; // 1 key 00202 irr2ceCODE[KEY_KEY_2 ] = Key::Two; // 2 key 00203 irr2ceCODE[KEY_KEY_3 ] = Key::Three; // 3 key 00204 irr2ceCODE[KEY_KEY_4 ] = Key::Four; // 4 key 00205 irr2ceCODE[KEY_KEY_5 ] = Key::Five; // 5 key 00206 irr2ceCODE[KEY_KEY_6 ] = Key::Six; // 6 key 00207 irr2ceCODE[KEY_KEY_7 ] = Key::Seven; // 7 key 00208 irr2ceCODE[KEY_KEY_8 ] = Key::Eight; // 8 key 00209 irr2ceCODE[KEY_KEY_9 ] = Key::Nine; // 9 key 00210 irr2ceCODE[KEY_KEY_A ] = Key::A; // A key 00211 irr2ceCODE[KEY_KEY_B ] = Key::B; // B key 00212 irr2ceCODE[KEY_KEY_C ] = Key::C; // C key 00213 irr2ceCODE[KEY_KEY_D ] = Key::D; // D key 00214 irr2ceCODE[KEY_KEY_E ] = Key::E; // E key 00215 irr2ceCODE[KEY_KEY_F ] = Key::F; // F key 00216 irr2ceCODE[KEY_KEY_G ] = Key::G; // G key 00217 irr2ceCODE[KEY_KEY_H ] = Key::H; // H key 00218 irr2ceCODE[KEY_KEY_I ] = Key::I; // I key 00219 irr2ceCODE[KEY_KEY_J ] = Key::J; // J key 00220 irr2ceCODE[KEY_KEY_K ] = Key::K; // K key 00221 irr2ceCODE[KEY_KEY_L ] = Key::L; // L key 00222 irr2ceCODE[KEY_KEY_M ] = Key::M; // M key 00223 irr2ceCODE[KEY_KEY_N ] = Key::N; // N key 00224 irr2ceCODE[KEY_KEY_O ] = Key::O; // O key 00225 irr2ceCODE[KEY_KEY_P ] = Key::P; // P key 00226 irr2ceCODE[KEY_KEY_Q ] = Key::Q; // Q key 00227 irr2ceCODE[KEY_KEY_R ] = Key::R; // R key 00228 irr2ceCODE[KEY_KEY_S ] = Key::S; // S key 00229 irr2ceCODE[KEY_KEY_T ] = Key::T; // T key 00230 irr2ceCODE[KEY_KEY_U ] = Key::U; // U key 00231 irr2ceCODE[KEY_KEY_V ] = Key::V; // V key 00232 irr2ceCODE[KEY_KEY_W ] = Key::W; // W key 00233 irr2ceCODE[KEY_KEY_X ] = Key::X; // X key 00234 irr2ceCODE[KEY_KEY_Y ] = Key::Y; // Y key 00235 irr2ceCODE[KEY_KEY_Z ] = Key::Z; // Z key 00236 irr2ceCODE[KEY_LWIN ] = Key::LeftWindows; // Left Windows key (Microsoft� Natural� keyboard) 00237 irr2ceCODE[KEY_RWIN ] = Key::RightWindows; // Right Windows key (Natural keyboard) 00238 irr2ceCODE[KEY_APPS ] = Key::AppMenu; //Applications key (Natural keyboard) 00239 irr2ceCODE[KEY_SLEEP ] = Key::Sleep; // Computer Sleep key 00240 irr2ceCODE[KEY_NUMPAD0 ] = Key::Numpad0; // Numeric keypad 0 key 00241 irr2ceCODE[KEY_NUMPAD1 ] = Key::Numpad1; // Numeric keypad 1 key 00242 irr2ceCODE[KEY_NUMPAD2 ] = Key::Numpad2; // Numeric keypad 2 key 00243 irr2ceCODE[KEY_NUMPAD3 ] = Key::Numpad3; // Numeric keypad 3 key 00244 irr2ceCODE[KEY_NUMPAD4 ] = Key::Numpad4; // Numeric keypad 4 key 00245 irr2ceCODE[KEY_NUMPAD5 ] = Key::Numpad5; // Numeric keypad 5 key 00246 irr2ceCODE[KEY_NUMPAD6 ] = Key::Numpad6; // Numeric keypad 6 key 00247 irr2ceCODE[KEY_NUMPAD7 ] = Key::Numpad7; // Numeric keypad 7 key 00248 irr2ceCODE[KEY_NUMPAD8 ] = Key::Numpad8; // Numeric keypad 8 key 00249 irr2ceCODE[KEY_NUMPAD9 ] = Key::Numpad9; // Numeric keypad 9 key 00250 irr2ceCODE[KEY_MULTIPLY ] = Key::Multiply; // Multiply key 00251 irr2ceCODE[KEY_ADD ] = Key::Add; // Add key 00252 irr2ceCODE[KEY_SEPARATOR ] = Key::Unknown; // Separator key 00253 irr2ceCODE[KEY_SUBTRACT ] = Key::Subtract; // Subtract key 00254 irr2ceCODE[KEY_DECIMAL ] = Key::Decimal; // Decimal key 00255 irr2ceCODE[KEY_DIVIDE ] = Key::Divide; // Divide key 00256 irr2ceCODE[KEY_F1 ] = Key::F1; // F1 key 00257 irr2ceCODE[KEY_F2 ] = Key::F2; // F2 key 00258 irr2ceCODE[KEY_F3 ] = Key::F3; // F3 key 00259 irr2ceCODE[KEY_F4 ] = Key::F4; // F4 key 00260 irr2ceCODE[KEY_F5 ] = Key::F5; // F5 key 00261 irr2ceCODE[KEY_F6 ] = Key::F6; // F6 key 00262 irr2ceCODE[KEY_F7 ] = Key::F7; // F7 key 00263 irr2ceCODE[KEY_F8 ] = Key::F8; // F8 key 00264 irr2ceCODE[KEY_F9 ] = Key::F9; // F9 key 00265 irr2ceCODE[KEY_F10 ] = Key::F10; // F10 key 00266 irr2ceCODE[KEY_F11 ] = Key::F11; // F11 key 00267 irr2ceCODE[KEY_F12 ] = Key::F12; // F12 key 00268 irr2ceCODE[KEY_F13 ] = Key::F13; // F13 key 00269 irr2ceCODE[KEY_F14 ] = Key::F14; // F14 key 00270 irr2ceCODE[KEY_F15 ] = Key::F15; // F15 key 00271 irr2ceCODE[KEY_F16 ] = Key::Unknown; // F16 key 00272 irr2ceCODE[KEY_F17 ] = Key::Unknown; // F17 key 00273 irr2ceCODE[KEY_F18 ] = Key::Unknown; // F18 key 00274 irr2ceCODE[KEY_F19 ] = Key::Unknown; // F19 key 00275 irr2ceCODE[KEY_F20 ] = Key::Unknown; // F20 key 00276 irr2ceCODE[KEY_F21 ] = Key::Unknown; // F21 key 00277 irr2ceCODE[KEY_F22 ] = Key::Unknown; // F22 key 00278 irr2ceCODE[KEY_F23 ] = Key::Unknown; // F23 key 00279 irr2ceCODE[KEY_F24 ] = Key::Unknown; // F24 key 00280 irr2ceCODE[KEY_NUMLOCK ] = Key::NumLock; // NUM LOCK key 00281 irr2ceCODE[KEY_SCROLL ] = Key::ScrollLock; // SCROLL LOCK key 00282 irr2ceCODE[KEY_LSHIFT ] = Key::LeftShift; // Left SHIFT key 00283 irr2ceCODE[KEY_RSHIFT ] = Key::RightShift; // Right SHIFT key 00284 irr2ceCODE[KEY_LCONTROL ] = Key::LeftControl; // Left CONTROL key 00285 irr2ceCODE[KEY_RCONTROL ] = Key::RightControl; // Right CONTROL key 00286 irr2ceCODE[KEY_LMENU ] = Key::LeftAlt; // Left MENU key 00287 irr2ceCODE[KEY_RMENU ] = Key::RightAlt; // Right MENU key 00288 irr2ceCODE[KEY_COMMA ] = Key::Comma;//0xBC; // Comma Key (;) 00289 irr2ceCODE[KEY_PLUS ] = Key::Add; // Plus Key (+) 00290 irr2ceCODE[KEY_MINUS ] = Key::Minus; // Minus Key (-) 00291 irr2ceCODE[KEY_PERIOD ] = Key::Period;//0xBE; // Period Key (.) 00292 irr2ceCODE[KEY_ATTN ] = Key::Unknown; // Attn key 00293 irr2ceCODE[KEY_CRSEL ] = Key::Unknown; // CrSel key 00294 irr2ceCODE[KEY_EXSEL ] = Key::Unknown; // ExSel key 00295 irr2ceCODE[KEY_EREOF ] = Key::Unknown; // Erase EOF key 00296 irr2ceCODE[KEY_PLAY ] = Key::Unknown; // Play key 00297 irr2ceCODE[KEY_ZOOM ] = Key::Unknown; // Zoom key 00298 irr2ceCODE[KEY_PA1 ] = Key::Unknown; // PA1 key 00299 irr2ceCODE[KEY_OEM_CLEAR ] = Key::Unknown; // Clear key 00300 } 00301 00302 }; 00303 00304 } 00305 00306 #endif