示例#1
0
 void handleEvent(PointerEvent evt)
 {
     D.assert(evt.pointer == this.pointer);
     if (evt is PointerMoveEvent)
     {
         if (!this.isWithinGlobalTolerance(evt, Constants.kTouchSlop))
         {
             this.cancel();
         }
         else
         {
             this._lastPosition = OffsetPair.fromEventPosition(evt);
         }
     }
     else if (evt is PointerCancelEvent)
     {
         this.cancel();
     }
     else if (evt is PointerUpEvent)
     {
         this.stopTrackingPointer(this.handleEvent);
         this._finalPosition = OffsetPair.fromEventPosition(evt);
         this._check();
     }
 }
示例#2
0
        protected override void handlePrimaryPointer(PointerEvent evt)
        {
            if (evt is PointerUpEvent)
            {
                if (this._longPressAccepted)
                {
                    if (this.onLongPressUp != null)
                    {
                        this.invokeCallback <object>("onLongPressUp", () => {
                            this.onLongPressUp();
                            return(null);
                        });
                    }

                    if (this.onLongPressEnd != null)
                    {
                        this.invokeCallback <object>("onLongPressEnd", () => {
                            this.onLongPressEnd(new LongPressEndDetails(
                                                    globalPosition: evt.position,
                                                    localPosition: evt.localPosition));
                            return(null);
                        });
                    }

                    this._longPressAccepted = true;
                }
                else
                {
                    this.resolve(GestureDisposition.rejected);
                }
            }
            else if (evt is PointerDownEvent || evt is PointerCancelEvent)
            {
                this._longPressAccepted = false;
                this._longPressOrigin   = OffsetPair.fromEventPosition(evt);
            }
            else if (evt is PointerMoveEvent && this._longPressAccepted && this.onLongPressMoveUpdate != null)
            {
                this.invokeCallback <object>("onLongPressMoveUpdate", () => {
                    this.onLongPressMoveUpdate(new LongPressMoveUpdateDetails(
                                                   globalPosition: evt.position,
                                                   localPosition: evt.localPosition,
                                                   offsetFromOrigin: evt.position - this._longPressOrigin.global,
                                                   localOffsetFromOrigin: evt.localPosition - this._longPressOrigin.local
                                                   ));
                    return(null);
                });
            }
        }
 public override void addAllowedPointer(PointerDownEvent Event)
 {
     if (!(Event is PointerUpEvent) && Event.pressureMax <= 1.0f)
     {
         resolve(GestureDisposition.rejected);
     }
     else
     {
         startTrackingPointer(Event.pointer, Event.transform);
         if (_state == _ForceState.ready)
         {
             _state        = _ForceState.possible;
             _lastPosition = OffsetPair.fromEventPosition(Event);
         }
     }
 }
示例#4
0
 public _TapGesture(
     MultiTapGestureRecognizer gestureRecognizer,
     PointerEvent evt,
     TimeSpan longTapDelay
     ) : base(
         evt: (PointerDownEvent)evt,
         entry: GestureBinding.instance.gestureArena.add(evt.pointer, gestureRecognizer),
         doubleTapMinTime: Constants.kDoubleTapMinTime
         )
 {
     this.gestureRecognizer = gestureRecognizer;
     this._lastPosition     = OffsetPair.fromEventPosition(evt);
     this.startTrackingPointer(this.handleEvent, evt.transform);
     if (longTapDelay > TimeSpan.Zero)
     {
         this._timer = Window.instance.run(longTapDelay, () => {
             this._timer = null;
             this.gestureRecognizer._dispatchLongTap(evt.pointer, this._lastPosition);
         });
     }
 }
        protected override void handleEvent(PointerEvent Event)
        {
            D.assert(_state != _ForceState.ready);
            if (Event is PointerMoveEvent || Event is PointerDownEvent)
            {
                if (Event.pressure > Event.pressureMax || Event.pressure < Event.pressureMin)
                {
                    //debugPrint(
                    UnityEngine.Debug.Log(
                        "The reported device pressure " + Event.pressure.ToString() +
                        " is outside of the device pressure range where: " +
                        Event.pressureMin.ToString() + " <= pressure <= " + Event.pressureMax.ToString()
                        );
                }

                float pressure = interpolation(Event.pressureMin, Event.pressureMax, Event.pressure);
                D.assert((pressure >= 0.0 && pressure <= 1.0) || pressure.isNaN());
                _lastPosition = OffsetPair.fromEventPosition(Event);
                _lastPressure = pressure;
                if (_state == _ForceState.possible)
                {
                    if (pressure > startPressure)
                    {
                        _state = _ForceState.started;
                        resolve(GestureDisposition.accepted);
                    }
                    else if (Event.delta.distanceSquared > 18.0f)
                    {
                        resolve(GestureDisposition.rejected);
                    }
                }

                if (pressure > startPressure && _state == _ForceState.accepted)
                {
                    _state = _ForceState.started;
                    if (onStart != null)
                    {
                        invokeCallback("onStart", () => onStart(
                                           new ForcePressDetails(
                                               pressure: pressure,
                                               globalPosition: _lastPosition.global,
                                               localPosition: _lastPosition.local)));
                    }
                }

                if (onPeak != null && pressure > peakPressure && (_state == _ForceState.started))
                {
                    _state = _ForceState.peaked;
                    if (onPeak != null)
                    {
                        invokeCallback("onPeak", () => onPeak(new ForcePressDetails(
                                                                  pressure: pressure,
                                                                  globalPosition: Event.position,
                                                                  localPosition: Event.localPosition
                                                                  )));
                    }
                }

                if (onUpdate != null && !pressure.isNaN() &&
                    (_state == _ForceState.started || _state == _ForceState.peaked))
                {
                    if (onUpdate != null)
                    {
                        invokeCallback("onUpdate", () => onUpdate(new ForcePressDetails(
                                                                      pressure: pressure,
                                                                      globalPosition: Event.position,
                                                                      localPosition: Event.localPosition
                                                                      )));
                    }
                }
            }

            stopTrackingIfPointerNoLongerDown(Event);
        }