selove / src / modules / event / Event.h

The default branch has multiple heads

* Copyright (c) 2006-2012 LOVE Development Team
* This software is provided 'as-is', without any express or implied
* warranty.  In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
*    claim that you wrote the original software. If you use this software
*    in a product, an acknowledgment in the product documentation would be
*    appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
*    misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.


#include <common/Module.h>
#include <common/StringMap.h>
#include <common/Variant.h>
#include <keyboard/Keyboard.h>
#include <mouse/Mouse.h>
#include <thread/threads.h>

// STL
#include <queue>

namespace love
namespace event
	class Message : public Object
		std::string name;
		Variant *args[4];
		int nargs;

		Message(std::string name, Variant *a = NULL, Variant *b = NULL, Variant *c = NULL, Variant *d = NULL);

		int toLua(lua_State *L);
		static Message *fromLua(lua_State *L, int n);

	class Event : public Module
		virtual ~Event();

		void push(Message *msg);
		bool poll(Message *&msg);
		virtual void clear();

		virtual void pump() = 0;

		static bool getConstant(const char * in, love::mouse::Mouse::Button & out);
		static bool getConstant(love::mouse::Mouse::Button in, const char *& out);
		static bool getConstant(const char * in, love::keyboard::Keyboard::Key & out);
		static bool getConstant(love::keyboard::Keyboard::Key in, const char *& out);

		thread::Mutex mutex;
		std::queue<Message*> queue;
		static StringMap<love::mouse::Mouse::Button, love::mouse::Mouse::BUTTON_MAX_ENUM>::Entry buttonEntries[];
		static StringMap<love::mouse::Mouse::Button, love::mouse::Mouse::BUTTON_MAX_ENUM> buttons;
		static StringMap<love::keyboard::Keyboard::Key, love::keyboard::Keyboard::KEY_MAX_ENUM>::Entry keyEntries[];
		static StringMap<love::keyboard::Keyboard::Key, love::keyboard::Keyboard::KEY_MAX_ENUM> keys;

	}; // Event

} // event
} // love

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.