diff --git a/android/jni/main.c b/android/jni/main.c index a097751..b67bef5 100644 --- a/android/jni/main.c +++ b/android/jni/main.c @@ -30,6 +30,13 @@ #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "sposmroute", __VA_ARGS__)) #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "sposmroute", __VA_ARGS__)) +#define MAX_EVENTS 128 +GUIEvent eventlist[MAX_EVENTS] = {0}; +int eventcnt = 0; + +int gevent_push (GUIEvent *event); +int gevent_pop (GUIEvent *event); +void gevent_clear (); struct engine engine; @@ -189,6 +196,7 @@ static void engine_term_display(struct engine* engine) { /** * Process the next input event. + * save events inside a EVENT list. */ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) { GUIEvent gevent; @@ -202,25 +210,21 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) if (subtype == AMOTION_EVENT_ACTION_MOVE) { gevent.event = EGUI_MOUSEMOVE; - -// if (gui_event (gevent) == 0) draw_mousemove (gevent.scr_mpos.x, gevent.scr_mpos.y, 0); - gui_event (gevent); + gevent_push (&gevent); return 1; } else if (subtype == AMOTION_EVENT_ACTION_UP) { gevent.mousebtn = 1; gevent.event = EGUI_MOUSERELEASED; -// if (gui_event (gevent) == 0) draw_mousebtnup (gevent.scr_mpos.x, gevent.scr_mpos.y, 1); - gui_event (gevent); - return; + gevent_push (&gevent); + return 1; } else if (subtype == AMOTION_EVENT_ACTION_DOWN) { char *tmp; gevent.mousebtn = 1; gevent.event = EGUI_MOUSEPRESSED; -// if (gui_event (gevent) == 0) draw_mousebtndown (gevent.scr_mpos.x, gevent.scr_mpos.y, 1); - gui_event (gevent); - return; + gevent_push (&gevent); + return 1; } } @@ -305,13 +309,14 @@ void main_event () { struct gps_data *gpspos; int ident; int events; + int t = 0; + GUIEvent event; struct android_poll_source* source; // If not animating, we will block forever waiting for events. // If animating, we loop until all events are read, then continue // to draw the next frame of animation. while ((ident=ALooper_pollAll(0, NULL, &events, (void**)&source)) >= 0) { - // Process this event. if (source != NULL) { source->process(engine.app, source); @@ -336,6 +341,10 @@ void main_event () { return; } } + while (gevent_pop(&event)) { + gui_event (event); + } + t1 = time(NULL); if (t1 != t2) { t2 = t1; @@ -474,3 +483,30 @@ int gps_android_device_read (char *ptr, int ptrsize) { (*jvm)->DetachCurrentThread(jvm); return strlen (ptr); }; + + +int gevent_push (GUIEvent *event) { + if (eventcnt < MAX_EVENTS) { + memcpy (&eventlist[eventcnt], event, sizeof (GUIEvent)); + eventcnt++; + return 1; + } + return 0; +}; + + +int gevent_pop (GUIEvent *event) { + if (eventcnt > 0) { + eventcnt--; + memcpy (event, &eventlist[eventcnt], sizeof (GUIEvent)); + return 1; + } + return 0; +}; + +void gevent_clear () { + int i; + + memset (eventlist, 0x0, MAX_EVENTS * sizeof (GUIEvent)); +}; + diff --git a/gui/gui_list.c b/gui/gui_list.c index 25560c6..d059de3 100644 --- a/gui/gui_list.c +++ b/gui/gui_list.c @@ -1,4 +1,4 @@ -/* $Id: gui_list.c,v 1.10 2013/04/03 21:52:27 steffen Exp $ */ +/* $Id: gui_list.c,v 1.11 2013/04/05 22:36:46 steffen Exp $ */ /*************************************************************************** * gui_list.c * @@ -70,9 +70,9 @@ void gui_list_draw (GUIItem *item) { if (i < 0) y = item->y + item->h; else y = item->y; x = item->x + item->w; - for (j = 0; j <= 5; j++) { - gfx_draw_line (currentwin->screen, x - 5, y, x-j, y + i*5, ls); - gfx_draw_line (currentwin->screen, x - 5 -j, y+ i*5, x-5, y, ls); + for (j = 0; j <= 10; j++) { + gfx_draw_line (currentwin->screen, x - 10, y, x-j, y + i*10, ls); + gfx_draw_line (currentwin->screen, x - 10 -j, y+ i*10, x-10, y, ls); } } }; @@ -100,8 +100,8 @@ int gui_list_event (GUIItem *item, GUIEvent *event) { gui_set_focus (item); - if (y <= 5 && x >= item->w - 10) list->vs--; - else if (y >= item->h - 5 && x >= item->w - 10) list->vs++; + if (y <= 10 && x >= item->w - 10) list->vs--; + else if (y >= item->h - 10 && x >= item->w - 10) list->vs++; else { /* select entry */ i = (y-5)/16 + list->vs; list->selected = i;