scummvm/backends/platform/ios7/ios7_touch_controller.mm
Lars Sundström e0ae1a1d47 IOS7: Rework mouse movements to use iOSGraphicsManager
Previously the mouse position in the view was tracked using the
pointerPosition property. Scaling and relative mosue movements
were calculated in the view using screen properties stored in the
videoContext structure. Now when moving to iOSGraphicsManager all
that handling will be handled by the WindowedGraphicsManager,
which the iOSGraphicsManager inherit.

Rework the input code to send down pure x and y position values,
scaled according to the view content scale factor.

Remove code related to mouse movement that is no longer needed.
2023-07-03 21:50:32 +02:00

128 lines
3.6 KiB
Text

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
// Disable symbol overrides so that we can use system headers.
#define FORBIDDEN_SYMBOL_ALLOW_ALL
#include "backends/platform/ios7/ios7_touch_controller.h"
#include "backends/platform/ios7/ios7_video.h"
@implementation TouchController {
UITouch *_firstTouch;
UITouch *_secondTouch;
}
@dynamic view;
@dynamic isConnected;
- (id)initWithView:(iPhoneView *)view {
self = [super initWithView:view];
_firstTouch = NULL;
_secondTouch = NULL;
// Touches should always be present in iOS view
[self setIsConnected:YES];
return self;
}
- (UITouch *)secondTouchOtherTouchThan:(UITouch *)touch in:(NSSet *)set {
NSArray *all = [set allObjects];
for (UITouch *t in all) {
if (t != touch) {
return t;
}
}
return nil;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
switch (allTouches.count) {
case 1: {
_firstTouch = [allTouches anyObject];
if (_firstTouch.type == UITouchTypeDirect) {
CGPoint p = [self getLocationInView:_firstTouch];
[[self view] addEvent:InternalEvent(kInputTouchFirstDown, p.x, p.y)];
}
break;
}
case 2: {
_secondTouch = [self secondTouchOtherTouchThan:_firstTouch in:allTouches];
if (_secondTouch && _secondTouch.type == UITouchTypeDirect) {
CGPoint p = [self getLocationInView:_firstTouch];
[[self view] addEvent:InternalEvent(kInputTouchSecondDown, p.x, p.y)];
}
break;
}
default:
break;
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
for (UITouch *touch in allTouches) {
if (touch.type == UITouchTypeDirect) {
if (touch == _firstTouch) {
CGPoint p = [self getLocationInView:touch];
[[self view] addEvent:InternalEvent(kInputTouchFirstDragged , p.x, p.y)];
} else if (touch == _secondTouch) {
CGPoint p = [self getLocationInView:touch];
[[self view] addEvent:InternalEvent(kInputTouchSecondDragged , p.x, p.y)];
}
}
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
switch (allTouches.count) {
case 1: {
_firstTouch = [allTouches anyObject];
if (_firstTouch.type == UITouchTypeDirect) {
CGPoint p = [self getLocationInView:_firstTouch];
[[self view] addEvent:InternalEvent(kInputTouchFirstUp, p.x, p.y)];
}
break;
}
case 2: {
_secondTouch = [self secondTouchOtherTouchThan:_firstTouch in:allTouches];
if (_secondTouch && _secondTouch.type == UITouchTypeDirect) {
CGPoint p = [self getLocationInView:_firstTouch];
[[self view] addEvent:InternalEvent(kInputTouchSecondUp, p.x, p.y)];
}
break;
}
default:
break;
}
_firstTouch = nil;
_secondTouch = nil;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
_firstTouch = nil;
_secondTouch = nil;
}
@end