Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
            }
        }