|
|
|
@ -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); |
|
|
|
|