Closed Woodliys closed 1 year ago
Maybe I misunderstand the problem, but it seems a cleaner solution to me:
#if EVDEV_CALIBRATE
//Add these 2 lines
evdev_root_x = LV_CLAMP(EVDEV_HOR_MIN, evdev_root_x, EVDEV_HOR_MAX);
evdev_root_y = LV_CLAMP(EVDEV_VER_MIN, evdev_root_y, EVDEV_VER_MAX);
data->point.x = map(evdev_root_x, EVDEV_HOR_MIN, EVDEV_HOR_MAX, 0, drv->disp->driver->hor_res);
data->point.y = map(evdev_root_y, EVDEV_VER_MIN, EVDEV_VER_MAX, 0, drv->disp->driver->ver_res);
#else
data->point.x = evdev_root_x;
data->point.y = evdev_root_y;
#endif
True, but I don't think evdev_root_x/y
should exceed the value of hor/ver_res
, maybe it should:
evdev_root_x = LV_CLAMP(0, evdev_root_x, drv->disp->driver->hor_res-1);
evdev_root_y = LV_CLAMP(0, evdev_root_y, drv->disp->driver->ver_res-1);
#if EVDEV_CALIBRATE
data->point.x = map(evdev_root_x, EVDEV_HOR_MIN, EVDEV_HOR_MAX, 0, drv->disp->driver->hor_res);
data->point.y = map(evdev_root_y, EVDEV_VER_MIN, EVDEV_VER_MAX, 0, drv->disp->driver->ver_res);
#else
data->point.x = evdev_root_x;
data->point.y = evdev_root_y;
#endif
Probably the combination of the two should be the best option as during calibration below evdev_root_x/y
is needed in its raw form:
#if EVDEV_CALIBRATE
evdev_root_x = LV_CLAMP(EVDEV_HOR_MIN, evdev_root_x, EVDEV_HOR_MAX);
evdev_root_y = LV_CLAMP(EVDEV_VER_MIN, evdev_root_y, EVDEV_VER_MAX);
data->point.x = map(evdev_root_x, EVDEV_HOR_MIN, EVDEV_HOR_MAX, 0, drv->disp->driver->hor_res);
data->point.y = map(evdev_root_y, EVDEV_VER_MIN, EVDEV_VER_MAX, 0, drv->disp->driver->ver_res);
#else
evdev_root_x = LV_CLAMP(0, evdev_root_x, drv->disp->driver->hor_res-1);
evdev_root_y = LV_CLAMP(0, evdev_root_y, drv->disp->driver->ver_res-1);
data->point.x = evdev_root_x;
data->point.y = evdev_root_y;
#endif
Uh, you are right.
Could update it? I can't test it now so it'd be safer you added the discussed changes.
I just tested it. The others had problems, but this one is fine.
#if EVDEV_CALIBRATE
evdev_root_x = LV_CLAMP(EVDEV_HOR_MIN, evdev_root_x, EVDEV_HOR_MAX);
evdev_root_y = LV_CLAMP(EVDEV_VER_MIN, evdev_root_y, EVDEV_VER_MAX);
data->point.x = map(evdev_root_x, EVDEV_HOR_MIN, EVDEV_HOR_MAX, 0, drv->disp->driver->hor_res);
data->point.y = map(evdev_root_y, EVDEV_VER_MIN, EVDEV_VER_MAX, 0, drv->disp->driver->ver_res);
#else
evdev_root_x = LV_CLAMP(0, evdev_root_x, drv->disp->driver->hor_res-1);
evdev_root_y = LV_CLAMP(0, evdev_root_y, drv->disp->driver->ver_res-1);
data->point.x = evdev_root_x;
data->point.y = evdev_root_y;
#endif
Thank you!
evdev_root_x/y
will continue to increase as the mouse moves out of the screen. If you move the mouse inside the screen, wait untilevdev_root_x/y
is less thanhor/ver_res
. This is a problem.