Mercurial > love-experiments
annotate src/modules/event/Event.cpp @ 1282:b7f097053d74
Updated copyright text for the new year
| author | Alex Szpakowski <slime73@gmail.com> |
|---|---|
| date | Tue, 05 Feb 2013 05:32:49 -0400 |
| parents | 86a44f2bc38f |
| children | 730ed5f01ab0 |
| rev | line source |
|---|---|
| 1096 | 1 /** |
|
1282
b7f097053d74
Updated copyright text for the new year
Alex Szpakowski <slime73@gmail.com>
parents:
1096
diff
changeset
|
2 * Copyright (c) 2006-2013 LOVE Development Team |
| 1096 | 3 * |
| 4 * This software is provided 'as-is', without any express or implied | |
| 5 * warranty. In no event will the authors be held liable for any damages | |
| 6 * arising from the use of this software. | |
| 7 * | |
| 8 * Permission is granted to anyone to use this software for any purpose, | |
| 9 * including commercial applications, and to alter it and redistribute it | |
| 10 * freely, subject to the following restrictions: | |
| 11 * | |
| 12 * 1. The origin of this software must not be misrepresented; you must not | |
| 13 * claim that you wrote the original software. If you use this software | |
| 14 * in a product, an acknowledgment in the product documentation would be | |
| 15 * appreciated but is not required. | |
| 16 * 2. Altered source versions must be plainly marked as such, and must not be | |
| 17 * misrepresented as being the original software. | |
| 18 * 3. This notice may not be removed or altered from any source distribution. | |
| 19 **/ | |
| 20 | |
| 21 #include "Event.h" | |
| 22 | |
| 23 using love::thread::Mutex; | |
| 24 using love::thread::Lock; | |
| 25 | |
| 26 namespace love | |
| 27 { | |
| 28 namespace event | |
| 29 { | |
| 30 | |
| 31 Message::Message(std::string name, Variant *a, Variant *b, Variant *c, Variant *d) | |
| 32 : name(name) | |
| 33 , nargs(0) | |
| 34 { | |
| 35 args[0] = a; | |
| 36 args[1] = b; | |
| 37 args[2] = c; | |
| 38 args[3] = d; | |
| 39 for (int i = 0; i < 4; i++) | |
| 40 { | |
| 41 if (!args[i]) | |
| 42 continue; | |
| 43 args[i]->retain(); | |
| 44 nargs++; | |
| 45 } | |
| 46 } | |
| 47 | |
| 48 Message::~Message() | |
| 49 { | |
| 50 for (int i = 0; i < nargs; i++) | |
| 51 args[i]->release(); | |
| 52 } | |
| 53 | |
| 54 int Message::toLua(lua_State *L) | |
| 55 { | |
| 56 luax_pushstring(L, name); | |
| 57 for (int i = 0; i < nargs; i++) | |
| 58 args[i]->toLua(L); | |
| 59 return nargs+1; | |
| 60 } | |
| 61 | |
| 62 Message *Message::fromLua(lua_State *L, int n) | |
| 63 { | |
| 64 std::string name = luax_checkstring(L, n); | |
| 65 n++; | |
| 66 Message *m = new Message(name); | |
| 67 for (int i = 0; i < 4; i++) | |
| 68 { | |
| 69 if (lua_isnoneornil(L, n+i)) | |
| 70 break; | |
| 71 m->args[i] = Variant::fromLua(L, n+i); | |
| 72 if (!m->args[i]) | |
| 73 { | |
| 74 delete m; | |
| 75 luaL_error(L, "Argument %d can't be stored safely\nExpected boolean, number, string or userdata.", n+i); | |
| 76 return NULL; | |
| 77 } | |
| 78 m->nargs++; | |
| 79 } | |
| 80 return m; | |
| 81 } | |
| 82 | |
| 83 Event::~Event() | |
| 84 { | |
| 85 } | |
| 86 | |
| 87 void Event::push(Message *msg) | |
| 88 { | |
| 89 Lock lock(mutex); | |
| 90 msg->retain(); | |
| 91 queue.push(msg); | |
| 92 } | |
| 93 | |
| 94 bool Event::poll(Message *&msg) | |
| 95 { | |
| 96 Lock lock(mutex); | |
| 97 if (queue.empty()) | |
| 98 return false; | |
| 99 msg = queue.front(); | |
| 100 queue.pop(); | |
| 101 return true; | |
| 102 } | |
| 103 | |
| 104 void Event::clear() | |
| 105 { | |
| 106 Lock lock(mutex); | |
| 107 while (!queue.empty()) | |
| 108 { | |
| 109 queue.back()->release(); | |
| 110 queue.pop(); | |
| 111 } | |
| 112 } | |
| 113 | |
| 114 bool Event::getConstant(const char *in, love::mouse::Mouse::Button &out) | |
| 115 { | |
| 116 return buttons.find(in, out); | |
| 117 } | |
| 118 | |
| 119 bool Event::getConstant(love::mouse::Mouse::Button in, const char *&out) | |
| 120 { | |
| 121 return buttons.find(in, out); | |
| 122 } | |
| 123 | |
| 124 bool Event::getConstant(const char *in, love::keyboard::Keyboard::Key &out) | |
| 125 { | |
| 126 return keys.find(in, out); | |
| 127 } | |
| 128 | |
| 129 bool Event::getConstant(love::keyboard::Keyboard::Key in, const char *&out) | |
| 130 { | |
| 131 return keys.find(in, out); | |
| 132 } | |
| 133 | |
| 134 StringMap<love::mouse::Mouse::Button, love::mouse::Mouse::BUTTON_MAX_ENUM>::Entry Event::buttonEntries[] = | |
| 135 { | |
| 136 {"l", love::mouse::Mouse::BUTTON_LEFT}, | |
| 137 {"m", love::mouse::Mouse::BUTTON_MIDDLE}, | |
| 138 {"r", love::mouse::Mouse::BUTTON_RIGHT}, | |
| 139 {"wu", love::mouse::Mouse::BUTTON_WHEELUP}, | |
| 140 {"wd", love::mouse::Mouse::BUTTON_WHEELDOWN}, | |
| 141 {"x1", love::mouse::Mouse::BUTTON_X1}, | |
| 142 {"x2", love::mouse::Mouse::BUTTON_X2}, | |
| 143 }; | |
| 144 | |
| 145 StringMap<love::mouse::Mouse::Button, love::mouse::Mouse::BUTTON_MAX_ENUM> Event::buttons(Event::buttonEntries, sizeof(Event::buttonEntries)); | |
| 146 | |
| 147 StringMap<love::keyboard::Keyboard::Key, love::keyboard::Keyboard::KEY_MAX_ENUM>::Entry Event::keyEntries[] = | |
| 148 { | |
| 149 {"backspace", love::keyboard::Keyboard::KEY_BACKSPACE}, | |
| 150 {"tab", love::keyboard::Keyboard::KEY_TAB}, | |
| 151 {"clear", love::keyboard::Keyboard::KEY_CLEAR}, | |
| 152 {"return", love::keyboard::Keyboard::KEY_RETURN}, | |
| 153 {"pause", love::keyboard::Keyboard::KEY_PAUSE}, | |
| 154 {"escape", love::keyboard::Keyboard::KEY_ESCAPE}, | |
| 155 {" ", love::keyboard::Keyboard::KEY_SPACE}, | |
| 156 {"!", love::keyboard::Keyboard::KEY_EXCLAIM}, | |
| 157 {"\"", love::keyboard::Keyboard::KEY_QUOTEDBL}, | |
| 158 {"#", love::keyboard::Keyboard::KEY_HASH}, | |
| 159 {"$", love::keyboard::Keyboard::KEY_DOLLAR}, | |
| 160 {"&", love::keyboard::Keyboard::KEY_AMPERSAND}, | |
| 161 {"'", love::keyboard::Keyboard::KEY_QUOTE}, | |
| 162 {"(", love::keyboard::Keyboard::KEY_LEFTPAREN}, | |
| 163 {")", love::keyboard::Keyboard::KEY_RIGHTPAREN}, | |
| 164 {"*", love::keyboard::Keyboard::KEY_ASTERISK}, | |
| 165 {"+", love::keyboard::Keyboard::KEY_PLUS}, | |
| 166 {",", love::keyboard::Keyboard::KEY_COMMA}, | |
| 167 {"-", love::keyboard::Keyboard::KEY_MINUS}, | |
| 168 {".", love::keyboard::Keyboard::KEY_PERIOD}, | |
| 169 {"/", love::keyboard::Keyboard::KEY_SLASH}, | |
| 170 {"0", love::keyboard::Keyboard::KEY_0}, | |
| 171 {"1", love::keyboard::Keyboard::KEY_1}, | |
| 172 {"2", love::keyboard::Keyboard::KEY_2}, | |
| 173 {"3", love::keyboard::Keyboard::KEY_3}, | |
| 174 {"4", love::keyboard::Keyboard::KEY_4}, | |
| 175 {"5", love::keyboard::Keyboard::KEY_5}, | |
| 176 {"6", love::keyboard::Keyboard::KEY_6}, | |
| 177 {"7", love::keyboard::Keyboard::KEY_7}, | |
| 178 {"8", love::keyboard::Keyboard::KEY_8}, | |
| 179 {"9", love::keyboard::Keyboard::KEY_9}, | |
| 180 {":", love::keyboard::Keyboard::KEY_COLON}, | |
| 181 {";", love::keyboard::Keyboard::KEY_SEMICOLON}, | |
| 182 {"<", love::keyboard::Keyboard::KEY_LESS}, | |
| 183 {"=", love::keyboard::Keyboard::KEY_EQUALS}, | |
| 184 {">", love::keyboard::Keyboard::KEY_GREATER}, | |
| 185 {"?", love::keyboard::Keyboard::KEY_QUESTION}, | |
| 186 {"@", love::keyboard::Keyboard::KEY_AT}, | |
| 187 | |
| 188 {"[", love::keyboard::Keyboard::KEY_LEFTBRACKET}, | |
| 189 {"\\", love::keyboard::Keyboard::KEY_BACKSLASH}, | |
| 190 {"]", love::keyboard::Keyboard::KEY_RIGHTBRACKET}, | |
| 191 {"^", love::keyboard::Keyboard::KEY_CARET}, | |
| 192 {"_", love::keyboard::Keyboard::KEY_UNDERSCORE}, | |
| 193 {"`", love::keyboard::Keyboard::KEY_BACKQUOTE}, | |
| 194 {"a", love::keyboard::Keyboard::KEY_A}, | |
| 195 {"b", love::keyboard::Keyboard::KEY_B}, | |
| 196 {"c", love::keyboard::Keyboard::KEY_C}, | |
| 197 {"d", love::keyboard::Keyboard::KEY_D}, | |
| 198 {"e", love::keyboard::Keyboard::KEY_E}, | |
| 199 {"f", love::keyboard::Keyboard::KEY_F}, | |
| 200 {"g", love::keyboard::Keyboard::KEY_G}, | |
| 201 {"h", love::keyboard::Keyboard::KEY_H}, | |
| 202 {"i", love::keyboard::Keyboard::KEY_I}, | |
| 203 {"j", love::keyboard::Keyboard::KEY_J}, | |
| 204 {"k", love::keyboard::Keyboard::KEY_K}, | |
| 205 {"l", love::keyboard::Keyboard::KEY_L}, | |
| 206 {"m", love::keyboard::Keyboard::KEY_M}, | |
| 207 {"n", love::keyboard::Keyboard::KEY_N}, | |
| 208 {"o", love::keyboard::Keyboard::KEY_O}, | |
| 209 {"p", love::keyboard::Keyboard::KEY_P}, | |
| 210 {"q", love::keyboard::Keyboard::KEY_Q}, | |
| 211 {"r", love::keyboard::Keyboard::KEY_R}, | |
| 212 {"s", love::keyboard::Keyboard::KEY_S}, | |
| 213 {"t", love::keyboard::Keyboard::KEY_T}, | |
| 214 {"u", love::keyboard::Keyboard::KEY_U}, | |
| 215 {"v", love::keyboard::Keyboard::KEY_V}, | |
| 216 {"w", love::keyboard::Keyboard::KEY_W}, | |
| 217 {"x", love::keyboard::Keyboard::KEY_X}, | |
| 218 {"y", love::keyboard::Keyboard::KEY_Y}, | |
| 219 {"z", love::keyboard::Keyboard::KEY_Z}, | |
| 220 {"delete", love::keyboard::Keyboard::KEY_DELETE}, | |
| 221 | |
| 222 {"kp0", love::keyboard::Keyboard::KEY_KP0}, | |
| 223 {"kp1", love::keyboard::Keyboard::KEY_KP1}, | |
| 224 {"kp2", love::keyboard::Keyboard::KEY_KP2}, | |
| 225 {"kp3", love::keyboard::Keyboard::KEY_KP3}, | |
| 226 {"kp4", love::keyboard::Keyboard::KEY_KP4}, | |
| 227 {"kp5", love::keyboard::Keyboard::KEY_KP5}, | |
| 228 {"kp6", love::keyboard::Keyboard::KEY_KP6}, | |
| 229 {"kp7", love::keyboard::Keyboard::KEY_KP7}, | |
| 230 {"kp8", love::keyboard::Keyboard::KEY_KP8}, | |
| 231 {"kp9", love::keyboard::Keyboard::KEY_KP9}, | |
| 232 {"kp.", love::keyboard::Keyboard::KEY_KP_PERIOD}, | |
| 233 {"kp/", love::keyboard::Keyboard::KEY_KP_DIVIDE}, | |
| 234 {"kp*", love::keyboard::Keyboard::KEY_KP_MULTIPLY}, | |
| 235 {"kp-", love::keyboard::Keyboard::KEY_KP_MINUS}, | |
| 236 {"kp+", love::keyboard::Keyboard::KEY_KP_PLUS}, | |
| 237 {"kpenter", love::keyboard::Keyboard::KEY_KP_ENTER}, | |
| 238 {"kp=", love::keyboard::Keyboard::KEY_KP_EQUALS}, | |
| 239 | |
| 240 {"up", love::keyboard::Keyboard::KEY_UP}, | |
| 241 {"down", love::keyboard::Keyboard::KEY_DOWN}, | |
| 242 {"right", love::keyboard::Keyboard::KEY_RIGHT}, | |
| 243 {"left", love::keyboard::Keyboard::KEY_LEFT}, | |
| 244 {"insert", love::keyboard::Keyboard::KEY_INSERT}, | |
| 245 {"home", love::keyboard::Keyboard::KEY_HOME}, | |
| 246 {"end", love::keyboard::Keyboard::KEY_END}, | |
| 247 {"pageup", love::keyboard::Keyboard::KEY_PAGEUP}, | |
| 248 {"pagedown", love::keyboard::Keyboard::KEY_PAGEDOWN}, | |
| 249 | |
| 250 {"f1", love::keyboard::Keyboard::KEY_F1}, | |
| 251 {"f2", love::keyboard::Keyboard::KEY_F2}, | |
| 252 {"f3", love::keyboard::Keyboard::KEY_F3}, | |
| 253 {"f4", love::keyboard::Keyboard::KEY_F4}, | |
| 254 {"f5", love::keyboard::Keyboard::KEY_F5}, | |
| 255 {"f6", love::keyboard::Keyboard::KEY_F6}, | |
| 256 {"f7", love::keyboard::Keyboard::KEY_F7}, | |
| 257 {"f8", love::keyboard::Keyboard::KEY_F8}, | |
| 258 {"f9", love::keyboard::Keyboard::KEY_F9}, | |
| 259 {"f10", love::keyboard::Keyboard::KEY_F10}, | |
| 260 {"f11", love::keyboard::Keyboard::KEY_F11}, | |
| 261 {"f12", love::keyboard::Keyboard::KEY_F12}, | |
| 262 {"f13", love::keyboard::Keyboard::KEY_F13}, | |
| 263 {"f14", love::keyboard::Keyboard::KEY_F14}, | |
| 264 {"f15", love::keyboard::Keyboard::KEY_F15}, | |
| 265 | |
| 266 {"numlock", love::keyboard::Keyboard::KEY_NUMLOCK}, | |
| 267 {"capslock", love::keyboard::Keyboard::KEY_CAPSLOCK}, | |
| 268 {"scrollock", love::keyboard::Keyboard::KEY_SCROLLOCK}, | |
| 269 {"rshift", love::keyboard::Keyboard::KEY_RSHIFT}, | |
| 270 {"lshift", love::keyboard::Keyboard::KEY_LSHIFT}, | |
| 271 {"rctrl", love::keyboard::Keyboard::KEY_RCTRL}, | |
| 272 {"lctrl", love::keyboard::Keyboard::KEY_LCTRL}, | |
| 273 {"ralt", love::keyboard::Keyboard::KEY_RALT}, | |
| 274 {"lalt", love::keyboard::Keyboard::KEY_LALT}, | |
| 275 {"rmeta", love::keyboard::Keyboard::KEY_RMETA}, | |
| 276 {"lmeta", love::keyboard::Keyboard::KEY_LMETA}, | |
| 277 {"lsuper", love::keyboard::Keyboard::KEY_LSUPER}, | |
| 278 {"rsuper", love::keyboard::Keyboard::KEY_RSUPER}, | |
| 279 {"mode", love::keyboard::Keyboard::KEY_MODE}, | |
| 280 {"compose", love::keyboard::Keyboard::KEY_COMPOSE}, | |
| 281 | |
| 282 {"help", love::keyboard::Keyboard::KEY_HELP}, | |
| 283 {"print", love::keyboard::Keyboard::KEY_PRINT}, | |
| 284 {"sysreq", love::keyboard::Keyboard::KEY_SYSREQ}, | |
| 285 {"break", love::keyboard::Keyboard::KEY_BREAK}, | |
| 286 {"menu", love::keyboard::Keyboard::KEY_MENU}, | |
| 287 {"power", love::keyboard::Keyboard::KEY_POWER}, | |
| 288 {"euro", love::keyboard::Keyboard::KEY_EURO}, | |
| 289 {"undo", love::keyboard::Keyboard::KEY_UNDO}, | |
| 290 | |
| 291 {"unknown", love::keyboard::Keyboard::KEY_UNKNOWN}, | |
| 292 }; | |
| 293 | |
| 294 StringMap<love::keyboard::Keyboard::Key, love::keyboard::Keyboard::KEY_MAX_ENUM> Event::keys(Event::keyEntries, sizeof(Event::keyEntries)); | |
| 295 | |
| 296 } // event | |
| 297 } // love |
