fixing gui entry and gtk version

master
steffen 13 years ago
parent 5832946569
commit 6d74261ba5

@ -566,3 +566,8 @@ struct image* gfx_img_load (char *name) {
return img; return img;
}; };
/******************************************************************
* convert polygon into triangles..
*/

@ -23,6 +23,7 @@
#include <android/log.h> #include <android/log.h>
#include <android_native_app_glue.h> #include <android_native_app_glue.h>
#include "android_port.h"
#include "osmroute.h" #include "osmroute.h"
#include "gui.h" #include "gui.h"
#include "system.h" #include "system.h"
@ -40,76 +41,6 @@ void gevent_clear ();
struct engine engine; 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. * Initialize an EGL context for the current display.
*/ */

@ -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 GdkPoint *polygon = NULL;
static int polygon_cnt = 0; static int polygon_cnt = 0;
int i; 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; 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); gdk_draw_polygon (dimg->pixmap, dimg->gc, TRUE, polygon, pcnt);
}; };

@ -36,7 +36,7 @@ GtkWidget *map_da = NULL;
GdkGC *gc; GdkGC *gc;
GdkGCValues gcvalues; GdkGCValues gcvalues;
GdkColormap *colormap = NULL; GdkColormap *colormap = NULL;
guint last_event_keyval;
/* /*
* draw event callback * 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 == 2) btn = 4;
if (event->button == 3) btn = 2; if (event->button == 3) btn = 2;
gevent.mousepos.x = x; gevent.scr_mpos.x = x;
gevent.mousepos.y = y; gevent.scr_mpos.y = y;
gevent.mousebtn = btn; gevent.mousebtn = btn;
gevent.event = EGUI_MOUSEPRESSED; gevent.event = EGUI_MOUSEPRESSED;
if (gui_event (gevent) == 0) draw_mousebtndown (x, y, btn); 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 == 2) btn = 4;
if (event->button == 3) btn = 2; if (event->button == 3) btn = 2;
gevent.mousepos.x = x; gevent.scr_mpos.x = x;
gevent.mousepos.y = y; gevent.scr_mpos.y = y;
gevent.mousebtn = btn; gevent.mousebtn = btn;
gevent.event = EGUI_MOUSERELEASED; gevent.event = EGUI_MOUSERELEASED;
if (gui_event (gevent) == 0) draw_mousebtnup (x, y, btn); 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; int y = event->y;
GUIEvent gevent; GUIEvent gevent;
gevent.mousepos.x = x; gevent.scr_mpos.x = x;
gevent.mousepos.y = y; gevent.scr_mpos.y = y;
gevent.mousebtn = 0; gevent.mousebtn = 0;
gevent.event = EGUI_MOUSEMOVE; 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) { 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}; GUIEvent gevent = {0};
int lo, hi;
gevent.keyval = event->keyval; if (last_event_keyval == event->keyval) return FALSE;
gevent.event = EGUI_KEYRELEASED;
if (gui_event (gevent) == 0) { lo = event->keyval & 0x00FF;
if (event->keyval == '+') draw_setscale (- 1); hi = (event->keyval & 0xFF00) > 8;
if (event->keyval == '-') draw_setscale (+ 1);
} 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 (); main_wnd_update ();
draw (); draw ();
last_event_keyval = event->keyval;
return FALSE; 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_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), "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), "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), "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); g_signal_connect (G_OBJECT (map_da), "motion_notify_event", G_CALLBACK (map_da_motion_notify_event), NULL);
gfx_resize (100, 100); gfx_resize (100, 100);

@ -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 * gui_entry.c
* *
@ -40,6 +40,9 @@ void gui_entry_draw (GUIItem *item) {
if (item) entry = (GUIEntry *) item->data; if (item) entry = (GUIEntry *) item->data;
else return; 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; ls.width = 1.0;
if (currentwin->focus == (void*) item) if (currentwin->focus == (void*) item)
ls.c = ls.borderc = color[COLOR_white][3]; ls.c = ls.borderc = color[COLOR_white][3];
@ -59,7 +62,8 @@ void gui_entry_draw (GUIItem *item) {
} }
else { else {
strncpy (text2, entry->text, entry->curpos); 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]); 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 * event handling
*/ */
int gui_entry_event (GUIItem *item, GUIEvent *event) { int gui_entry_event (GUIItem *item, GUIEvent *event) {
char text1[GUI_TEXTLEN]; char text[GUI_TEXTLEN];
char text2[GUI_TEXTLEN]; char text2[GUI_TEXTLEN];
GUIEntry *entry = NULL; GUIEntry *entry = NULL;
if (item) entry = (GUIEntry *) item->data; if (item) entry = (GUIEntry *) item->data;
// d_printf ("gui_entry curpos:%d keyval:%lx", entry->curpos, event->keyval);
if (event->event == EGUI_MOUSEPRESSED) { if (event->event == EGUI_MOUSEPRESSED) {
gui_set_focus (item); gui_set_focus (item);
gui_softkeyb_show (TRUE); gui_softkeyb_show (TRUE);
@ -82,12 +88,18 @@ int gui_entry_event (GUIItem *item, GUIEvent *event) {
else if (event->event == EGUI_KEYCHAR) { else if (event->event == EGUI_KEYCHAR) {
if (event->keyval == 0x08) { // backspace if (event->keyval == 0x08) { // backspace
if (entry->curpos > 0) { d_printf ("gui_entry:backspace");
memset (text1, 0x0, GUI_TEXTLEN); if (entry->curpos > 0 && entry->curpos < strlen (entry->text)) {
memset (text2, 0x0, GUI_TEXTLEN); memset (text, 0x0, GUI_TEXTLEN);
strncpy (text1, entry->text, entry->curpos-1); strncpy (text, entry->text, entry->curpos-1);
snprintf (text2, GUI_TEXTLEN, "%s%s", text1, entry->text+entry->curpos); text[entry->curpos] = '\0';
strncpy (entry->text, text2, GUI_TEXTLEN); 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--; entry->curpos--;
} }
else { else {
@ -99,21 +111,36 @@ int gui_entry_event (GUIItem *item, GUIEvent *event) {
gui_close (); gui_close ();
} }
else if (event->keyval == 0x0d) { // enter else if (event->keyval == 0x0d) { // enter
d_printf ("gui_entry:enter");
if (entry->callback_enter) entry->callback_enter (); if (entry->callback_enter) entry->callback_enter ();
} }
else if (event->keyval == 0x51) { // left else if (event->keyval == 0x51) { // left
d_printf ("gui_entry:curpos--");
entry->curpos--; entry->curpos--;
} }
else if (event->keyval == 0x53) { // right else if (event->keyval == 0x53) { // right
d_printf ("gui_entry:curpos++");
entry->curpos++; entry->curpos++;
} }
else if ((event->keyval & 0x00) == 0xff00) { else if (event->keyval != 0) {
// ignore all the rest d_printf ("gui_entry:new text");
} if (entry->curpos == strlen (entry->text)) {
else { strncpy (text, entry->text, GUI_TEXTLEN );
strncpy (text1, entry->text, GUI_TEXTLEN ); snprintf (entry->text, GUI_TEXTLEN, "%s%c", text, event->keyval);
snprintf (entry->text, GUI_TEXTLEN, "%s%c", text1, event->keyval); entry->curpos++;
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; currentwin->screen_changed = 1;

@ -42,12 +42,24 @@ extern int map_search_fd;
*/ */
void map_init () { void map_init () {
int i, j; int i, j;
char fn[LEN_FILENAME];
d_printf ("map_init"); d_printf ("map_init");
d_printf (" MAP_HASH_DEGFACTOR:%f", MAP_HASH_DEGFACTOR); d_printf (" MAP_HASH_DEGFACTOR:%f", MAP_HASH_DEGFACTOR);
d_printf (" MAP_OSMWEB_DELTA:%f", MAP_OSMWEB_DELTA); d_printf (" MAP_OSMWEB_DELTA:%f", MAP_OSMWEB_DELTA);
d_printf (" MAP_LSHASHFACTOR:%d", MAP_LSHASHFACTOR); d_printf (" MAP_LSHASHFACTOR:%d", MAP_LSHASHFACTOR);
d_printf (" MAP_LSSTAT_MAX:%d", MAP_LSSTAT_MAX); 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) if (mlsstat == NULL)
mlsstat = (struct map_lsstat*) ml_malloc (MAP_LSSTAT_MAX*sizeof (struct map_lsstat)); mlsstat = (struct map_lsstat*) ml_malloc (MAP_LSSTAT_MAX*sizeof (struct map_lsstat));

Loading…
Cancel
Save