diff --git a/android/jni/android_gfx.c b/android/jni/android_gfx.c index 66af69a..a45fccb 100644 --- a/android/jni/android_gfx.c +++ b/android/jni/android_gfx.c @@ -566,3 +566,8 @@ struct image* gfx_img_load (char *name) { return img; }; + + +/****************************************************************** + * convert polygon into triangles.. + */ diff --git a/android/jni/main.c b/android/jni/main.c index b67bef5..a22ba6c 100644 --- a/android/jni/main.c +++ b/android/jni/main.c @@ -23,6 +23,7 @@ #include #include +#include "android_port.h" #include "osmroute.h" #include "gui.h" #include "system.h" @@ -40,76 +41,6 @@ void gevent_clear (); struct engine engine; -/************************************************************************* - * - * only needed for testing - * - *************************************************************************/ -struct image *img, *img1; - -void test_img () { - struct line_style style; - d_printf ("*** test_img () ***"); - - style.width = 1; - style.c = color[COLOR_green][3]; - - img = gfx_img_alloc (400, 300); - gfx_clear (img, &color[COLOR_blue][2]); - - img1 = gfx_img_load ("sample_01.png"); - gfx_draw_img (img, 10, 10, 150, 150, img1, 100, 250); - - gfx_draw_text (img, 20, 10, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]); - gfx_draw_text (img, 20, 30, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]); - gfx_draw_text (NULL, 20, 10, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]); - gfx_draw_text (NULL, 20, 30, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]); - gfx_draw_line (img, 0, 0, 200, 200, style); -}; - -#define TEST_WIDTH 200 -void test_draw () { - static int once = 1; - static int _tmpx, _tmpy = 0; - static int _tmpdx = 1, _tmpdy = 1; - struct line_style style; - GLfloat vp[] = {500, 210, 540, 210}; - - gfx_clear (NULL, &color[COLOR_white][0]); - - if (once) { - once = 0; - test_img (); - } - - if (_tmpx > img->width-TEST_WIDTH) _tmpdx = -1; - if (_tmpx < 0) _tmpdx = 1; - _tmpx += _tmpdx; - - if (_tmpy > img->height-TEST_WIDTH) _tmpdy = -1; - if (_tmpy < 0) _tmpdy = 1; - _tmpy += _tmpdy; - - style.width = 1; - style.c = color[COLOR_white][3]; - - gfx_draw_line (NULL, 0, gfx_screensize.y, gfx_screensize.x, 0, style); - gfx_draw_line (NULL, gfx_screensize.x, gfx_screensize.y, 0, 0, style); - - glLineWidth (style.width); - - gfx_draw_img (NULL, 10, 10, TEST_WIDTH, TEST_WIDTH, img, _tmpx, _tmpy); - - style.c = color[COLOR_yellow][3]; - gfx_draw_line (NULL, gfx_screensize.x, 0, 0, 10, style); - gfx_draw_text (NULL, 10, 300, "sollte gehen", &color[COLOR_red][3]); - gfx_draw_img (NULL, 20, 320, 150, 150, img1, 200, 200); - - gfx_flip(); -}; - - - /** * Initialize an EGL context for the current display. */ diff --git a/gtk/gtk_gfx.c b/gtk/gtk_gfx.c index 4f6c25f..4756b55 100644 --- a/gtk/gtk_gfx.c +++ b/gtk/gtk_gfx.c @@ -152,7 +152,7 @@ void gfx_draw_text (struct image *dimg, int x, int y, char *text, struct color * }; -void gfx_draw_polygon (struct image *dimg, iPoint *p, int pcnt, struct line_style style, struct color c) { +void gfx_draw_polygon (struct image *dimg, iPoint *p, int pcnt, struct line_style style, struct color *c) { static GdkPoint *polygon = NULL; static int polygon_cnt = 0; int i; @@ -171,7 +171,7 @@ void gfx_draw_polygon (struct image *dimg, iPoint *p, int pcnt, struct line_styl polygon[i].y = p[i].y; } - gdk_gc_set_foreground (dimg->gc, &c.c); + gdk_gc_set_foreground (dimg->gc, &c->c); gdk_draw_polygon (dimg->pixmap, dimg->gc, TRUE, polygon, pcnt); }; diff --git a/gtk/gtk_map_screen.c b/gtk/gtk_map_screen.c index 27247fa..2c0c53f 100644 --- a/gtk/gtk_map_screen.c +++ b/gtk/gtk_map_screen.c @@ -36,7 +36,7 @@ GtkWidget *map_da = NULL; GdkGC *gc; GdkGCValues gcvalues; GdkColormap *colormap = NULL; - +guint last_event_keyval; /* * draw event callback @@ -58,8 +58,8 @@ gboolean map_da_button_press_event (GtkWidget *widget, GdkEventButton *event, gp if (event->button == 2) btn = 4; if (event->button == 3) btn = 2; - gevent.mousepos.x = x; - gevent.mousepos.y = y; + gevent.scr_mpos.x = x; + gevent.scr_mpos.y = y; gevent.mousebtn = btn; gevent.event = EGUI_MOUSEPRESSED; if (gui_event (gevent) == 0) draw_mousebtndown (x, y, btn); @@ -78,8 +78,8 @@ gboolean map_da_button_release_event (GtkWidget *widget, GdkEventButton *event, if (event->button == 2) btn = 4; if (event->button == 3) btn = 2; - gevent.mousepos.x = x; - gevent.mousepos.y = y; + gevent.scr_mpos.x = x; + gevent.scr_mpos.y = y; gevent.mousebtn = btn; gevent.event = EGUI_MOUSERELEASED; if (gui_event (gevent) == 0) draw_mousebtnup (x, y, btn); @@ -93,8 +93,8 @@ gboolean map_da_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, g int y = event->y; GUIEvent gevent; - gevent.mousepos.x = x; - gevent.mousepos.y = y; + gevent.scr_mpos.x = x; + gevent.scr_mpos.y = y; gevent.mousebtn = 0; gevent.event = EGUI_MOUSEMOVE; @@ -107,18 +107,37 @@ gboolean map_da_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, g gboolean map_da_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { + last_event_keyval = 0; + return FALSE; +}; + + +gboolean map_da_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { GUIEvent gevent = {0}; + int lo, hi; - gevent.keyval = event->keyval; - gevent.event = EGUI_KEYRELEASED; - if (gui_event (gevent) == 0) { - if (event->keyval == '+') draw_setscale (- 1); - if (event->keyval == '-') draw_setscale (+ 1); - } + if (last_event_keyval == event->keyval) return FALSE; + + lo = event->keyval & 0x00FF; + hi = (event->keyval & 0xFF00) > 8; + + if (hi == 0) gevent.keyval = lo; + if (hi == 1 && lo == 0x08) gevent.keyval = lo; + if (hi == 1 && lo == 0x1b) gevent.keyval = lo; + if (hi == 1 && lo == 0x0d) gevent.keyval = lo; + if (hi == 1 && lo == 0x51) gevent.keyval = lo; + if (hi == 1 && lo == 0x53) gevent.keyval = lo; + + d_printf ("keyval: '%c' lo(%x) hi(%x) gevent:%lx", event->keyval, lo, hi, gevent.keyval); + + gevent.event = EGUI_KEYCHAR; + gui_event (gevent); main_wnd_update (); draw (); + last_event_keyval = event->keyval; + return FALSE; }; @@ -161,6 +180,7 @@ GtkWidget *map_da_create () { g_signal_connect (G_OBJECT (map_da), "button_press_event", G_CALLBACK (map_da_button_press_event), NULL); g_signal_connect (G_OBJECT (map_da), "button_release_event", G_CALLBACK (map_da_button_release_event), NULL); g_signal_connect (G_OBJECT (map_da), "scroll_event", G_CALLBACK (map_da_scroll_event), NULL); + g_signal_connect (G_OBJECT (map_da), "key_press_event", G_CALLBACK (map_da_key_press_event), NULL); g_signal_connect (G_OBJECT (map_da), "key_release_event", G_CALLBACK (map_da_key_release_event), NULL); g_signal_connect (G_OBJECT (map_da), "motion_notify_event", G_CALLBACK (map_da_motion_notify_event), NULL); gfx_resize (100, 100); diff --git a/gui/gui_entry.c b/gui/gui_entry.c index 59ef2e1..6a0700c 100644 --- a/gui/gui_entry.c +++ b/gui/gui_entry.c @@ -1,4 +1,4 @@ -/* $Id: gui_entry.c,v 1.14 2013/03/24 00:38:50 steffen Exp $ */ +/* $Id: gui_entry.c,v 1.15 2013/04/21 23:02:23 steffen Exp $ */ /*************************************************************************** * gui_entry.c * @@ -40,6 +40,9 @@ void gui_entry_draw (GUIItem *item) { if (item) entry = (GUIEntry *) item->data; else return; +// d_printf ("gui_entry curpos:%d len:%d", entry->curpos, strlen(entry->text)); +// d_print_data (entry->text, strlen (entry->text)+1); + ls.width = 1.0; if (currentwin->focus == (void*) item) ls.c = ls.borderc = color[COLOR_white][3]; @@ -59,7 +62,8 @@ void gui_entry_draw (GUIItem *item) { } else { strncpy (text2, entry->text, entry->curpos); - snprintf (text1, GUI_TEXTLEN, "%s|%s", text2, entry->text+entry->curpos); + text2[entry->curpos] = '\0'; + snprintf (text1, GUI_TEXTLEN, "%s|%s", text2, entry->text+entry->curpos); } gfx_draw_text (currentwin->screen, item->x+2, item->y, text1, &color[COLOR_white][3]); }; @@ -69,12 +73,14 @@ void gui_entry_draw (GUIItem *item) { * event handling */ int gui_entry_event (GUIItem *item, GUIEvent *event) { - char text1[GUI_TEXTLEN]; + char text[GUI_TEXTLEN]; char text2[GUI_TEXTLEN]; GUIEntry *entry = NULL; if (item) entry = (GUIEntry *) item->data; +// d_printf ("gui_entry curpos:%d keyval:%lx", entry->curpos, event->keyval); + if (event->event == EGUI_MOUSEPRESSED) { gui_set_focus (item); gui_softkeyb_show (TRUE); @@ -82,12 +88,18 @@ int gui_entry_event (GUIItem *item, GUIEvent *event) { else if (event->event == EGUI_KEYCHAR) { if (event->keyval == 0x08) { // backspace - if (entry->curpos > 0) { - memset (text1, 0x0, GUI_TEXTLEN); - memset (text2, 0x0, GUI_TEXTLEN); - strncpy (text1, entry->text, entry->curpos-1); - snprintf (text2, GUI_TEXTLEN, "%s%s", text1, entry->text+entry->curpos); - strncpy (entry->text, text2, GUI_TEXTLEN); + d_printf ("gui_entry:backspace"); + if (entry->curpos > 0 && entry->curpos < strlen (entry->text)) { + memset (text, 0x0, GUI_TEXTLEN); + strncpy (text, entry->text, entry->curpos-1); + text[entry->curpos] = '\0'; + snprintf (entry->text, GUI_TEXTLEN, "%s%s", text, entry->text+entry->curpos); + entry->curpos--; + } + else if (entry->curpos >= strlen (entry->text)) { + memset (text, 0x0, GUI_TEXTLEN); + strncpy (text, entry->text, entry->curpos-1); + strncpy (entry->text, text, GUI_TEXTLEN); entry->curpos--; } else { @@ -99,21 +111,36 @@ int gui_entry_event (GUIItem *item, GUIEvent *event) { gui_close (); } else if (event->keyval == 0x0d) { // enter + d_printf ("gui_entry:enter"); if (entry->callback_enter) entry->callback_enter (); } else if (event->keyval == 0x51) { // left + d_printf ("gui_entry:curpos--"); entry->curpos--; } else if (event->keyval == 0x53) { // right + d_printf ("gui_entry:curpos++"); entry->curpos++; } - else if ((event->keyval & 0x00) == 0xff00) { - // ignore all the rest - } - else { - strncpy (text1, entry->text, GUI_TEXTLEN ); - snprintf (entry->text, GUI_TEXTLEN, "%s%c", text1, event->keyval); - entry->curpos++; + else if (event->keyval != 0) { + d_printf ("gui_entry:new text"); + if (entry->curpos == strlen (entry->text)) { + strncpy (text, entry->text, GUI_TEXTLEN ); + snprintf (entry->text, GUI_TEXTLEN, "%s%c", text, event->keyval); + entry->curpos++; + } + else if (entry->curpos == 0) { + strncpy (text, entry->text, GUI_TEXTLEN ); + snprintf (entry->text, GUI_TEXTLEN, "%c%s", event->keyval, text); + entry->curpos++; + } + else { + strncpy (text, entry->text, entry->curpos); + text[entry->curpos] = '\0'; + snprintf (text2, GUI_TEXTLEN, "%s%c%s", text, event->keyval, entry->text+entry->curpos); + strncpy (entry->text, text2, GUI_TEXTLEN); + entry->curpos++; + } } } currentwin->screen_changed = 1; diff --git a/mapsys/map.c b/mapsys/map.c index 445d8dc..8350031 100644 --- a/mapsys/map.c +++ b/mapsys/map.c @@ -42,12 +42,24 @@ extern int map_search_fd; */ void map_init () { int i, j; + char fn[LEN_FILENAME]; d_printf ("map_init"); d_printf (" MAP_HASH_DEGFACTOR:%f", MAP_HASH_DEGFACTOR); d_printf (" MAP_OSMWEB_DELTA:%f", MAP_OSMWEB_DELTA); d_printf (" MAP_LSHASHFACTOR:%d", MAP_LSHASHFACTOR); d_printf (" MAP_LSSTAT_MAX:%d", MAP_LSSTAT_MAX); + d_printf (" Directory: %s", cfg.mappath); + + strncpy (fn, cfg.mappath, LEN_FILENAME); + if (fn[(i=strlen(fn))] == DIR_SEP) fn[i] = '\0'; + else { + cfg.mappath[strlen(cfg.mappath)+1] = '\0'; + cfg.mappath[strlen(cfg.mappath)] = DIR_SEP; + } + if (!dir_exist (fn)) { + d_printf ("***************** dir does not exist **************************"); + } if (mlsstat == NULL) mlsstat = (struct map_lsstat*) ml_malloc (MAP_LSSTAT_MAX*sizeof (struct map_lsstat));