Пример #1
0
 public RangeSlider(
     Key key            = null,
     RangeValues values = null,
     ValueChanged <RangeValues> onChanged     = null,
     ValueChanged <RangeValues> onChangeStart = null,
     ValueChanged <RangeValues> onChangeEnd   = null,
     float min           = 0.0f,
     float max           = 1.0f,
     int?divisions       = null,
     RangeLabels labels  = null,
     Color activeColor   = null,
     Color inactiveColor = null
     ) : base(key: key)
 {
     D.assert(values != null);
     D.assert(min <= max);
     D.assert(values.start <= values.end);
     D.assert(values.start >= min && values.start <= max);
     D.assert(values.end >= min && values.end <= max);
     D.assert(divisions == null || divisions > 0);
     this.values        = values;
     this.onChanged     = onChanged;
     this.onChangeStart = onChangeStart;
     this.onChangeEnd   = onChangeEnd;
     this.min           = min;
     this.max           = max;
     this.divisions     = divisions;
     this.labels        = labels;
     this.activeColor   = activeColor;
     this.inactiveColor = inactiveColor;
 }
        static RangeValues PopulateRangeValues(object valueCollection)
        {
            var rangeValues = new RangeValues();
            int index       = 0;

            foreach (var item in (IEnumerable)valueCollection)
            {
                if (index == 0)
                {
                    rangeValues.Lower = item;
                }
                else if (index == 1)
                {
                    rangeValues.Upper = item;
                }

                index++;
            }

            if (index != 2)
            {
                throw new ArgumentException("Range rule value collection should contain exactly two values.");
            }

            return(rangeValues);
        }
Пример #3
0
        void _handleChanged(RangeValues values)
        {
            D.assert(widget.onChanged != null);
            RangeValues lerpValues = _lerpRangeValues(values);

            if (lerpValues != widget.values)
            {
                widget.onChanged(lerpValues);
            }
        }
Пример #4
0
        static Thumb?_defaultRangeThumbSelector(
            TextDirection textDirection,
            RangeValues values,
            float tapValue,
            Size thumbSize,
            Size trackSize,
            float dx
            )
        {
            float touchRadius        = Mathf.Max(thumbSize.width, RangeSlider._minTouchTargetWidth) / 2f;
            bool  inStartTouchTarget = (tapValue - values.start).abs() * trackSize.width < touchRadius;
            bool  inEndTouchTarget   = (tapValue - values.end).abs() * trackSize.width < touchRadius;

            if (inStartTouchTarget && inEndTouchTarget)
            {
                bool towardsStart = false;
                bool towardsEnd   = false;
                switch (textDirection)
                {
                case TextDirection.ltr:
                    towardsStart = dx < 0;
                    towardsEnd   = dx > 0;
                    break;

                case TextDirection.rtl:
                    towardsStart = dx > 0;
                    towardsEnd   = dx < 0;
                    break;
                }

                if (towardsStart)
                {
                    return(Thumb.start);
                }

                if (towardsEnd)
                {
                    return(Thumb.end);
                }
            }
            else
            {
                if (tapValue < values.start || inStartTouchTarget)
                {
                    return(Thumb.start);
                }

                if (tapValue > values.end || inEndTouchTarget)
                {
                    return(Thumb.end);
                }
            }

            return(null);
        }
Пример #5
0
        private QueryStringQueryToken ParseOneHandTermQuery(string field, char[] chars, int size, ref int index)
        {
            char c  = chars[index];
            bool lt = c == TOKEN_LT;

            bool eq = chars[++index] == TOKEN_EQ;

            if (eq)
            {
                index++;
            }

            string value = null;

            int  start = index;
            bool space = false;

            while (index < size)
            {
                c = chars[index];

                if (c == TOKEN_SPACE)
                {
                    space = true;
                    break;
                }

                index++;
            }

            if (index >= size)
            {
                index = size - 1;
            }

            if (index > start)
            {
                value = AsString(chars, start, space ? index - 1 : index);
            }

            if (string.IsNullOrWhiteSpace(value))
            {
                throw new QueryStringParseException("Expected field value, found nothing");
            }
            else
            {
                var         rv     = new RangeValue(value, eq);
                RangeValues values = lt ? new RangeValues(null, rv) : new RangeValues(rv, null);
                return(new QueryStringQueryToken(new RangeQuery(field, values)));
            }
        }
Пример #6
0
        void _handleDragUpdate(DragUpdateDetails details)
        {
            float dragValue = _getValueFromGlobalPosition(details.globalPosition);

            bool shouldCallOnChangeStart = false;

            if (_lastThumbSelection == null)
            {
                _lastThumbSelection = sliderTheme.thumbSelector(textDirection.Value, values, dragValue, _thumbSize,
                                                                size, details.delta.dx);
                if (_lastThumbSelection != null)
                {
                    shouldCallOnChangeStart = true;
                    _active = true;
                    _state.overlayController.forward();
                    if (showValueIndicator)
                    {
                        _state.valueIndicatorController.forward();
                    }
                }
            }

            if (isEnabled && _lastThumbSelection != null)
            {
                RangeValues currentValues = _discretizeRangeValues(values);
                if (onChangeStart != null && shouldCallOnChangeStart)
                {
                    onChangeStart(currentValues);
                }

                float currentDragValue = _discretize(dragValue);

                float minThumbSeparationValue =
                    isDiscrete ? 0 : sliderTheme.minThumbSeparation.Value / _trackRect.width;
                if (_lastThumbSelection == Thumb.start)
                {
                    _newValues =
                        new RangeValues(Mathf.Min(currentDragValue, currentValues.end - minThumbSeparationValue),
                                        currentValues.end);
                }
                else if (_lastThumbSelection == Thumb.end)
                {
                    _newValues = new RangeValues(currentValues.start,
                                                 Mathf.Max(currentDragValue, currentValues.start + minThumbSeparationValue));
                }

                onChanged(_newValues);
            }
        }
Пример #7
0
        void _startInteraction(Offset globalPosition)
        {
            float tapValue = _getValueFromGlobalPosition(globalPosition).clamp(0.0f, 1.0f);

            _lastThumbSelection = sliderTheme.thumbSelector(textDirection.Value, values, tapValue, _thumbSize, size, 0);

            if (_lastThumbSelection != null)
            {
                _active = true;
                RangeValues currentValues = _discretizeRangeValues(values);
                if (_lastThumbSelection == Thumb.start)
                {
                    _newValues = new RangeValues(tapValue, currentValues.end);
                }
                else if (_lastThumbSelection == Thumb.end)
                {
                    _newValues = new RangeValues(currentValues.start, tapValue);
                }

                _updateLabelPainter(_lastThumbSelection.Value);

                if (onChangeStart != null)
                {
                    onChangeStart(currentValues);
                }

                onChanged(_discretizeRangeValues(_newValues));

                _state.overlayController.forward();
                if (showValueIndicator)
                {
                    _state.valueIndicatorController.forward();
                    _state.interactionTimer?.cancel();
                    _state.interactionTimer =
                        Timer.create(
                            new TimeSpan(0, 0, 0, 0,
                                         (int)(_minimumInteractionTime.TotalMilliseconds * scheduler_.timeDilation)), () => {
                        _state.interactionTimer = null;
                        if (!_active && _state.valueIndicatorController.status == AnimationStatus.completed)
                        {
                            _state.valueIndicatorController.reverse();
                        }
                    });
                }
            }
        }
Пример #8
0
        void _endInteraction()
        {
            _state.overlayController.reverse();
            if (showValueIndicator && _state.interactionTimer == null)
            {
                _state.valueIndicatorController.reverse();
            }

            if (_active && _state.mounted && _lastThumbSelection != null)
            {
                RangeValues discreteValues = _discretizeRangeValues(_newValues);
                if (onChangeEnd != null)
                {
                    onChangeEnd(discreteValues);
                }

                _active = false;
            }
        }
Пример #9
0
 public _RangeSliderRenderObjectWidget(
     Key key                                  = null,
     RangeValues values                       = null,
     int?divisions                            = null,
     RangeLabels labels                       = null,
     SliderThemeData sliderTheme              = null,
     float textScaleFactor                    = 0f,
     ValueChanged <RangeValues> onChanged     = null,
     ValueChanged <RangeValues> onChangeStart = null,
     ValueChanged <RangeValues> onChangeEnd   = null,
     _RangeSliderState state                  = null) : base(key: key)
 {
     this.values          = values;
     this.divisions       = divisions;
     this.labels          = labels;
     this.sliderTheme     = sliderTheme;
     this.textScaleFactor = textScaleFactor;
     this.onChanged       = onChanged;
     this.onChangeStart   = onChangeStart;
     this.onChangeEnd     = onChangeEnd;
     this.state           = state;
 }
Пример #10
0
 RangeValues _discretizeRangeValues(RangeValues values)
 {
     return(new RangeValues(_discretize(values.start), _discretize(values.end)));
 }
Пример #11
0
        public _RenderRangeSlider(
            RangeValues values,
            int?divisions,
            RangeLabels labels,
            SliderThemeData sliderTheme,
            ThemeData theme,
            float textScaleFactor,
            RuntimePlatform platform,
            ValueChanged <RangeValues> onChanged,
            ValueChanged <RangeValues> onChangeStart,
            ValueChanged <RangeValues> onChangeEnd,
            _RangeSliderState state,
            TextDirection?textDirection)
        {
            D.assert(values != null);
            D.assert(values.start >= 0.0 && values.start <= 1.0);
            D.assert(values.end >= 0.0 && values.end <= 1.0);
            D.assert(state != null);
            D.assert(textDirection != null);

            this.onChangeStart = onChangeStart;
            this.onChangeEnd   = onChangeEnd;

            _platform        = platform;
            _labels          = labels;
            _values          = values;
            _divisions       = divisions;
            _sliderTheme     = sliderTheme;
            _theme           = theme;
            _textScaleFactor = textScaleFactor;
            _onChanged       = onChanged;
            _state           = state;
            _textDirection   = textDirection;

            _updateLabelPainters();

            GestureArenaTeam team = new GestureArenaTeam();

            _drag          = new HorizontalDragGestureRecognizer();
            _drag.team     = team;
            _drag.onStart  = _handleDragStart;
            _drag.onUpdate = _handleDragUpdate;
            _drag.onEnd    = _handleDragEnd;
            _drag.onCancel = _handleDragCancel;

            _tap             = new TapGestureRecognizer();
            _tap.team        = team;
            _tap.onTapDown   = _handleTapDown;
            _tap.onTapUp     = _handleTapUp;
            _tap.onTapCancel = _handleTapCancel;

            _overlayAnimation = new CurvedAnimation(
                parent: _state.overlayController,
                curve: Curves.fastOutSlowIn
                );
            _valueIndicatorAnimation = new CurvedAnimation(
                parent: _state.valueIndicatorController,
                curve: Curves.fastOutSlowIn
                );
            _enableAnimation = new CurvedAnimation(
                parent: _state.enableController,
                curve: Curves.easeInOut
                );
        }
Пример #12
0
 RangeValues _unlerpRangeValues(RangeValues values)
 {
     return(new RangeValues(_unlerp(values.start), _unlerp(values.end)));
 }
Пример #13
0
 void _handleDragEnd(RangeValues values)
 {
     D.assert(widget.onChangeEnd != null);
     widget.onChangeEnd(_lerpRangeValues(values));
 }
Пример #14
0
 void _handleDragStart(RangeValues values)
 {
     D.assert(widget.onChangeStart != null);
     widget.onChangeStart(_lerpRangeValues(values));
 }
Пример #15
0
        public override void Update(GameTime gameTime)
        {
            //Update Keyboard and Mouse States
            PreviousKeyboardState = CurrentKeyboardState;
            CurrentKeyboardState  = Keyboard.GetState();
            PreviousMouseState    = CurrentMouseState;
            CurrentMouseState     = Mouse.GetState();

            //Clear Data Structures
            ActiveActions.Clear();
            ActiveStates.Clear();
            ActiveRanges.Clear();
            MappedKeyboardKeys.Clear();
            MappedMouseButtons.Clear();
            MappedMouseRanges.Clear();
            RangeValues.Clear();

            MouseScreenLocation = new Point(CurrentMouseState.X, CurrentMouseState.Y);

            //Sort EntityList by InputMap Priority
            EntityList.Sort((Entity x, Entity y) =>
            {
                if (x.GetComponent <CInputMap>().Priority < y.GetComponent <CInputMap>().Priority)
                {
                    return(-1);
                }
                else if (x.GetComponent <CInputMap>().Priority > y.GetComponent <CInputMap>().Priority)
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            });

            //Map Raw Inputs to Actions, States and Ranges
            foreach (Entity e in EntityList)
            {
                var inputMap = e.GetComponent <CInputMap>();

                //KEYBOARD KEY TO ACTION
                foreach (KeyValuePair <Keys, int> pair in inputMap.KeyboardKeyToAction)
                {
                    if (!MappedKeyboardKeys.Contains(pair.Key))
                    {
                        if (PreviousKeyboardState.IsKeyUp(pair.Key) && CurrentKeyboardState.IsKeyDown(pair.Key))
                        {
                            ActiveActions.Add(pair.Value);
                            MappedKeyboardKeys.Add(pair.Key);
                        }
                    }
                }

                //KEYBOARD KEY TO STATE
                foreach (KeyValuePair <Keys, int> pair in inputMap.KeyboardKeyToState)
                {
                    if (!MappedKeyboardKeys.Contains(pair.Key))
                    {
                        if (CurrentKeyboardState.IsKeyDown(pair.Key))
                        {
                            ActiveStates.Add(pair.Value);
                            MappedKeyboardKeys.Add(pair.Key);
                        }
                    }
                }

                //MOUSE BUTTON TO ACTION
                foreach (KeyValuePair <MouseButtons, int> pair in inputMap.MouseButtonToAction)
                {
                    if (!MappedMouseButtons.Contains(pair.Key))
                    {
                        if (pair.Key == MouseButtons.LeftButton)
                        {
                            if (PreviousMouseState.LeftButton == ButtonState.Released && CurrentMouseState.LeftButton == ButtonState.Pressed)
                            {
                                ActiveActions.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.RightButton)
                        {
                            if (PreviousMouseState.RightButton == ButtonState.Released && CurrentMouseState.RightButton == ButtonState.Pressed)
                            {
                                ActiveActions.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.MiddleButton)
                        {
                            if (PreviousMouseState.MiddleButton == ButtonState.Released && CurrentMouseState.MiddleButton == ButtonState.Pressed)
                            {
                                ActiveActions.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.XButton1)
                        {
                            if (PreviousMouseState.XButton1 == ButtonState.Released && CurrentMouseState.XButton1 == ButtonState.Pressed)
                            {
                                ActiveActions.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.XButton2)
                        {
                            if (PreviousMouseState.XButton2 == ButtonState.Released && CurrentMouseState.XButton2 == ButtonState.Pressed)
                            {
                                ActiveActions.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                    }
                }

                //MOUSE BUTTON TO STATE
                foreach (KeyValuePair <MouseButtons, int> pair in inputMap.MouseButtonToState)
                {
                    if (!MappedMouseButtons.Contains(pair.Key))
                    {
                        if (pair.Key == MouseButtons.LeftButton)
                        {
                            if (CurrentMouseState.LeftButton == ButtonState.Pressed)
                            {
                                ActiveStates.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.RightButton)
                        {
                            if (CurrentMouseState.RightButton == ButtonState.Pressed)
                            {
                                ActiveStates.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.MiddleButton)
                        {
                            if (CurrentMouseState.MiddleButton == ButtonState.Pressed)
                            {
                                ActiveStates.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.XButton1)
                        {
                            if (CurrentMouseState.XButton1 == ButtonState.Pressed)
                            {
                                ActiveStates.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                        if (pair.Key == MouseButtons.XButton2)
                        {
                            if (CurrentMouseState.XButton2 == ButtonState.Pressed)
                            {
                                ActiveStates.Add(pair.Value);
                                MappedMouseButtons.Add(pair.Key);
                            }
                        }
                    }
                }

                //MOUSE RANGE TO RANGE
                foreach (KeyValuePair <MouseRanges, int> pair in inputMap.MouseRangeToRange)
                {
                    if (!MappedMouseRanges.Contains(pair.Key))
                    {
                        if (pair.Key == MouseRanges.ScrollDelta)
                        {
                            ActiveRanges.Add(pair.Value);
                            RangeValues.Add(pair.Value, CurrentMouseState.ScrollWheelValue - PreviousMouseState.ScrollWheelValue);
                            MappedMouseRanges.Add(pair.Key);
                        }
                        if (pair.Key == MouseRanges.MouseHorizontalDelta)
                        {
                            float hCenter = ViewPort.Width / 2;
                            ActiveRanges.Add(pair.Value);
                            RangeValues.Add(pair.Value, CurrentMouseState.X - hCenter);
                            MappedMouseRanges.Add(pair.Key);
                        }
                        if (pair.Key == MouseRanges.MouseVerticalDelta)
                        {
                            float vCenter = ViewPort.Height / 2;
                            ActiveRanges.Add(pair.Value);
                            RangeValues.Add(pair.Value, CurrentMouseState.Y - vCenter);
                            MappedMouseRanges.Add(pair.Key);
                        }
                    }
                }
            }

            //Given the Mapped Inputs, Call all Callbacks and see if they can use the Mapped Input
            foreach (Entity e in EntityList)
            {
                var inputHandlers = e.GetComponent <CInputHandlers>();

                foreach (int callbackID in inputHandlers.InputHandlerIDs)
                {
                    GameRegistry.FetchInputCallback(callbackID)(e, gameTime, ActiveActions, ActiveStates, ActiveRanges, RangeValues);
                }
            }
        }