// コンストラクタ / ドラッグ開始 public NodeDragController(NodeDragControllerSetupArgs setupArgs) { if (setupArgs.Args.LeftButton == MouseButtonState.Pressed) { _isDrag = true; _dragStartPos = setupArgs.Args.GetPosition(setupArgs.BaseControl); _originalPoints = setupArgs.Nodes.ToDictionary(x => x, x => new Point(x.X, x.Y)); } _completedNodeMove = setupArgs.CompletedCommand; _selectedNodes = setupArgs.Nodes; _useSnapGrid = setupArgs.UseSnapGrid; _inputElement = setupArgs.BaseControl; _gridSize = setupArgs.GridSize; if (_selectedNodes.Any()) { var control = _selectedNodes.First().FindVisualParentWithType <InfiniteScrollViewer>(); if (Mouse.Captured == null) { _isCaptured = _inputElement.CaptureMouse(); } _scrollViewer = control; } }
private void update_thumb(Thumb thumb, InfiniteScrollViewer scrollViewer) { var rect = NetworkView.ItemsRect.ValidateRect(ActualWidth, ActualHeight).ToOffset(scrollViewer.ViewRectOffset); var point = scrollViewer.TransformPoint(0, 0); Canvas.SetLeft(thumb, point.X / (rect.Width / MiniMap.Width)); Canvas.SetTop(thumb, point.Y / (rect.Height / MiniMap.Height)); }
//! 最低限の引数はコンストラクタでセットアップする必要がある public NodeDragControllerSetupArgs(IInputElement baseControl, INodeControl[] nodes, ICommand completedCommand = null, InfiniteScrollViewer scrollViewer = null) { BaseControl = baseControl; Nodes = nodes; CompletedCommand = completedCommand; InfiniteScrollViewer = scrollViewer; }
// コンストラクタ / ドラッグ開始 public NodesDragController(NodeDragControllerSetupArgs setupArgs) { _originalPoints = setupArgs.Nodes.ToDictionary(x => x, x => new Point(x.X, x.Y)); _completedNodeMove = setupArgs.CompletedCommand; _selectedNodes = setupArgs.Nodes.Where(x => x.CanMovable).ToArray(); _useSnapGrid = setupArgs.UseSnapGrid; _gridSize = setupArgs.GridSize; _inputElement = setupArgs.BaseControl; _scrollViewer = setupArgs.InfiniteScrollViewer; }
public static void Scale(this InfiniteScrollViewer self, double scale, double centerX, double centerY) { var d0 = self.TransformPoint(centerX, centerY); self.ScaleMatrix.ScaleX = scale; self.ScaleMatrix.ScaleY = scale; var d1 = self.TransformPoint(centerX, centerY); var diff = d1 - d0; self.TranslateMatrix.X += diff.X * scale; self.TranslateMatrix.Y += diff.Y * scale; }
public ViewportDrag(NetworkView networkView, MouseEventArgs mouseEventArgs) { PrevPosition = mouseEventArgs.GetPosition(networkView); NetworkView = networkView; _scrollViewer = NetworkView.FindChild <InfiniteScrollViewer>(x => true); }
public ViewportDragController(NetworkView networkView) { NetworkView = networkView; _scrollViewer = NetworkView.FindChild <InfiniteScrollViewer>(x => true); }
public static Point TransformPoint(this InfiniteScrollViewer self, double x, double y) { return(new Point( (x - self.TranslateMatrix.X) / self.ScaleMatrix.ScaleX, (y - self.TranslateMatrix.Y) / self.ScaleMatrix.ScaleY)); }