/// <summary> /// Record the previous zoom level, so that we can return to it. /// </summary> public void SaveZoom() { _viewportZoomCache = CreateUndoRedoStackItem(); if (_undoStack.Any() && _viewportZoomCache.Equals(_undoStack.Peek())) { return; } _undoStack.Push(_viewportZoomCache); _redoStack.Clear(); _undoZoomCommand?.RaiseCanExecuteChanged(); _redoZoomCommand?.RaiseCanExecuteChanged(); }
/// <summary> /// Jump back to the previous zoom level, saving current zoom to Redo Stack. /// </summary> private void UndoZoom() { _viewportZoomCache = CreateUndoRedoStackItem(); if (!_undoStack.Any() || !_viewportZoomCache.Equals(_undoStack.Peek())) { _redoStack.Push(_viewportZoomCache); } _viewportZoomCache = _undoStack.Pop(); this.AnimatedZoomTo(_viewportZoomCache.Zoom, _viewportZoomCache.Rect); SetScrollViewerFocus(); _undoZoomCommand?.RaiseCanExecuteChanged(); _redoZoomCommand?.RaiseCanExecuteChanged(); }
/// <summary> /// Record the last saved zoom level, so that we can return to it if no activity for 1550 milliseconds /// </summary> public void DelayedSaveZoom1500Miliseconds() { if (!_timer1500Miliseconds?.Running != true) { _viewportZoomCache = CreateUndoRedoStackItem(); } (_timer1500Miliseconds ?? (_timer1500Miliseconds = new KeepAliveTimer(TimeSpan.FromMilliseconds(1500), () => { if (_undoStack.Any() && _viewportZoomCache.Equals(_undoStack.Peek())) { return; } _undoStack.Push(_viewportZoomCache); _redoStack.Clear(); _undoZoomCommand?.RaiseCanExecuteChanged(); _redoZoomCommand?.RaiseCanExecuteChanged(); }))).Nudge(); }
public bool Equals(UndoRedoStackItem obj) { return(Zoom.IsWithinOnePercent(obj.Zoom) && Rect.Equals(obj.Rect)); }
public bool Equals(UndoRedoStackItem obj) { return(Math.Abs(obj.Zoom - Zoom) < Zoom * .01 && Rect.Equals(obj.Rect)); }