mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2025-02-04 11:15:57 +01:00
Cleanup touch. Fix back touchscreen
This commit is contained in:
parent
d9b2bde2f6
commit
f61b9e7653
@ -35,13 +35,13 @@
|
|||||||
SceTouchData touch_old[SCE_TOUCH_PORT_MAX_NUM];
|
SceTouchData touch_old[SCE_TOUCH_PORT_MAX_NUM];
|
||||||
SceTouchData touch[SCE_TOUCH_PORT_MAX_NUM];
|
SceTouchData touch[SCE_TOUCH_PORT_MAX_NUM];
|
||||||
|
|
||||||
SceTouchPanelInfo panelinfo[SCE_TOUCH_PORT_MAX_NUM];
|
SDL_FRect area_info[SCE_TOUCH_PORT_MAX_NUM];
|
||||||
|
SDL_FRect display_info[SCE_TOUCH_PORT_MAX_NUM];
|
||||||
|
|
||||||
float aAWidth[SCE_TOUCH_PORT_MAX_NUM];
|
struct{
|
||||||
float aAHeight[SCE_TOUCH_PORT_MAX_NUM];
|
float min;
|
||||||
float dispWidth[SCE_TOUCH_PORT_MAX_NUM];
|
float range;
|
||||||
float dispHeight[SCE_TOUCH_PORT_MAX_NUM];
|
} force_info[SCE_TOUCH_PORT_MAX_NUM];
|
||||||
float forcerange[SCE_TOUCH_PORT_MAX_NUM];
|
|
||||||
|
|
||||||
void
|
void
|
||||||
VITA_InitTouch(void)
|
VITA_InitTouch(void)
|
||||||
@ -51,14 +51,22 @@ VITA_InitTouch(void)
|
|||||||
sceTouchEnableTouchForce(SCE_TOUCH_PORT_FRONT);
|
sceTouchEnableTouchForce(SCE_TOUCH_PORT_FRONT);
|
||||||
sceTouchEnableTouchForce(SCE_TOUCH_PORT_BACK);
|
sceTouchEnableTouchForce(SCE_TOUCH_PORT_BACK);
|
||||||
|
|
||||||
SceTouchPanelInfo panelinfo[SCE_TOUCH_PORT_MAX_NUM];
|
|
||||||
for(int port = 0; port < SCE_TOUCH_PORT_MAX_NUM; port++) {
|
for(int port = 0; port < SCE_TOUCH_PORT_MAX_NUM; port++) {
|
||||||
sceTouchGetPanelInfo(port, &panelinfo[port]);
|
SceTouchPanelInfo panelinfo;
|
||||||
aAWidth[port] = (float)(panelinfo[port].maxAaX - panelinfo[port].minAaX);
|
sceTouchGetPanelInfo(port, &panelinfo);
|
||||||
aAHeight[port] = (float)(panelinfo[port].maxAaY - panelinfo[port].minAaY);
|
|
||||||
dispWidth[port] = (float)(panelinfo[port].maxDispX - panelinfo[port].minDispX);
|
area_info[port].x = (float)panelinfo.minAaX;
|
||||||
dispHeight[port] = (float)(panelinfo[port].maxDispY - panelinfo[port].minDispY);
|
area_info[port].y = (float)panelinfo.minAaY;
|
||||||
forcerange[port] = (float)(panelinfo[port].maxForce - panelinfo[port].minForce);
|
area_info[port].w = (float)(panelinfo.maxAaX - panelinfo.minAaX);
|
||||||
|
area_info[port].h = (float)(panelinfo.maxAaY - panelinfo.minAaY);
|
||||||
|
|
||||||
|
display_info[port].x = (float)panelinfo.minDispX;
|
||||||
|
display_info[port].y = (float)panelinfo.minDispY;
|
||||||
|
display_info[port].w = (float)(panelinfo.maxDispX - panelinfo.minDispX);
|
||||||
|
display_info[port].h = (float)(panelinfo.maxDispY - panelinfo.minDispY);
|
||||||
|
|
||||||
|
force_info[port].min = (float)panelinfo.minForce;
|
||||||
|
force_info[port].range = (float)(panelinfo.maxForce - panelinfo.minForce);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Support passing both front and back touch devices in events
|
// Support passing both front and back touch devices in events
|
||||||
@ -96,7 +104,7 @@ VITA_PollTouch(void)
|
|||||||
float x = 0;
|
float x = 0;
|
||||||
float y = 0;
|
float y = 0;
|
||||||
VITA_ConvertTouchXYToSDLXY(&x, &y, touch[port].report[i].x, touch[port].report[i].y, port);
|
VITA_ConvertTouchXYToSDLXY(&x, &y, touch[port].report[i].x, touch[port].report[i].y, port);
|
||||||
float force = (touch[port].report[i].force - panelinfo[port].minForce) / forcerange[port];
|
float force = (touch[port].report[i].force - force_info[port].min) / force_info[port].range;
|
||||||
finger_id = (SDL_FingerID) touch[port].report[i].id;
|
finger_id = (SDL_FingerID) touch[port].report[i].id;
|
||||||
|
|
||||||
// Send an initial touch
|
// Send an initial touch
|
||||||
@ -133,7 +141,7 @@ VITA_PollTouch(void)
|
|||||||
float x = 0;
|
float x = 0;
|
||||||
float y = 0;
|
float y = 0;
|
||||||
VITA_ConvertTouchXYToSDLXY(&x, &y, touch_old[port].report[i].x, touch_old[port].report[i].y, port);
|
VITA_ConvertTouchXYToSDLXY(&x, &y, touch_old[port].report[i].x, touch_old[port].report[i].y, port);
|
||||||
float force = (touch_old[port].report[i].force - panelinfo[port].minForce) / forcerange[port];
|
float force = (touch_old[port].report[i].force - force_info[port].min) / force_info[port].range;
|
||||||
finger_id = (SDL_FingerID) touch_old[port].report[i].id;
|
finger_id = (SDL_FingerID) touch_old[port].report[i].id;
|
||||||
// Finger released from screen
|
// Finger released from screen
|
||||||
SDL_SendTouch((SDL_TouchID)port,
|
SDL_SendTouch((SDL_TouchID)port,
|
||||||
@ -150,25 +158,25 @@ VITA_PollTouch(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void VITA_ConvertTouchXYToSDLXY(float *sdl_x, float *sdl_y, int vita_x, int vita_y, int port) {
|
void VITA_ConvertTouchXYToSDLXY(float *sdl_x, float *sdl_y, int vita_x, int vita_y, int port) {
|
||||||
float x = 0;
|
float x = 0.f;
|
||||||
float y = 0;
|
float y = 0.f;
|
||||||
|
SDL_FRect rect;
|
||||||
|
|
||||||
if (port == SCE_TOUCH_PORT_FRONT) {
|
if (port == SCE_TOUCH_PORT_FRONT) {
|
||||||
x = (vita_x - panelinfo[port].minDispX) / dispWidth[port];
|
rect = display_info[port];
|
||||||
y = (vita_y - panelinfo[port].minDispY) / dispHeight[port];
|
|
||||||
} else {
|
} else {
|
||||||
x = (vita_x - panelinfo[port].minAaX) / aAWidth[port];
|
rect = area_info[port];
|
||||||
y = (vita_y - panelinfo[port].minAaY) / aAHeight[port];
|
|
||||||
}
|
|
||||||
if (x < 0.0) {
|
|
||||||
x = 0.0;
|
|
||||||
} else if (x > 1.0) {
|
|
||||||
x = 1.0;
|
|
||||||
}
|
|
||||||
if (y < 0.0) {
|
|
||||||
y = 0.0;
|
|
||||||
} else if (y > 1.0) {
|
|
||||||
y = 1.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x = (vita_x - rect.x) / rect.w;
|
||||||
|
y = (vita_y - rect.y) / rect.h;
|
||||||
|
|
||||||
|
x = SDL_max(x, 0.0);
|
||||||
|
x = SDL_min(x, 1.0);
|
||||||
|
|
||||||
|
y = SDL_max(y, 0.0);
|
||||||
|
y = SDL_min(y, 1.0);
|
||||||
|
|
||||||
*sdl_x = x;
|
*sdl_x = x;
|
||||||
*sdl_y = y;
|
*sdl_y = y;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user