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); }
protected override void OnSelectedChanged(ValueChangedEventArgs <bool> e) { if (!e.NewValue) { MousePositionTracker.Reset(true); _canRadiusChangeUnratioble = false; } RaiseVisualChanged(); base.OnSelectedChanged(e); }
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; }