示例#1
0
        private void Instance_Pressed(UINavigationManager sender, UINavigationButtons button)
        {
            if (!IsEnabled)
            {
                return;
            }

            if (Windows.UI.ViewManagement.InputPane.GetForCurrentView().Visible)
            {
                return;
            }

            if (IsRequireFocus && !_NowFocusingElement)
            {
                return;
            }

            if (!button.HasFlag(Kind))
            {
                return;
            }

            if (Hold && !_Holding)
            {
                return;
            }

            _Holding = false;

            foreach (var action in Actions.Cast <IAction>())
            {
                action.Execute(this.AssociatedObject, null);
            }
        }
        private async void Instance_Pressed(UINavigationManager sender, UINavigationButtons button)
        {
            await _UIDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                if (FocusManager.GetFocusedElement() != AssociatedObject)
                {
                    return;
                }

                if (button.HasFlag(UINavigationButtons.Up))
                {
                    FocusManager.TryMoveFocus(FocusNavigationDirection.Up);
                }
                else if (button.HasFlag(UINavigationButtons.Down))
                {
                    FocusManager.TryMoveFocus(FocusNavigationDirection.Down);
                }
                else if (button.HasFlag(UINavigationButtons.Right))
                {
                    FocusManager.TryMoveFocus(FocusNavigationDirection.Right);
                }
                else if (button.HasFlag(UINavigationButtons.Left))
                {
                    FocusManager.TryMoveFocus(FocusNavigationDirection.Left);
                }
            });
        }
示例#3
0
 private void Instance_Holding(UINavigationManager sender, UINavigationButtons button)
 {
     if (Hold && button.HasFlag(Kind))
     {
         _Holding = true;
     }
 }
示例#4
0
 private async void Instance_Holding(UINavigationManager sender, UINavigationButtons button)
 {
     await _UIDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
     {
         if (Hold && button.HasFlag(Kind))
         {
             _Holding = true;
         }
     });
 }
示例#5
0
        private void _DispatcherTimer_Tick(object sender, object e)
        {
            // コントローラー入力をチェック
            foreach (var controller in UINavigationController.UINavigationControllers.Take(1))
            {
                var currentInput = controller.GetCurrentReading();

                // ボタンを離した瞬間を検出
                var pressing = RequiredUINavigationButtonsHelper.ToUINavigationButtons(currentInput.RequiredButtons)
                               | OptionalUINavigationButtonsHelper.ToUINavigationButtons(currentInput.OptionalButtons);

//                var trigger = pressing & (_PrevPressingButtons ^ pressing);
                var released = _PrevPressingButtons & (_PrevPressingButtons ^ pressing);

                if (released != UINavigationButtons.None)
                {
                    Pressed?.Invoke(this, released);
                }

                // ホールド入力の検出
                UINavigationButtons holdingButtons = UINavigationButtons.None;
                foreach (var target in __InputDetectTargets)
                {
                    if (pressing.HasFlag(target))
                    {
                        if (!_ProcessedHoldingButtons.HasFlag(target))
                        {
                            var time = _ButtonHold[target] += __InputPollingInterval;

                            if (time > __HoldDetectTime)
                            {
                                holdingButtons           |= target;
                                _ProcessedHoldingButtons |= target;
                            }
                        }
                    }
                    else
                    {
                        _ButtonHold[target]      = TimeSpan.Zero;
                        _ProcessedHoldingButtons = (((UINavigationButtons)0) ^ target) & _ProcessedHoldingButtons;
                    }
                }

                if (holdingButtons != UINavigationButtons.None)
                {
                    Holding?.Invoke(this, holdingButtons);
                }

                // トリガー検出用に前フレームの入力情報を保存
                _PrevPressingButtons = pressing;
            }
        }
示例#6
0
        private void UINavigationManager_Pressed(UINavigationManager sender, UINavigationButtons buttons)
        {
            var splitView = GetTemplateChild("ContentSplitView") as SplitView;

            if (_IsFocusing && buttons == UINavigationButtons.Left)
            {
                LeftInputCount++;
                if (LeftInputCount > 1)
                {
                    splitView.IsPaneOpen = true;
                }
            }
            else
            {
                LeftInputCount = 0;

                if (buttons == UINavigationButtons.Accept || buttons == UINavigationButtons.Right)
                {
                    splitView.IsPaneOpen = false;
                }
            }
        }
示例#7
0
        private void Instance_Pressed(UINavigationManager sender, UINavigationButtons button)
        {
            if (FocusManager.GetFocusedElement() != AssociatedObject)
            {
                return;
            }

            if (button.HasFlag(UINavigationButtons.Up))
            {
                FocusManager.TryMoveFocus(FocusNavigationDirection.Up);
            }
            else if (button.HasFlag(UINavigationButtons.Down))
            {
                FocusManager.TryMoveFocus(FocusNavigationDirection.Down);
            }
            else if (button.HasFlag(UINavigationButtons.Right))
            {
                FocusManager.TryMoveFocus(FocusNavigationDirection.Right);
            }
            else if (button.HasFlag(UINavigationButtons.Left))
            {
                FocusManager.TryMoveFocus(FocusNavigationDirection.Left);
            }
        }
示例#8
0
        static public OptionalUINavigationButtons ToOptionalButtons(this UINavigationButtons kind)
        {
            var val = ((int)kind & 0x000FFF00) >> 8;

            return((OptionalUINavigationButtons)val);
        }
示例#9
0
        static public RequiredUINavigationButtons ToRequiredButtons(this UINavigationButtons kind)
        {
            var val = (int)kind & 0x000000FF;

            return((RequiredUINavigationButtons)val);
        }