/** * Performs the actual parsing of the MotionEvent event. * * @param event The MotionEvent to process * @param preventDefault Shared preventDefault state among returned {@link AndroidTouchEventImpl} * @return Processed array of {@link AndroidTouchEventImpl}s which share a preventDefault state. */ private Touch.Event.Impl[] parseMotionEvent(MotionEvent event, Events.Flags flags) { int eventPointerCount = event.getPointerCount(); Touch.Event.Impl[] touches = new Touch.Event.Impl[eventPointerCount]; double time = event.getEventTime(); float pressure, size; int id; for (int t = 0; t < eventPointerCount; t++) { int pointerIndex = t; IPoint xy = platform.graphics().transformTouch( event.getX(pointerIndex), event.getY(pointerIndex)); pressure = event.getPressure(pointerIndex); size = event.getSize(pointerIndex); id = event.getPointerId(pointerIndex); touches[t] = new Touch.Event.Impl(flags, time, xy.x(), xy.y(), id, pressure, size); } return touches; } }
public void onTouchEnd(Event.Impl[] touches) { if (!enabled) return; if (listener != null) listener.onTouchEnd(touches); for (Event.Impl event : touches) { AbstractLayer activeLayer = activeLayers.get(event.id()); if (activeLayer != null) { dispatcher.dispatch(activeLayer, LayerListener.class, event, END); activeLayers.remove(event.id()); } } }
public void handleEvent(NativeEvent nativeEvent) { inTouchSequence = true; Events.Flags flags = new Events.Flags.Impl(); onTouchStart(toEvents(nativeEvent, flags)); if (flags.getPreventDefault()) public void handleEvent(NativeEvent nativeEvent) { if (inTouchSequence) { Events.Flags flags = new Events.Flags.Impl(); onTouchMove(toEvents(nativeEvent, flags)); if (flags.getPreventDefault()) public void handleEvent(NativeEvent nativeEvent) { if (inTouchSequence) { Events.Flags flags = new Events.Flags.Impl(); onTouchEnd(toEvents(nativeEvent, flags)); if (flags.getPreventDefault())
/** * Performs the actual parsing of the MotionEvent event. * * @param event The MotionEvent to process * @param preventDefault Shared preventDefault state among returned {@link AndroidTouchEventImpl} * @return Processed array of {@link AndroidTouchEventImpl}s which share a preventDefault state. */ private Touch.Event.Impl[] parseMotionEvent(MotionEvent event, Events.Flags flags) { int eventPointerCount = event.getPointerCount(); Touch.Event.Impl[] touches = new Touch.Event.Impl[eventPointerCount]; double time = event.getEventTime(); float pressure, size; int id; for (int t = 0; t < eventPointerCount; t++) { int pointerIndex = t; IPoint xy = platform.graphics().transformTouch( event.getX(pointerIndex), event.getY(pointerIndex)); pressure = event.getPressure(pointerIndex); size = event.getSize(pointerIndex); id = event.getPointerId(pointerIndex); touches[t] = new Touch.Event.Impl(flags, time, xy.x(), xy.y(), id, pressure, size); } return touches; } }
public void onTouchStart(Event.Impl[] touches) { if (!enabled) return; if (listener != null) listener.onTouchStart(touches); GroupLayer root = PlayN.graphics().rootLayer(); if (root.interactive()) { for (Event.Impl event : touches) { Point p = new Point(event.x(), event.y()); root.transform().inverseTransform(p, p); p.x += root.originX(); p.y += root.originY(); AbstractLayer hitLayer = (AbstractLayer)root.hitTest(p); if (hitLayer != null) { activeLayers.put(event.id(), hitLayer); dispatcher.dispatch(hitLayer, LayerListener.class, event, START); } } } }
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; } }
private Event.Impl[] toEvents(NativeEvent nativeEvent, Events.Flags flags) { // Convert the JsArray<Native Touch> to an array of Touch.Events JsArray<com.google.gwt.dom.client.Touch> nativeTouches = nativeEvent.getChangedTouches(); int nativeTouchesLen = nativeTouches.length(); Event.Impl[] touches = new Event.Impl[nativeTouchesLen]; for (int t = 0; t < nativeTouchesLen; t++) { com.google.gwt.dom.client.Touch touch = nativeTouches.get(t); float x = touch.getRelativeX(rootElement); float y = touch.getRelativeY(rootElement); Point xy = platform.graphics().transformMouse(x, y); int id = getTouchIdentifier(nativeEvent, t); touches[t] = new Event.Impl(flags, PlayN.currentTime(), xy.x, xy.y, id); } return touches; }
Event.Impl toTouch (double time, float x, float y, int idoff) { return new Event.Impl(new Events.Flags.Impl(), time, x, y, currentId+idoff); }
Event.Impl toTouch (double time, float x, float y, int idoff) { return new Event.Impl(new Events.Flags.Impl(), time, x, y, currentId+idoff); }
@Override public void cancelLayerTouches(Layer except) { double now = PlayN.currentTime(); Iterator<Map.Entry<Integer,AbstractLayer>> iter = activeLayers.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<Integer,AbstractLayer> entry = iter.next(); AbstractLayer layer = entry.getValue(); if (layer == except) continue; iter.remove(); Event.Impl event = new Event.Impl(new Events.Flags.Impl(), now, 0, 0, entry.getKey()); dispatcher.dispatch(layer, LayerListener.class, event, CANCEL); } }
public void onTouchMove(Event.Impl[] touches) { if (!enabled) return; if (listener != null) listener.onTouchMove(touches); for (Event.Impl event : touches) { AbstractLayer activeLayer = activeLayers.get(event.id()); if (activeLayer != null) { dispatcher.dispatch(activeLayer, LayerListener.class, event, MOVE); } } }
public void onTouchCancel(Event.Impl[] touches) { if (!enabled) return; if (listener != null) listener.onTouchCancel(touches); for (Event.Impl event : touches) { AbstractLayer activeLayer = activeLayers.get(event.id()); if (activeLayer != null) { dispatcher.dispatch(activeLayer, LayerListener.class, event, CANCEL); activeLayers.remove(event.id()); } } }