diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index 7aad0146b..04b89012b 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -36,7 +36,6 @@ ImageArea::ImageArea (ImageAreaPanel* p) : parent(p) { flawnOverWindow = NULL; mainCropWindow = NULL; previewHandler = NULL; - lastClosedX = -1; showClippedH = false; showClippedS = false; listener = NULL; @@ -106,10 +105,6 @@ void ImageArea::setImProcCoordinator (rtengine::StagedImageProcessor* ipc_) { if( !ipc_ ){ focusGrabber = NULL; std::list::iterator i = cropWins.begin(); - if( i!=cropWins.end() ){ - (*i)->getPosition (lastClosedX, lastClosedY); - (*i)->getSize (lastClosedW, lastClosedH); - } for( ;i!=cropWins.end();i++ ){ delete *i; } @@ -350,7 +345,8 @@ void ImageArea::unGrabFocus () { } void ImageArea::addCropWindow () { - if (!mainCropWindow) return; // if called but no image is loaded, it would crash + if (!mainCropWindow) + return; // if called but no image is loaded, it would crash CropWindow* cw = new CropWindow (this, ipc, true); cw->zoom11(); @@ -359,60 +355,65 @@ void ImageArea::addCropWindow () { cw->setPointerMotionHListener (pmhlistener); int lastWidth = options.detailWindowWidth; int lastHeight = options.detailWindowHeight; + if (lastWidthgetSize(lastWidth,lastHeight); } + cropWins.push_front (cw); - // Position the new crop window in a checkerboard, or used the last position - if (lastClosedX<0) { - int K = 2; - int hBorder = get_width()/K/8; - int vBorder = get_height()/K/8; - int N = cropWins.size()-1; - int layer = N/K/K; - int row = K-1 - (N % (K*K)) / K; - int col = K-1 - (N % (K*K)) % K; - int cropwidth, cropheight; - - if(lastWidth == -1) { - cropwidth = get_width()/K - hBorder; - cropheight = get_height()/K - vBorder; - } else { - cropwidth = lastWidth; - cropheight = lastHeight; - } + // Position the new crop window this way: start from top right going down to bottom. When bottom is reached, continue top left going down...... + int N = cropWins.size()-1; + int cropwidth, cropheight; + + if(lastWidth <= 0) { // this is only the case for very first start of RT 4.1 or when options file is deleted + cropwidth = 200; + cropheight = 200; + } else { + cropwidth = lastWidth; + cropheight = lastHeight; + } - if (options.squareDetailWindow){ - // force square CropWindow (this is faster as area is smaller) - if (cropwidthsetSize (cropwidth,cropheight); + int x,y; + int maxRows = get_height()/cropheight; + if(maxRows == 0) + maxRows = 1; - cw->setSize (cropwidth,cropheight); - cw->setPosition (col*get_width()/K + hBorder/2 + layer*30, row*get_height()/K + vBorder/2 + layer*30); - } - else { - cw->setSize(lastClosedW, lastClosedH); - cw->setPosition (lastClosedX, lastClosedY); - lastClosedX = -1; - } + int col = N / maxRows; + if(col % 2) { // from left side + col = col/2; + x = col*cropwidth; + if(x >= get_width() - 50) + x = get_width() - 50; + } + else { // from right side + col /= 2; + col++; + x = get_width() - col * cropwidth; + if(x <= 0) + x = 0; + } - cw->enable(); // start processing! + y = cropheight * (N%maxRows); + cw->setPosition (x, y); + cw->enable(); // start processing! - int x0,y0,w,h,wc,hc; - mainCropWindow->getCropRectangle(x0,y0,w,h ); - cw->getCropSize(wc,hc); - cw->setCropPosition(x0+w/2-wc/2,y0+h/2-hc/2); - mainCropWindow->setObservedCropWin (cropWins.front()); + int x0,y0,w,h,wc,hc; + mainCropWindow->getCropRectangle(x0,y0,w,h ); + cw->getCropSize(wc,hc); + cw->setCropPosition(x0+w/2-wc/2,y0+h/2-hc/2); + mainCropWindow->setObservedCropWin (cropWins.front()); if(cropWins.size()==1) // after first detail window we already have high quality ipc->startProcessing(M_HIGHQUAL); - -// queue_draw (); } @@ -428,8 +429,6 @@ void ImageArea::cropWindowSelected (CropWindow* cw) { void ImageArea::cropWindowClosed (CropWindow* cw) { focusGrabber = NULL; - cw->getPosition (lastClosedX, lastClosedY); - cw->getSize (lastClosedW, lastClosedH); std::list::iterator i = std::find (cropWins.begin(), cropWins.end(), cw); if (i!=cropWins.end()) cropWins.erase (i); diff --git a/rtgui/imagearea.h b/rtgui/imagearea.h index 952a6c91a..fceffdd35 100644 --- a/rtgui/imagearea.h +++ b/rtgui/imagearea.h @@ -51,8 +51,6 @@ class ImageArea : public Gtk::DrawingArea, public CropWindowListener, public Edi PreviewHandler* previewHandler; rtengine::StagedImageProcessor* ipc; - int lastClosedX, lastClosedY, lastClosedW, lastClosedH; - bool dirty; CropWindow* focusGrabber; CropGUIListener* cropgl; diff --git a/rtgui/options.cc b/rtgui/options.cc index d849ccbc8..fcfa16e9a 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -355,7 +355,6 @@ void Options::setDefaults () { hideTPVScrollbar = false; UseIconNoText = true; whiteBalanceSpotSize = 8; - squareDetailWindow = true; menuGroupRank = true; menuGroupLabel = true; menuGroupFileOperations = true; @@ -739,7 +738,6 @@ if (keyFile.has_group ("GUI")) { if (keyFile.has_key ("GUI", "HistogramBar")) histogramBar = keyFile.get_boolean ("GUI", "HistogramBar"); if (keyFile.has_key ("GUI", "HistogramFullMode")) histogramFullMode = keyFile.get_boolean ("GUI", "HistogramFullMode"); if (keyFile.has_key ("GUI", "ShowProfileSelector")) showProfileSelector = keyFile.get_boolean ("GUI", "ShowProfileSelector"); - if (keyFile.has_key ("GUI", "SquareDetailWindow")) squareDetailWindow = keyFile.get_boolean ("GUI", "SquareDetailWindow"); if (keyFile.has_key ("GUI", "FileBrowserToolbarSingleRow")) FileBrowserToolbarSingleRow = keyFile.get_boolean ("GUI", "FileBrowserToolbarSingleRow"); if (keyFile.has_key ("GUI", "HideTPVScrollbar")) hideTPVScrollbar = keyFile.get_boolean ("GUI", "HideTPVScrollbar"); if (keyFile.has_key ("GUI", "UseIconNoText")) UseIconNoText = keyFile.get_boolean ("GUI", "UseIconNoText"); @@ -1031,7 +1029,6 @@ int Options::saveToFile (Glib::ustring fname) { keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); keyFile.set_boolean ("GUI", "HistogramFullMode", histogramFullMode); keyFile.set_boolean ("GUI", "ShowProfileSelector", showProfileSelector); - keyFile.set_boolean ("GUI", "SquareDetailWindow", squareDetailWindow); keyFile.set_boolean ("GUI", "FileBrowserToolbarSingleRow", FileBrowserToolbarSingleRow); keyFile.set_boolean ("GUI", "HideTPVScrollbar", hideTPVScrollbar); keyFile.set_boolean ("GUI", "UseIconNoText", UseIconNoText); diff --git a/rtgui/options.h b/rtgui/options.h index 46aa25a25..714a1070a 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -203,7 +203,6 @@ class Options { bool histogramBar; bool histogramFullMode; bool showProfileSelector; - bool squareDetailWindow; bool FileBrowserToolbarSingleRow; bool hideTPVScrollbar; bool UseIconNoText; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index b054d2f88..e63167597 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -27,7 +27,7 @@ #include #include "../rtengine/safegtk.h" #include "rtimage.h" - + extern Options options; extern Glib::ustring argv0; @@ -77,7 +77,6 @@ Preferences::Preferences (RTWindow *rtwindow) : rprofiles(NULL), iprofiles(NULL buttonpanel->pack_start (*about, Gtk::PACK_SHRINK, 0); buttonpanel->pack_end (*ok, Gtk::PACK_SHRINK, 0); buttonpanel->pack_end (*cancel, Gtk::PACK_SHRINK, 0); - nb->append_page (*getGeneralPanel(), M("PREFERENCES_TAB_GENERAL")); nb->append_page (*getProcParamsPanel(), M("PREFERENCES_TAB_IMPROC")); nb->append_page (*getFileBrowserPanel(), M("PREFERENCES_TAB_BROWSER")); @@ -604,13 +603,14 @@ Gtk::Widget* Preferences::getGeneralPanel () { ckbHistogramWorking = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_HISTOGRAMWORKING")) ); ckbHistogramWorking->set_tooltip_markup (M("PREFERENCES_HISTOGRAM_TOOLTIP")); - hbworkflow2->pack_start (*ckbHistogramWorking, Gtk::PACK_SHRINK, 4); - ckbShowProfileSelector = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWPROFILESELECTOR")) ); - hbworkflow2->pack_start (*ckbShowProfileSelector, Gtk::PACK_SHRINK, 4); - ckbSquareDetailWindow = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SQUAREDETAILWINDOW")) ); - hbworkflow2->pack_start (*ckbSquareDetailWindow, Gtk::PACK_SHRINK, 4); + hbworkflow2->pack_start (*ckbHistogramWorking, Gtk::PACK_SHRINK, 4); vbworkflow->pack_start (*hbworkflow2, Gtk::PACK_SHRINK, 4); + ckbShowProfileSelector = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWPROFILESELECTOR")) ); + Gtk::HBox* hbworkflow2d5 = Gtk::manage( new Gtk::HBox () ); + hbworkflow2d5->pack_start (*ckbShowProfileSelector, Gtk::PACK_SHRINK, 4); + vbworkflow->pack_start (*hbworkflow2d5, Gtk::PACK_SHRINK, 4); + Gtk::HBox* hbworkflow3 = Gtk::manage( new Gtk::HBox () ); ckbFileBrowserToolbarSingleRow = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_FILEBROWSERTOOLBARSINGLEROW")) ); @@ -676,13 +676,12 @@ Gtk::Widget* Preferences::getGeneralPanel () { butNavGuideCol= Gtk::manage( new Gtk::ColorButton() ); butNavGuideCol->set_use_alpha(true); + slimUI = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SLIMUI")) ); hbUseSystemTheme->pack_start(*chUseSystemTheme, Gtk::PACK_SHRINK); hbUseSystemTheme->pack_start (*useNextStart, Gtk::PACK_SHRINK, 0); - hbUseSystemTheme->pack_end (*butNavGuideCol, Gtk::PACK_SHRINK, 0); - hbUseSystemTheme->pack_end (*navGuideLabel, Gtk::PACK_SHRINK, 0); - hbUseSystemTheme->pack_end (*butCropCol, Gtk::PACK_SHRINK, 0); - hbUseSystemTheme->pack_end (*cutOverlayLabel, Gtk::PACK_SHRINK, 0); - vbftheme->pack_start(*hbUseSystemTheme, Gtk::PACK_SHRINK, 0); + hbUseSystemTheme->pack_end(*slimUI, Gtk::PACK_SHRINK, 0); + vbftheme->pack_start(*hbUseSystemTheme, Gtk::PACK_SHRINK, 0); + hbtheme = Gtk::manage( new Gtk::HBox () ); hbtheme->set_spacing (4); @@ -706,9 +705,17 @@ Gtk::Widget* Preferences::getGeneralPanel () { hbtheme->pack_start (*fontbutton); vbftheme->pack_start(*hbtheme, Gtk::PACK_SHRINK, 0); - slimUI = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SLIMUI")) ); - vbftheme->pack_start(*slimUI, Gtk::PACK_SHRINK, 0); - + + Gtk::HBox* hbcolorchooser = Gtk::manage( new Gtk::HBox () ); + hbcolorchooser->set_spacing(4); + + hbcolorchooser->pack_start (*cutOverlayLabel, Gtk::PACK_SHRINK, 0); + hbcolorchooser->pack_start (*butCropCol, Gtk::PACK_SHRINK, 0); + hbcolorchooser->pack_end (*butNavGuideCol, Gtk::PACK_SHRINK, 0); + hbcolorchooser->pack_end (*navGuideLabel, Gtk::PACK_SHRINK, 0); + vbftheme->pack_start(*hbcolorchooser, Gtk::PACK_SHRINK, 0); + + ftheme->add (*vbftheme); mvbsd->pack_start (*ftheme, Gtk::PACK_SHRINK, 0); @@ -718,11 +725,9 @@ Gtk::Widget* Preferences::getGeneralPanel () { hbcd->set_spacing(4); Gtk::Frame* frl = Gtk::manage( new Gtk::Frame (M("PREFERENCES_CLIPPINGIND"))); - blinkClipped = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_BLINKCLIPPED")) ); Gtk::VBox* vbrl = Gtk::manage( new Gtk::VBox () ); vbrl->set_border_width(4); vbrl->set_spacing (4); - vbrl->pack_start (*blinkClipped, Gtk::PACK_SHRINK, 0); Gtk::HBox* vbhl = Gtk::manage( new Gtk::HBox () ); vbhl->set_spacing(4); @@ -755,21 +760,6 @@ Gtk::Widget* Preferences::getGeneralPanel () { Gtk::VBox* dfpfvb = Gtk::manage( new Gtk::VBox () ); dfpfvb->set_spacing (4); - Gtk::Frame* fdf = Gtk::manage( new Gtk::Frame (M("PREFERENCES_DATEFORMATFRAME")) ); - - Gtk::HBox* hb6 = Gtk::manage( new Gtk::HBox () ); - hb6->set_border_width (4); - hb6->set_spacing (4); - Gtk::Label* dflab = Gtk::manage( new Gtk::Label (M("PREFERENCES_DATEFORMAT")+":", Gtk::ALIGN_LEFT)); - dateformat = Gtk::manage( new Gtk::Entry () ); - dateformat->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT")); - dflab->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT")); - hb6->pack_start (*dflab, Gtk::PACK_SHRINK, 0); - hb6->pack_end (*dateformat, Gtk::PACK_SHRINK, 0); - fdf->add (*hb6); - - dfpfvb->pack_start (*fdf, true, true, 0); - //----- Gtk::Frame* pff = Gtk::manage( new Gtk::Frame (M("PREFERENCES_PANFACTORFRAME")) ); @@ -899,12 +889,21 @@ Gtk::Widget* Preferences::getFileBrowserPanel () { showBasicExif = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWBASICEXIF")) ); showExpComp = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWEXPOSURECOMPENSATION")) ); Gtk::VBox* vbro = Gtk::manage( new Gtk::VBox () ); - Gtk::HBox* hbro1 = Gtk::manage( new Gtk::HBox () ); + Gtk::HBox* hbro1 = Gtk::manage( new Gtk::HBox () ); + Gtk::HBox* hbro0 = Gtk::manage( new Gtk::HBox () ); overlayedFileNames = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_OVERLAY_FILENAMES")) ); ckbInternalThumbIfUntouched = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_INTERNALTHUMBIFUNTOUCHED"))); - vbro->set_border_width (4); - vbro->pack_start (*showDateTime, Gtk::PACK_SHRINK, 0); + vbro->set_border_width (4); + vbro->pack_start (*showDateTime, Gtk::PACK_SHRINK, 0); + Gtk::Label* dflab = Gtk::manage( new Gtk::Label (M("PREFERENCES_DATEFORMAT")+":", Gtk::ALIGN_LEFT)); + dateformat = Gtk::manage( new Gtk::Entry () ); + dateformat->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT")); + dflab->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT")); + hbro0->pack_start (*dflab, Gtk::PACK_SHRINK, 4); + hbro0->pack_start (*dateformat, Gtk::PACK_SHRINK, 0); + + vbro->pack_start (*hbro0, Gtk::PACK_SHRINK, 0); hbro1->pack_start (*showBasicExif, Gtk::PACK_SHRINK, 0); hbro1->pack_start (*showExpComp, Gtk::PACK_SHRINK, 4); vbro->pack_start (*hbro1, Gtk::PACK_SHRINK, 0); @@ -1120,7 +1119,6 @@ void Preferences::storePreferences () { moptions.menuGroupFileOperations = ckbmenuGroupFileOperations->get_active(); moptions.menuGroupProfileOperations = ckbmenuGroupProfileOperations->get_active(); moptions.menuGroupExtProg = ckbmenuGroupExtProg->get_active(); - moptions.blinkClipped = blinkClipped->get_active (); moptions.highlightThreshold = (int)hlThresh->get_value (); moptions.shadowThreshold = (int)shThresh->get_value (); moptions.language = languages->get_active_text (); @@ -1220,7 +1218,6 @@ void Preferences::storePreferences () { moptions.histogramPosition = ckbHistogramPositionLeft->get_active() ? 1 : 2; moptions.showProfileSelector = ckbShowProfileSelector->get_active(); - moptions.squareDetailWindow = ckbSquareDetailWindow->get_active(); moptions.FileBrowserToolbarSingleRow = ckbFileBrowserToolbarSingleRow->get_active(); moptions.hideTPVScrollbar = ckbHideTPVScrollbar->get_active(); moptions.overwriteOutputFile = chOverwriteOutputFile->get_active (); @@ -1295,7 +1292,6 @@ void Preferences::fillPreferences () { ckbmenuGroupProfileOperations->set_active(moptions.menuGroupProfileOperations); ckbmenuGroupExtProg->set_active(moptions.menuGroupExtProg); - blinkClipped->set_active (moptions.blinkClipped); hlThresh->set_value (moptions.highlightThreshold); shThresh->set_value (moptions.shadowThreshold); @@ -1356,7 +1352,6 @@ void Preferences::fillPreferences () { ckbHistogramPositionLeft->set_active(moptions.histogramPosition==1); // ckbHistogramWorking->set_active(moptions.histogramWorking==1); ckbShowProfileSelector->set_active(moptions.showProfileSelector); - ckbSquareDetailWindow->set_active(moptions.squareDetailWindow); ckbFileBrowserToolbarSingleRow->set_active(moptions.FileBrowserToolbarSingleRow); ckbHideTPVScrollbar->set_active(moptions.hideTPVScrollbar); ckbUseIconNoText->set_active(moptions.UseIconNoText); diff --git a/rtgui/preferences.h b/rtgui/preferences.h index 80cbeacbf..47f888bdb 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -85,7 +85,6 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener { //Gtk::CheckButton* cbAutocielab; Gtk::CheckButton* cbciecamfloat; - Gtk::CheckButton* blinkClipped; Gtk::SpinButton* hlThresh; Gtk::SpinButton* shThresh; @@ -149,7 +148,6 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener { Gtk::CheckButton* ckbShowProfileSelector; Gtk::CheckButton* ckbFileBrowserToolbarSingleRow; Gtk::CheckButton* ckbHideTPVScrollbar; - Gtk::CheckButton* ckbSquareDetailWindow; Gtk::CheckButton* ckbUseIconNoText; Glib::ustring storedValueRaw;