public void ObstructionViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) { ScrollViewer scrollviewer = sender as ScrollViewer; MapScrollViewer.ScrollToVerticalOffset(scrollviewer.VerticalOffset); MapScrollViewer.ScrollToHorizontalOffset(scrollviewer.HorizontalOffset); }
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); } }
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); } }
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 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; } } }