diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index b233329e3..4810867af 100755 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -416,7 +416,13 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) { bool needRedraw = false; if (state==SCropWinResize) { - setSize (press_x + x - action_x, press_y + y - action_y); + int newWidth = press_x + x - action_x; + int newHeight = press_y + y - action_y; + setSize(newWidth, newHeight); + if (decorated) { + options.detailWindowWidth = newWidth; + options.detailWindowHeight = newHeight; + } state = SNormal; for (std::list::iterator i=listeners.begin(); i!=listeners.end(); i++) (*i)->cropWindowSizeChanged (this); diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index dba3d68f5..7aad0146b 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -357,6 +357,14 @@ void ImageArea::addCropWindow () { cw->setCropGUIListener (cropgl); cw->setPointerMotionListener (pmlistener); cw->setPointerMotionHListener (pmhlistener); + int lastWidth = options.detailWindowWidth; + int lastHeight = options.detailWindowHeight; + if(!cropWins.empty()) { + CropWindow *lastCrop; + lastCrop = cropWins.front(); + if(lastCrop) + lastCrop->getSize(lastWidth,lastHeight); + } cropWins.push_front (cw); // Position the new crop window in a checkerboard, or used the last position @@ -370,8 +378,13 @@ void ImageArea::addCropWindow () { int col = K-1 - (N % (K*K)) % K; int cropwidth, cropheight; - cropwidth = get_width()/K - hBorder; - cropheight = get_height()/K - vBorder; + if(lastWidth == -1) { + cropwidth = get_width()/K - hBorder; + cropheight = get_height()/K - vBorder; + } else { + cropwidth = lastWidth; + cropheight = lastHeight; + } if (options.squareDetailWindow){ // force square CropWindow (this is faster as area is smaller) @@ -396,7 +409,8 @@ void ImageArea::addCropWindow () { cw->setCropPosition(x0+w/2-wc/2,y0+h/2-hc/2); mainCropWindow->setObservedCropWin (cropWins.front()); - ipc->startProcessing(M_HIGHQUAL); + if(cropWins.size()==1) // after first detail window we already have high quality + ipc->startProcessing(M_HIGHQUAL); // queue_draw (); } diff --git a/rtgui/options.cc b/rtgui/options.cc index 8bc294d41..d849ccbc8 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -258,7 +258,9 @@ void Options::setDefaults () { adjusterDelay = 0; startupDir = STARTUPDIR_LAST; startupPath = ""; - useBundledProfiles = true; + useBundledProfiles = true; + detailWindowWidth = -1; + detailWindowHeight = -1; dirBrowserWidth = 260; dirBrowserHeight = 350; preferencesWidth = 800; @@ -702,7 +704,9 @@ if (keyFile.has_group ("GUI")) { if (keyFile.has_key ("GUI", "Font")) font = keyFile.get_string ("GUI", "Font"); if (keyFile.has_key ("GUI", "WindowWidth")) windowWidth = keyFile.get_integer ("GUI", "WindowWidth"); if (keyFile.has_key ("GUI", "WindowHeight")) windowHeight = keyFile.get_integer ("GUI", "WindowHeight"); - if (keyFile.has_key ("GUI", "WindowMaximized")) windowMaximized = keyFile.get_boolean ("GUI", "WindowMaximized"); + if (keyFile.has_key ("GUI", "WindowMaximized")) windowMaximized = keyFile.get_boolean ("GUI", "WindowMaximized"); + if (keyFile.has_key ("GUI", "DetailWindowWidth")) detailWindowWidth = keyFile.get_integer ("GUI", "DetailWindowWidth"); + if (keyFile.has_key ("GUI", "DetailWindowHeight")) detailWindowHeight = keyFile.get_integer ("GUI", "DetailWindowHeight"); if (keyFile.has_key ("GUI", "DirBrowserWidth")) dirBrowserWidth = keyFile.get_integer ("GUI", "DirBrowserWidth"); if (keyFile.has_key ("GUI", "DirBrowserHeight")) dirBrowserHeight = keyFile.get_integer ("GUI", "DirBrowserHeight"); if (keyFile.has_key ("GUI", "PreferencesWidth")) preferencesWidth = keyFile.get_integer ("GUI", "PreferencesWidth"); @@ -993,6 +997,8 @@ int Options::saveToFile (Glib::ustring fname) { keyFile.set_integer ("GUI", "WindowWidth", windowWidth); keyFile.set_integer ("GUI", "WindowHeight", windowHeight); keyFile.set_boolean ("GUI", "WindowMaximized", windowMaximized); + keyFile.set_integer ("GUI", "DetailWindowWidth", detailWindowWidth); + keyFile.set_integer ("GUI", "DetailWindowHeight", detailWindowHeight); keyFile.set_integer ("GUI", "DirBrowserWidth", dirBrowserWidth); keyFile.set_integer ("GUI", "DirBrowserHeight", dirBrowserHeight); keyFile.set_integer ("GUI", "PreferencesWidth", preferencesWidth); @@ -1278,7 +1284,7 @@ bool Options::load () { } void Options::save () { - + if (options.multiUser==false) { options.saveToFile (Glib::build_filename(argv0, "options")); } diff --git a/rtgui/options.h b/rtgui/options.h index 9b97b541a..46aa25a25 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -113,7 +113,9 @@ class Options { Glib::ustring font; int windowWidth; int windowHeight; - bool windowMaximized; + bool windowMaximized; + int detailWindowWidth; + int detailWindowHeight; int dirBrowserWidth; int dirBrowserHeight; int preferencesWidth;