2019-09-09 06:23:38 +02:00
|
|
|
#include "structs.h"
|
2017-09-16 04:25:26 +02:00
|
|
|
#include "view1090.h"
|
2017-09-14 05:21:36 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
#include "Input.h"
|
|
|
|
|
2020-02-17 06:54:46 +01:00
|
|
|
static uint64_t mstime(void) {
|
|
|
|
struct timeval tv;
|
|
|
|
uint64_t mst;
|
|
|
|
|
|
|
|
gettimeofday(&tv, NULL);
|
|
|
|
mst = ((uint64_t)tv.tv_sec)*1000;
|
|
|
|
mst += tv.tv_usec/1000;
|
|
|
|
return mst;
|
|
|
|
}
|
|
|
|
|
2020-03-12 20:46:26 +01:00
|
|
|
template <typename T> int sgn(T val) {
|
|
|
|
return (T(0) < val) - (val < T(0));
|
|
|
|
}
|
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
void Input::getInput()
|
2017-09-14 05:21:36 +02:00
|
|
|
{
|
|
|
|
SDL_Event event;
|
2019-09-09 06:23:38 +02:00
|
|
|
|
2017-09-14 05:21:36 +02:00
|
|
|
while (SDL_PollEvent(&event))
|
|
|
|
{
|
|
|
|
switch (event.type)
|
|
|
|
{
|
|
|
|
case SDL_QUIT:
|
|
|
|
exit(0);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case SDL_KEYDOWN:
|
|
|
|
switch (event.key.keysym.sym)
|
|
|
|
{
|
|
|
|
case SDLK_ESCAPE:
|
|
|
|
exit(0);
|
|
|
|
break;
|
2017-09-16 04:25:26 +02:00
|
|
|
|
2017-09-14 05:21:36 +02:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2019-09-08 01:11:20 +02:00
|
|
|
|
2017-09-14 05:21:36 +02:00
|
|
|
break;
|
2019-09-08 01:11:20 +02:00
|
|
|
|
|
|
|
case SDL_MOUSEWHEEL:
|
2020-03-12 20:46:26 +01:00
|
|
|
appData.maxDist *= 1.0 + 0.5 * sgn(event.wheel.y);
|
|
|
|
if(appData.maxDist < 0.001f) {
|
|
|
|
appData.maxDist = 0.001f;
|
|
|
|
}
|
|
|
|
|
2020-03-07 00:44:45 +01:00
|
|
|
appData.mapTargetMaxDist = 0;
|
2020-02-18 07:19:45 +01:00
|
|
|
appData.mapMoved = 1;
|
2019-09-08 01:11:20 +02:00
|
|
|
break;
|
2019-09-08 08:09:14 +02:00
|
|
|
|
|
|
|
case SDL_MULTIGESTURE:
|
2019-09-09 06:23:38 +02:00
|
|
|
appData.maxDist /=1.0 + 4.0*event.mgesture.dDist;
|
2020-03-07 00:44:45 +01:00
|
|
|
appData.mapTargetMaxDist = 0;
|
2020-02-18 07:19:45 +01:00
|
|
|
appData.mapMoved = 1;
|
2019-09-08 08:09:14 +02:00
|
|
|
break;
|
|
|
|
|
2020-03-12 06:07:57 +01:00
|
|
|
case SDL_FINGERMOTION:;
|
|
|
|
appData.isDragging = 1;
|
|
|
|
view->moveCenterRelative( appData.screen_width * event.tfinger.dx, appData.screen_height * event.tfinger.dy);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case SDL_FINGERDOWN:
|
2020-03-07 00:44:45 +01:00
|
|
|
if(mstime() - appData.touchDownTime > 500) {
|
|
|
|
appData.tapCount = 0;
|
|
|
|
}
|
2020-02-17 06:54:46 +01:00
|
|
|
appData.touchDownTime = mstime();
|
|
|
|
break;
|
|
|
|
|
2020-03-12 06:07:57 +01:00
|
|
|
case SDL_FINGERUP:
|
|
|
|
if(mstime() - appData.touchDownTime < 120) {
|
|
|
|
appData.touchx = appData.screen_width * event.tfinger.x;
|
|
|
|
appData.touchy = appData.screen_height * event.tfinger.y;
|
|
|
|
appData.tapCount++;
|
|
|
|
appData.isDragging = 0;
|
|
|
|
|
|
|
|
view->registerClick();
|
|
|
|
} else {
|
|
|
|
appData.touchx = 0;
|
|
|
|
appData.touchy = 0;
|
|
|
|
appData.tapCount = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case SDL_MOUSEBUTTONDOWN:
|
|
|
|
if(event.button.which != SDL_TOUCH_MOUSEID) {
|
|
|
|
if(mstime() - appData.touchDownTime > 500) {
|
|
|
|
appData.tapCount = 0;
|
|
|
|
}
|
|
|
|
appData.touchDownTime = mstime();
|
|
|
|
}
|
|
|
|
break;
|
2020-03-07 00:44:45 +01:00
|
|
|
|
2020-03-12 06:07:57 +01:00
|
|
|
case SDL_MOUSEBUTTONUP:;
|
|
|
|
if(event.button.which != SDL_TOUCH_MOUSEID) {
|
|
|
|
appData.touchx = event.motion.x;
|
|
|
|
appData.touchy = event.motion.y;
|
|
|
|
appData.tapCount = event.button.clicks;
|
|
|
|
appData.isDragging = 0;
|
2020-03-07 05:51:47 +01:00
|
|
|
|
2020-03-12 06:07:57 +01:00
|
|
|
view->registerClick();
|
|
|
|
}
|
2020-03-06 00:02:40 +01:00
|
|
|
break;
|
2020-03-07 00:44:45 +01:00
|
|
|
|
2020-03-06 00:02:40 +01:00
|
|
|
case SDL_MOUSEMOTION:;
|
2020-03-12 06:07:57 +01:00
|
|
|
|
|
|
|
if(event.motion.which != SDL_TOUCH_MOUSEID) {
|
|
|
|
appData.mouseMovedTime = mstime();
|
|
|
|
appData.mousex = event.motion.x;
|
|
|
|
appData.mousey = event.motion.y;
|
|
|
|
|
|
|
|
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT)) {
|
|
|
|
appData.isDragging = 1;
|
|
|
|
view->moveCenterRelative(event.motion.xrel, event.motion.yrel);
|
|
|
|
}
|
2020-03-06 00:02:40 +01:00
|
|
|
}
|
|
|
|
break;
|
2017-09-14 05:21:36 +02:00
|
|
|
}
|
|
|
|
}
|
2017-09-05 11:41:46 +02:00
|
|
|
}
|
2020-03-08 02:22:20 +01:00
|
|
|
|
|
|
|
Input::Input(View *view) {
|
|
|
|
this->view = view;
|
|
|
|
}
|