Beispiel #1
0
 public GestureArenaEntry(
     GestureArenaManager arena = null,
     int pointer = 0,
     GestureArenaMember member = null)
 {
     this._arena   = arena;
     this._pointer = pointer;
     this._member  = member;
 }
Beispiel #2
0
        internal GestureArenaEntry _add(int pointer, GestureArenaMember member)
        {
            D.assert(!this._resolved);
            D.assert(this._pointer == pointer);

            this._members.Add(member);
            this._entry = this._entry ?? GestureBinding.instance.gestureArena.add(pointer, this);
            return(new _CombiningGestureArenaEntry(this, member));
        }
Beispiel #3
0
        public GestureArenaEntry add(int pointer, GestureArenaMember member)
        {
            _CombiningGestureArenaMember combiner;

            if (!this._combiners.TryGetValue(pointer, out combiner))
            {
                combiner = new _CombiningGestureArenaMember(this, pointer);
                this._combiners[pointer] = combiner;
            }

            return(combiner._add(pointer, member));
        }
Beispiel #4
0
        public GestureArenaEntry add(int pointer, GestureArenaMember member)
        {
            _GestureArena state = this._arenas.putIfAbsent(pointer, () => {
                D.assert(this._debugLogDiagnostic(pointer, () => "★ Opening new gesture arena."));
                return(state = new _GestureArena());
            });

            state.add(member);

            D.assert(this._debugLogDiagnostic(pointer, () => $"Adding: {member}"));
            return(new GestureArenaEntry(this, pointer, member));
        }
Beispiel #5
0
        public void acceptGesture(int pointer)
        {
            D.assert(this._pointer == pointer);
            D.assert(this._winner != null || this._members.isNotEmpty());

            this._close();
            this._winner = this._winner ?? this._owner.captain ?? this._members[0];

            foreach (GestureArenaMember member in this._members)
            {
                if (member != this._winner)
                {
                    member.rejectGesture(pointer);
                }
            }

            this._winner.acceptGesture(pointer);
        }
Beispiel #6
0
        void _resolveInFavorOf(int pointer, _GestureArena state, GestureArenaMember member)
        {
            D.assert(state == this._arenas[pointer]);
            D.assert(state != null);
            D.assert(state.eagerWinner == null || state.eagerWinner == member);
            D.assert(!state.isOpen);

            this._arenas.Remove(pointer);
            foreach (GestureArenaMember rejectedMember in state.members)
            {
                if (rejectedMember != member)
                {
                    rejectedMember.rejectGesture(pointer);
                }
            }

            member.acceptGesture(pointer);
        }
Beispiel #7
0
        public void acceptGesture(int pointer)
        {
            D.assert(_pointer == pointer);
            D.assert(_winner != null || _members.isNotEmpty());

            _close();
            _winner = _winner ?? _owner.captain ?? _members[0];

            foreach (GestureArenaMember member in _members)
            {
                if (member != _winner)
                {
                    member.rejectGesture(pointer);
                }
            }

            _winner.acceptGesture(pointer);
        }
Beispiel #8
0
        internal void _resolve(GestureArenaMember member, GestureDisposition disposition)
        {
            if (this._resolved)
            {
                return;
            }

            if (disposition == GestureDisposition.rejected)
            {
                this._members.Remove(member);
                member.rejectGesture(this._pointer);
                if (this._members.isEmpty())
                {
                    this._entry.resolve(disposition);
                }
            }
            else
            {
                this._winner = this._winner ?? this._owner.captain ?? member;
                this._entry.resolve(disposition);
            }
        }
Beispiel #9
0
        internal void _resolve(GestureArenaMember member, GestureDisposition disposition)
        {
            if (_resolved)
            {
                return;
            }

            if (disposition == GestureDisposition.rejected)
            {
                _members.Remove(member);
                member.rejectGesture(_pointer);
                if (_members.isEmpty())
                {
                    _entry.resolve(disposition);
                }
            }
            else
            {
                D.assert(disposition == GestureDisposition.accepted);
                _winner = _winner ?? _owner.captain ?? member;
                _entry.resolve(disposition);
            }
        }
Beispiel #10
0
        internal void _resolve(int pointer, GestureArenaMember member, GestureDisposition disposition)
        {
            _GestureArena state;

            if (!this._arenas.TryGetValue(pointer, out state))
            {
                return;
            }

            D.assert(this._debugLogDiagnostic(pointer,
                                              () => $"{(disposition == GestureDisposition.accepted ? "Accepting" : "Rejecting")}: {member}"));

            D.assert(state.members.Contains(member));
            if (disposition == GestureDisposition.rejected)
            {
                state.members.Remove(member);
                member.rejectGesture(pointer);
                if (!state.isOpen)
                {
                    this._tryToResolveArena(pointer, state);
                }
            }
            else
            {
                if (state.isOpen)
                {
                    state.eagerWinner = state.eagerWinner ?? member;
                }
                else
                {
                    D.assert(this._debugLogDiagnostic(pointer,
                                                      () => $"Self-declared winner: {member}"));
                    this._resolveInFavorOf(pointer, state, member);
                }
            }
        }
Beispiel #11
0
 public _CombiningGestureArenaEntry(_CombiningGestureArenaMember _combiner, GestureArenaMember _member)
 {
     this._combiner = _combiner;
     this._member   = _member;
 }
Beispiel #12
0
 public void add(GestureArenaMember member)
 {
     D.assert(this.isOpen);
     this.members.Add(member);
 }
Beispiel #13
0
 public void add(GestureArenaMember member)
 {
     D.assert(isOpen);
     members.Add(member);
 }