Refactored SDL events handling

This commit is contained in:
Dimitris Panokostas 2020-07-01 01:08:34 +02:00
parent d42608b546
commit 9d08c74a7f

View file

@ -1575,15 +1575,8 @@ void disablecapture()
focus = 0;
}
int handle_msgpump()
void process_event(SDL_Event event)
{
auto gotEvent = 0;
SDL_Event event;
int mouseScale, x, y;
while (SDL_PollEvent(&event))
{
gotEvent = 1;
const auto* keystate = SDL_GetKeyboardState(nullptr);
if (event.type == SDL_WINDOWEVENT)
@ -1594,7 +1587,12 @@ int handle_msgpump()
setminimized();
amiberry_inactive(minimized);
break;
case SDL_WINDOWEVENT_RESTORED:
amiberry_active(minimized);
unsetminimized();
break;
case SDL_WINDOWEVENT_LEAVE:
mouseinside = false;
set_mouse_grab(false);
break;
case SDL_WINDOWEVENT_CLOSE:
@ -1779,8 +1777,13 @@ int handle_msgpump()
break;
case SDL_MOUSEMOTION:
if (!mouseinside) {
mouseinside = true;
}
if (recapture && isfullscreen() <= 0) {
enablecapture();
break;
}
if (currprefs.input_tablet >= TABLET_MOUSEHACK)
@ -1788,8 +1791,10 @@ int handle_msgpump()
/* absolute */
setmousestate(0, 0, event.motion.x, 1);
setmousestate(0, 1, event.motion.y, 1);
break;
}
else if (currprefs.jports[0].id == JSEM_MICE || currprefs.jports[1].id == JSEM_MICE)
if (currprefs.jports[0].id == JSEM_MICE || currprefs.jports[1].id == JSEM_MICE)
{
/* relative */
#if defined (ANDROID)
@ -1804,6 +1809,7 @@ int handle_msgpump()
#endif //ANDROID
setmousestate(0, 0, event.motion.xrel, 0);
setmousestate(0, 1, event.motion.yrel, 0);
break;
}
break;
@ -1829,6 +1835,18 @@ int handle_msgpump()
default:
break;
}
}
int handle_msgpump()
{
auto gotEvent = 0;
SDL_Event event;
while (SDL_PollEvent(&event))
{
gotEvent = 1;
process_event(event);
}
return gotEvent;
}
@ -1849,50 +1867,9 @@ bool handle_events()
return true;
}
SDL_Event event;
SDL_WaitEvent(&event);
if (event.type == SDL_WINDOWEVENT)
while (SDL_PollEvent(&event))
{
switch (event.window.event)
{
case SDL_WINDOWEVENT_RESTORED:
amiberry_active(minimized);
unsetminimized();
break;
case SDL_WINDOWEVENT_LEAVE:
set_mouse_grab(false);
break;
case SDL_WINDOWEVENT_CLOSE:
uae_quit();
break;
default:
break;
}
}
switch (event.type)
{
case SDL_QUIT:
uae_quit();
break;
case SDL_KEYDOWN:
{
if (event.key.repeat == 0)
{
if (enter_gui_key && event.key.keysym.sym == enter_gui_key)
{
inputdevice_add_inputcode(AKS_ENTERGUI, 1, nullptr);
break;
}
if (quit_key && event.key.keysym.sym == quit_key)
{
inputdevice_add_inputcode(AKS_QUIT, 1, nullptr);
break;
}
}
}
default:
break;
process_event(event);
}
inputdevicefunc_keyboard.read();
@ -1905,6 +1882,7 @@ bool handle_events()
//updatedisplayarea();
pause_emulation = was_paused;
resumepaused(was_paused);
sound_closed = 0;
was_paused = 0;
}