Esempio n. 1
0
        void OnKeyDown(KeyDownEvent evt)
        {
            SliderKey sliderKey    = SliderKey.None;
            bool      isHorizontal = direction == SliderDirection.Horizontal;

            if (isHorizontal && evt.keyCode == KeyCode.Home || !isHorizontal && evt.keyCode == KeyCode.End)
            {
                sliderKey = inverted ? SliderKey.Highest : SliderKey.Lowest;
            }
            else if (isHorizontal && evt.keyCode == KeyCode.End || !isHorizontal && evt.keyCode == KeyCode.Home)
            {
                sliderKey = inverted ? SliderKey.Lowest : SliderKey.Highest;
            }
            else if (isHorizontal && evt.keyCode == KeyCode.PageUp || !isHorizontal && evt.keyCode == KeyCode.PageDown)
            {
                sliderKey = inverted ? SliderKey.HigherPage : SliderKey.LowerPage;
            }
            else if (isHorizontal && evt.keyCode == KeyCode.PageDown || !isHorizontal && evt.keyCode == KeyCode.PageUp)
            {
                sliderKey = inverted ? SliderKey.LowerPage : SliderKey.HigherPage;
            }

            if (sliderKey == SliderKey.None)
            {
                return;
            }

            ComputeValueFromKey(sliderKey, evt.shiftKey);
            evt.StopPropagation();
        }
Esempio n. 2
0
        internal override void ComputeValueFromKey(SliderKey sliderKey, bool isShift)
        {
            switch (sliderKey)
            {
            case SliderKey.None:
                return;

            case SliderKey.Lowest:
                value = lowValue;
                return;

            case SliderKey.Highest:
                value = highValue;
                return;
            }

            bool isPageSize = sliderKey == SliderKey.LowerPage || sliderKey == SliderKey.HigherPage;

            // Change by approximately 1/100 of entire range, or 1/10 if holding down shift
            // But round to nearest power of ten to get nice resulting numbers.
            var delta = GetClosestPowerOfTen(Mathf.Abs((highValue - lowValue) * 0.01f));

            if (delta < 1)
            {
                delta = 1;
            }
            if (isPageSize)
            {
                delta *= pageSize;
            }
            else if (isShift)
            {
                delta *= 10;
            }

            // Increment or decrement by just over half the delta.
            // This means that e.g. if delta is 1, incrementing from 1.0 will go to 2.0,
            // but incrementing from 0.9 is going to 1.0 rather than 2.0.
            // This feels more right since 1.0 is the "next" one.
            if (sliderKey == SliderKey.Lower || sliderKey == SliderKey.LowerPage)
            {
                delta = -delta;
            }

            // Now round to a multiple of our delta value so we get a round end result instead of just a round delta.
            value = Mathf.RoundToInt(RoundToMultipleOf(value + (delta * 0.5001f), Mathf.Abs(delta)));
        }
Esempio n. 3
0
        void OnNavigationMove(NavigationMoveEvent evt)
        {
            SliderKey sliderKey    = SliderKey.None;
            bool      isHorizontal = direction == SliderDirection.Horizontal;

            if (evt.direction == (isHorizontal ? NavigationMoveEvent.Direction.Left : NavigationMoveEvent.Direction.Down))
            {
                sliderKey = inverted ? SliderKey.Higher : SliderKey.Lower;
            }
            else if (evt.direction == (isHorizontal ? NavigationMoveEvent.Direction.Right : NavigationMoveEvent.Direction.Up))
            {
                sliderKey = inverted ? SliderKey.Lower : SliderKey.Higher;
            }

            if (sliderKey == SliderKey.None)
            {
                return;
            }

            ComputeValueFromKey(sliderKey, evt.shiftKey);
            evt.StopPropagation();
        }
Esempio n. 4
0
 internal abstract void ComputeValueFromKey(SliderKey sliderKey, bool isShift);