@ -996,7 +996,7 @@ void PollInputEvents(void)
CORE . Input . Touch . position [ 0 ] = CORE . Input . Mouse . currentPosition ;
int touchAction = - 1 ; / / 0 - TOUCH_ACTION_UP , 1 - TOUCH_ACTION_DOWN , 2 - TOUCH_ACTION_MOVE
bool gestureUpdate = false ; / / Flag to note gestures require to update
bool realTouch = false ; / / Flag to differentiate real touch gestures from mouse ones
/ / Register previous keys states
/ / NOTE : Android supports up to 260 keys
@ -1141,7 +1141,6 @@ void PollInputEvents(void)
CORE . Input . Touch . currentTouchState [ btn ] = 1 ;
touchAction = 1 ;
gestureUpdate = true ;
} break ;
case SDL_MOUSEBUTTONUP :
{
@ -1155,7 +1154,6 @@ void PollInputEvents(void)
CORE . Input . Touch . currentTouchState [ btn ] = 0 ;
touchAction = 0 ;
gestureUpdate = true ;
} break ;
case SDL_MOUSEWHEEL :
{
@ -1178,32 +1176,38 @@ void PollInputEvents(void)
CORE . Input . Touch . position [ 0 ] = CORE . Input . Mouse . currentPosition ;
touchAction = 2 ;
gestureUpdate = true ;
} break ;
/ / Check touch events
/ / NOTE : These cases need to be reviewed on a real touch screen
case SDL_FINGERDOWN :
{
CORE . Input . Touch . currentTouchState [ event . tfinger . fingerId ] = 1 ;
const int touchId = ( int ) event . tfinger . fingerId ;
CORE . Input . Touch . currentTouchState [ touchId ] = 1 ;
CORE . Input . Touch . position [ touchId ] . x = event . tfinger . x * CORE . Window . screen . width ;
CORE . Input . Touch . position [ touchId ] . y = event . tfinger . y * CORE . Window . screen . height ;
touchAction = 1 ;
gestureUpdate = true ;
realTouch = true ;
} break ;
case SDL_FINGERUP :
{
CORE . Input . Touch . currentTouchState [ event . tfinger . fingerId ] = 0 ;
const int touchId = ( int ) event . tfinger . fingerId ;
CORE . Input . Touch . currentTouchState [ touchId ] = 0 ;
CORE . Input . Touch . position [ touchId ] . x = event . tfinger . x * CORE . Window . screen . width ;
CORE . Input . Touch . position [ touchId ] . y = event . tfinger . y * CORE . Window . screen . height ;
touchAction = 0 ;
gestureUpdate = true ;
realTouch = true ;
} break ;
case SDL_FINGERMOTION :
{
CORE . Input . Touch . position [ event . tfinger . fingerId ] . x = ( float ) event . motion . x ;
CORE . Input . Touch . position [ event . tfinger . fingerId ] . y = ( float ) event . motion . y ;
const int touchId = ( int ) event . tfinger . fingerId ;
CORE . Input . Touch . position [ touchId ] . x = event . tfinger . x * CORE . Window . screen . width ;
CORE . Input . Touch . position [ touchId ] . y = event . tfinger . y * CORE . Window . screen . height ;
touchAction = 2 ;
gestureUpdate = true ;
realTouch = true ;
} break ;
/ / Check gamepad events
@ -1228,7 +1232,7 @@ void PollInputEvents(void)
}
# if defined(SUPPORT_GESTURES_SYSTEM)
if ( gestureUpdate )
if ( touchAction > - 1 )
{
/ / Process mouse events as touches to be able to use mouse - gestures
GestureEvent gestureEvent = { 0 } ;
@ -1243,7 +1247,7 @@ void PollInputEvents(void)
gestureEvent . pointCount = 1 ;
/ / Register touch points position , only one point registered
if ( touchAction = = 2 ) gestureEvent . position [ 0 ] = CORE . Input . Touch . position [ 0 ] ;
if ( touchAction = = 2 | | realTouch ) gestureEvent . position [ 0 ] = CORE . Input . Touch . position [ 0 ] ;
else gestureEvent . position [ 0 ] = GetMousePosition ( ) ;
/ / Normalize gestureEvent . position [ 0 ] for CORE . Window . screen . width and CORE . Window . screen . height
@ -1252,6 +1256,8 @@ void PollInputEvents(void)
/ / Gesture data is sent to gestures - system for processing
ProcessGestureEvent ( gestureEvent ) ;
touchAction = - 1 ;
}
# endif
}
@ -1404,6 +1410,11 @@ int InitPlatform(void)
/ / if ( platform . gamepadgamepad = = NULL ) TRACELOG ( LOG_WARNING , " PLATFORM: Unable to open game controller [ERROR: %s] " , SDL_GetError ( ) ) ;
}
/ / Disable mouse events being interpreted as touch events
/ / NOTE : This is wanted because there are SDL_FINGER * events available which provide unique data
/ / Due to the way PollInputEvents ( ) and rgestures . h are currently implemented , setting this won ' t break SUPPORT_MOUSE_GESTURES
SDL_SetHint ( SDL_HINT_TOUCH_MOUSE_EVENTS , " 0 " ) ;
SDL_EventState ( SDL_DROPFILE , SDL_ENABLE ) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -