Fix touch not working due to gr_fb_width returning 0 in some cases
Change-Id: Id5ce607a181110118ebc647fc07d387a7a3dc660
This commit is contained in:
+3
-1
@@ -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)
|
||||
{
|
||||
|
||||
+15
-16
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user