private void TileViewer_MouseDown(object sender, MouseButtonEventArgs e) { if (!mouseOver) { return; } mouseDown = true; Point p = e.GetPosition(MainGrid); ClickX = p.X / TileSize; ClickY = p.Y / TileSize; TileClickX = Convert.ToInt32(Math.Floor(ClickX)); TileClickY = Convert.ToInt32(Math.Floor(ClickY)); if (TileClickX < 0) { TileClickX = 0; } if (TileClickX >= ColCount) { TileClickX = ColCount; } if (TileClickY < 0) { TileClickY = 0; } if (TileClickY >= RowCount) { TileClickY = RowCount; } if (e.ChangedButton == MouseButton.Middle) { if (Parent != null) { Point q = e.GetPosition(Parent); PanningOriginX = Parent.HorizontalOffset; PanningOriginY = Parent.VerticalOffset; PanningStartX = q.X; PanningStartY = q.Y; panning = true; } return; } var a = new TileViewerMouseEventArgs() { ClickX = ClickX, ClickY = ClickY, TileClickX = TileClickX, TileClickY = TileClickY, Button = e.ChangedButton }; MouseDown?.Invoke(this, a); }
private void TileViewer_MouseUp(object sender, MouseButtonEventArgs e) { mouseDown = false; panning = false; Point p = e.GetPosition(MainGrid); OverX = p.X / TileSize; OverY = p.Y / TileSize; TileOverX = Convert.ToInt32(Math.Floor(OverX)); TileOverY = Convert.ToInt32(Math.Floor(OverY)); if (TileOverX < 0) { TileOverX = 0; } if (TileOverX >= ColCount) { TileOverX = ColCount; } if (TileOverY < 0) { TileOverY = 0; } if (TileOverY >= RowCount) { TileOverY = RowCount; } var a = new TileViewerMouseEventArgs() { ClickX = ClickX, // [wip] ClickY = ClickY, // [wip] TileClickX = TileClickX, TileClickY = TileClickY, PosX = OverX, PosY = OverY, PosTileX = TileOverX, PosTileY = TileOverY, Button = e.ChangedButton }; MouseUp?.Invoke(this, a); }
private void TileViewer_MouseMove(object sender, MouseEventArgs e) { Point p = e.GetPosition(MainGrid); int newX = Convert.ToInt32(Math.Floor(p.X / TileSize)); int newY = Convert.ToInt32(Math.Floor(p.Y / TileSize)); if (newX < 0 || newX >= ColCount || newY < 0 || newY >= RowCount) { if (!mouseDown) { Selection.Visibility = Visibility.Hidden; } mouseOver = false; return; } Selection.Visibility = Visibility.Visible; mouseOver = true; if (System.Windows.Input.Mouse.LeftButton != MouseButtonState.Pressed && System.Windows.Input.Mouse.MiddleButton != MouseButtonState.Pressed && System.Windows.Input.Mouse.RightButton != MouseButtonState.Pressed) { mouseDown = false; panning = false; } TileOverX = newX; TileOverY = newY; OverX = p.X / TileSize; OverY = p.Y / TileSize; if (panning) { Point q = e.GetPosition(Parent); Parent.ScrollToHorizontalOffset(PanningOriginX + PanningStartX - q.X); Parent.ScrollToVerticalOffset(PanningOriginY + PanningStartY - q.Y); } else if (mouseDown) { Selection.SetValue(Grid.RowProperty, Math.Min(TileOverY, TileClickY)); Selection.SetValue(Grid.ColumnProperty, Math.Min(TileOverX, TileClickX)); Selection.SetValue(Grid.RowSpanProperty, Math.Abs(TileOverY - TileClickY) + 1); Selection.SetValue(Grid.ColumnSpanProperty, Math.Abs(TileOverX - TileClickX) + 1); var a = new TileViewerMouseEventArgs() { TileClickX = TileClickX, TileClickY = TileClickY, PosTileX = TileOverX, PosTileY = TileOverY, ClickX = ClickX, ClickY = ClickY, PosX = OverX, PosY = OverY }; MouseDrag?.Invoke(this, a); } else { Selection.SetValue(Grid.RowProperty, TileOverY); Selection.SetValue(Grid.ColumnProperty, TileOverX); Selection.SetValue(Grid.RowSpanProperty, 1); Selection.SetValue(Grid.ColumnSpanProperty, 1); } }