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(); }
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; } }
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); }