|
|
|
@ -66,14 +66,14 @@ static bool IsWithinTouchscreen(const Layout::FramebufferLayout& layout, u32 fra
|
|
|
|
|
framebuffer_x >= layout.screen.left && framebuffer_x < layout.screen.right);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::tuple<u32, u32> EmuWindow::ClipToTouchScreen(u32 new_x, u32 new_y) const {
|
|
|
|
|
std::pair<u32, u32> EmuWindow::ClipToTouchScreen(u32 new_x, u32 new_y) const {
|
|
|
|
|
new_x = std::max(new_x, framebuffer_layout.screen.left);
|
|
|
|
|
new_x = std::min(new_x, framebuffer_layout.screen.right - 1);
|
|
|
|
|
|
|
|
|
|
new_y = std::max(new_y, framebuffer_layout.screen.top);
|
|
|
|
|
new_y = std::min(new_y, framebuffer_layout.screen.bottom - 1);
|
|
|
|
|
|
|
|
|
|
return std::make_tuple(new_x, new_y);
|
|
|
|
|
return std::make_pair(new_x, new_y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EmuWindow::TouchPressed(u32 framebuffer_x, u32 framebuffer_y, size_t id) {
|
|
|
|
@ -107,11 +107,14 @@ void EmuWindow::TouchMoved(u32 framebuffer_x, u32 framebuffer_y, size_t id) {
|
|
|
|
|
if (id >= touch_state->status.size()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!std::get<2>(touch_state->status[id]))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y))
|
|
|
|
|
if (!std::get<2>(touch_state->status[id])) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) {
|
|
|
|
|
std::tie(framebuffer_x, framebuffer_y) = ClipToTouchScreen(framebuffer_x, framebuffer_y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TouchPressed(framebuffer_x, framebuffer_y, id);
|
|
|
|
|
}
|
|
|
|
|