|
|
@ -66,14 +66,14 @@ static bool IsWithinTouchscreen(const Layout::FramebufferLayout& layout, u32 fra |
|
|
framebuffer_x >= layout.screen.left && framebuffer_x < layout.screen.right); |
|
|
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::max(new_x, framebuffer_layout.screen.left); |
|
|
new_x = std::min(new_x, framebuffer_layout.screen.right - 1); |
|
|
new_x = std::min(new_x, framebuffer_layout.screen.right - 1); |
|
|
|
|
|
|
|
|
new_y = std::max(new_y, framebuffer_layout.screen.top); |
|
|
new_y = std::max(new_y, framebuffer_layout.screen.top); |
|
|
new_y = std::min(new_y, framebuffer_layout.screen.bottom - 1); |
|
|
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) { |
|
|
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()) { |
|
|
if (id >= touch_state->status.size()) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
if (!std::get<2>(touch_state->status[id])) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!std::get<2>(touch_state->status[id])) { |
|
|
return; |
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) |
|
|
|
|
|
|
|
|
if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) { |
|
|
std::tie(framebuffer_x, framebuffer_y) = ClipToTouchScreen(framebuffer_x, framebuffer_y); |
|
|
std::tie(framebuffer_x, framebuffer_y) = ClipToTouchScreen(framebuffer_x, framebuffer_y); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
TouchPressed(framebuffer_x, framebuffer_y, id); |
|
|
TouchPressed(framebuffer_x, framebuffer_y, id); |
|
|
} |
|
|
} |
|
|
|