Beispiel #1
0
        public void ObstructionViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            ScrollViewer scrollviewer = sender as ScrollViewer;

            MapScrollViewer.ScrollToVerticalOffset(scrollviewer.VerticalOffset);
            MapScrollViewer.ScrollToHorizontalOffset(scrollviewer.HorizontalOffset);
        }
        private async void LoadImageFile_OnClick(object sender, RoutedEventArgs e)
        {
            var filePicker = new FileOpenPicker();

            filePicker.FileTypeFilter.Add(".jpg");
            filePicker.FileTypeFilter.Add(".jpeg");
            filePicker.FileTypeFilter.Add(".ppm");

            var result = await filePicker.PickSingleFileAsync();

            if (result != null)
            {
                _map.DeleteImage();
                MapScrollViewer.ChangeView(0, 0, 1);
                if (result.FileType.Equals(".ppm"))
                {
                    var ppm = new PpmFile();
                    await ppm.ReadPpmFile(result);

                    _map.CreateImage(ppm);
                }
                else
                {
                    _map.CreateImage(result);
                }
            }
        }
        private void FitContent(int width, int height)
        {
            var    currentZoom = MapScrollViewer.ZoomFactor;
            double scaleX      = MapScrollViewer.ActualWidth / width;
            double scaleY      = MapScrollViewer.ActualHeight / height;

            var newZoom = (float)(currentZoom * Math.Min(scaleX, scaleY));

            newZoom = Math.Max(newZoom, MapScrollViewer.MinZoomFactor);
            newZoom = Math.Min(newZoom, MapScrollViewer.MaxZoomFactor);

            var currentPan = new Vector2((float)MapScrollViewer.HorizontalOffset,
                                         (float)MapScrollViewer.VerticalOffset);

            var centerOffset = new Vector2((float)MapScrollViewer.ViewportWidth,
                                           (float)MapScrollViewer.ViewportHeight) / 2;

            var newPan = ((currentPan + centerOffset) * newZoom / currentZoom) - centerOffset;

            if (double.IsNaN(newPan.X) || double.IsNaN(newPan.Y) || double.IsNaN(newZoom))
            {
                return;
            }
            MapScrollViewer.ChangeView(newPan.X, newPan.Y, newZoom);
        }
Beispiel #4
0
        private void MapScaleSlider_OnValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e)
        {
            MapGridScaleTransform.ScaleX = e.NewValue;
            MapGridScaleTransform.ScaleY = e.NewValue;

            var centerOfViewport = new Point(MapScrollViewer.ViewportWidth / 2, MapScrollViewer.ViewportHeight / 2);

            _lastCenterPositionOnTarget = MapScrollViewer.TranslatePoint(centerOfViewport, MapGrid);
        }
        private void Pan(Point curContentMousePoint)
        {
            Vector2 dragOffset = new Vector2((float)curContentMousePoint.X - (float)_mouseStart.X,
                                             (float)curContentMousePoint.Y - (float)_mouseStart.Y);

            var dragOffsetX = MapScrollViewer.HorizontalOffset - dragOffset.X * MapController.Instance.Zoom;
            var dragOffsetY = MapScrollViewer.VerticalOffset - dragOffset.Y * MapController.Instance.Zoom;

            MapScrollViewer.ChangeView(dragOffsetX, dragOffsetY, null);
        }
 private void MapScrollViewer_OnPointerCanceled(object sender, PointerRoutedEventArgs e)
 {
     _map.TemporaryGeometry_End(MapController.Instance.MousePosition);
     MapScrollViewer.ReleasePointerCapture(e.Pointer);
     e.Handled = true;
     _map.UnlockAll();
     if (_mouseMode == MouseHandlingMode.Panning)
     {
         _mouseMode = MouseHandlingMode.None;
         UncheckTopToolbarButtons(null);
     }
     InstanceOnInvalidateMap();
 }
        private void MapScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            var scrollControl = sender as ScrollViewer;

            if (!e.Handled && sender != null)
            {
                Point point = e.GetPosition(MapGridCanvas);



                e.Handled = true;
                var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
                eventArg.RoutedEvent = UIElement.MouseWheelEvent;
                eventArg.Source      = sender;


                int delta = e.Delta;
                if (delta != 0)
                {
                    double steps = ((double)e.Delta) / 120.0;
                    double diff  = Math.Pow(1.1, steps);

                    double mapWidthStart  = MapScrollViewer.ScrollableWidth;
                    double mapHeightStart = MapScrollViewer.ScrollableHeight;



                    double offsetX = MapScrollViewer.HorizontalOffset;
                    double offsetY = MapScrollViewer.VerticalOffset;


                    UseScale = UseScale * diff;



                    double mapWidthEnd  = mapWidthStart * diff;
                    double mapHeightEnd = mapHeightStart * diff;

                    double mapWidthDiff  = mapWidthEnd - mapWidthStart;
                    double mapHeightDiff = mapHeightEnd - mapHeightStart;


                    MapScrollViewer.ScrollToHorizontalOffset(offsetX + mapWidthDiff / 2.0);
                    MapScrollViewer.ScrollToVerticalOffset(offsetY + mapHeightDiff / 2.0);
                }


                var parent = ((Control)sender).Parent as UIElement;
                parent.RaiseEvent(eventArg);
            }
        }
Beispiel #8
0
        private void MapScrollViewer_OnMouseMove(object sender, MouseEventArgs e)
        {
            if (_lastDragPoint.HasValue)
            {
                Point posNow = e.GetPosition(MapScrollViewer);

                double dX = posNow.X - _lastDragPoint.Value.X;
                double dY = posNow.Y - _lastDragPoint.Value.Y;

                _lastDragPoint = posNow;

                MapScrollViewer.ScrollToHorizontalOffset(MapScrollViewer.HorizontalOffset - dX);
                MapScrollViewer.ScrollToVerticalOffset(MapScrollViewer.VerticalOffset - dY);
            }
        }
Beispiel #9
0
        private void MapScrollViewer_OnScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            if (e.ExtentHeightChange != 0 || e.ExtentWidthChange != 0)
            {
                Point?targetBefore = null;
                Point?targetNow    = null;

                if (!_lastMousePositionOnTarget.HasValue)
                {
                    if (_lastCenterPositionOnTarget.HasValue)
                    {
                        var   centerOfViewport  = new Point(MapScrollViewer.ViewportWidth / 2, MapScrollViewer.ViewportHeight / 2);
                        Point centerOfTargetNow = MapScrollViewer.TranslatePoint(centerOfViewport, MapGrid);

                        targetBefore = _lastCenterPositionOnTarget;
                        targetNow    = centerOfTargetNow;
                    }
                }
                else
                {
                    targetBefore = _lastMousePositionOnTarget;
                    targetNow    = Mouse.GetPosition(MapGrid);

                    _lastMousePositionOnTarget = null;
                }

                if (targetBefore.HasValue)
                {
                    double dXInTargetPixels = targetNow.Value.X - targetBefore.Value.X;
                    double dYInTargetPixels = targetNow.Value.Y - targetBefore.Value.Y;

                    double multiplicatorX = e.ExtentWidth / MapGrid.Width;
                    double multiplicatorY = e.ExtentHeight / MapGrid.Height;

                    double newOffsetX = MapScrollViewer.HorizontalOffset - dXInTargetPixels * multiplicatorX;
                    double newOffsetY = MapScrollViewer.VerticalOffset - dYInTargetPixels * multiplicatorY;

                    if (double.IsNaN(newOffsetX) || double.IsNaN(newOffsetY))
                    {
                        return;
                    }

                    MapScrollViewer.ScrollToHorizontalOffset(newOffsetX);
                    MapScrollViewer.ScrollToVerticalOffset(newOffsetY);
                }
            }
        }
        private void MapScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            var scrollControl = sender as ScrollViewer;

            if (!e.Handled && sender != null)
            {
                double steps = ((double)e.Delta) / 120.0;

                e.Handled = true;
                var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
                eventArg.RoutedEvent = UIElement.MouseWheelEvent;
                eventArg.Source      = sender;


                int delta = e.Delta;
                if (delta != 0)
                {
                    double diff = Math.Pow(1.1, steps);

                    Size mapSizeStart = new Size(MapScrollViewer.ViewportWidth, MapScrollViewer.ViewportHeight);

                    double vertOffset = MapScrollViewer.VerticalOffset;
                    double horzOffset = MapScrollViewer.HorizontalOffset;

                    UseScale = UseScale * diff;

                    Size mapSizeEnd = mapSizeStart.Multiply(diff);

                    Point mapSizeDiff = mapSizeEnd.Subtract(mapSizeStart).Divide(2.0);

                    double scrollOnSizeX = horzOffset * diff + mapSizeDiff.X;
                    double scrollOnSizeY = vertOffset * diff + mapSizeDiff.Y;

                    MapScrollViewer.ScrollTo(scrollOnSizeX, scrollOnSizeY);
                }
                var parent = ((Control)sender).Parent as UIElement;
                parent.RaiseEvent(eventArg);
            }
        }
        private void MapScrollViewer_OnPointerPressed(object sender, PointerRoutedEventArgs e)
        {
            MapScrollViewer.CapturePointer(e.Pointer);
            if (e.GetCurrentPoint(MapScrollViewer).Properties.IsRightButtonPressed)
            {
                _mouseMode  = MouseHandlingMode.Panning;
                _mouseStart = e.GetCurrentPoint(MapCanvas).Position;
            }
            else if (e.GetCurrentPoint(MapScrollViewer).Properties.IsLeftButtonPressed)
            {
                InstanceOnInvalidateMap();
                switch (_mouseMode)
                {
                case MouseHandlingMode.Move:
                    _map.LockGeometry(MapController.Instance.MousePosition);
                    _mouseStart = e.GetCurrentPoint(MapCanvas).Position;
                    break;

                case MouseHandlingMode.Line:
                    _map.CreateGeometry(MapController.Instance.MousePosition, GeometryType.Line);
                    break;

                case MouseHandlingMode.Rectangle:
                    _map.CreateGeometry(MapController.Instance.MousePosition, GeometryType.Rectangle);
                    break;

                case MouseHandlingMode.Circle:
                    _map.CreateGeometry(MapController.Instance.MousePosition, GeometryType.Circle);
                    break;

                case MouseHandlingMode.Resize:
                    _map.LockPointToMove(MapController.Instance.MousePosition);
                    break;
                }
            }
            e.Handled = true;
        }
        private void MapGridCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            Point p = e.GetPosition((Canvas)sender);

            if (settingFog)
            {
                if (e.LeftButton == MouseButtonState.Released)
                {
                    settingFog = false;
                    map.SaveMap(true);
                }
                else
                {
                    GameMap.MapCell cell = PointToCell(p);

                    List <GameMap.MapCell> list = PointToCellArray(p, brushSize);
                    bool changed = false;
                    foreach (var c in list)
                    {
                        if (CellOnBoard(c))
                        {
                            if (map[c.X, c.Y] != newFogState)
                            {
                                map[c.X, c.Y] = newFogState;
                                changed       = true;
                            }
                        }
                    }
                    if (changed)
                    {
                        map.FireFogOrMarkerChanged();
                    }
                }

                lastPosition = p;
            }
            else if (settingMarkers)
            {
                if (e.LeftButton == MouseButtonState.Released)
                {
                    settingMarkers = false;
                    map.SaveMap(true);
                }
                else
                {
                    SetMarkers(p);
                }
            }
            if (draggingMap)
            {
                if (e.MiddleButton == MouseButtonState.Released)
                {
                    draggingMap = false;
                }
                else
                {
                    Vector v = p - lastPosition;

                    double newVerticalOffset   = MapScrollViewer.VerticalOffset - v.Y;
                    double newHorizontalOffset = MapScrollViewer.HorizontalOffset - v.X;

                    double verticalDiff   = 0;
                    double horizontalDiff = 0;

                    if (newVerticalOffset < 0)
                    {
                        verticalDiff      = newVerticalOffset;
                        newVerticalOffset = 0;
                    }
                    else if (newVerticalOffset > MapScrollViewer.ScrollableHeight)
                    {
                        verticalDiff      = newVerticalOffset - MapScrollViewer.ScrollableHeight;
                        newVerticalOffset = MapScrollViewer.ScrollableHeight;
                    }

                    if (newHorizontalOffset < 0)
                    {
                        horizontalDiff      = newHorizontalOffset;
                        newHorizontalOffset = 0;
                    }
                    else if (newHorizontalOffset > MapScrollViewer.ScrollableWidth)
                    {
                        horizontalDiff      = newHorizontalOffset - MapScrollViewer.ScrollableWidth;
                        newHorizontalOffset = MapScrollViewer.ScrollableWidth;
                    }

                    MapScrollViewer.ScrollToVerticalOffset(newVerticalOffset);
                    MapScrollViewer.ScrollToHorizontalOffset(newHorizontalOffset);

                    lastPosition.X = lastPosition.X - horizontalDiff;
                    lastPosition.Y = lastPosition.Y - verticalDiff;
                }
            }
        }
Beispiel #13
0
 private void MapScrollViewer_OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     MapScrollViewer.Cursor = Cursors.Arrow;
     MapScrollViewer.ReleaseMouseCapture();
     _lastDragPoint = null;
 }