From 3e2e7717b12e0e930b18f650bce4c570116ca699 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 3 Feb 2018 12:57:36 +0100 Subject: [PATCH] Fix random behaviour when opening images in SETM and 'Auto zoom to fit the crop area' is enabled, fixes #4357 --- rtgui/cropwindow.cc | 2 +- rtgui/cropwindow.h | 2 +- rtgui/editorpanel.cc | 1 - rtgui/imagearea.cc | 28 +++++++++------------------- rtgui/imagearea.h | 3 +-- 5 files changed, 12 insertions(+), 24 deletions(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 001805362..6691fc997 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -2577,7 +2577,7 @@ void CropWindow::initialImageArrived () { for (auto listener : listeners) { - listener->initialImageArrived (this); + listener->initialImageArrived(); } } diff --git a/rtgui/cropwindow.h b/rtgui/cropwindow.h index c1d7c59cc..b1b419c33 100644 --- a/rtgui/cropwindow.h +++ b/rtgui/cropwindow.h @@ -40,7 +40,7 @@ public: virtual void cropPositionChanged (CropWindow*) {} virtual void cropWindowSizeChanged (CropWindow*) {} virtual void cropZoomChanged (CropWindow*) {} - virtual void initialImageArrived (CropWindow*) {} + virtual void initialImageArrived () {} }; class ImageArea; diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 9c23053aa..21753bcf5 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -1068,7 +1068,6 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) // since there was no resize event if (iareapanel->imageArea->mainCropWindow) { iareapanel->imageArea->mainCropWindow->cropHandler.newImage (ipc, false); - iareapanel->imageArea->mainCropWindow->initialImageArrived(); // In single tab mode, the image is not always updated between switches // normal redraw don't work, so this is the hard way diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index 4c4f78a38..55444a916 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -25,7 +25,7 @@ #include "../rtengine/refreshmap.h" #include "options.h" -ImageArea::ImageArea (ImageAreaPanel* p) : parent(p), firstOpen(true), fullImageWidth(0), fullImageHeight(0) +ImageArea::ImageArea (ImageAreaPanel* p) : parent(p), fullImageWidth(0), fullImageHeight(0) { infotext = ""; @@ -633,33 +633,23 @@ void ImageArea::setZoom (double zoom) zoomPanel->refreshZoomLabel (); } -void ImageArea::initialImageArrived (CropWindow* cw) +void ImageArea::initialImageArrived () { if (mainCropWindow) { - if(firstOpen || options.prevdemo != PD_Sidecar || (!options.rememberZoomAndPan) ) { + int w, h; + mainCropWindow->cropHandler.getFullImageSize(w, h); + if(options.prevdemo != PD_Sidecar || !options.rememberZoomAndPan || w != fullImageWidth || h != fullImageHeight) { if (options.cropAutoFit || options.bgcolor != 0) { mainCropWindow->zoomFitCrop(); } else { mainCropWindow->zoomFit(); } - firstOpen = false; - mainCropWindow->cropHandler.getFullImageSize(fullImageWidth, fullImageHeight); - } else { - int w, h; - mainCropWindow->cropHandler.getFullImageSize(w, h); - - if(w != fullImageWidth || h != fullImageHeight) { - if (options.cropAutoFit) { - mainCropWindow->zoomFitCrop(); - } else { - mainCropWindow->zoomFit(); - } - } - - fullImageWidth = w; - fullImageHeight = h; + } else if ((options.cropAutoFit || options.bgcolor != 0) && mainCropWindow->cropHandler.cropParams.enabled) { + mainCropWindow->zoomFitCrop(); } + fullImageWidth = w; + fullImageHeight = h; } } diff --git a/rtgui/imagearea.h b/rtgui/imagearea.h index 91820beb1..65fc14cce 100644 --- a/rtgui/imagearea.h +++ b/rtgui/imagearea.h @@ -65,7 +65,6 @@ protected: void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const; - bool firstOpen; int fullImageWidth, fullImageHeight; public: CropWindow* mainCropWindow; @@ -148,7 +147,7 @@ public: void cropPositionChanged (CropWindow* cw); void cropWindowSizeChanged (CropWindow* cw); void cropZoomChanged (CropWindow* cw); - void initialImageArrived (CropWindow* cw) ; + void initialImageArrived (); // LockablePickerToolListener interface void switchPickerVisibility (bool isVisible);