From 82c8825cb5135a55b23713b7cb3c4b1611a31d88 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Wed, 9 Sep 2015 19:08:52 -0300 Subject: [PATCH] iOS: Added support for force-touch on capable devices. --- src/video/uikit/SDL_uikitview.m | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/video/uikit/SDL_uikitview.m b/src/video/uikit/SDL_uikitview.m index 60cd1708e4f0a..4372cc20d4088 100644 --- a/src/video/uikit/SDL_uikitview.m +++ b/src/video/uikit/SDL_uikitview.m @@ -123,9 +123,22 @@ - (CGPoint)touchLocation:(UITouch *)touch shouldNormalize:(BOOL)normalize 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 { for (UITouch *touch in touches) { + float pressure = [self pressureForTouch:touch]; + if (!firstFingerDown) { CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO]; @@ -140,13 +153,15 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; 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 { for (UITouch *touch in touches) { + float pressure = [self pressureForTouch:touch]; + if (touch == firstFingerDown) { /* send mouse up */ SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); @@ -155,7 +170,7 @@ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; 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)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { + float pressure = [self pressureForTouch:touch]; + if (touch == firstFingerDown) { CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO]; @@ -176,7 +193,7 @@ - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch), - locationInView.x, locationInView.y, 1.0f); + locationInView.x, locationInView.y, pressure); } }