From f844e7e7129896c3b5675316f6ccffde0e9c5846 Mon Sep 17 00:00:00 2001 From: steffen Date: Thu, 1 Aug 2013 23:27:38 +0000 Subject: [PATCH] moving the map works different now.. --- ChangeLog | 3 ++ draw/draw_gui.c | 72 +++++++++++++++++++++++++++++++++-------------- gui/gui.c | 4 +-- main/Makefile | 8 +++--- main/gui_config.c | 11 ++++++++ sdlgl/sdl_gfx.c | 7 ++++- 6 files changed, 77 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index a57bb51..568e681 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ Version 0.0.2: name changed to spOSMroute, since on there had been another OSMroute already. ============================================================================= +(2013-08-01): +- moving around the map works better. + (2013-07-23): - added map_way_append_to_hash and map_area_append_to_hash to speedup map_hash_realloc, which took most almost 30% of all time. diff --git a/draw/draw_gui.c b/draw/draw_gui.c index 0548f14..27500f6 100644 --- a/draw/draw_gui.c +++ b/draw/draw_gui.c @@ -37,7 +37,8 @@ iPoint mousepos; int mousebtn; time_t mousebtnpresstime; -iPoint mousebtnpresspos = {0 , 0}; +iPoint mousebtnpresspos = {0.0, 0.0}; +struct map_pos mousebtnpressgpos = {0, 0}; int mousebtnpresslongtime = 0; unsigned long long int mouse_over_way_id = 0; unsigned short int mouse_over_way_sid = 0; @@ -51,8 +52,24 @@ char mouse_over_way_name[MAP_W_NAMELEN] = "\0"; * if btn == -1 mean no button pressed or selected */ void draw_mousemove (int x, int y, int btn) { + float lon, lat, lonold, latold; + mousepos.x = x; mousepos.y = y; + if (mousebtn) { + latold = -map_km2lat(((float)(mousebtnpresspos.y-gfx_screensize.y/2)) * view_scale); + lonold = map_km2lon(((float)(mousebtnpresspos.x-gfx_screensize.x/2)) * view_scale, view_lat + lat); + + lat = -map_km2lat(((float)(y-gfx_screensize.y/2)) * view_scale); + lon = map_km2lon(((float)(x-gfx_screensize.x/2)) * view_scale, view_lat + lat); + + lat = lat - latold; + lon = lon - lonold; + + view_lat = mousebtnpressgpos.lat - lat; + view_lon = mousebtnpressgpos.lon - lon; + draw_del_flag (DRAW_GPSFOLLOW); + } draw (); }; @@ -61,13 +78,16 @@ void draw_mousebtndown (int x, int y, int btn) { mousebtnpresstime = time (NULL); mousebtnpresspos.x = x; mousebtnpresspos.y = y; + mousebtnpressgpos.lon = view_lon; + mousebtnpressgpos.lat = view_lat; mousebtn = btn; mousebtnpresslongtime = 0; draw (); }; -void draw_mousebtnup (int x, int y, int btn) { +void draw_mousebtnup (int x, int y, int btn) +{ time_t t = time(NULL); float lon, lat; @@ -75,33 +95,41 @@ void draw_mousebtnup (int x, int y, int btn) { mousebtn = 0; /* check for debugging routeing problems */ - if (route && y > gfx_screensize.y-32 && y < gfx_screensize.y && x > 0 && x < 100 ) { + if (route && y > gfx_screensize.y-32 && y < gfx_screensize.y && x > 0 && x < 100 ) + { view_lon = route->closest_lon; view_lat = route->closest_lat; draw_del_flag (DRAW_GPSFOLLOW); } - else { + else + { lat = -map_km2lat(((float)(y-gfx_screensize.y/2)) * view_scale); lon = map_km2lon(((float)(x-gfx_screensize.x/2)) * view_scale, view_lat + lat); - if (t - mousebtnpresstime <= 1) { - /* short time button pressing */ - if (btn == 1) { - view_lat = view_lat + lat; - view_lon = view_lon + lon; - draw_del_flag (DRAW_GPSFOLLOW); + /* short time button pressing */ + if (t - mousebtnpresstime <= 1) + { + /* check for movement? */ + int dx = abs (mousebtnpresspos.x-x)*100/gfx_screensize.x; + int dy = abs (mousebtnpresspos.y-y)*100/gfx_screensize.y; + + if (dx < 10 && dy < 10) + { + if (select_enabled) + { + select_enabled = 0; + } + else + { + select_enabled = 1; + select_pos.lat = view_lat + lat; + select_pos.lon = view_lon + lon; + } } } - else { + else + { /* long time button pressed */ - if (select_enabled) { - select_enabled = 0; - } - else { - select_enabled = 1; - select_pos.lat = view_lat + lat; - select_pos.lon = view_lon + lon; - } } } @@ -109,10 +137,12 @@ void draw_mousebtnup (int x, int y, int btn) { }; -void draw_mouseloop () { +void draw_mouseloop () +{ time_t t = time(NULL); - if (mousebtn && t - mousebtnpresstime > 1) { + if (mousebtn && t - mousebtnpresstime > 1) + { mousebtnpresslongtime = 1; draw (); } diff --git a/gui/gui.c b/gui/gui.c index 6f38c08..bd8a6de 100644 --- a/gui/gui.c +++ b/gui/gui.c @@ -1,4 +1,4 @@ -/* $Id: gui.c,v 1.24 2013/06/18 22:24:20 steffen Exp $ */ +/* $Id: gui.c,v 1.25 2013/08/01 23:27:38 steffen Exp $ */ /*************************************************************************** * gui.c * @@ -184,7 +184,7 @@ int gui_event (GUIEvent event) { draw_mousebtndown (event.scr_mpos.x, event.scr_mpos.y, event.mousebtn); break; case (EGUI_MOUSEMOVE): - draw_mousemove (event.scr_mpos.x, event.scr_mpos.y, 0); + draw_mousemove (event.scr_mpos.x, event.scr_mpos.y, event.mousebtn); break; default: break; diff --git a/main/Makefile b/main/Makefile index 402e358..f33b73b 100644 --- a/main/Makefile +++ b/main/Makefile @@ -3,7 +3,7 @@ include ../Makefile.rules OBJBASE = favorites.o main.o ifeq "$(GTKVERSION)" "1" -GTK = linux_gps.o gps.o routing.o gui_selectdir.o gui_config.o gui_buttons.o gui_favorites.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o +GTK = linux_gps.o gps.o routing.o gui_selectdir.o gui_selectfile.o gui_config.o gui_buttons.o gui_favorites.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o endif ifeq "$(NCURSESVERSION)" "1" @@ -11,15 +11,15 @@ CURSES = ncurses_main.o endif ifeq "$(WINVERSION)" "1" -WIN = gps.o routing.o gui_buttons.o gui_config.o gui_selectdir.o gui_favorites.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o +WIN = gps.o routing.o gui_buttons.o gui_config.o gui_selectdir.o gui_selectfile.o gui_favorites.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o endif ifeq "$(WINCEVERSION)" "1" -WIN = gps.o routing.o gui_buttons.o gui_config.o gui_favorites.o gui_selectdir.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o +WIN = gps.o routing.o gui_buttons.o gui_config.o gui_favorites.o gui_selectdir.o gui_selectfile.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o endif ifeq "$(SDLGLVERSION)" "1" -SDLGL = linux_gps.o gps.o routing.o gui_config.o gui_buttons.o gui_favorites.o gui_selectdir.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o +SDLGL = linux_gps.o gps.o routing.o gui_config.o gui_buttons.o gui_favorites.o gui_selectdir.o gui_selectfile.o gui_mainmenu.o gui_search.o guiw_gpsfile.o wnd_routing.o endif diff --git a/main/gui_config.c b/main/gui_config.c index f902e9d..60e5123 100644 --- a/main/gui_config.c +++ b/main/gui_config.c @@ -70,6 +70,7 @@ char *gpscfg_dev_ptr[8] = { NULL }; + void gui_config_show () { if (wcfg.screen == NULL) gui_window_new (&wcfg, 220, 280, _("Config")); wcfg.screen_changed = 1; @@ -143,6 +144,7 @@ void gui_config_checkbox_changed () { else DELFLAG(gpsflags, GPSF_LOG); }; + void gui_config_gpslist (int nr) { d_printf ("select nr:%d", nr); if (nr >= 0 && nr < 8) @@ -161,6 +163,15 @@ void gui_config_seldir () { void gui_config_gpsfile () { + char *new_file = NULL; + char text[LEN_FILENAME]; + d_printf ("select gps file..."); + new_file = gui_sfile_show (""); + if (new_file != NULL) { + snprintf (text, LEN_FILENAME, "file:%s", new_file); + gui_entry_settext (gps_device, text); + d_printf ("gpsdevice:%s", GUI_ENTRY_T(gps_device)->text); + } }; diff --git a/sdlgl/sdl_gfx.c b/sdlgl/sdl_gfx.c index 49a4df6..c6c129a 100644 --- a/sdlgl/sdl_gfx.c +++ b/sdlgl/sdl_gfx.c @@ -139,8 +139,13 @@ void gfx_draw_line (struct image *dimg, int x1, int y1, int x2, int y2, struct l /* polygon mit runden ecken....? bei width > 1 */ gfx_fbo_switch (dimg); if (style.width < 1.0) style.width = 1.0; - glLineWidth (style.width); glColor4f(style.c.c.r, style.c.c.g, style.c.c.b, 1.0); + glPointSize(style.width*0.5); + glBegin (GL_POINTS); + glVertex2i (x1, y1); + glVertex2i (x2, y2); + glEnd (); + glLineWidth (style.width); glBegin (GL_LINES); glVertex2i (x1, y1); glVertex2i (x2, y2);