@ -971,6 +971,23 @@ void SetMouseCursor(int cursor)
CORE . Input . Mouse . cursor = cursor ;
}
static void UpdateSDLTouchPoints ( SDL_TouchFingerEvent event )
{
CORE . Input . Touch . pointCount = SDL_GetNumTouchFingers ( event . touchId ) ;
for ( int i = 0 ; i < CORE . Input . Touch . pointCount ; i + + )
{
SDL_Finger * finger = SDL_GetTouchFinger ( event . touchId , i ) ;
CORE . Input . Touch . pointId [ i ] = finger - > id ;
CORE . Input . Touch . position [ i ] . x = finger - > x * CORE . Window . screen . width ;
CORE . Input . Touch . position [ i ] . y = finger - > y * CORE . Window . screen . height ;
CORE . Input . Touch . currentTouchState [ i ] = 1 ;
}
for ( int i = CORE . Input . Touch . pointCount ; i < MAX_TOUCH_POINTS ; i + + )
CORE . Input . Touch . currentTouchState [ i ] = 0 ;
}
/ / Register all input events
void PollInputEvents ( void )
{
@ -1009,15 +1026,7 @@ void PollInputEvents(void)
/ / Register previous touch states
for ( int i = 0 ; i < MAX_TOUCH_POINTS ; i + + ) CORE . Input . Touch . previousTouchState [ i ] = CORE . Input . Touch . currentTouchState [ i ] ;
/ / Reset touch positions
/ / TODO : It resets on target platform the mouse position and not filled again until a move - event ,
/ / so , if mouse is not moved it returns a ( 0 , 0 ) position . . . this behaviour should be reviewed !
/ / for ( int i = 0 ; i < MAX_TOUCH_POINTS ; i + + ) CORE . Input . Touch . position [ i ] = ( Vector2 ) { 0 , 0 } ;
/ / Map touch position to mouse position for convenience
/ / WARNING : If the target desktop device supports touch screen , this behavious should be reviewed !
/ / https : / / www . codeproject . com / Articles / 668404 / Programming - for - Multi - Touch
/ / https : / / docs . microsoft . com / en - us / windows / win32 / wintouch / getting - started - with - multi - touch - messages
CORE . Input . Touch . position [ 0 ] = CORE . Input . Mouse . currentPosition ;
int touchAction = - 1 ; / / 0 - TOUCH_ACTION_UP , 1 - TOUCH_ACTION_DOWN , 2 - TOUCH_ACTION_MOVE
@ -1207,34 +1216,21 @@ void PollInputEvents(void)
touchAction = 2 ;
} break ;
/ / Check touch events
/ / NOTE : These cases need to be reviewed on a real touch screen
case SDL_FINGERDOWN :
{
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 ;
UpdateSDLTouchPoints ( event . tfinger ) ;
touchAction = 1 ;
realTouch = true ;
} break ;
case SDL_FINGERUP :
{
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 ;
UpdateSDLTouchPoints ( event . tfinger ) ;
touchAction = 0 ;
realTouch = true ;
} break ;
case SDL_FINGERMOTION :
{
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 ;
UpdateSDLTouchPoints ( event . tfinger ) ;
touchAction = 2 ;
realTouch = true ;
} break ;