private void handleState(JoystickDevice device, JoystickState newState)
        {
            PendingInputs.Enqueue(new JoystickButtonInput(newState.Buttons, device.LastState?.Buttons));
            PendingInputs.Enqueue(new JoystickAxisInput(newState.GetAxes()));

            device.LastState = newState;
        }
Ejemplo n.º 2
0
 protected override void OnHover(MotionEvent hoverEvent)
 {
     PendingInputs.Enqueue(new MousePositionAbsoluteInput {
         Position = getEventPosition(hoverEvent)
     });
     PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Right, hoverEvent.IsButtonPressed(MotionEventButtonState.StylusPrimary)));
 }
        private void handlePresses(NSSet <UIPress> presses, UIPressesEvent evt)
        {
            if (!IsActive)
            {
                return;
            }

            foreach (var press in presses.Cast <UIPress>())
            {
                if (press.Key == null)
                {
                    continue;
                }

                var key = keyFromCode(press.Key.KeyCode);
                if (key == Key.Unknown || host.TextFieldHandler.Handled(key))
                {
                    continue;
                }

                switch (press.Phase)
                {
                case UIPressPhase.Began:
                    PendingInputs.Enqueue(new KeyboardKeyInput(key, true));
                    break;

                case UIPressPhase.Ended:
                case UIPressPhase.Cancelled:
                    PendingInputs.Enqueue(new KeyboardKeyInput(key, false));
                    break;
                }
            }
        }
Ejemplo n.º 4
0
        private void handleShouldChangeCharacters(NSRange range, string text)
        {
            if (text.Length == 0)
            {
                if (range.Length > 0)
                {
                    Key key = range.Location < IOSGameView.DummyTextField.CURSOR_POSITION ? Key.BackSpace : Key.Delete;
                    PendingInputs.Enqueue(new KeyboardKeyInput(key, true));
                    PendingInputs.Enqueue(new KeyboardKeyInput(key, false));
                }
                return;
            }

            foreach (char c in text)
            {
                Key?key = keyForString(char.ToString(c), out bool upper);

                if (key.HasValue)
                {
                    if (upper)
                    {
                        PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, true));
                    }

                    PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, true));
                    PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, false));

                    if (upper)
                    {
                        PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, false));
                    }
                }
            }
        }
Ejemplo n.º 5
0
 private void handlePointerEvent(MotionEvent e)
 {
     PendingInputs.Enqueue(new MousePositionAbsoluteInput
     {
         Position = new osuTK.Vector2(e.GetX() * view.ScaleX, e.GetY() * view.ScaleY)
     });
 }
Ejemplo n.º 6
0
 private void locationUpdated(CGPoint location)
 {
     PendingInputs.Enqueue(new MousePositionAbsoluteInput
     {
         Position = new Vector2((float)location.X * view.Scale, (float)location.Y * view.Scale)
     });
 }
Ejemplo n.º 7
0
        private void panOffsetUpdated()
        {
            CGPoint translation = panGestureRecognizer.TranslationInView(view);

            Vector2 delta;

            switch (panGestureRecognizer.State)
            {
            case UIGestureRecognizerState.Began:
                // consume initial value.
                delta = new Vector2((float)translation.X, (float)translation.Y);
                break;

            default:
                // only consider relative change from previous value.
                delta = new Vector2((float)(translation.X - lastScrollTranslation.X), (float)(translation.Y - lastScrollTranslation.Y));
                break;
            }

            lastScrollTranslation = translation;

            PendingInputs.Enqueue(new MouseScrollRelativeInput
            {
                IsPrecise = true,
                Delta     = delta * scroll_rate_adjust
            });
        }
 private void handleHover(object sender, View.HoverEventArgs e)
 {
     PendingInputs.Enqueue(new MousePositionAbsoluteInput {
         Position = getEventPosition(e.Event)
     });
     PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Right, e.Event.ButtonState == MotionEventButtonState.StylusPrimary));
 }
Ejemplo n.º 9
0
        private void handleIndirectPointer(UITouch touch, UIEventButtonMask buttonMask, Vector2 location)
        {
            PendingInputs.Enqueue(new MousePositionAbsoluteInput {
                Position = location
            });

            // Indirect pointer means the touch came from a mouse cursor, and wasn't a physical touch on the screen
            switch (touch.Phase)
            {
            case UITouchPhase.Began:
            case UITouchPhase.Moved:
                // only one button can be in a "down" state at once. all previous buttons are automatically released.
                // we need to handle this assumption at our end.
                if (lastButtonMask != null && lastButtonMask != buttonMask)
                {
                    PendingInputs.Enqueue(new MouseButtonInput(buttonFromMask(lastButtonMask.Value), false));
                }

                PendingInputs.Enqueue(new MouseButtonInput(buttonFromMask(buttonMask), true));
                lastButtonMask = buttonMask;
                break;

            case UITouchPhase.Cancelled:
            case UITouchPhase.Ended:
                Debug.Assert(lastButtonMask != null);

                PendingInputs.Enqueue(new MouseButtonInput(buttonFromMask(lastButtonMask.Value), false));
                lastButtonMask = null;
                break;
            }
        }
        private void handleTouch(object sender, View.TouchEventArgs e)
        {
            if (e.Event.Action == MotionEventActions.Move)
            {
                for (int i = 0; i < Math.Min(e.Event.PointerCount, TouchState.MAX_TOUCH_COUNT); i++)
                {
                    var touch = getEventTouch(e.Event, i);
                    PendingInputs.Enqueue(new TouchInput(touch, true));
                }
            }
            else if (e.Event.ActionIndex < TouchState.MAX_TOUCH_COUNT)
            {
                var touch = getEventTouch(e.Event, e.Event.ActionIndex);

                switch (e.Event.ActionMasked)
                {
                case MotionEventActions.Down:
                case MotionEventActions.PointerDown:
                    PendingInputs.Enqueue(new TouchInput(touch, true));
                    break;

                case MotionEventActions.Up:
                case MotionEventActions.PointerUp:
                case MotionEventActions.Cancel:
                    PendingInputs.Enqueue(new TouchInput(touch, false));
                    break;
                }
            }
        }
Ejemplo n.º 11
0
        protected override void OnTouch(MotionEvent touchEvent)
        {
            if (touchEvent.Action == MotionEventActions.Move)
            {
                for (int i = 0; i < Math.Min(touchEvent.PointerCount, TouchState.MAX_TOUCH_COUNT); i++)
                {
                    var touch = getEventTouch(touchEvent, i);
                    PendingInputs.Enqueue(new TouchInput(touch, true));
                }
            }
            else if (touchEvent.ActionIndex < TouchState.MAX_TOUCH_COUNT)
            {
                var touch = getEventTouch(touchEvent, touchEvent.ActionIndex);

                switch (touchEvent.ActionMasked)
                {
                case MotionEventActions.Down:
                case MotionEventActions.PointerDown:
                    PendingInputs.Enqueue(new TouchInput(touch, true));
                    break;

                case MotionEventActions.Up:
                case MotionEventActions.PointerUp:
                case MotionEventActions.Cancel:
                    PendingInputs.Enqueue(new TouchInput(touch, false));
                    break;
                }
            }
        }
Ejemplo n.º 12
0
        private void handleTouches(object sender, View.TouchEventArgs e)
        {
            int pointerId = e.Event.GetPointerId(e.Event.ActionIndex);

            MouseButton button = getMouseButton(pointerId);

            if (button == MouseButton.Left)
            {
                PendingInputs.Enqueue(new MousePositionAbsoluteInput
                {
                    Position = new osuTK.Vector2(e.Event.GetX() * view.ScaleX, e.Event.GetY() * view.ScaleY)
                });
            }

            switch (e.Event.Action & MotionEventActions.Mask)
            {
            case MotionEventActions.Move:
            case MotionEventActions.Down:
            case MotionEventActions.PointerDown:
                PendingInputs.Enqueue(new MouseButtonInput(button, true));
                break;

            case MotionEventActions.Up:
            case MotionEventActions.PointerUp:
                PendingInputs.Enqueue(new MouseButtonInput(button, false));
                break;
            }
        }
        protected override void OnKeyDown(Keycode keycode, KeyEvent e)
        {
            var key = GetKeyCodeAsKey(keycode);

            if (key != Key.Unknown)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(key, true));
            }
        }
Ejemplo n.º 14
0
        private void keyUp(Keycode keycode, KeyEvent e)
        {
            var key = GetKeyCodeAsKey(keycode);

            if (key != Key.Unknown)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(key, false));
            }
        }
        private void handleShouldReturn()
        {
            if (!IsActive)
            {
                return;
            }

            PendingInputs.Enqueue(new KeyboardKeyInput(Key.Enter, true));
            PendingInputs.Enqueue(new KeyboardKeyInput(Key.Enter, false));
        }
        private void handleShouldChangeCharacters(NSRange range, string text)
        {
            if (!IsActive)
            {
                return;
            }

            if (text.Length == 0)
            {
                Key key = range.Location < IOSGameView.HiddenTextField.CURSOR_POSITION ? Key.BackSpace : Key.Delete;

                // NOTE: this makes the assumption that Key.AltLeft triggers the WordPrevious platform action
                if (range.Length > 1)
                {
                    PendingInputs.Enqueue(new KeyboardKeyInput(Key.AltLeft, true));
                }

                if (range.Length > 0)
                {
                    PendingInputs.Enqueue(new KeyboardKeyInput(key, true));
                    PendingInputs.Enqueue(new KeyboardKeyInput(key, false));
                }

                if (range.Length > 1)
                {
                    PendingInputs.Enqueue(new KeyboardKeyInput(Key.AltLeft, false));
                }

                return;
            }

            foreach (char c in text)
            {
                Key?key = keyForString(char.ToString(c), out bool upper);

                if (!key.HasValue)
                {
                    continue;
                }

                if (upper)
                {
                    PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, true));
                }

                PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, true));
                PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, false));

                if (upper)
                {
                    PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, false));
                }
            }
        }
        private void handleGsKeyEvent(int keyCode, bool isDown)
        {
            if (!IsActive)
            {
                return;
            }

            var key = keyFromCode((UIKeyboardHidUsage)keyCode);

            if (key == Key.Unknown || host.TextFieldHandler.Handled(key))
            {
                return;
            }

            PendingInputs.Enqueue(new KeyboardKeyInput(key, isDown));
        }
Ejemplo n.º 18
0
        private void handleTouches(object sender, View.TouchEventArgs e)
        {
            handlePointerEvent(e.Event);

            switch (e.Event.Action & MotionEventActions.Mask)
            {
            case MotionEventActions.Down:
            case MotionEventActions.Move:
                PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, true));
                break;

            case MotionEventActions.Up:
                PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, false));
                break;
            }
        }
        protected override void OnTouch(MotionEvent touchEvent)
        {
            Touch touch;

            switch (touchEvent.ActionMasked)
            {
            // MotionEventActions.Down arrives at the beginning of a touch event chain and implies the 0th pointer is pressed.
            // ActionIndex is generally not valid here.
            case MotionEventActions.Down:
                if (tryGetEventTouch(touchEvent, 0, out touch))
                {
                    PendingInputs.Enqueue(new TouchInput(touch, true));
                }
                break;

            // events that apply only to the ActionIndex pointer (other pointers' states remain unchanged)
            case MotionEventActions.PointerDown:
            case MotionEventActions.PointerUp:
                if (touchEvent.ActionIndex < TouchState.MAX_TOUCH_COUNT)
                {
                    if (tryGetEventTouch(touchEvent, touchEvent.ActionIndex, out touch))
                    {
                        PendingInputs.Enqueue(new TouchInput(touch, touchEvent.ActionMasked == MotionEventActions.PointerDown));
                    }
                }

                break;

            // events that apply to every pointer (up to PointerCount).
            case MotionEventActions.Move:
            case MotionEventActions.Up:
            case MotionEventActions.Cancel:
                for (int i = 0; i < Math.Min(touchEvent.PointerCount, TouchState.MAX_TOUCH_COUNT); i++)
                {
                    if (tryGetEventTouch(touchEvent, i, out touch))
                    {
                        PendingInputs.Enqueue(new TouchInput(touch, touchEvent.ActionMasked == MotionEventActions.Move));
                    }
                }

                break;

            default:
                Logger.Log($"Unknown touch event action: {touchEvent.Action}, masked: {touchEvent.ActionMasked}");
                break;
            }
        }
        public override bool Initialize(GameHost host)
        {
            if (!(UIApplication.SharedApplication is GameUIApplication game))
            {
                return(false);
            }

            game.KeyEvent += (int keyCode, bool isDown) =>
            {
                if (keyMap.ContainsKey(keyCode))
                {
                    PendingInputs.Enqueue(new KeyboardKeyInput(keyMap[keyCode], isDown));
                }
            };

            return(true);
        }
Ejemplo n.º 21
0
        private void handleKeyboardEvent(object sender, KeyboardKeyEventArgs e)
        {
            var rawState = e.Keyboard;

            if (lastRawState != null && rawState.Equals(lastRawState))
            {
                return;
            }
            lastRawState = rawState;

            var newState = new TkKeyboardState(rawState);

            PendingInputs.Enqueue(new KeyboardKeyInput(newState.Keys, lastEventState?.Keys));

            lastEventState = newState;

            FrameStatistics.Increment(StatisticsCounterType.KeyEvents);
        }
Ejemplo n.º 22
0
        private void handleTouches(object sender, View.TouchEventArgs e)
        {
            PendingInputs.Enqueue(new MousePositionAbsoluteInput
            {
                Position = new osuTK.Vector2(e.Event.GetX() * view.ScaleX, e.Event.GetY() * view.ScaleY)
            });

            switch (e.Event.Action & MotionEventActions.Mask)
            {
            case MotionEventActions.Down:
            case MotionEventActions.Move:
                PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, true));
                break;

            case MotionEventActions.Up:
                PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, false));
                break;
            }
        }
Ejemplo n.º 23
0
        private void dispatchEvent(byte eventType, byte key, byte velocity)
        {
            Logger.Log($"Handling MIDI event {eventType:X2}:{key:X2}:{velocity:X2}");

            switch (eventType)
            {
            case MidiEvent.NoteOn when velocity != 0:
                Logger.Log($"NoteOn: {(MidiKey)key}/{velocity / 128f:P}");
                PendingInputs.Enqueue(new MidiKeyInput((MidiKey)key, velocity, true));
                FrameStatistics.Increment(StatisticsCounterType.MidiEvents);
                break;

            case MidiEvent.NoteOff:
            case MidiEvent.NoteOn when velocity == 0:
                Logger.Log($"NoteOff: {(MidiKey)key}/{velocity / 128f:P}");
                PendingInputs.Enqueue(new MidiKeyInput((MidiKey)key, 0, false));
                FrameStatistics.Increment(StatisticsCounterType.MidiEvents);
                break;
            }
        }
Ejemplo n.º 24
0
        private void handleUITouch(UITouch touch)
        {
            var location = touch.LocationInView(null);

            PendingInputs.Enqueue(new MousePositionAbsoluteInput {
                Position = new Vector2((float)location.X * view.Scale, (float)location.Y * view.Scale)
            });

            switch (touch.Phase)
            {
            case UITouchPhase.Moved:
            case UITouchPhase.Began:
                PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, true));
                break;

            case UITouchPhase.Cancelled:
            case UITouchPhase.Ended:
                PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, false));
                break;
            }
        }
Ejemplo n.º 25
0
        private void dispatchEvent(byte eventType, byte key, byte velocity)
        {
            Logger.Log($"Handling MIDI event {eventType:X2}:{key:X2}:{velocity:X2}");

            // Low nibble only contains channel data in note on/off messages
            // Ignore to receive messages from all channels
            switch (eventType & 0xF0)
            {
            case MidiEvent.NoteOn when velocity != 0:
                Logger.Log($"NoteOn: {(MidiKey)key}/{velocity / 128f:P}");
                PendingInputs.Enqueue(new MidiKeyInput((MidiKey)key, velocity, true));
                FrameStatistics.Increment(StatisticsCounterType.MidiEvents);
                break;

            case MidiEvent.NoteOff:
            case MidiEvent.NoteOn when velocity == 0:
                Logger.Log($"NoteOff: {(MidiKey)key}/{velocity / 128f:P}");
                PendingInputs.Enqueue(new MidiKeyInput((MidiKey)key, 0, false));
                FrameStatistics.Increment(StatisticsCounterType.MidiEvents);
                break;
            }
        }
        protected void HandleState(OsuTKMouseState state, OsuTKMouseState lastState, bool isAbsolutePosition)
        {
            if (lastState == null || isAbsolutePosition)
            {
                PendingInputs.Enqueue(new MousePositionAbsoluteInput {
                    Position = state.Position
                });
                currentPosition = state.Position;
            }
            else
            {
                var delta = state.Position - lastState.Position;

                if (delta != Vector2.Zero)
                {
                    PendingInputs.Enqueue(new MousePositionRelativeInput {
                        Delta = delta
                    });
                    currentPosition += delta;
                }
            }

            if (lastState != null && state.WasActive)
            {
                var scrollDelta = state.Scroll - lastState.Scroll;

                if (scrollDelta != Vector2.Zero)
                {
                    PendingInputs.Enqueue(new MouseScrollRelativeInput {
                        Delta = scrollDelta, IsPrecise = state.HasPreciseScroll
                    });
                }
            }

            PendingInputs.Enqueue(new MouseButtonInput(state.Buttons, lastState?.Buttons));

            FrameStatistics.Increment(StatisticsCounterType.MouseEvents);
        }
Ejemplo n.º 27
0
        private void handleUITouch(UITouch touch, UIEvent evt)
        {
            var location = touch.LocationInView(null);

            PendingInputs.Enqueue(new MousePositionAbsoluteInput {
                Position = new Vector2((float)location.X * view.Scale, (float)location.Y * view.Scale)
            });

            switch (touch.Phase)
            {
            case UITouchPhase.Moved:
            case UITouchPhase.Began:
                if (rightClickSupport && evt.ButtonMask == UIEventButtonMask.Secondary)
                {
                    pendingRightClickTouches.Add(touch);
                    PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Right, true));
                }
                else
                {
                    PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, true));
                }

                break;

            case UITouchPhase.Cancelled:
            case UITouchPhase.Ended:
                if (pendingRightClickTouches.Contains(touch))
                {
                    pendingRightClickTouches.Remove(touch);
                    PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Right, false));
                }
                else
                {
                    PendingInputs.Enqueue(new MouseButtonInput(MouseButton.Left, false));
                }
                break;
            }
        }
Ejemplo n.º 28
0
        private void handleTouch(UITouch uiTouch, Vector2 location)
        {
            TouchSource?existingSource = getTouchSource(uiTouch);

            if (uiTouch.Phase == UITouchPhase.Began)
            {
                // need to assign the new touch.
                Debug.Assert(existingSource == null);

                existingSource = assignNextAvailableTouchSource(uiTouch);
            }

            if (existingSource == null)
            {
                return;
            }

            var touch = new Touch(existingSource.Value, location);

            // standard touch handling
            switch (uiTouch.Phase)
            {
            case UITouchPhase.Began:
            case UITouchPhase.Moved:
                PendingInputs.Enqueue(new TouchInput(touch, true));
                break;

            case UITouchPhase.Cancelled:
            case UITouchPhase.Ended:
                PendingInputs.Enqueue(new TouchInput(touch, false));

                // touch no longer valid, remove from reference array.
                activeTouches[(int)existingSource] = null;
                break;
            }
        }
Ejemplo n.º 29
0
 private void enqueueInput(IInput input)
 {
     PendingInputs.Enqueue(input);
     FrameStatistics.Increment(StatisticsCounterType.KeyEvents);
 }
        private void handleKeyCommand(UIKeyCommand cmd)
        {
            Key? key;
            bool upper = false;

            // UIKeyCommand constants are not actually constants, so we can't use a switch
            if (cmd.Input == UIKeyCommand.LeftArrow)
            {
                key = Key.Left;
            }
            else if (cmd.Input == UIKeyCommand.RightArrow)
            {
                key = Key.Right;
            }
            else if (cmd.Input == UIKeyCommand.UpArrow)
            {
                key = Key.Up;
            }
            else if (cmd.Input == UIKeyCommand.DownArrow)
            {
                key = Key.Down;
            }
            else
            {
                key = keyForString(cmd.Input, out upper);
            }

            if (!key.HasValue)
            {
                return;
            }

            bool shiftHeld  = (cmd.ModifierFlags & UIKeyModifierFlags.Shift) > 0 || upper;
            bool superHeld  = (cmd.ModifierFlags & UIKeyModifierFlags.Command) > 0;
            bool ctrlHeld   = (cmd.ModifierFlags & UIKeyModifierFlags.Control) > 0;
            bool optionHeld = (cmd.ModifierFlags & UIKeyModifierFlags.Alternate) > 0;

            if (shiftHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, true));
            }
            if (superHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LWin, true));
            }
            if (ctrlHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LControl, true));
            }
            if (optionHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LAlt, true));
            }

            PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, true));
            PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, false));

            if (optionHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LAlt, false));
            }
            if (ctrlHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LControl, false));
            }
            if (superHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LWin, false));
            }
            if (shiftHeld)
            {
                PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, false));
            }
        }