From 70e1129612765b14e5aace0155d4683c91cde951 Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Wed, 7 Aug 2013 15:52:20 +0000 Subject: Fix touch not working due to gr_fb_width returning 0 in some cases Change-Id: Id5ce607a181110118ebc647fc07d387a7a3dc660 --- gui/gui.cpp | 4 +++- minuitwrp/events.c | 31 +++++++++++++++---------------- minuitwrp/minui.h | 2 +- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/gui/gui.cpp b/gui/gui.cpp index 87556891d..9f221383e 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -185,6 +185,8 @@ input_thread (void *cookie) static struct timeval touchStart; HardwareKeyboard kb; string seconds; + int screen_width = gr_fb_width(); + int screen_height = gr_fb_height(); //start screen timeout threads blankTimer.setTimerThread(); @@ -198,7 +200,7 @@ input_thread (void *cookie) struct input_event ev; int state = 0, ret = 0; - ret = ev_get (&ev, dontwait); + ret = ev_get (&ev, dontwait, &screen_width, &screen_height); if (ret < 0) { diff --git a/minuitwrp/events.c b/minuitwrp/events.c index 4368c1561..2653d18d4 100644 --- a/minuitwrp/events.c +++ b/minuitwrp/events.c @@ -288,7 +288,7 @@ static int vk_inside_display(__s32 value, struct input_absinfo *info, int screen return (screen_pos >= 0 && screen_pos < screen_size); } -static int vk_tp_to_screen(struct position *p, int *x, int *y) +static int vk_tp_to_screen(struct position *p, int *x, int *y, int *screen_width, int *screen_height) { if (p->xi.minimum == p->xi.maximum || p->yi.minimum == p->yi.maximum) { @@ -298,17 +298,16 @@ static int vk_tp_to_screen(struct position *p, int *x, int *y) return 0; } -#ifdef _EVENT_LOGGING - printf("EV: p->x=%d x-range=%d,%d fb-width=%d\n", p->x, p->xi.minimum, p->xi.maximum, gr_fb_width()); -#endif - #ifndef RECOVERY_TOUCHSCREEN_SWAP_XY - int fb_width = gr_fb_width(); - int fb_height = gr_fb_height(); + int fb_width = *screen_width; + int fb_height = *screen_height; #else // We need to swap the scaling sizes, too - int fb_width = gr_fb_height(); - int fb_height = gr_fb_width(); + int fb_width = *screen_height; + int fb_height = *screen_width; +#endif +#ifdef _EVENT_LOGGING + printf("EV: p->x=%d x-range=%d,%d fb-width=%d\n", p->x, p->xi.minimum, p->xi.maximum, *screen_width); #endif *x = (p->x - p->xi.minimum) * (fb_width - 1) / (p->xi.maximum - p->xi.minimum); @@ -325,7 +324,7 @@ static int vk_tp_to_screen(struct position *p, int *x, int *y) /* Translate a virtual key in to a real key event, if needed */ /* Returns non-zero when the event should be consumed */ -static int vk_modify(struct ev *e, struct input_event *ev) +static int vk_modify(struct ev *e, struct input_event *ev, int *screen_width, int *screen_height) { static int downX = -1, downY = -1; static int discard = 0; @@ -545,11 +544,11 @@ static int vk_modify(struct ev *e, struct input_event *ev) // Retrieve where the x,y position is if (e->p.synced & 0x03) { - vk_tp_to_screen(&e->p, &x, &y); + vk_tp_to_screen(&e->p, &x, &y, screen_width, screen_height); } else if (e->mt_p.synced & 0x03) { - vk_tp_to_screen(&e->mt_p, &x, &y); + vk_tp_to_screen(&e->mt_p, &x, &y, screen_width, screen_height); } else { @@ -563,10 +562,10 @@ static int vk_modify(struct ev *e, struct input_event *ev) x ^= y; #endif #ifdef RECOVERY_TOUCHSCREEN_FLIP_X - x = gr_fb_width() - x; + x = *screen_width - x; #endif #ifdef RECOVERY_TOUCHSCREEN_FLIP_Y - y = gr_fb_height() - y; + y = *screen_height - y; #endif #ifdef _EVENT_LOGGING @@ -621,7 +620,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) return 0; } -int ev_get(struct input_event *ev, unsigned dont_wait) +int ev_get(struct input_event *ev, unsigned dont_wait, int *screen_width, int *screen_height) { int r; unsigned n; @@ -634,7 +633,7 @@ int ev_get(struct input_event *ev, unsigned dont_wait) if(ev_fds[n].revents & POLLIN) { r = read(ev_fds[n].fd, ev, sizeof(*ev)); if(r == sizeof(*ev)) { - if (!vk_modify(&evs[n], ev)) + if (!vk_modify(&evs[n], ev, screen_width, screen_height)) return 0; } } diff --git a/minuitwrp/minui.h b/minuitwrp/minui.h index 03e15bb81..66e7f4f47 100644 --- a/minuitwrp/minui.h +++ b/minuitwrp/minui.h @@ -57,7 +57,7 @@ struct input_event; int ev_init(void); void ev_exit(void); -int ev_get(struct input_event *ev, unsigned dont_wait); +int ev_get(struct input_event *ev, unsigned dont_wait, int *screen_width, int *screen_height); // Resources -- cgit v1.2.3