/// <summary> /// ドラッグを開始 /// </summary> /// <param name="controller">ドラッグコントローラ</param> /// <param name="start"></param> /// <param name="first">1回目のドラッグ位置</param> /// <param name="others">2回目以降のドラッグ位置</param> private DragControllerEventArgs DoDrag(IDragController controller, Point start, Point first, params Point[] others) { // start drag var startArgs = new DragControllerEventArgs(start, start, new Vector(0, 0), MouseButton.Left); { Assert.True(controller.CanDragStart(startArgs)); controller.OnStartDrag(startArgs); } // drag moving var firstDragArgs = startArgs.CreateUpdatedArgs(first); { controller.OnDragMoving(firstDragArgs); } var args = firstDragArgs; // other dragging { foreach (var other in others) { args = args.CreateUpdatedArgs(other); controller.OnDragMoving(args); } } return(args); }
private bool try_cancel() { if (_currentController != null) { _currentController.Cancel(); _currentController = null; return(true); } return(false); }
private void on_mouse_down(object sender, MouseEventArgs args) { if (check_parent_event_doing()) { return; } try_cancel(); _startPoint = args.GetPosition(_target); _prevPoint = _startPoint; var convertedArgs = convert_args(args); PreviewDragStart?.Invoke(this, convertedArgs); _currentController = _converter(convertedArgs); if (_currentController == null) { return; } if (_currentController.CanDragStart(convertedArgs) is false) { try_cancel(); return; } if (_onClickFocus) { _target.Focus(); } _currentController.OnStartDrag(convertedArgs); args.Handled = true; }