Crazy Eddies GUI System  0.7.1
CEGUIIrrlichtEventPusher.h
1 /***********************************************************************
2  filename: CEGUIIrrlichtEventPusher.h
3  created: 12/22/2004
4  author: Thomas Suter
5 *************************************************************************/
6 /***************************************************************************
7  * Copyright (C) 2004 - 2009 Paul D Turner & The CEGUI Development Team
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining
10  * a copy of this software and associated documentation files (the
11  * "Software"), to deal in the Software without restriction, including
12  * without limitation the rights to use, copy, modify, merge, publish,
13  * distribute, sublicense, and/or sell copies of the Software, and to
14  * permit persons to whom the Software is furnished to do so, subject to
15  * the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26  * OTHER DEALINGS IN THE SOFTWARE.
27  ***************************************************************************/
28 #ifndef CCEGUIEVENTPUSHER_H_INCLUDED
29 #define CCEGUIEVENTPUSHER_H_INCLUDED
30 
31 #include "../../CEGUI.h"
32 #include <irrlicht.h>
33 
34 namespace CEGUI
35 {
36 using namespace irr;
37 
39 {
40  gui::ICursorControl* d_cursorctrl;
41 
42  core::position2d<s32> d_pos;
43  core::position2d<s32> d_dpos;
44 
45 public :
46  IrrlichtEventPusher(irr::gui::ICursorControl* ctrl) :
47  d_cursorctrl(ctrl)
48  {
49  d_cursorctrl->setPosition(0.5f, 0.5f);
50  d_pos = d_cursorctrl->getPosition();
51  d_dpos.X = 0;
52  d_dpos.Y = 0;
53  initCodes();
54  };
55 
56  virtual ~IrrlichtEventPusher(){};
57 
58  bool OnEvent(const SEvent& event)
59  {
60  switch (event.EventType)
61  {
62  case EET_KEY_INPUT_EVENT :
63  if (event.KeyInput.PressedDown)
64  return OnKeyDown(event.KeyInput.Key, event.KeyInput.Char, event.KeyInput.Control, event.KeyInput.Shift);
65  else
66  return OnKeyUp(event.KeyInput.Key, event.KeyInput.Char, event.KeyInput.Control, event.KeyInput.Shift);
67  break;
68 
69  case EET_MOUSE_INPUT_EVENT :
70  return OnMouse(event.MouseInput.X, event.MouseInput.Y, event.MouseInput.Wheel, event.MouseInput.Event);
71  break;
72 
73  default:
74  break;
75  }
76 
77  return false;
78  }
79 
80  bool OnKeyDown(EKEY_CODE key, wchar_t wch, bool /*ctrl*/, bool /*shift*/)
81  {
82  bool handled = false;
84  handled = cegui.injectKeyDown(getKeyCode(key));
85  handled = cegui.injectChar(wch) || handled;
86  return handled;
87  }
88 
89  bool OnKeyUp(EKEY_CODE key, wchar_t /*wch*/, bool /*ctrl*/, bool /*shift*/)
90  {
91  bool handled = false;
93  handled = cegui.injectKeyUp(getKeyCode(key));
94  return handled;
95  }
96 
97  bool OnMouse(s32 x, s32 y, f32 w, EMOUSE_INPUT_EVENT e)
98  {
99  using namespace irr;
100  bool handled = false;
101 
102  switch (e)
103  {
105  case EMIE_LMOUSE_PRESSED_DOWN:
107  break;
109  case EMIE_RMOUSE_PRESSED_DOWN:
111  break;
113  case EMIE_MMOUSE_PRESSED_DOWN:
115  break;
117  case EMIE_LMOUSE_LEFT_UP:
119  break;
121  case EMIE_RMOUSE_LEFT_UP:
123  break;
125  case EMIE_MMOUSE_LEFT_UP:
127  break;
129  case EMIE_MOUSE_MOVED:
131  static_cast<float>(x), static_cast<float>(y));
132  break;
135  case EMIE_MOUSE_WHEEL:
137  break;
138  default:
139  break;
140  }
141  return handled;
142 
143  }
144 
145 protected:
146  unsigned char irr2ceCODE[irr::KEY_KEY_CODES_COUNT];
147 
148  void initCodes()
149  {
150  using namespace irr;
151  memset(irr2ceCODE, 0, KEY_KEY_CODES_COUNT);
152 
153  irr2ceCODE[KEY_LBUTTON ] = 0; // Left mouse button
154  irr2ceCODE[KEY_RBUTTON ] = 0; // Right mouse button
155  irr2ceCODE[KEY_CANCEL ] = 0; // Control-break processing
156  irr2ceCODE[KEY_MBUTTON ] = 0; // Middle mouse button (three-button mouse)
157  irr2ceCODE[KEY_XBUTTON1 ] = 0; // Windows 2000/XP: X1 mouse button
158  irr2ceCODE[KEY_XBUTTON2 ] = 0; // Windows 2000/XP: X2 mouse button
159  irr2ceCODE[KEY_BACK ] = Key::Backspace; //0x08; // BACKSPACE key
160  irr2ceCODE[KEY_TAB ] = Key::Tab; //0x09; // TAB key
161  irr2ceCODE[KEY_CLEAR ] = 0; // CLEAR key
162  irr2ceCODE[KEY_RETURN ] = Key::Return; //0x0D; // ENTER key
163  irr2ceCODE[KEY_SHIFT ] = Key::LeftShift; // SHIFT key
164  irr2ceCODE[KEY_CONTROL ] = Key::LeftControl; // CTRL key
165  irr2ceCODE[KEY_MENU ] = Key::LeftAlt; // ALT key
166  irr2ceCODE[KEY_PAUSE ] = Key::Pause; // PAUSE key
167  irr2ceCODE[KEY_CAPITAL ] = Key::Capital; // CAPS LOCK key
168  irr2ceCODE[KEY_KANA ] = Key::Kana; // IME Kana mode
169  irr2ceCODE[KEY_HANGUEL ] = KEY_HANGUEL; // IME Hanguel mode
170  irr2ceCODE[KEY_HANGUL ] = KEY_HANGUL; // IME Hangul mode
171  irr2ceCODE[KEY_JUNJA ] = 0; // IME Junja mode
172  irr2ceCODE[KEY_FINAL ] = 0; // IME final mode
173  irr2ceCODE[KEY_HANJA ] = 0; // IME Hanja mode
174  irr2ceCODE[KEY_KANJI ] = 0; // IME Kanji mode
175  irr2ceCODE[KEY_ESCAPE ] = Key::Escape; // ESC key
176  irr2ceCODE[KEY_CONVERT ] = Key::Convert; // IME convert
177  irr2ceCODE[KEY_NONCONVERT] = Key::NoConvert; // IME nonconvert
178  irr2ceCODE[KEY_ACCEPT ] = 0; // IME accept
179  irr2ceCODE[KEY_MODECHANGE] = 0; // IME mode change request
180  irr2ceCODE[KEY_SPACE ] = Key::Space; // SPACEBAR
181  irr2ceCODE[KEY_PRIOR ] = Key::PageUp; // PAGE UP key
182  irr2ceCODE[KEY_NEXT ] = Key::PageDown; // PAGE DOWN key
183  irr2ceCODE[KEY_END ] = Key::End; // END key
184  irr2ceCODE[KEY_HOME ] = Key::Home; // HOME key
185  irr2ceCODE[KEY_LEFT ] = Key::ArrowLeft; // LEFT ARROW key
186  irr2ceCODE[KEY_UP ] = Key::ArrowUp; // UP ARROW key
187  irr2ceCODE[KEY_RIGHT ] = Key::ArrowRight; // RIGHT ARROW key
188  irr2ceCODE[KEY_DOWN ] = Key::ArrowDown; // DOWN ARROW key
189  irr2ceCODE[KEY_SELECT ] = 0; // SELECT key
190  irr2ceCODE[KEY_PRINT ] = Key::SysRq; // PRINT key
191  irr2ceCODE[KEY_EXECUT ] = 0; // EXECUTE key
192  irr2ceCODE[KEY_SNAPSHOT ] = 0; // PRINT SCREEN key
193  irr2ceCODE[KEY_INSERT ] = Key::Insert;//0x2D; // INS key
194  irr2ceCODE[KEY_DELETE ] = Key::Delete;//0x2E; // DEL key
195  irr2ceCODE[KEY_HELP ] = 0; // HELP key
196  irr2ceCODE[KEY_KEY_0 ] = Key::Zero; // 0 key
197  irr2ceCODE[KEY_KEY_1 ] = Key::One; // 1 key
198  irr2ceCODE[KEY_KEY_2 ] = Key::Two; // 2 key
199  irr2ceCODE[KEY_KEY_3 ] = Key::Three; // 3 key
200  irr2ceCODE[KEY_KEY_4 ] = Key::Four; // 4 key
201  irr2ceCODE[KEY_KEY_5 ] = Key::Five; // 5 key
202  irr2ceCODE[KEY_KEY_6 ] = Key::Six; // 6 key
203  irr2ceCODE[KEY_KEY_7 ] = Key::Seven; // 7 key
204  irr2ceCODE[KEY_KEY_8 ] = Key::Eight; // 8 key
205  irr2ceCODE[KEY_KEY_9 ] = Key::Nine; // 9 key
206  irr2ceCODE[KEY_KEY_A ] = Key::A; // A key
207  irr2ceCODE[KEY_KEY_B ] = Key::B; // B key
208  irr2ceCODE[KEY_KEY_C ] = Key::C; // C key
209  irr2ceCODE[KEY_KEY_D ] = Key::D; // D key
210  irr2ceCODE[KEY_KEY_E ] = Key::E; // E key
211  irr2ceCODE[KEY_KEY_F ] = Key::F; // F key
212  irr2ceCODE[KEY_KEY_G ] = Key::G; // G key
213  irr2ceCODE[KEY_KEY_H ] = Key::H; // H key
214  irr2ceCODE[KEY_KEY_I ] = Key::I; // I key
215  irr2ceCODE[KEY_KEY_J ] = Key::J; // J key
216  irr2ceCODE[KEY_KEY_K ] = Key::K; // K key
217  irr2ceCODE[KEY_KEY_L ] = Key::L; // L key
218  irr2ceCODE[KEY_KEY_M ] = Key::M; // M key
219  irr2ceCODE[KEY_KEY_N ] = Key::N; // N key
220  irr2ceCODE[KEY_KEY_O ] = Key::O; // O key
221  irr2ceCODE[KEY_KEY_P ] = Key::P; // P key
222  irr2ceCODE[KEY_KEY_Q ] = Key::Q; // Q key
223  irr2ceCODE[KEY_KEY_R ] = Key::R; // R key
224  irr2ceCODE[KEY_KEY_S ] = Key::S; // S key
225  irr2ceCODE[KEY_KEY_T ] = Key::T; // T key
226  irr2ceCODE[KEY_KEY_U ] = Key::U; // U key
227  irr2ceCODE[KEY_KEY_V ] = Key::V; // V key
228  irr2ceCODE[KEY_KEY_W ] = Key::W; // W key
229  irr2ceCODE[KEY_KEY_X ] = Key::X; // X key
230  irr2ceCODE[KEY_KEY_Y ] = Key::Y; // Y key
231  irr2ceCODE[KEY_KEY_Z ] = Key::Z; // Z key
232  irr2ceCODE[KEY_LWIN ] = Key::LeftWindows; // Left Windows key (Microsoft� Natural� keyboard)
233  irr2ceCODE[KEY_RWIN ] = Key::RightWindow; // Right Windows key (Natural keyboard)
234  irr2ceCODE[KEY_APPS ] = Key::AppMenu; //Applications key (Natural keyboard)
235  irr2ceCODE[KEY_SLEEP ] = Key::Sleep; // Computer Sleep key
236  irr2ceCODE[KEY_NUMPAD0 ] = Key::Numpad0; // Numeric keypad 0 key
237  irr2ceCODE[KEY_NUMPAD1 ] = Key::Numpad1; // Numeric keypad 1 key
238  irr2ceCODE[KEY_NUMPAD2 ] = Key::Numpad2; // Numeric keypad 2 key
239  irr2ceCODE[KEY_NUMPAD3 ] = Key::Numpad3; // Numeric keypad 3 key
240  irr2ceCODE[KEY_NUMPAD4 ] = Key::Numpad4; // Numeric keypad 4 key
241  irr2ceCODE[KEY_NUMPAD5 ] = Key::Numpad5; // Numeric keypad 5 key
242  irr2ceCODE[KEY_NUMPAD6 ] = Key::Numpad6; // Numeric keypad 6 key
243  irr2ceCODE[KEY_NUMPAD7 ] = Key::Numpad7; // Numeric keypad 7 key
244  irr2ceCODE[KEY_NUMPAD8 ] = Key::Numpad8; // Numeric keypad 8 key
245  irr2ceCODE[KEY_NUMPAD9 ] = Key::Numpad9; // Numeric keypad 9 key
246  irr2ceCODE[KEY_MULTIPLY ] = Key::Multiply; // Multiply key
247  irr2ceCODE[KEY_ADD ] = Key::Add; // Add key
248  irr2ceCODE[KEY_SEPARATOR ] = 0; // Separator key
249  irr2ceCODE[KEY_SUBTRACT ] = Key::Subtract; // Subtract key
250  irr2ceCODE[KEY_DECIMAL ] = Key::Decimal; // Decimal key
251  irr2ceCODE[KEY_DIVIDE ] = Key::Divide; // Divide key
252  irr2ceCODE[KEY_F1 ] = Key::F1; // F1 key
253  irr2ceCODE[KEY_F2 ] = Key::F2; // F2 key
254  irr2ceCODE[KEY_F3 ] = Key::F3; // F3 key
255  irr2ceCODE[KEY_F4 ] = Key::F4; // F4 key
256  irr2ceCODE[KEY_F5 ] = Key::F5; // F5 key
257  irr2ceCODE[KEY_F6 ] = Key::F6; // F6 key
258  irr2ceCODE[KEY_F7 ] = Key::F7; // F7 key
259  irr2ceCODE[KEY_F8 ] = Key::F8; // F8 key
260  irr2ceCODE[KEY_F9 ] = Key::F9; // F9 key
261  irr2ceCODE[KEY_F10 ] = Key::F10; // F10 key
262  irr2ceCODE[KEY_F11 ] = Key::F11; // F11 key
263  irr2ceCODE[KEY_F12 ] = Key::F12; // F12 key
264  irr2ceCODE[KEY_F13 ] = Key::F13; // F13 key
265  irr2ceCODE[KEY_F14 ] = Key::F14; // F14 key
266  irr2ceCODE[KEY_F15 ] = Key::F15; // F15 key
267  irr2ceCODE[KEY_F16 ] = 0; // F16 key
268  irr2ceCODE[KEY_F17 ] = 0; // F17 key
269  irr2ceCODE[KEY_F18 ] = 0; // F18 key
270  irr2ceCODE[KEY_F19 ] = 0; // F19 key
271  irr2ceCODE[KEY_F20 ] = 0; // F20 key
272  irr2ceCODE[KEY_F21 ] = 0; // F21 key
273  irr2ceCODE[KEY_F22 ] = 0; // F22 key
274  irr2ceCODE[KEY_F23 ] = 0; // F23 key
275  irr2ceCODE[KEY_F24 ] = 0; // F24 key
276  irr2ceCODE[KEY_NUMLOCK ] = Key::NumLock; // NUM LOCK key
277  irr2ceCODE[KEY_SCROLL ] = Key::ScrollLock; // SCROLL LOCK key
278  irr2ceCODE[KEY_LSHIFT ] = Key::LeftShift; // Left SHIFT key
279  irr2ceCODE[KEY_RSHIFT ] = Key::RightShift; // Right SHIFT key
280  irr2ceCODE[KEY_LCONTROL ] = Key::LeftControl; // Left CONTROL key
281  irr2ceCODE[KEY_RCONTROL ] = Key::RightControl; // Right CONTROL key
282  irr2ceCODE[KEY_LMENU ] = Key::LeftAlt; // Left MENU key
283  irr2ceCODE[KEY_RMENU ] = Key::RightAlt; // Right MENU key
284  irr2ceCODE[KEY_COMMA ] = Key::Comma;//0xBC; // Comma Key (;)
285  irr2ceCODE[KEY_PLUS ] = Key::Add; // Plus Key (+)
286  irr2ceCODE[KEY_MINUS ] = Key::Minus; // Minus Key (-)
287  irr2ceCODE[KEY_PERIOD ] = Key::Period;//0xBE; // Period Key (.)
288  irr2ceCODE[KEY_ATTN ] = 0; // Attn key
289  irr2ceCODE[KEY_CRSEL ] = 0; // CrSel key
290  irr2ceCODE[KEY_EXSEL ] = 0; // ExSel key
291  irr2ceCODE[KEY_EREOF ] = 0; // Erase EOF key
292  irr2ceCODE[KEY_PLAY ] = 0; // Play key
293  irr2ceCODE[KEY_ZOOM ] = 0; // Zoom key
294  irr2ceCODE[KEY_PA1 ] = 0; // PA1 key
295  irr2ceCODE[KEY_OEM_CLEAR ] = 0; // Clear key
296  }
297 
305  uchar getKeyCode(irr::EKEY_CODE kc)
306  {
307  return irr2ceCODE[kc];
308  }
309 };
310 
311 }
312 
313 #endif