Search in sources :

Example 1 with UITouch

use of org.robovm.apple.uikit.UITouch 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;
}
Also used : TouchImpl(playn.core.TouchImpl) Events(playn.core.Events) CGPoint(org.robovm.apple.coregraphics.CGPoint) UIEvent(org.robovm.apple.uikit.UIEvent) IPoint(pythagoras.f.IPoint) UITouch(org.robovm.apple.uikit.UITouch) IPoint(pythagoras.f.IPoint) CGPoint(org.robovm.apple.coregraphics.CGPoint)

Example 2 with UITouch

use of org.robovm.apple.uikit.UITouch 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--;
            }
        }
    }
}
Also used : CGPoint(org.robovm.apple.coregraphics.CGPoint) UITouchPhase(org.robovm.apple.uikit.UITouchPhase) UITouch(org.robovm.apple.uikit.UITouch) CGRect(org.robovm.apple.coregraphics.CGRect) CGPoint(org.robovm.apple.coregraphics.CGPoint)

Example 3 with UITouch

use of org.robovm.apple.uikit.UITouch 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;
}
Also used : PointerImpl(playn.core.PointerImpl) CGPoint(org.robovm.apple.coregraphics.CGPoint) IPoint(pythagoras.f.IPoint) UITouch(org.robovm.apple.uikit.UITouch)

Aggregations

CGPoint (org.robovm.apple.coregraphics.CGPoint)3 UITouch (org.robovm.apple.uikit.UITouch)3 IPoint (pythagoras.f.IPoint)2 CGRect (org.robovm.apple.coregraphics.CGRect)1 UIEvent (org.robovm.apple.uikit.UIEvent)1 UITouchPhase (org.robovm.apple.uikit.UITouchPhase)1 Events (playn.core.Events)1 PointerImpl (playn.core.PointerImpl)1 TouchImpl (playn.core.TouchImpl)1