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