projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added missing initialization of element properties for MM engine
[rocksndiamonds.git]
/
src
/
events.c
diff --git
a/src/events.c
b/src/events.c
index d56edaf9c38596a3c9933c15bbd26de96965c703..55c9b59dfd6675cf1cb350b13e233dd65f526ed1 100644
(file)
--- a/
src/events.c
+++ b/
src/events.c
@@
-128,6
+128,19
@@
static boolean SkipPressedMouseMotionEvent(const Event *event)
return FALSE;
}
return FALSE;
}
+static boolean WaitValidEvent(Event *event)
+{
+ WaitEvent(event);
+
+ if (!FilterEvents(event))
+ return FALSE;
+
+ if (SkipPressedMouseMotionEvent(event))
+ return FALSE;
+
+ return TRUE;
+}
+
/* this is especially needed for event modifications for the Android target:
if mouse coordinates should be modified in the event filter function,
using a properly installed SDL event filter does not work, because in
/* this is especially needed for event modifications for the Android target:
if mouse coordinates should be modified in the event filter function,
using a properly installed SDL event filter does not work, because in
@@
-139,20
+152,8
@@
static boolean SkipPressedMouseMotionEvent(const Event *event)
boolean NextValidEvent(Event *event)
{
while (PendingEvent())
boolean NextValidEvent(Event *event)
{
while (PendingEvent())
- {
- boolean handle_this_event = FALSE;
-
- NextEvent(event);
-
- if (FilterEvents(event))
- handle_this_event = TRUE;
-
- if (SkipPressedMouseMotionEvent(event))
- handle_this_event = FALSE;
-
- if (handle_this_event)
+ if (WaitValidEvent(event))
return TRUE;
return TRUE;
- }
return FALSE;
}
return FALSE;
}
@@
-297,7
+298,8
@@
void HandleMouseCursor()
cursor_inside_playfield &&
DelayReached(&special_cursor_delay, special_cursor_delay_value))
{
cursor_inside_playfield &&
DelayReached(&special_cursor_delay, special_cursor_delay_value))
{
- SetMouseCursor(CURSOR_PLAYFIELD);
+ if (level.game_engine_type != GAME_ENGINE_TYPE_MM)
+ SetMouseCursor(CURSOR_PLAYFIELD);
}
}
else if (gfx.cursor_mode != CURSOR_DEFAULT)
}
}
else if (gfx.cursor_mode != CURSOR_DEFAULT)
@@
-340,12
+342,10
@@
void EventLoop(void)
void ClearEventQueue()
{
void ClearEventQueue()
{
- while (PendingEvent())
- {
- Event event;
-
- NextEvent(&event);
+ Event event;
+ while (NextValidEvent(&event))
+ {
switch (event.type)
{
case EVENT_BUTTONRELEASE:
switch (event.type)
{
case EVENT_BUTTONRELEASE:
@@
-392,7
+392,8
@@
void SleepWhileUnmapped()
{
Event event;
{
Event event;
- NextEvent(&event);
+ if (!WaitValidEvent(&event))
+ continue;
switch (event.type)
{
switch (event.type)
{
@@
-1275,7
+1276,7
@@
void HandleButton(int mx, int my, int button, int button_nr)
if (HandleGlobalAnimClicks(mx, my, button))
{
/* do not handle this button event anymore */
if (HandleGlobalAnimClicks(mx, my, button))
{
/* do not handle this button event anymore */
-
mx = my = -32; /* force mouse event to be outside screen tiles
*/
+
return; /* force mouse event not to be handled at all
*/
}
if (button_hold && game_status == GAME_MODE_PLAYING && tape.pausing)
}
if (button_hold && game_status == GAME_MODE_PLAYING && tape.pausing)
@@
-1323,14
+1324,17
@@
void HandleButton(int mx, int my, int button, int button_nr)
HandleSetupScreen(mx, my, 0, 0, button);
break;
HandleSetupScreen(mx, my, 0, 0, button);
break;
-#if defined(TARGET_SDL2)
case GAME_MODE_PLAYING:
case GAME_MODE_PLAYING:
- HandleFollowFinger(mx, my, button);
+ if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
+ ClickElement(mx, my, button);
+#if defined(TARGET_SDL2)
+ else
+ HandleFollowFinger(mx, my, button);
#endif
#ifdef DEBUG
#endif
#ifdef DEBUG
- if (button == MB_PRESSED && !motion_status &&
IN_GFX_FIELD_PLAY(mx, my)
&&
- GetKeyModState() & KMOD_Control)
+ if (button == MB_PRESSED && !motion_status &&
!button_hold
&&
+
IN_GFX_FIELD_PLAY(mx, my) &&
GetKeyModState() & KMOD_Control)
DumpTileFromScreen(mx, my);
#endif
DumpTileFromScreen(mx, my);
#endif
@@
-1892,7
+1896,9
@@
void HandleKey(Key key, int key_status)
void HandleNoEvent()
{
// if (button_status && game_status != GAME_MODE_PLAYING)
void HandleNoEvent()
{
// if (button_status && game_status != GAME_MODE_PLAYING)
- if (button_status && (game_status != GAME_MODE_PLAYING || tape.pausing))
+ if (button_status && (game_status != GAME_MODE_PLAYING ||
+ tape.pausing ||
+ level.game_engine_type == GAME_ENGINE_TYPE_MM))
{
HandleButton(0, 0, button_status, -button_status);
}
{
HandleButton(0, 0, button_status, -button_status);
}