Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        private bool try_cancel()
        {
            if (_currentController != null)
            {
                _currentController.Cancel();
                _currentController = null;
                return(true);
            }

            return(false);
        }
Esempio n. 3
0
        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;
        }