/// <summary> /// Refreshes the final pixel render size which will be used by all the rendering methods /// </summary> /// <param name="invalidateFastImage">Creates a new FastImage and disposes the old one</param> private void RefreshRenderSize(bool invalidateFastImage = false) { if (!IsLoaded) { return; } var refreshThread = new Thread(() => { // suppress rendering actions while the windows is changed MandelFrame.CancelToken.Cancel(); lock (MandelFrame.RenderLock) { MandelFrame.ResetToken(); // check best aspect ratio double newWidth, newHeight; if ((int)MandelBrotGrid.ActualWidth <= (int)MandelBrotGrid.ActualHeight) { // width is smaller newWidth = MandelBrotGrid.ActualWidth; newHeight = newWidth * ZoomSelectionHandler.GausRatioXy; } else { // height is smaller newHeight = MandelBrotGrid.ActualHeight; newWidth = newHeight * ZoomSelectionHandler.GausRatioYx; } RenderSizeRef.ChangeDisplaySize(newWidth, newHeight); InvokeOnMainWindow(() => { // set wpf control size MandelBrotImage.Width = RenderSizeRef.DisplayWidth; MandelBrotImage.Height = RenderSizeRef.DisplayHeight; MandelBrotImagePreview.Width = RenderSizeRef.DisplayWidth; MandelBrotImagePreview.Height = RenderSizeRef.DisplayHeight; MandelBrotCanvas.Width = RenderSizeRef.DisplayWidth; MandelBrotCanvas.Height = RenderSizeRef.DisplayHeight; UpdateLayout(); }); if (invalidateFastImage) { InvokeOnMainWindow(() => { // grab a new fast image FastImageRef?.Dispose(); FastImageRef = new FastImage(MandelBrotImage, RenderSizeRef.RenderWidth, RenderSizeRef.RenderHeight); FastImagePreviewRef?.Dispose(); FastImagePreviewRef = new FastImage(MandelBrotImagePreview, RenderSizeRef.PreviewWidth, RenderSizeRef.PreviewHeight); }); // re-render CurrentFrame?.RenderAsync(); } } }); refreshThread.Name = "RefreshThread"; refreshThread.Start(); }