create proper handler interface for xController : xEventHandler
This commit is contained in:
parent
5266b5d115
commit
414fbf6404
|
@ -12,29 +12,24 @@ xController::~xController(){
|
|||
void xController::handleEvent(SDL_Event* event){
|
||||
_mutex.lock();
|
||||
|
||||
map<SDL_EventType, EventHandler>::iterator found = _handlers.find( (SDL_EventType) event->type );
|
||||
|
||||
// ignore no handler found
|
||||
if( found == _handlers.end() ){
|
||||
_mutex.unlock();
|
||||
return;
|
||||
for( set<xEventHandler*>::iterator it = _handlers.begin() ; it != _handlers.end() ; it++ ){
|
||||
xEventHandler* handler = (*it);
|
||||
handler->handle(event);
|
||||
}
|
||||
|
||||
(*found->second)(event);
|
||||
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
// bind a new handler
|
||||
void xController::attachEvent(SDL_EventType t, EventHandlerArg){
|
||||
void xController::attachEvent(xEventHandler* handler){
|
||||
_mutex.lock();
|
||||
_handlers[ t ] = handler;
|
||||
_handlers.insert(handler);
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
// removes an existing handler
|
||||
void xController::detachEvent(SDL_EventType t){
|
||||
void xController::detachEvent(xEventHandler* handler){
|
||||
_mutex.lock();
|
||||
_handlers.erase(t);
|
||||
_handlers.erase(handler);
|
||||
_mutex.unlock();
|
||||
}
|
|
@ -3,11 +3,10 @@
|
|||
|
||||
#include "SDL.h"
|
||||
#include <mutex>
|
||||
#include <map>
|
||||
using namespace std;
|
||||
#include <set>
|
||||
#include "xEventHandler.h"
|
||||
|
||||
#define EventHandlerArg void(* handler)(SDL_Event*)
|
||||
#define EventHandler void(*)(SDL_Event*)
|
||||
using namespace std;
|
||||
|
||||
class xController{
|
||||
|
||||
|
@ -19,12 +18,12 @@
|
|||
void handleEvent(SDL_Event* event);
|
||||
|
||||
// manage handlers
|
||||
void attachEvent(SDL_EventType t, EventHandlerArg);
|
||||
void detachEvent(SDL_EventType t);
|
||||
void attachEvent(xEventHandler* handler);
|
||||
void detachEvent(xEventHandler* handler);
|
||||
|
||||
private:
|
||||
// event handlers
|
||||
map<SDL_EventType, EventHandler> _handlers;
|
||||
set<xEventHandler*> _handlers;
|
||||
|
||||
// thread safety
|
||||
mutex _mutex;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#include "xEventHandler.h"
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef DEF_XEVENT_HANDLER_H
|
||||
#define DEF_XEVENT_HANDLER_H
|
||||
|
||||
#include "SDL.h"
|
||||
using namespace std;
|
||||
|
||||
class xEventHandler {
|
||||
|
||||
public:
|
||||
|
||||
// handles the event
|
||||
virtual void handle(SDL_Event* event) const = 0;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue