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;
};
/******************************************************************
* convert polygon into triangles..
*/

@ -23,6 +23,7 @@
#include <android/log.h>
#include <android_native_app_glue.h>
#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.
*/

@ -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);
};

@ -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);

@ -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,6 +62,7 @@ void gui_entry_draw (GUIItem *item) {
}
else {
strncpy (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,23 +111,38 @@ 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 != 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 ((event->keyval & 0x00) == 0xff00) {
// ignore all the rest
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 (text1, entry->text, GUI_TEXTLEN );
snprintf (entry->text, GUI_TEXTLEN, "%s%c", text1, event->keyval);
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;
draw ();
return 1;

@ -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));

Loading…
Cancel
Save