mouse click and drag added

Former-commit-id: aee18213d280783da1b761e5b7ec7c01a53ac0d1
Former-commit-id: f15d983599f1f7e3b82b5642395f1914ae75d2f2
This commit is contained in:
nathan 2020-03-05 15:02:40 -08:00
parent 3398748007
commit a4718f8d93
4 changed files with 62 additions and 25 deletions

39
draw.c
View file

@ -918,6 +918,7 @@ void drawPlanes() {
appData.mapMoved = 1; appData.mapMoved = 1;
} }
// this logic should be in input, register a callback for click?
float elapsed = mstime() - appData.touchDownTime; float elapsed = mstime() - appData.touchDownTime;
int boxSize; int boxSize;
@ -979,6 +980,41 @@ void drawPlanes() {
} }
} }
void moveCenterAbsolute(float x, float y);
void moveCenterRelative(float dx, float dy) {
//
// need to make lonlat to screen conversion class - this is just the inverse of the stuff in draw.c, without offsets
//
double scale_factor = (appData.screen_width > appData.screen_height) ? appData.screen_width : appData.screen_height;
dx = -1.0 * (0.75*(double)appData.screen_width / (double)appData.screen_height) * dx * appData.maxDist / (0.95 * scale_factor * 0.5);
dy = 1.0 * dy * appData.maxDist / (0.95 * scale_factor * 0.5);
double outLat = dy * (1.0/6371.0) * (180.0f / M_PI);
double outLon = dx * (1.0/6371.0) * (180.0f / M_PI) / cos(((appData.centerLat)/2.0f) * M_PI / 180.0f);
//double outLon, outLat;
//latLonFromScreenCoords(&outLat, &outLon, event.tfinger.dx, event.tfinger.dy);
appData.centerLon += outLon;
appData.centerLat += outLat;
appData.mapMoved = 1;
}
void drawMouse() {
if((mstime() - appData.mouseMovedTime) > 1000) {
return;
}
int alpha = (int)(255.0f - 255.0f * (float)(mstime() - appData.mouseMovedTime) / 1000.0f);
lineRGBA(appData.renderer, appData.mousex - 10 * appData.screen_uiscale, appData.mousey, appData.mousex + 10 * appData.screen_uiscale, appData.mousey, white.r, white.g, white.b, alpha);
lineRGBA(appData.renderer, appData.mousex, appData.mousey - 10 * appData.screen_uiscale, appData.mousex, appData.mousey + 10 * appData.screen_uiscale, white.r, white.g, white.b, alpha);
}
// //
// //
// //
@ -1018,7 +1054,8 @@ void draw() {
drawPlanes(); drawPlanes();
drawStatus(); drawStatus();
drawMouse();
char fps[13] = " "; char fps[13] = " ";
snprintf(fps,13," %ffps", 1000.0 / (mstime() - appData.lastFrameTime)); snprintf(fps,13," %ffps", 1000.0 / (mstime() - appData.lastFrameTime));
drawStringBG(fps, 0,0, appData.mapFont, grey, black); drawStringBG(fps, 0,0, appData.mapFont, grey, black);

39
input.c
View file

@ -48,30 +48,9 @@ void getInput()
break; break;
case SDL_FINGERMOTION:; case SDL_FINGERMOTION:;
moveCenterRelative(appData.screen_width * event.tfinger.dx, appData.screen_height * event.tfinger.dy);
//
// need to make lonlat to screen conversion class - this is just the inverse of the stuff in draw.c, without offsets
//
double scale_factor = (appData.screen_width > appData.screen_height) ? appData.screen_width : appData.screen_height;
double dx = -1.0 * (0.75*(double)appData.screen_width / (double)appData.screen_height) * appData.screen_width * event.tfinger.dx * appData.maxDist / (0.95 * scale_factor * 0.5);
double dy = 1.0 * appData.screen_height * event.tfinger.dy * appData.maxDist / (0.95 * scale_factor * 0.5);
double outLat = dy * (1.0/6371.0) * (180.0f / M_PI);
double outLon = dx * (1.0/6371.0) * (180.0f / M_PI) / cos(((appData.centerLat)/2.0f) * M_PI / 180.0f);
//double outLon, outLat;
//latLonFromScreenCoords(&outLat, &outLon, event.tfinger.dx, event.tfinger.dy);
appData.centerLon += outLon;
appData.centerLat += outLat;
appData.mapMoved = 1;
break; break;
case SDL_FINGERDOWN: case SDL_FINGERDOWN:
appData.touchDownTime = mstime(); appData.touchDownTime = mstime();
break; break;
@ -87,6 +66,22 @@ void getInput()
appData.touchy = 0; appData.touchy = 0;
} }
break; break;
case SDL_MOUSEBUTTONUP:;
appData.touchx = event.motion.x;
appData.touchy = event.motion.y;
selectedPlane = NULL;
break;
case SDL_MOUSEMOTION:;
appData.mouseMovedTime = mstime();
appData.mousex = event.motion.x;
appData.mousey = event.motion.y;
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT)) {
moveCenterRelative(event.motion.xrel, event.motion.yrel);
}
break;
} }
} }
} }

View file

@ -41,6 +41,10 @@ typedef struct AppData
int touchx; int touchx;
int touchy; int touchy;
uint64_t mouseMovedTime;
int mousex;
int mousey;
int mapMoved; int mapMoved;
uint64_t lastFrameTime; uint64_t lastFrameTime;
@ -123,7 +127,8 @@ void drawList(int top);
//draw.c //draw.c
void draw(); void draw();
void latLonFromScreenCoords(float *lat, float *lon, int x, int y); void latLonFromScreenCoords(float *lat, float *lon, int x, int y);
void moveCenterAbsolute(float x, float y);
void moveCenterRelative(float dx, float dy);
//status.c //status.c
void updateStatus(); void updateStatus();

View file

@ -1 +1 @@
07df3964a61c9028e5b598c82409b849e2edc971 0bb991221c62367955b3caea2fd131cb374a840c