示例#1
0
文件: Mouse.cs 项目: Hathor86/oskd
        public override void Initialize()
        {
            mouseService = ServiceManager.Get<IMouseService>();

            buttons[0] = new MouseButton(Game, Input.MouseButton.Left);
            buttons[1] = new MouseButton(Game, Input.MouseButton.Right);
            buttons[2] = new MouseButton(Game, Input.MouseButton.Middle);
            buttons[3] = new MouseButton(Game, Input.MouseButton.SideLeft);
            buttons[4] = new MouseButton(Game, Input.MouseButton.SideRight);
            buttons[5] = new MouseButton(Game, Input.MouseButton.Middle);//Mousewheel up
            buttons[6] = new MouseButton(Game, Input.MouseButton.Middle);//Mousewheel down

            /*Remove mouswheel from game component
            We'll handle it manually*/
            Game.Components.Remove(buttons[5]);
            Game.Components.Remove(buttons[6]);

            buttons[5].Initialize();
            buttons[6].Initialize();

            positionContainer = new MousePositionContainer(Game);
            positionFollower = new MousePositionTracker(Game);
            positionContainer.Color = GetColor();
            positionFollower.Color = GetColor();

            base.Initialize();

            buttons[5].SetSource(new Rectangle(buttons[5].Source.X, buttons[5].Source.Y, buttons[5].Source.Width, 39));
            buttons[6].SetSource(new Rectangle(buttons[6].Source.X, buttons[6].Source.Y + 39, buttons[6].Source.Width, buttons[6].Source.Height - 39));

            Scale = new Vector2(1.5f, 1.5f);
        }
示例#2
0
        protected override void OnSelectedChanged(ValueChangedEventArgs <bool> e)
        {
            if (!e.NewValue)
            {
                MousePositionTracker.Reset(true);
                _canRadiusChangeUnratioble = false;
            }

            RaiseVisualChanged();
            base.OnSelectedChanged(e);
        }
示例#3
0
        protected override void OnMouseDown(MouseDownEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }

            var thisPosition = e.Position;

            //若上次点击位置为空,则记录点击位置;
            if (MousePositionTracker.LastMouseDownPosition == null)
            {
                if (thisPosition.IsAlmostEqualTo(Ellipse2D.Center))
                {
                    MousePositionTracker.LastMouseDownPosition = thisPosition;
                }
                else if (thisPosition.IsAlmostEqualTo(Ellipse2D.GetTopPoint()) ||
                         thisPosition.IsAlmostEqualTo(Ellipse2D.GetBottomPoint()) ||
                         thisPosition.IsAlmostEqualTo(Ellipse2D.GetLeftPoint()) ||
                         thisPosition.IsAlmostEqualTo(Ellipse2D.GetRightPoint()))
                {
                    MousePositionTracker.LastMouseDownPosition = thisPosition;
                }
                else
                {
                    return;
                }

                e.Handled = true;
            }
            //否则将应用更改;
            else if (MousePositionTracker.CurrentHoverPosition != null)
            {
                var newEllipse = GetPreviewEllipse2D();
                if (newEllipse != null)
                {
                    Ellipse2D = newEllipse;
                }

                MousePositionTracker.Reset(true);

                e.Handled = true;
            }
        }
        private void InitializeLine()
        {
            if (!Line.MousePositionTracker.LastMouseDownPosition.IsAlmostEqualTo(Line.Line2D.Start) &&
                !Line.MousePositionTracker.LastMouseDownPosition.IsAlmostEqualTo(Line.Line2D.End))
            {
                throw new InvalidOperationException();
            }

            MousePositionTracker = new MousePositionTracker(this);

            ///建立两个<see cref="MousePositionTracker"/>的双向"绑定";
            MousePositionTracker.CurrentHoverPositionChanged      += MousePositionTrackerForLine_PreviewCurrentHoverPositionChanged;
            Line.MousePositionTracker.CurrentHoverPositionChanged += MousePositionTracker_CurrentHoverPositionChanged;

            /////设置与上次点击点相对另一端为<see cref="MousePositionTracker"/>的上次鼠标点击位置;
            var otherSidePosition = Line.MousePositionTracker.LastMouseDownPosition.IsAlmostEqualTo(Line.Line2D.Start) ? Line.Line2D.End : Line.Line2D.Start;

            MousePositionTracker.LastMouseDownPosition = otherSidePosition;
        }