iOS: Added support for force-touch on capable devices.

This commit is contained in:
Alex Szpakowski 2015-09-09 19:08:52 -03:00
parent 6a32ca7a39
commit 82c8825cb5

View File

@ -123,9 +123,22 @@
return point; return point;
} }
- (float)pressureForTouch:(UITouch *)touch
{
#ifdef __IPHONE_9_0
if ([touch respondsToSelector:@selector(force)]) {
return (float) touch.force;
}
#endif
return 1.0f;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ {
for (UITouch *touch in touches) { for (UITouch *touch in touches) {
float pressure = [self pressureForTouch:touch];
if (!firstFingerDown) { if (!firstFingerDown) {
CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO]; CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO];
@ -140,13 +153,15 @@
CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch),
SDL_TRUE, locationInView.x, locationInView.y, 1.0f); SDL_TRUE, locationInView.x, locationInView.y, pressure);
} }
} }
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{ {
for (UITouch *touch in touches) { for (UITouch *touch in touches) {
float pressure = [self pressureForTouch:touch];
if (touch == firstFingerDown) { if (touch == firstFingerDown) {
/* send mouse up */ /* send mouse up */
SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
@ -155,7 +170,7 @@
CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch),
SDL_FALSE, locationInView.x, locationInView.y, 1.0f); SDL_FALSE, locationInView.x, locationInView.y, pressure);
} }
} }
@ -167,6 +182,8 @@
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{ {
for (UITouch *touch in touches) { for (UITouch *touch in touches) {
float pressure = [self pressureForTouch:touch];
if (touch == firstFingerDown) { if (touch == firstFingerDown) {
CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO]; CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO];
@ -176,7 +193,7 @@
CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch), SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch),
locationInView.x, locationInView.y, 1.0f); locationInView.x, locationInView.y, pressure);
} }
} }