Пример #1
0
        private void TouchDraggedHandler(Actor sender, TouchEventArgs e)
        {
            if (e.Pointer != PressedPointer || _cancelled)
                return;

            Vector2 position = e.GetPosition(sender);

            _pressed = IsOverActor(sender, position.X, position.Y);

            if (_pressed && e.Pointer == 0 && Button != -1 && !Mouse.GetState().IsButtonPressed(Button))
                _pressed = false;

            if (!_pressed)
                InvalidateTapSquare();
        }
Пример #2
0
        private void TouchUpHandler(Actor sender, TouchEventArgs e)
        {
            if (e.Pointer == PressedPointer) {
                if (!_cancelled) {
                    Vector2 position = e.GetPosition(sender);
                    bool touchUpOver = IsOverActor(sender, position.X, position.Y);

                    if (touchUpOver && e.Pointer == 0 && Button != -1 && e.Button != Button)
                        touchUpOver = false;
                    if (touchUpOver) {
                        long time = DateTime.Now.Ticks * 100;
                        if (time - _lastTapTime > _tapCountInterval)
                            TapCount = 0;
                        TapCount = TapCount + 1;
                        _lastTapTime = time;

                        if (ClickHandler != null)
                            ClickHandler(e);
                    }

                    if (_actor.Stage != null)
                        _actor.ReleaseTouchCapture(e.Pointer);
                    else if (e.Stage != null)
                        e.Stage.ReleaseTouchCapture(e.Pointer);
                }

                _pressed = false;
                PressedPointer = -1;
                PressedButton = -1;
                _cancelled = false;
            }
        }
Пример #3
0
        protected override void OnTouchDown(TouchEventArgs e)
        {
            Vector2 position = e.GetPosition(this);

            TreeNode node = NodeAt(position.Y);
            if (node == null)
                return;
            if (node != NodeAt(position.Y))
                return;

            KeyboardState keystate = Keyboard.GetState();
            bool shiftPressed = keystate.IsKeyDown(Keys.LeftShift) || keystate.IsKeyDown(Keys.RightShift);
            bool ctrlPressed = keystate.IsKeyDown(Keys.LeftControl) || keystate.IsKeyDown(Keys.RightControl);

            if (MultiSelect && _selectedNodes.Count > 0 && shiftPressed) {
                float low = _selectedNodes.First().Actor.Y;
                float high = node.Actor.Y;

                _selectionChanger.Begin(_selectedNodes);

                if (!ctrlPressed)
                    _selectionChanger.UnselectAll();

                if (low > high)
                    SelectNodes(_rootNodes, high, low);
                else
                    SelectNodes(_rootNodes, low, high);

                _selectionChanger.End();

                return;
            }

            if (!MultiSelect || !ctrlPressed) {
                if (Children.Count > 0) {
                    float rowX = node.Actor.X;
                    if (node.Icon != null)
                        rowX -= IconSpacing + node.Icon.MinWidth;

                    float indent = 0;
                    if (node.Children == null || node.Children.Count == 0)
                        indent = rowX;
                    else {
                        TreeNode parent = node.Parent;
                        while (parent != null) {
                            indent += _indentSpacing;
                            parent = parent.Parent;
                        }
                    }

                    if (position.X > indent && position.X < rowX) {
                        node.IsExpanded = !node.IsExpanded;
                        return;
                    }
                }

                if (!node.IsSelectable)
                    return;

                bool unselect = ToggleSelect && _selectedNodes.Count == 1 && _selectedNodes.Contains(node);

                _selectionChanger.Begin(_selectedNodes);
                _selectionChanger.UnselectAll();
                if (!unselect)
                    _selectionChanger.Select(node);
                _selectionChanger.End();

                return;
            }
            else if (!node.IsSelectable)
                return;

            _selectionChanger.Begin(_selectedNodes);
            _selectionChanger.Select(node);
            _selectionChanger.End();

            base.OnTouchDown(e);
        }