mirror of
https://github.com/azahar-emu/azahar.git
synced 2025-04-28 21:57:59 +03:00
EmuWindow: Clip mouse input coordinates to emulated screen dimensions.
If the mouse position for a mouse move/drag would take it outside the emulated screen dimensions, clip the coordinates to the emulated screen dimensions. Qt and GLFW will report negative coordinates for mouse positions to the left, or above citra window. Added restriction to mouse coordinates passed to touchmoved by Qt/GLFW to be greater or equal to zero.
This commit is contained in:
parent
5b9bbc37d4
commit
b8328593fe
4 changed files with 23 additions and 8 deletions
|
@ -28,6 +28,17 @@ static bool IsWithinTouchscreen(const EmuWindow::FramebufferLayout& layout, unsi
|
|||
framebuffer_x < layout.bottom_screen.right);
|
||||
}
|
||||
|
||||
std::tuple<unsigned,unsigned> EmuWindow::ClipToTouchScreen(unsigned new_x, unsigned new_y) {
|
||||
|
||||
new_x = std::max(new_x, framebuffer_layout.bottom_screen.left);
|
||||
new_x = std::min(new_x, framebuffer_layout.bottom_screen.right-1);
|
||||
|
||||
new_y = std::max(new_y, framebuffer_layout.bottom_screen.top);
|
||||
new_y = std::min(new_y, framebuffer_layout.bottom_screen.bottom-1);
|
||||
|
||||
return std::make_tuple(new_x, new_y);
|
||||
}
|
||||
|
||||
void EmuWindow::TouchPressed(unsigned framebuffer_x, unsigned framebuffer_y) {
|
||||
if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y))
|
||||
return;
|
||||
|
@ -52,14 +63,13 @@ void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) {
|
|||
if (!touch_pressed)
|
||||
return;
|
||||
|
||||
if (IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y))
|
||||
TouchPressed(framebuffer_x, framebuffer_y);
|
||||
else
|
||||
TouchReleased();
|
||||
if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y))
|
||||
std::tie(framebuffer_x, framebuffer_y) = ClipToTouchScreen(framebuffer_x, framebuffer_y);
|
||||
|
||||
TouchPressed(framebuffer_x, framebuffer_y);
|
||||
}
|
||||
|
||||
EmuWindow::FramebufferLayout EmuWindow::FramebufferLayout::DefaultScreenLayout(unsigned width,
|
||||
unsigned height) {
|
||||
EmuWindow::FramebufferLayout EmuWindow::FramebufferLayout::DefaultScreenLayout(unsigned width, unsigned height) {
|
||||
|
||||
ASSERT(width > 0);
|
||||
ASSERT(height > 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue