mouse handling fix
This commit is contained in:
parent
233077b434
commit
4a02a07523
37
src/system.c
37
src/system.c
|
@ -367,16 +367,20 @@ static void processMouse()
|
||||||
SDL_Rect rect = {0, 0, 0, 0};
|
SDL_Rect rect = {0, 0, 0, 0};
|
||||||
calcTextureRect(&rect);
|
calcTextureRect(&rect);
|
||||||
|
|
||||||
|
s32 x = -1, y = -1;
|
||||||
if(crtMonitorEnabled())
|
if(crtMonitorEnabled())
|
||||||
{
|
{
|
||||||
if(rect.w) input->mouse.x = (mx - rect.x) * TIC80_FULLWIDTH / rect.w - OFFSET_LEFT;
|
if(rect.w) x = (mx - rect.x) * TIC80_FULLWIDTH / rect.w - OFFSET_LEFT;
|
||||||
if(rect.h) input->mouse.y = (my - rect.y) * TIC80_FULLHEIGHT / rect.h - OFFSET_TOP;
|
if(rect.h) y = (my - rect.y) * TIC80_FULLHEIGHT / rect.h - OFFSET_TOP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(rect.w) input->mouse.x = (mx - rect.x) * TIC80_WIDTH / rect.w;
|
if(rect.w) x = (mx - rect.x) * TIC80_WIDTH / rect.w;
|
||||||
if(rect.h) input->mouse.y = (my - rect.y) * TIC80_HEIGHT / rect.h;
|
if(rect.h) y = (my - rect.y) * TIC80_HEIGHT / rect.h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input->mouse.x = x >= 0 && x < 0xff ? x : 0xff;
|
||||||
|
input->mouse.y = y >= 0 && y < 0xff ? y : 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -439,9 +443,22 @@ static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isKbdVisible()
|
||||||
|
{
|
||||||
|
s32 w, h;
|
||||||
|
SDL_GetWindowSize(platform.window, &w, &h);
|
||||||
|
|
||||||
|
SDL_Rect rect;
|
||||||
|
calcTextureRect(&rect);
|
||||||
|
|
||||||
|
float scale = (float)w / (KBD_COLS*TIC_SPRITESIZE);
|
||||||
|
|
||||||
|
return h - KBD_ROWS*TIC_SPRITESIZE*scale - (rect.h + rect.y*2) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void processTouchKeyboard()
|
static void processTouchKeyboard()
|
||||||
{
|
{
|
||||||
if(platform.touchCounter == 0) return;
|
if(platform.touchCounter == 0 || !isKbdVisible()) return;
|
||||||
|
|
||||||
enum{Cols=KBD_COLS, Rows=KBD_ROWS};
|
enum{Cols=KBD_COLS, Rows=KBD_ROWS};
|
||||||
|
|
||||||
|
@ -821,7 +838,7 @@ static void blitSound()
|
||||||
|
|
||||||
static void renderKeyboard()
|
static void renderKeyboard()
|
||||||
{
|
{
|
||||||
if(platform.touchCounter == 0) return;
|
if(platform.touchCounter == 0 || !isKbdVisible()) return;
|
||||||
|
|
||||||
SDL_Rect rect;
|
SDL_Rect rect;
|
||||||
SDL_GetWindowSize(platform.window, &rect.w, &rect.h);
|
SDL_GetWindowSize(platform.window, &rect.w, &rect.h);
|
||||||
|
@ -830,14 +847,6 @@ static void renderKeyboard()
|
||||||
float scale = rect.w/src.w;
|
float scale = rect.w/src.w;
|
||||||
GPU_Rect dst = (GPU_Rect){0, rect.h - KBD_ROWS*TIC_SPRITESIZE*scale, scale, scale};
|
GPU_Rect dst = (GPU_Rect){0, rect.h - KBD_ROWS*TIC_SPRITESIZE*scale, scale, scale};
|
||||||
|
|
||||||
{
|
|
||||||
SDL_Rect rect;
|
|
||||||
calcTextureRect(&rect);
|
|
||||||
|
|
||||||
if(dst.y - (rect.h + rect.y*2) < 0)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GPU_BlitScale(platform.keyboard.texture.up, &src, platform.gpu.screen, dst.x, dst.y, dst.w, dst.h);
|
GPU_BlitScale(platform.keyboard.texture.up, &src, platform.gpu.screen, dst.x, dst.y, dst.w, dst.h);
|
||||||
|
|
||||||
static const tic_key KbdLayout[] =
|
static const tic_key KbdLayout[] =
|
||||||
|
|
Loading…
Reference in New Issue