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 --- minuitwrp/events.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'minuitwrp/events.c') 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; } } -- cgit v1.2.3