84 |
/** message dispatcher */ |
/** message dispatcher */ |
85 |
|
|
86 |
bool PG_MessageObject::ProcessEvent(const SDL_Event* event) { |
bool PG_MessageObject::ProcessEvent(const SDL_Event* event) { |
|
MSG_MESSAGE* msg = NULL; |
|
87 |
SDL_Event e; |
SDL_Event e; |
88 |
|
|
89 |
// check if we are able to process messages |
// check if we are able to process messages |
144 |
rc = eventResize(&event->resize); |
rc = eventResize(&event->resize); |
145 |
break; |
break; |
146 |
|
|
|
case SDL_USEREVENT: |
|
|
msg = (MSG_MESSAGE*)(event->user.data1); |
|
|
|
|
|
if(msg->_to != NULL) { |
|
|
return msg->_to->eventMessage(msg); |
|
|
} |
|
|
|
|
|
rc = eventMessage(msg); |
|
|
break; |
|
|
|
|
147 |
default: |
default: |
148 |
rc = false; |
rc = false; |
149 |
break; |
break; |
207 |
return true; // PG_MessageObject accepts all events |
return true; // PG_MessageObject accepts all events |
208 |
} |
} |
209 |
|
|
|
|
|
|
bool PG_MessageObject::eventMessage(MSG_MESSAGE* msg) { |
|
|
bool rc = false; |
|
|
|
|
|
if (!msg) { |
|
|
return false; |
|
|
} |
|
|
|
|
|
if((msg->_to != this) && (msg->_to != NULL)) { |
|
|
return false; |
|
|
} |
|
|
|
|
|
// dispatch user message |
|
|
switch(msg->type) { |
|
|
case MSG_QUIT: |
|
|
rc = eventQuit(msg->widget_id, (PG_MessageObject*)(msg->_from), msg->data); |
|
|
break; |
|
|
|
|
|
case MSG_MODALQUIT: |
|
|
rc = eventQuitModal(msg->widget_id, (PG_MessageObject*)(msg->_from), msg->data); |
|
|
|
|
|
default: |
|
|
rc = false; |
|
|
break; |
|
|
} |
|
|
|
|
|
return rc; |
|
|
} |
|
|
|
|
210 |
/** capture handling (an object can capture all messages) */ |
/** capture handling (an object can capture all messages) */ |
211 |
|
|
212 |
PG_MessageObject* PG_MessageObject::SetCapture() { |
PG_MessageObject* PG_MessageObject::SetCapture() { |
324 |
list++; |
list++; |
325 |
} |
} |
326 |
|
|
|
// delete user message |
|
|
if(event->type == SDL_USEREVENT) { |
|
|
delete (MSG_MESSAGE*)(event->user.data1); |
|
|
} |
|
|
|
|
327 |
return processed; |
return processed; |
328 |
} |
} |
329 |
|
|
367 |
return true; |
return true; |
368 |
} |
} |
369 |
|
|
|
/** */ |
|
|
/*bool PG_MessageObject::SendMessage(PG_MessageObject* target, PG_MSG_TYPE type, MSG_ID id, MSG_DATA data) { |
|
|
bool rc = false; |
|
|
|
|
|
// check if there is a callback function |
|
|
PG_EVENTHANDLERDATA* cbdata = PG_FindEventHandler(type, this); |
|
|
|
|
|
if(cbdata != NULL) { |
|
|
|
|
|
// callback function |
|
|
if(cbdata->cbfunc != NULL) { |
|
|
rc = cbdata->cbfunc(id, (PG_Widget*)this, data, cbdata->data); |
|
|
} |
|
|
|
|
|
// object to call |
|
|
if(cbdata->calledobj != NULL) { |
|
|
rc = ((cbdata->calledobj)->*(cbdata->obj_cbfunc))(id, (PG_Widget*)this, data, cbdata->data); |
|
|
} |
|
|
} |
|
|
|
|
|
if(!rc) { |
|
|
MSG_MESSAGE* msg = new MSG_MESSAGE; |
|
|
msg->_to = target; |
|
|
msg->_from = this; |
|
|
msg->type = type; |
|
|
msg->widget_id = id; |
|
|
msg->data = data; |
|
|
|
|
|
SDL_Event event; |
|
|
event.type = SDL_USEREVENT; // USEREVENT |
|
|
event.user.code = 0; // RESERVED |
|
|
event.user.data1 = (void*)msg; // OUR MESSAGE OBJECT |
|
|
event.user.data2 = NULL; // RESERVED; |
|
|
|
|
|
rc = (SDL_PushEvent(&event) == 0); |
|
|
} |
|
|
|
|
|
return rc; |
|
|
}*/ |
|
|
|
|
|
/* |
|
|
void PG_MessageObject::SetEventCallback(PG_MSG_TYPE type, MSG_CALLBACK cbfunc, void *clientdata) { |
|
|
PG_RegisterEventHandler(type, this, cbfunc, clientdata); |
|
|
} |
|
|
|
|
|
void PG_MessageObject::SetEventObject(PG_MSG_TYPE type, PG_EventObject* calledobj, MSG_CALLBACK_OBJ cbfunc, void *clientdata) { |
|
|
PG_RegisterEventHandlerObj(type, this, calledobj, cbfunc, clientdata); |
|
|
}*/ |
|
|
|
|
370 |
void PG_MessageObject::TranslateNumpadKeys(SDL_KeyboardEvent *key) { |
void PG_MessageObject::TranslateNumpadKeys(SDL_KeyboardEvent *key) { |
371 |
// note: works on WIN, test this on other platforms |
// note: works on WIN, test this on other platforms |
372 |
|
|