protected virtual IEnumerable <T> InternalCull(ImageViewState viewState) { var culler = new QuadTreeCuller(this.QuadTree); // because every registered item has been inserted for 4 times (see RegisterItem), // we use Distinct() to remove duplicated items. return(culler.Cull(viewState).Distinct()); }
public IEnumerable <T> Cull(ImageViewState viewState) { var elements = new List <T>(); if (this.QuadTree.RootNode != null) { var cullRect = new Rect(0, 0, viewState.ViewportWidth, viewState.ViewportHeight); var cullContext = new CullContext(cullRect, viewState); CullRecursive(elements, cullContext, this.QuadTree.RootNode); } return(elements); }
private void GoFullScreen() { BeginInit(); WindowState = WindowState.Maximized; WindowStyle = WindowStyle.None; _imageScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; _imageScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled; _imageViewState = ImageViewState.FullScreen; var fullScreenSize = this.GetScreenBounds(); _image.Source = _imageFile.GetResizedImage(fullScreenSize); EndInit(); }
private void GoDetailed() { BeginInit(); _imageScrollViewer.ScrollToHorizontalOffset(0); _imageScrollViewer.ScrollToVerticalOffset(0); WindowState = WindowState.Maximized; WindowStyle = WindowStyle.SingleBorderWindow; _imageScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; _imageScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; _imageViewState = ImageViewState.Detailed; _image.Source = _imageFile.GetImage(); EndInit(); }
public void Cull(ImageViewState viewState) { var cullResult = new HashSet <T>(this.InternalCull(viewState)); var addedItems = new List <T>(); var removedItems = new List <T>(); foreach (var item in cullResult) { if (!this.VisibleItems.Contains(item)) { addedItems.Add(item); } } foreach (var item in this.VisibleItems) { if (!cullResult.Contains(item)) { removedItems.Add(item); } } var countChanged = this.VisibleItems.Count != cullResult.Count; this.VisibleItems = cullResult; if (countChanged) { this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(this.Count))); } if (removedItems.Count > 0) { this.OnCollectionChanged( new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, removedItems)); } if (addedItems.Count > 0) { this.OnCollectionChanged( new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, addedItems)); } }
public void ChangeMode(ImageViewState mode) { if (mode != this.ImageViewState) { this.MouseState = MouseState.Idle; } this.ImageViewState = mode; switch (mode) { case ImageViewState.Normal: this.Cursor = Cursors.Hand; break; case ImageViewState.Edit: break; case ImageViewState.Draw: break; default: break; } }
void IOverlay.OnViewStateChanged(ImageViewState viewState) { this.OnViewStateChanged(viewState); }