public void ScrollToVisual(DrawingVisual drawingVisual) { Rect visualBound = drawingVisual.ContentBounds; TranslateTransform translateTransform = drawingVisual.Transform as TranslateTransform; if (translateTransform != null) visualBound.Offset(new Vector(translateTransform.X, translateTransform.Y)); double offsetX; double offsetY; double scale; //GetScrollOffset(visualBound, out offsetX, out offsetY, Key.None); GetScaleScrollOffset(visualBound, out scale, out offsetX, out offsetY); ZoomAndPanAnimationHelper animationHelper = new ZoomAndPanAnimationHelper( offsetX, offsetY, scale, this, this.graphControl, true); //double offsetX; //double offsetY; //GetScrollOffset(visualBound, out offsetX, out offsetY, Key.None); //ZoomAndPanAnimationHelper animationHelper = new ZoomAndPanAnimationHelper( // offsetX, offsetY, this, this.graphControl); }
internal void HandleKeyDown(object sender, KeyEventArgs e) { //Self-TODO(Joy):this function need to be revised if (radialMenu != null) { if (subRadialMenu != null) subRadialMenu.UpdateKeyword(e); else radialMenu.UpdateKeyword(e); graphCanvas.graphCanvas.Focus(); e.Handled = true; return; } ModifierKeys modifier = Keyboard.Modifiers; Key k = e.Key; if (modifier.HasFlag(ModifierKeys.Control) && e.Key == Key.A) { foreach (uint nodeId in nodeVisuals.Values) graphController.DoSelectComponent(nodeId, ModifierKeys.None); ZoomToFit(); return; } if (modifier.HasFlag(ModifierKeys.Shift)) return; if (e.Key == Key.Delete || e.Key == Key.Enter || e.Key == Key.Back) return; //scroll to left/right/top/bottom of the working space if (e.Key == Key.Home || e.Key == Key.End || e.Key == Key.Prior || e.Key == Key.PageUp || e.Key == Key.Next || e.Key == Key.PageDown) { Rect workingRegion = GetNodeRegion(); if (workingRegion == Rect.Empty) return; double offsetX, offsetY; GetScrollOffset(workingRegion, out offsetX, out offsetY, e.Key); ZoomAndPanAnimationHelper animationHelper = new ZoomAndPanAnimationHelper( offsetX, offsetY, this, this.graphControl); e.Handled = true; return; } }
private void ZoomToFit() { if (panning) EndPan(); ScrollViewer scrollViewer = graphControl.canvasScrollViewer; Grid grid = graphControl.canvasGrid; ScaleTransform scaleTransform = graphControl.scaleTransform; Rect frame = this.GetSelectedRegion(); //scale double zoomInRatioX = scrollViewer.ActualWidth / frame.Width; double zoomInRatioY = scrollViewer.ActualHeight / frame.Height; if ((zoomInRatioX == 0) || (zoomInRatioY == 0)) return; double newScale = Math.Min(zoomInRatioX, zoomInRatioY); newScale = ConvertScale(newScale); //Scroll Viewer Offset zoomPanPivotPoint = new Point(frame.Left + frame.Width / 2, frame.Top + frame.Height / 2); Point centerPosition = new Point(scrollViewer.ViewportWidth / 2, scrollViewer.ViewportHeight / 2); double offsetX = zoomPanPivotPoint.X * newScale - centerPosition.X; double offsetY = zoomPanPivotPoint.Y * newScale - centerPosition.Y; //AnimationHelper(offsetX, newScale, Configurations.ShortAnimationTime); ZoomAndPanAnimationHelper animationHelper = new ZoomAndPanAnimationHelper(offsetX, offsetY, newScale, this, this.graphControl, false); }