use of org.robovm.apple.coregraphics.CGPoint in project playn by threerings.
the class RoboTouch method toTouchEvents.
private Event.Impl[] toTouchEvents(NSSet<UITouch> touches, UIEvent event) {
final Event.Impl[] events = new Event.Impl[touches.size()];
int idx = 0;
for (UITouch touch : touches) {
CGPoint loc = touch.getLocationInView(touch.getView());
// transform the point based on our current scale
IPoint xloc = platform.graphics().transformTouch((float) loc.getX(), (float) loc.getY());
// on iOS the memory address of the UITouch object is the unique id
int id = (int) touch.getHandle();
events[idx++] = new Event.Impl(new Events.Flags.Impl(), touch.getTimestamp() * 1000, xloc.x(), xloc.y(), id);
}
return events;
}
use of org.robovm.apple.coregraphics.CGPoint in project libgdx by libgdx.
the class IOSInput method toTouchEvents.
private void toTouchEvents(long touches) {
long array = NSSetExtensions.allObjects(touches);
int length = (int) NSArrayExtensions.count(array);
for (int i = 0; i < length; i++) {
long touchHandle = NSArrayExtensions.objectAtIndex$(array, i);
UITouch touch = UI_TOUCH_WRAPPER.wrap(touchHandle);
final int locX, locY;
// Get and map the location to our drawing space
{
CGPoint loc = touch.getLocationInView(touch.getWindow());
final CGRect bounds = app.getCachedBounds();
locX = (int) (loc.getX() * app.displayScaleFactor - bounds.getMinX());
locY = (int) (loc.getY() * app.displayScaleFactor - bounds.getMinY());
// app.debug("IOSInput","pos= "+loc+" bounds= "+bounds+" x= "+locX+" locY= "+locY);
}
synchronized (touchEvents) {
UITouchPhase phase = touch.getPhase();
TouchEvent event = touchEventPool.obtain();
event.x = locX;
event.y = locY;
event.phase = phase;
event.timestamp = (long) (touch.getTimestamp() * 1000000000);
touchEvents.add(event);
if (phase == UITouchPhase.Began) {
event.pointer = getFreePointer();
touchDown[event.pointer] = touch.getHandle();
touchX[event.pointer] = event.x;
touchY[event.pointer] = event.y;
deltaX[event.pointer] = 0;
deltaY[event.pointer] = 0;
numTouched++;
}
if (phase == UITouchPhase.Moved || phase == UITouchPhase.Stationary) {
event.pointer = findPointer(touch);
deltaX[event.pointer] = event.x - touchX[event.pointer];
deltaY[event.pointer] = event.y - touchY[event.pointer];
touchX[event.pointer] = event.x;
touchY[event.pointer] = event.y;
}
if (phase == UITouchPhase.Cancelled || phase == UITouchPhase.Ended) {
event.pointer = findPointer(touch);
touchDown[event.pointer] = 0;
touchX[event.pointer] = event.x;
touchY[event.pointer] = event.y;
deltaX[event.pointer] = 0;
deltaY[event.pointer] = 0;
numTouched--;
}
}
}
}
use of org.robovm.apple.coregraphics.CGPoint in project playn by threerings.
the class RoboPointer method toPointerEvent.
private Event.Impl toPointerEvent(NSSet<UITouch> touches, UIEvent event) {
for (UITouch touch : touches) {
long handle = touch.getHandle();
// if we have an active touch, we only care about that touch
if (_active == 0 || handle == _active) {
_active = handle;
CGPoint loc = touch.getLocationInView(touch.getView());
// transform the point based on our current scale
IPoint xloc = platform.graphics().transformTouch((float) loc.getX(), (float) loc.getY());
return new Event.Impl(new Events.Flags.Impl(), touch.getTimestamp() * 1000, xloc.x(), xloc.y(), true);
}
}
return null;
}
Aggregations