Fix a touchless issue in hybrid layout (#1182)
In the previous commit, there was a touchless error on the hybrid screen. This commit fix a touchless issue in hybrid layout.
This commit is contained in:
parent
0d37a0a5fc
commit
346e8c0b87
|
@ -37,6 +37,7 @@ bool TopEnable;
|
||||||
bool BotEnable;
|
bool BotEnable;
|
||||||
bool HybEnable;
|
bool HybEnable;
|
||||||
int HybScreen;
|
int HybScreen;
|
||||||
|
int HybPrevTouchScreen; // 0:unknown, 1:buttom screen, 2:hybrid screen
|
||||||
|
|
||||||
void M23_Identity(float* m)
|
void M23_Identity(float* m)
|
||||||
{
|
{
|
||||||
|
@ -138,6 +139,7 @@ void SetupScreenLayout(int screenWidth, int screenHeight,
|
||||||
HybScreen = swapScreens ? 1 : 0;
|
HybScreen = swapScreens ? 1 : 0;
|
||||||
swapScreens = false;
|
swapScreens = false;
|
||||||
topAspect = botAspect = 1;
|
topAspect = botAspect = 1;
|
||||||
|
HybPrevTouchScreen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
float refpoints[6][2] =
|
float refpoints[6][2] =
|
||||||
|
@ -469,31 +471,79 @@ int GetScreenTransforms(float* out, int* kind)
|
||||||
|
|
||||||
bool GetTouchCoords(int& x, int& y, bool clamp)
|
bool GetTouchCoords(int& x, int& y, bool clamp)
|
||||||
{
|
{
|
||||||
float vx = x;
|
if (HybEnable && HybScreen == 1)
|
||||||
float vy = y;
|
|
||||||
|
|
||||||
if (BotEnable)
|
|
||||||
{
|
{
|
||||||
|
float vx = x;
|
||||||
|
float vy = y;
|
||||||
|
float hvx = x;
|
||||||
|
float hvy = y;
|
||||||
|
|
||||||
M23_Transform(TouchMtx, vx, vy);
|
M23_Transform(TouchMtx, vx, vy);
|
||||||
}
|
M23_Transform(HybTouchMtx, hvx, hvy);
|
||||||
else if (HybEnable && HybScreen == 1)
|
|
||||||
{
|
|
||||||
M23_Transform(HybTouchMtx, vx, vy);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = (int)vx;
|
if (clamp)
|
||||||
y = (int)vy;
|
{
|
||||||
|
if (HybPrevTouchScreen == 1)
|
||||||
|
{
|
||||||
|
x = std::clamp((int)vx, 0, 255);
|
||||||
|
y = std::clamp((int)vy, 0, 191);
|
||||||
|
|
||||||
if (clamp)
|
return true;
|
||||||
{
|
}
|
||||||
x = std::clamp(x, 0, 255);
|
if (HybPrevTouchScreen == 2)
|
||||||
y = std::clamp(y, 0, 191);
|
{
|
||||||
return true;
|
x = std::clamp((int)hvx, 0, 255);
|
||||||
|
y = std::clamp((int)hvy, 0, 191);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (vx >= 0 && vx < 256 && vy >= 0 && vy < 192)
|
||||||
|
{
|
||||||
|
HybPrevTouchScreen = 1;
|
||||||
|
|
||||||
|
x = (int)vx;
|
||||||
|
y = (int)vy;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (hvx >= 0 && hvx < 256 && hvy >= 0 && hvy < 192)
|
||||||
|
{
|
||||||
|
HybPrevTouchScreen = 2;
|
||||||
|
|
||||||
|
x = (int)hvx;
|
||||||
|
y = (int)hvy;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (BotEnable)
|
||||||
{
|
{
|
||||||
if (x >= 0 && x < 256 && y >= 0 && y < 192)
|
float vx = x;
|
||||||
|
float vy = y;
|
||||||
|
|
||||||
|
M23_Transform(TouchMtx, vx, vy);
|
||||||
|
|
||||||
|
if (clamp)
|
||||||
|
{
|
||||||
|
x = std::clamp((int)vx, 0, 255);
|
||||||
|
y = std::clamp((int)vy, 0, 191);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (vx >= 0 && vx < 256 && vy >= 0 && vy < 192)
|
||||||
|
{
|
||||||
|
x = (int)vx;
|
||||||
|
y = (int)vy;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue