FIFE
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ceguiinputprocessor.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2013 by the FIFE team *
3  * http://www.fifengine.net *
4  * This file is part of FIFE. *
5  * *
6  * FIFE is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
20  ***************************************************************************/
21 
22 // Standard C++ library includes
23 
24 // 3rd party library includes
25 #include <CEGUI/CEGUI.h>
26 
27 // FIFE includes
28 // These includes are split up in two parts, separated by one empty line
29 // First block: files included from the FIFE root src directory
30 // Second block: files included from the same folder
31 
32 #include "ceguiinputprocessor.h"
33 
34 namespace FIFE {
37  }
38 
40  }
41 
42  bool CEGuiInputProcessor::onSdlEvent(SDL_Event& event) {
43  bool consumed = false;
44 
45  switch(event.type) {
46 
47  case SDL_KEYUP:
48  case SDL_KEYDOWN:
49  consumed = processKeyInput(event);
50  break;
51 
52  case SDL_MOUSEBUTTONUP:
53  case SDL_MOUSEBUTTONDOWN:
54  consumed = processMouseInput(event);
55  break;
56 
57  case SDL_MOUSEMOTION:
58  consumed = processMouseMotion(event);
59  break;
60 
61  default:
62  ;
63  }
64 
65  return consumed;
66  }
67 
68  bool CEGuiInputProcessor::processKeyInput(SDL_Event& event) {
69  bool consumed = false;
70 
71  switch(event.type) {
72  case SDL_KEYDOWN:
73  consumed = CEGUI::System::getSingleton().injectChar(event.key.keysym.unicode);
74  if (m_keymap.find(event.key.keysym.sym) != m_keymap.end())
75  consumed |= CEGUI::System::getSingleton().injectKeyDown(m_keymap[event.key.keysym.sym]);
76  break;
77 
78  case SDL_KEYUP:
79  if (m_keymap.find(event.key.keysym.sym) != m_keymap.end())
80  consumed = CEGUI::System::getSingleton().injectKeyUp(m_keymap[event.key.keysym.sym]);
81  break;
82 
83  default:
84  ;
85  }
86 
87  return consumed;
88  }
89 
90  bool CEGuiInputProcessor::processMouseInput(SDL_Event& event) {
91  bool consumed = false;
92 
93  switch(event.type) {
94  case SDL_MOUSEBUTTONDOWN:
95  switch(event.button.button) {
96  case SDL_BUTTON_LEFT:
97  consumed = CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::LeftButton);
98  break;
99 
100  case SDL_BUTTON_RIGHT:
101  consumed = CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::RightButton);
102  break;
103 
104  case SDL_BUTTON_MIDDLE:
105  consumed = CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::MiddleButton) ;
106  break;
107 
108  case SDL_BUTTON_WHEELDOWN:
109  consumed = CEGUI::System::getSingleton().injectMouseWheelChange(-1);
110  break;
111 
112  case SDL_BUTTON_WHEELUP:
113  consumed = CEGUI::System::getSingleton().injectMouseWheelChange(1);
114  break;
115 
116  default:
117  ;
118  }
119  break;
120 
121  case SDL_MOUSEBUTTONUP:
122  switch(event.button.button) {
123  case SDL_BUTTON_LEFT:
124  consumed = CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::LeftButton);
125  break;
126 
127  case SDL_BUTTON_RIGHT:
128  consumed = CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::RightButton);
129  break;
130 
131  case SDL_BUTTON_MIDDLE:
132  consumed = CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::MiddleButton) ;
133  break;
134 
135  case SDL_BUTTON_WHEELDOWN:
136  break;
137 
138  case SDL_BUTTON_WHEELUP:
139  break;
140 
141  default:
142  ;
143  }
144  break;
145 
146  default:
147  ;
148  }
149 
150  return consumed;
151  }
152 
154  return CEGUI::System::getSingleton().injectMousePosition(static_cast<float>(event.motion.x), static_cast<float>(event.motion.y));
155  }
156 
158  m_keymap[SDLK_1] = CEGUI::Key::One;
159  m_keymap[SDLK_2] = CEGUI::Key::Two;
160  m_keymap[SDLK_3] = CEGUI::Key::Three;
161  m_keymap[SDLK_4] = CEGUI::Key::Four;
162  m_keymap[SDLK_5] = CEGUI::Key::Five;
163  m_keymap[SDLK_6] = CEGUI::Key::Six;
164  m_keymap[SDLK_7] = CEGUI::Key::Seven;
165  m_keymap[SDLK_8] = CEGUI::Key::Eight;
166  m_keymap[SDLK_9] = CEGUI::Key::Nine;
167  m_keymap[SDLK_0] = CEGUI::Key::Zero;
168 
169  m_keymap[SDLK_q] = CEGUI::Key::Q;
170  m_keymap[SDLK_w] = CEGUI::Key::W;
171  m_keymap[SDLK_e] = CEGUI::Key::E;
172  m_keymap[SDLK_r] = CEGUI::Key::R;
173  m_keymap[SDLK_t] = CEGUI::Key::T;
174  m_keymap[SDLK_y] = CEGUI::Key::Y;
175  m_keymap[SDLK_u] = CEGUI::Key::U;
176  m_keymap[SDLK_i] = CEGUI::Key::I;
177  m_keymap[SDLK_o] = CEGUI::Key::O;
178  m_keymap[SDLK_p] = CEGUI::Key::P;
179  m_keymap[SDLK_a] = CEGUI::Key::A;
180  m_keymap[SDLK_s] = CEGUI::Key::S;
181  m_keymap[SDLK_d] = CEGUI::Key::D;
182  m_keymap[SDLK_f] = CEGUI::Key::F;
183  m_keymap[SDLK_g] = CEGUI::Key::G;
184  m_keymap[SDLK_h] = CEGUI::Key::H;
185  m_keymap[SDLK_j] = CEGUI::Key::J;
186  m_keymap[SDLK_k] = CEGUI::Key::K;
187  m_keymap[SDLK_l] = CEGUI::Key::L;
188  m_keymap[SDLK_z] = CEGUI::Key::Z;
189  m_keymap[SDLK_x] = CEGUI::Key::X;
190  m_keymap[SDLK_c] = CEGUI::Key::C;
191  m_keymap[SDLK_v] = CEGUI::Key::V;
192  m_keymap[SDLK_b] = CEGUI::Key::B;
193  m_keymap[SDLK_n] = CEGUI::Key::N;
194  m_keymap[SDLK_m] = CEGUI::Key::M;
195 
196  m_keymap[SDLK_COMMA] = CEGUI::Key::Comma;
197  m_keymap[SDLK_PERIOD] = CEGUI::Key::Period;
198  m_keymap[SDLK_SLASH] = CEGUI::Key::Slash;
199  m_keymap[SDLK_BACKSLASH] = CEGUI::Key::Backslash;
200  m_keymap[SDLK_MINUS] = CEGUI::Key::Minus;
201  m_keymap[SDLK_EQUALS] = CEGUI::Key::Equals;
202  m_keymap[SDLK_SEMICOLON] = CEGUI::Key::Semicolon;
203  m_keymap[SDLK_LEFTBRACKET] = CEGUI::Key::LeftBracket;
204  m_keymap[SDLK_RIGHTBRACKET] = CEGUI::Key::RightBracket;
205  m_keymap[SDLK_QUOTE] = CEGUI::Key::Apostrophe;
206  m_keymap[SDLK_BACKQUOTE] = CEGUI::Key::Grave;
207 
208  m_keymap[SDLK_RETURN] = CEGUI::Key::Return;
209  m_keymap[SDLK_SPACE] = CEGUI::Key::Space;
210  m_keymap[SDLK_BACKSPACE] = CEGUI::Key::Backspace;
211  m_keymap[SDLK_TAB] = CEGUI::Key::Tab;
212 
213  m_keymap[SDLK_ESCAPE] = CEGUI::Key::Escape;
214  m_keymap[SDLK_PAUSE] = CEGUI::Key::Pause;
215  m_keymap[SDLK_SYSREQ] = CEGUI::Key::SysRq;
216  m_keymap[SDLK_POWER] = CEGUI::Key::Power;
217 
218  m_keymap[SDLK_NUMLOCK] = CEGUI::Key::NumLock;
219  m_keymap[SDLK_SCROLLOCK] = CEGUI::Key::ScrollLock;
220 
221  m_keymap[SDLK_F1] = CEGUI::Key::F1;
222  m_keymap[SDLK_F2] = CEGUI::Key::F2;
223  m_keymap[SDLK_F3] = CEGUI::Key::F3;
224  m_keymap[SDLK_F4] = CEGUI::Key::F4;
225  m_keymap[SDLK_F5] = CEGUI::Key::F5;
226  m_keymap[SDLK_F6] = CEGUI::Key::F6;
227  m_keymap[SDLK_F7] = CEGUI::Key::F7;
228  m_keymap[SDLK_F8] = CEGUI::Key::F8;
229  m_keymap[SDLK_F9] = CEGUI::Key::F9;
230  m_keymap[SDLK_F10] = CEGUI::Key::F10;
231  m_keymap[SDLK_F11] = CEGUI::Key::F11;
232  m_keymap[SDLK_F12] = CEGUI::Key::F12;
233  m_keymap[SDLK_F13] = CEGUI::Key::F13;
234  m_keymap[SDLK_F14] = CEGUI::Key::F14;
235  m_keymap[SDLK_F15] = CEGUI::Key::F15;
236 
237  m_keymap[SDLK_LCTRL] = CEGUI::Key::LeftControl;
238  m_keymap[SDLK_LALT] = CEGUI::Key::LeftAlt;
239  m_keymap[SDLK_LSHIFT] = CEGUI::Key::LeftShift;
240  m_keymap[SDLK_LSUPER] = CEGUI::Key::LeftWindows;
241  m_keymap[SDLK_RCTRL] = CEGUI::Key::RightControl;
242  m_keymap[SDLK_RALT] = CEGUI::Key::RightAlt;
243  m_keymap[SDLK_RSHIFT] = CEGUI::Key::RightShift;
244  m_keymap[SDLK_RSUPER] = CEGUI::Key::RightWindows;
245  m_keymap[SDLK_MENU] = CEGUI::Key::AppMenu;
246 
247  m_keymap[SDLK_KP0] = CEGUI::Key::Numpad0;
248  m_keymap[SDLK_KP1] = CEGUI::Key::Numpad1;
249  m_keymap[SDLK_KP2] = CEGUI::Key::Numpad2;
250  m_keymap[SDLK_KP3] = CEGUI::Key::Numpad3;
251  m_keymap[SDLK_KP4] = CEGUI::Key::Numpad4;
252  m_keymap[SDLK_KP5] = CEGUI::Key::Numpad5;
253  m_keymap[SDLK_KP6] = CEGUI::Key::Numpad6;
254  m_keymap[SDLK_KP7] = CEGUI::Key::Numpad7;
255  m_keymap[SDLK_KP8] = CEGUI::Key::Numpad8;
256  m_keymap[SDLK_KP9] = CEGUI::Key::Numpad9;
257  m_keymap[SDLK_KP_PERIOD] = CEGUI::Key::Decimal;
258  m_keymap[SDLK_KP_PLUS] = CEGUI::Key::Add;
259  m_keymap[SDLK_KP_MINUS] = CEGUI::Key::Subtract;
260  m_keymap[SDLK_KP_MULTIPLY] = CEGUI::Key::Multiply;
261  m_keymap[SDLK_KP_DIVIDE] = CEGUI::Key::Divide;
262  m_keymap[SDLK_KP_ENTER] = CEGUI::Key::NumpadEnter;
263 
264  m_keymap[SDLK_UP] = CEGUI::Key::ArrowUp;
265  m_keymap[SDLK_LEFT] = CEGUI::Key::ArrowLeft;
266  m_keymap[SDLK_RIGHT] = CEGUI::Key::ArrowRight;
267  m_keymap[SDLK_DOWN] = CEGUI::Key::ArrowDown;
268 
269  m_keymap[SDLK_HOME] = CEGUI::Key::Home;
270  m_keymap[SDLK_END] = CEGUI::Key::End;
271  m_keymap[SDLK_PAGEUP] = CEGUI::Key::PageUp;
272  m_keymap[SDLK_PAGEDOWN] = CEGUI::Key::PageDown;
273  m_keymap[SDLK_INSERT] = CEGUI::Key::Insert;
274  m_keymap[SDLK_DELETE] = CEGUI::Key::Delete;
275  }
276 }
void initializeKeyMap()
Initialize the key translation map.
std::map< SDLKey, CEGUI::Key::Scan > m_keymap
Holds translation of key scancodes from SDL to CEGUI.
bool processMouseInput(SDL_Event &event)
Process a mouse input event.
bool processKeyInput(SDL_Event &event)
Process a key input event.
bool onSdlEvent(SDL_Event &event)
Injects input to the CEGUI system.
bool processMouseMotion(SDL_Event &event)
Process a mouse motion event.