From 528d85b1f9d5a847ac3adc1f7a571743df7f1cbc Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 9 Sep 2015 20:01:27 +0200 Subject: [PATCH] Dehaz enhancement HSL GUI bugs partialpaste... --- rtdata/languages/default | 11 +++- rtengine/curves.cc | 22 +++++++ rtengine/curves.h | 1 + rtengine/imagesource.h | 2 +- rtengine/improccoordinator.cc | 5 +- rtengine/improccoordinator.h | 1 + rtengine/ipdehaz.cc | 8 +-- rtengine/procevents.h | 1 + rtengine/procparams.cc | 34 +++++++++- rtengine/procparams.h | 2 + rtengine/rawimagesource.cc | 6 +- rtengine/rawimagesource.h | 2 +- rtengine/refreshmap.cc | 3 +- rtengine/simpleprocess.cc | 5 +- rtgui/addsetids.h | 9 ++- rtgui/batchtoolpanelcoord.cc | 30 +++++++++ rtgui/dehaz.cc | 114 +++++++++++++++++++++++++++++----- rtgui/dehaz.h | 11 +++- rtgui/options.cc | 7 +++ rtgui/paramsedited.cc | 22 ++++--- rtgui/paramsedited.h | 1 + rtgui/partialpastedlg.cc | 3 + rtgui/partialpastedlg.h | 3 +- rtgui/preferences.cc | 10 +++ 24 files changed, 273 insertions(+), 40 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index ab9d244c4..ee94c17ed 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -643,12 +643,14 @@ HISTORY_MSG_410;Dehaze offset HISTORY_MSG_411;Dehaze strength HISTORY_MSG_412;Dehaze scales HISTORY_MSG_413;Dehaze variance -HISTORY_MSG_414;Dehaze histogram +HISTORY_MSG_414;Dehaze histogram Lab HISTORY_MSG_415;Dehaze transmission HISTORY_MSG_416;Dehaze enabled HISTORY_MSG_417;Dehaze Retinex complete HISTORY_MSG_418;Dehaze transmission median HISTORY_MSG_419;Dehaze threshold +HISTORY_MSG_420;Dehaze Space +HISTORY_MSG_421;Dehaze Histogram HSL HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOTS;Snapshots @@ -800,6 +802,7 @@ PARTIALPASTE_DIRPYREQUALIZER;Contrast by detail levels PARTIALPASTE_DISTORTION;Distortion correction PARTIALPASTE_EPD;Tone mapping PARTIALPASTE_EQUALIZER;Wavelet levels +PARTIALPASTE_DEHAZ;Dehaze PARTIALPASTE_EVERYTHING;Everything PARTIALPASTE_EXIFCHANGES;Exif PARTIALPASTE_EXPOSURE;Exposure @@ -1556,6 +1559,8 @@ TP_DEHAZ_MLABEL;Restored haze-free Min=%1 Max=%2 TP_DEHAZ_MLABEL_TOOLTIP;Should be near of min=0 max=32768\nRestored image with no mixture TP_DEHAZ_TLABEL;TR m=%1 M=%2 Me=%3 Si=%4 Tm=%5 TM=%6 TP_DEHAZ_TLABEL_TOOLTIP;Transmission map result\nm=Mini M=Maxi used by Variance\nMe=Mean Si=Sigma\nTm=Min TM=Max of Transmission map +TP_DEHAZ_LABSPACE;L*a*b* +TP_DEHAZ_HSLSPACE;HSL TP_DEHAZ_STR;Strength TP_DEHAZ_STR_TOOLTIP;Mixture in proportion to the original image and that obtained by Retinex algoritm TP_DEHAZ_RETIN;Complete Retinex algoritm @@ -1573,7 +1578,9 @@ TP_DEHAZ_GAIN;Gain TP_DEHAZ_OFFS;Offset TP_DEHAZ_GAIN_TOOLTIP;Acts on the transmission in combination with offset, this is very different from others settings\nUsed for black or white pixels, and for better balance the histogram TP_DEHAZE_LAB;Dehaze -TP_DEHAZ_CONTEDIT;Histogram equalizer +TP_DEHAZ_CONTEDIT;Histogram equalizer L*a*b* +TP_DEHAZ_CONTEDITH;Histogram equalizer HSL +TP_DEHAZ_COLORSPACE_TOOLTIP;Choice between L*a*b and HSL\nYou may have to adjust the histogram curve, and adjust other settings differently.\n Prefer restaured Haze-free Min#0 Max#32768 TP_DEHAZ_CURVEEDITOR_CD;L=f(L) TP_DEHAZ_CURVEEDITOR_CD_TOOLTIP;Correct Raw data, to reduce halos and artifacts TP_DEHAZ_TRANSMISSION;Transmission map diff --git a/rtengine/curves.cc b/rtengine/curves.cc index 53dfbcc82..36e777991 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -526,6 +526,28 @@ void CurveFactory::curveDehaContL ( bool & dehacontlutili, const std::vector& dehaclcurvePoints, LUTf & dehaclCurve, int skip) +{ + bool needed = false; + DiagonalCurve* dCurve = NULL; + + if (!dehaclcurvePoints.empty() && dehaclcurvePoints[0] != 0) { + dCurve = new DiagonalCurve (dehaclcurvePoints, CURVES_MIN_POLY_POINTS / skip); + + if (dCurve && !dCurve->isIdentity()) { + needed = true; + dehaHcontlutili = true; + } + } + + fillCurveArray(dCurve, dehaclCurve, skip, needed); + + if (dCurve) { + delete dCurve; + dCurve = NULL; + } +} + // add curve Lab wavelet : Cont=f(L) void CurveFactory::curveWavContL ( bool & wavcontlutili, const std::vector& wavclcurvePoints, LUTf & wavclCurve, /*LUTu & histogramwavcl, LUTu & outBeforeWavCLurveHistogram,*/int skip) { diff --git a/rtengine/curves.h b/rtengine/curves.h index 192cf89ee..173975838 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -283,6 +283,7 @@ public: static void curveWavContL ( bool & wavcontlutili, const std::vector& wavclcurvePoints, LUTf & wavclCurve,/* LUTu & histogramwavcl, LUTu & outBeforeWavCLurveHistogram,*/int skip); static void curveDehaContL ( bool & dehacontlutili, const std::vector& dehaclcurvePoints, LUTf & dehaclCurve, int skip); + static void curveDehaHContL ( bool & dehaHcontlutili, const std::vector& dehaclcurvePoints, LUTf & dehaclCurve, int skip); static void curveToningCL ( bool & clctoningutili, const std::vector& clcurvePoints, LUTf & clToningCurve, int skip); static void curveToningLL ( bool & llctoningutili, const std::vector& llcurvePoints, LUTf & llToningCurve, int skip); diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index cb8a36f7d..3aa230bb0 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -70,7 +70,7 @@ public: virtual void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse) {}; virtual void demosaic (const RAWParams &raw) {}; // virtual void // dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams lcur, LUTf & cdcurve, bool dehacontlutili) {}; - virtual void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams deh, LUTf & cdcurve, const DehaztransmissionCurve & dehatransmissionCurve, bool dehacontlutili, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) {}; + virtual void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams deh, LUTf & cdcurve, LUTf & cdHcurve, const DehaztransmissionCurve & dehatransmissionCurve, bool dehacontlutili, bool dehaHcontlutili, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) {}; virtual void flushRawData () {}; virtual void flushRGB () {}; virtual void HLRecovery_Global (ToneCurveParams hrp) {}; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 9e9fa24c8..f53239ca6 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -47,6 +47,7 @@ ImProcCoordinator::ImProcCoordinator () lhskcurve(65536, 0), clcurve(65536, 0), cdcurve(65536, 0), + cdHcurve(65536, 0), wavclCurve(65536, 0), clToningcurve(65536, 0), cl2Toningcurve(65536, 0), @@ -237,11 +238,13 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) if (params.dehaz.enabled) { bool dehacontlutili = false; + bool dehaHcontlutili = false; CurveFactory::curveDehaContL (dehacontlutili, params.dehaz.cdcurve, cdcurve, 1); + CurveFactory::curveDehaHContL (dehaHcontlutili, params.dehaz.cdHcurve, cdHcurve, 1); DehazParams DehaParams = params.dehaz; DehaParams.getCurves(dehatransmissionCurve); float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; - imgsrc->dehaz( params.raw, params.icm, params.dehaz, cdcurve, dehatransmissionCurve, dehacontlutili, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);//enabled Dehaze + imgsrc->dehaz( params.raw, params.icm, params.dehaz, cdcurve, cdHcurve, dehatransmissionCurve, dehacontlutili, dehaHcontlutili, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);//enabled Dehaze if(dehaListener) { dehaListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index a6d6e044c..452df747a 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -95,6 +95,7 @@ protected: LUTf lhskcurve; LUTf clcurve; LUTf cdcurve; + LUTf cdHcurve; LUTf wavclCurve; LUTf clToningcurve; LUTf cl2Toningcurve; diff --git a/rtengine/ipdehaz.cc b/rtengine/ipdehaz.cc index a829abe9a..aa01b2443 100644 --- a/rtengine/ipdehaz.cc +++ b/rtengine/ipdehaz.cc @@ -208,7 +208,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width float eps = 2.f; bool useHsl = deh.dehazcolorspace == "HSL"; float gain2 = (float) deh.gain / 100.f; //def =1 not use - gain2 = useHsl ? gain2 * 0.5f : gain2; + // gain2 = useHsl ? gain2 * 0.5f : gain2; float offse = (float) deh.offs; //def = 0 not use int scal = deh.scal; //def=3 int nei = (int) 2.8f * deh.neigh; //def = 220 @@ -216,7 +216,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width float strength = (float) deh.str / 100.f; // Blend with original L channel data float limD = (float) deh.limd; limD = pow(limD, 1.7f);//about 2500 enough - limD *= useHsl ? 10.f : 1.f; + // limD *= useHsl ? 10.f : 1.f; float ilimD = 1.f / limD; int modedehaz = 0; // default to 0 ( deh.dehazmet == "uni" ) bool execcur = false; @@ -285,7 +285,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width #ifdef __SSE2__ if(useHsl) { for (; j < W_L - 3; j += 4) { - _mm_storeu_ps(&luminance[i][j], LVFU(luminance[i][j]) + pondv * (LIMV(LVFU(src[i][j]) / LVFU(out[i][j]), limMinv, limMaxv) )); + _mm_storeu_ps(&luminance[i][j], LVFU(luminance[i][j]) + pondv * xlogf(LIMV(LVFU(src[i][j]) / LVFU(out[i][j]), limMinv, limMaxv) )); } } else { for (; j < W_L - 3; j += 4) { @@ -295,7 +295,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width #endif if(useHsl) { for (; j < W_L; j++) { - luminance[i][j] += pond * (LIM(src[i][j] / out[i][j], ilimD, limD)); + luminance[i][j] += pond * xlogf(LIM(src[i][j] / out[i][j], ilimD, limD)); } } else { for (; j < W_L; j++) { diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 98972fd89..9c4552697 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -446,6 +446,7 @@ enum ProcEvent { EvDehazmedianmap = 417, EvLlimd = 418, EvdehazColorSpace = 419, + EvLCDHCurve = 420, NUMOFEVENTS }; } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 92d4bf714..a078ba31f 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -159,10 +159,27 @@ void DehazParams::getDefaultCDCurve(std::vector &curve) } } +void DehazParams::getDefaultCDHCurve(std::vector &curve) +{ + double v[6] = { 0.00, 0.00, + 0.5, 0.5, + 1.0, 1.0, + }; + + curve.resize(7); + curve.at(0) = double(DCT_NURBS); + + for (size_t i = 1; i < curve.size(); ++i) { + curve.at(i) = v[i - 1]; + } +} + + + void DehazParams::setDefaults() { enabled = false; - str = 60; + str = 30; scal = 3; neigh = 80; gain = 100; @@ -171,6 +188,7 @@ void DehazParams::setDefaults() limd = 8; getDefaulttransmissionCurve(transmissionCurve); getDefaultCDCurve(cdcurve); + getDefaultCDHCurve(cdHcurve); dehazmet = "uni"; dehazcolorspace = "Lab"; retinex = false; @@ -1502,6 +1520,11 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol Glib::ArrayHandle cdcurve = dehaz.cdcurve; keyFile.set_double_list("Dehaz", "CDCurve", cdcurve); } + + if (!pedited || pedited->dehaz.cdHcurve) { + Glib::ArrayHandle cdHcurve = dehaz.cdHcurve; + keyFile.set_double_list("Dehaz", "CDHCurve", cdHcurve); + } if (!pedited || pedited->dehaz.transmissionCurve) { Glib::ArrayHandle transmissionCurve = dehaz.transmissionCurve; @@ -3872,6 +3895,14 @@ int ProcParams::load (Glib::ustring fname, ParamsEdited* pedited) pedited->dehaz.cdcurve = true; } } + + if (keyFile.has_key ("Dehaz", "CDHCurve")) { + dehaz.cdHcurve = keyFile.get_double_list ("Dehaz", "CDHCurve"); + + if (pedited) { + pedited->dehaz.cdHcurve = true; + } + } if (keyFile.has_key ("Dehaz", "TransmissionCurve")) { dehaz.transmissionCurve = keyFile.get_double_list ("Dehaz", "TransmissionCurve"); @@ -7243,6 +7274,7 @@ bool ProcParams::operator== (const ProcParams& other) && toneCurve.hrenabled == other.toneCurve.hrenabled && toneCurve.method == other.toneCurve.method && dehaz.cdcurve == other.dehaz.cdcurve + && dehaz.cdHcurve == other.dehaz.cdHcurve && dehaz.transmissionCurve == other.dehaz.transmissionCurve && dehaz.str == other.dehaz.str && dehaz.scal == other.dehaz.scal diff --git a/rtengine/procparams.h b/rtengine/procparams.h index d0451d50f..c549aaa19 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -270,6 +270,7 @@ class DehazParams public: bool enabled; std::vector cdcurve; + std::vector cdHcurve; std::vector transmissionCurve; int str; int scal; @@ -288,6 +289,7 @@ public: static void getDefaulttransmissionCurve(std::vector &curve); static void getDefaultCDCurve(std::vector &curve); + static void getDefaultCDHCurve(std::vector &curve); }; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 114fb537d..3f9d415c2 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -1801,7 +1801,7 @@ void RawImageSource::demosaic(const RAWParams &raw) } } -void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, DehazParams deh, LUTf & cdcurve, const DehaztransmissionCurve & dehatransmissionCurve, bool dehacontlutili, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) +void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, DehazParams deh, LUTf & cdcurve, LUTf & cdHcurve, const DehaztransmissionCurve & dehatransmissionCurve, bool dehacontlutili, bool dehaHcontlutili, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) { MyTime t4, t5; @@ -1850,8 +1850,8 @@ void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, DehazParams L *= 65535.f; labTmp[i - border][j - border] = L; - if(dehacontlutili) { - L = cdcurve[L]; //apply curve to equalize histogram + if(dehaHcontlutili) { + L = cdHcurve[L]; //apply curve to equalize histogram } labdeha->L[i - border][j - border] = L; diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index d6bd3a6d3..c77fe05a2 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -152,7 +152,7 @@ public: void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse); void demosaic (const RAWParams &raw); // void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams lcur, LUTf & cdcurve, bool dehacontlutili); - void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams deh, LUTf & cdcurve, const DehaztransmissionCurve & dehatransmissionCurve, bool dehacontlutili, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); + void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams deh, LUTf & cdcurve, LUTf & cdHcurve, const DehaztransmissionCurve & dehatransmissionCurve, bool dehacontlutili, bool dehaHcontlutili, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); void flushRawData (); void flushRGB (); void HLRecovery_Global (ToneCurveParams hrp); diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 2bf2e261e..aa6de849b 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -441,7 +441,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { DEMOSAIC, // EvDehazretinex DEMOSAIC, // EvDehazmedianmap DEMOSAIC, // EvLlimd - DEMOSAIC // Evdehazcolorspace + DEMOSAIC, // Evdehazcolorspace + DEMOSAIC // EvLCDHCurve }; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index d462b9ecc..5425bc9fe 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -118,14 +118,17 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p if(params.dehaz.enabled) { //enabled Dehaze LUTf cdcurve (65536, 0); + LUTf cdHcurve (65536, 0); DehaztransmissionCurve dehatransmissionCurve; bool dehacontlutili = false; + bool dehaHcontlutili = false; CurveFactory::curveDehaContL (dehacontlutili, params.dehaz.cdcurve, cdcurve, 1); + CurveFactory::curveDehaHContL (dehaHcontlutili, params.dehaz.cdHcurve, cdHcurve, 1); DehazParams DehaParams = params.dehaz; DehaParams.getCurves(dehatransmissionCurve); float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; - imgsrc->dehaz( params.raw, params.icm, params.dehaz, cdcurve, dehatransmissionCurve, dehacontlutili, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + imgsrc->dehaz( params.raw, params.icm, params.dehaz, cdcurve, cdHcurve, dehatransmissionCurve, dehacontlutili, dehaHcontlutili, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); } if (pl) { diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 8f6ef6685..5d94ef71f 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -107,8 +107,15 @@ #define ADDSET_WA_EDGEDETECTTHR2 99 #define ADDSET_WA_TMRS 100 #define ADDSET_WA_GAMMA 101 +#define ADDSET_DH_STR 102 +#define ADDSET_DH_SCAL 103 +#define ADDSET_DH_NEIGH 104 +#define ADDSET_DH_LIMD 105 +#define ADDSET_DH_GAIN 106 +#define ADDSET_DH_OFFS 107 +#define ADDSET_DH_VART 108 // When adding items, make sure to update ADDSET_PARAM_NUM -#define ADDSET_PARAM_NUM 102 // THIS IS USED AS A DELIMITER!! +#define ADDSET_PARAM_NUM 109 // THIS IS USED AS A DELIMITER!! #endif diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 95f7f3ec7..7e8c79986 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -167,6 +167,7 @@ void BatchToolPanelCoordinator::initSession () blackwhite->setAdjusterBehavior (false, false); colortoning->setAdjusterBehavior (false, false, false, false, false); filmSimulation->setAdjusterBehavior(false); + dehaz->setAdjusterBehavior (false, false, false, false, false, false, false); shadowshighlights->setAdjusterBehavior (false, false, false); dirpyrequalizer->setAdjusterBehavior (false, false, false); @@ -203,6 +204,7 @@ void BatchToolPanelCoordinator::initSession () // colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRPROTECT], options.baBehav[ADDSET_COLORTONING_BALANCE]); colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRENGTH], options.baBehav[ADDSET_COLORTONING_BALANCE]); filmSimulation->setAdjusterBehavior(options.baBehav[ADDSET_FILMSIMULATION_STRENGTH]); + dehaz->setAdjusterBehavior (options.baBehav[ADDSET_DH_STR], options.baBehav[ADDSET_DH_SCAL], options.baBehav[ADDSET_DH_NEIGH], options.baBehav[ADDSET_DH_LIMD], options.baBehav[ADDSET_DH_GAIN], options.baBehav[ADDSET_DH_OFFS], options.baBehav[ADDSET_DH_VART]); chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER] ); blackwhite->setAdjusterBehavior (options.baBehav[ADDSET_BLACKWHITE_HUES], options.baBehav[ADDSET_BLACKWHITE_GAMMA]); @@ -575,6 +577,34 @@ void BatchToolPanelCoordinator::initSession () if (options.baBehav[ADDSET_WA_GAMMA]) { pparams.wavelet.gamma = 0; } + + if (options.baBehav[ADDSET_DH_STR]) { + pparams.dehaz.str = 0; + } + + if (options.baBehav[ADDSET_DH_SCAL]) { + pparams.dehaz.scal = 0; + } + + if (options.baBehav[ADDSET_DH_NEIGH]) { + pparams.dehaz.neigh = 0; + } + + if (options.baBehav[ADDSET_DH_LIMD]) { + pparams.dehaz.limd = 0; + } + + if (options.baBehav[ADDSET_DH_GAIN]) { + pparams.dehaz.gain = 0; + } + + if (options.baBehav[ADDSET_DH_OFFS]) { + pparams.dehaz.offs = 0; + } + + if (options.baBehav[ADDSET_DH_VART]) { + pparams.dehaz.vart = 0; + } if (options.baBehav[ADDSET_DIRPYRDN_LUMA]) { diff --git a/rtgui/dehaz.cc b/rtgui/dehaz.cc index 509477eed..01c11b178 100644 --- a/rtgui/dehaz.cc +++ b/rtgui/dehaz.cc @@ -46,7 +46,7 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t dehazmet->set_tooltip_markup (M("TP_DEHAZ_MET_TOOLTIP")); dehazcolorspace = Gtk::manage (new MyComboBoxText ()); - dehazcolorspace->append_text (M("TP_DEHAZ_LABSAPCE")); + dehazcolorspace->append_text (M("TP_DEHAZ_LABSPACE")); dehazcolorspace->append_text (M("TP_DEHAZ_HSLSPACE")); dehazcolorspace->set_active(0); dehazmetConn = dehazcolorspace->signal_changed().connect ( sigc::mem_fun(*this, &Dehaz::dehazColorSpaceChanged) ); @@ -74,6 +74,22 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t curveEditorGD->curveListComplete(); + curveEditorGDH = new CurveEditorGroup (options.lastDehazDir, M("TP_DEHAZ_CONTEDITH")); + curveEditorGDH->setCurveListener (this); + rtengine::DehazParams::getDefaultCDHCurve(defaultCurve); + cdshapeH = static_cast(curveEditorGDH->addCurve(CT_Diagonal, M("TP_DEHAZ_CURVEEDITOR_CD"))); + cdshapeH->setResetCurve(DiagonalCurveType(defaultCurve.at(0)), defaultCurve); + cdshapeH->setTooltip(M("TP_DEHAZ_CURVEEDITOR_CD_TOOLTIP")); + std::vector milestones22H; + + milestones22H.push_back( GradientMilestone(0., 0., 0., 0.) ); + milestones22H.push_back( GradientMilestone(1., 1., 1., 1.) ); + cdshapeH->setBottomBarBgGradient(milestones22H); + cdshapeH->setLeftBarBgGradient(milestones22H); + + curveEditorGDH->curveListComplete(); + + transmissionCurveEditorG = new CurveEditorGroup (options.lastDehazDir, M("TP_DEHAZ_TRANSMISSION")); transmissionCurveEditorG->setCurveListener (this); @@ -88,10 +104,13 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t - str = Gtk::manage (new Adjuster (M("TP_DEHAZ_STR"), 0, 100., 1., 60.)); + str = Gtk::manage (new Adjuster (M("TP_DEHAZ_STR"), 0, 100., 1., 30.)); str->set_tooltip_markup (M("TP_DEHAZ_STR_TOOLTIP")); neigh = Gtk::manage (new Adjuster (M("TP_DEHAZ_NEIGH"), 6, 100., 1., 80.)); + expretinex = new MyExpander (false, M("TP_DEHAZ_RETIN")); + expretinex->signal_button_release_event().connect_notify( sigc::bind( sigc::mem_fun(this, &Dehaz::foldAllButMe), expretinex) ); + retinex = Gtk::manage (new Gtk::CheckButton (M("TP_DEHAZ_RETIN"))); retinex->set_active (true); retinexConn = retinex->signal_toggled().connect( sigc::mem_fun(*this, &Dehaz::retinexChanged) ); @@ -103,8 +122,8 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t neigh->show (); neigh->set_tooltip_markup (M("TP_DEHAZ_NEIGH_TOOLTIP")); - dehazVBox->pack_start (*retinex); - retinex->show (); +// dehazVBox->pack_start (*retinex); +// retinex->show (); mMLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); mMLabels->set_tooltip_markup (M("TP_DEHAZ_MLABEL_TOOLTIP")); @@ -136,6 +155,9 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t RetiVBox->pack_start (*curveEditorGD, Gtk::PACK_SHRINK, 4); curveEditorGD->show(); + RetiVBox->pack_start (*curveEditorGDH, Gtk::PACK_SHRINK, 4); + curveEditorGDH->show(); + RetiVBox->pack_start (*scal); scal->show (); @@ -157,6 +179,8 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t RetiVBox->pack_start (*medianmap); medianmap->show (); + expretinex->add(*RetiVBox); + str->setAdjusterListener (this); scal->setAdjusterListener (this); neigh->setAdjusterListener (this); @@ -165,12 +189,14 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t vart->setAdjusterListener (this); limd->setAdjusterListener (this); pack_start (*dehazVBox); - dehazFrame->add(*RetiVBox); - pack_start (*dehazFrame); - dehazFrame->hide(); +// dehazFrame->add(*RetiVBox); +// pack_start (*dehazFrame); +// dehazFrame->hide(); + pack_start (*expretinex); disableListener(); retinexChanged(); + dehazColorSpaceChanged(); medianmapChanged(); enableListener(); @@ -179,9 +205,34 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t Dehaz::~Dehaz() { delete curveEditorGD; + delete curveEditorGDH; delete transmissionCurveEditorG; } + +void Dehaz::foldAllButMe (GdkEventButton* event, MyExpander *expander) +{ + if (event->button == 3) { + expretinex->set_expanded(expretinex == expander); + } +} + +void Dehaz::writeOptions(std::vector &tpOpen) +{ + tpOpen.push_back (expretinex->get_expanded ()); +} + +void Dehaz::updateToolState(std::vector &tpOpen) +{ + if(tpOpen.size() == 9) { + expretinex->set_expanded(tpOpen.at(0)); + } +} + + + + + int minmaxChangedUI (void* data) { GThreadLock lock; // All GUI acces from idle_add callbacks or separate thread HAVE to be protected @@ -282,6 +333,7 @@ void Dehaz::read (const ProcParams* pp, const ParamsEdited* pedited) } cdshape->setUnChanged (!pedited->dehaz.cdcurve); + cdshapeH->setUnChanged (!pedited->dehaz.cdHcurve); transmissionShape->setUnChanged (!pedited->dehaz.transmissionCurve); } @@ -322,7 +374,6 @@ void Dehaz::read (const ProcParams* pp, const ParamsEdited* pedited) } else if (pp->dehaz.dehazcolorspace == "HSL") { dehazcolorspace->set_active (1); } - dehazColorSpaceChanged(); retinexConn.block(false); retinexChanged (); @@ -333,7 +384,10 @@ void Dehaz::read (const ProcParams* pp, const ParamsEdited* pedited) medianmapConn.block(false); cdshape->setCurve (pp->dehaz.cdcurve); + cdshapeH->setCurve (pp->dehaz.cdHcurve); dehazmetConn.block(false); + dehazColorSpaceConn.block(false); + dehazColorSpaceChanged(); dehazColorSpaceConn.block(false); transmissionShape->setCurve (pp->dehaz.transmissionCurve); @@ -354,6 +408,7 @@ void Dehaz::retinexUpdateUI () transLabels->show(); transmissionCurveEditorG->show(); curveEditorGD->show(); + curveEditorGDH->show(); dehazFrame->show(); } else { scal->hide(); @@ -366,6 +421,7 @@ void Dehaz::retinexUpdateUI () medianmap->hide(); transmissionCurveEditorG->hide(); curveEditorGD->hide(); + curveEditorGDH->hide(); dehazFrame->hide(); } } @@ -384,6 +440,7 @@ void Dehaz::write (ProcParams* pp, ParamsEdited* pedited) pp->dehaz.vart = (int)vart->getValue (); pp->dehaz.limd = (int)limd->getValue (); pp->dehaz.cdcurve = cdshape->getCurve (); + pp->dehaz.cdHcurve = cdshapeH->getCurve (); pp->dehaz.transmissionCurve = transmissionShape->getCurve (); pp->dehaz.enabled = getEnabled(); pp->dehaz.retinex = retinex->get_active(); @@ -402,6 +459,7 @@ void Dehaz::write (ProcParams* pp, ParamsEdited* pedited) pedited->dehaz.vart = vart->getEditedState (); pedited->dehaz.limd = limd->getEditedState (); pedited->dehaz.cdcurve = !cdshape->isUnChanged (); + pedited->dehaz.cdHcurve = !cdshapeH->isUnChanged (); pedited->dehaz.transmissionCurve = !transmissionShape->isUnChanged (); pedited->dehaz.enabled = !get_inconsistent(); pedited->dehaz.retinex = !retinex->get_inconsistent(); @@ -431,8 +489,25 @@ void Dehaz::dehazmetChanged() } } +void Dehaz::ColorSpaceUpdateUI () +{ + if (!batchMode) { + if(dehazcolorspace->get_active_row_number() == 0) { + curveEditorGD->show(); + curveEditorGDH->hide(); + } else if(dehazcolorspace->get_active_row_number() == 1) { + curveEditorGD->hide(); + curveEditorGDH->show(); + } + } +} + + void Dehaz::dehazColorSpaceChanged() { + + ColorSpaceUpdateUI(); + if (listener) { listener->panelChanged (EvdehazColorSpace, dehazcolorspace->get_active_text ()); } @@ -529,12 +604,19 @@ void Dehaz::setDefaults (const ProcParams* defParams, const ParamsEdited* pedite scal->setDefaultEditedState (Irrelevant); } } -/* -void Dehaz::setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd) -{ -} -*/ +void Dehaz::setAdjusterBehavior (bool strAdd, bool neighAdd, bool scalAdd, bool limdAdd, bool gainAdd, bool offsAdd, bool vartAdd) + { + + str->setAddMode(strAdd); + neigh->setAddMode(neighAdd); + scal->setAddMode(scalAdd); + limd->setAddMode(limdAdd); + gain->setAddMode(gainAdd); + offs->setAddMode(offsAdd); + vart->setAddMode(vartAdd); + } + void Dehaz::adjusterChanged (Adjuster* a, double newval) { @@ -556,7 +638,7 @@ void Dehaz::adjusterChanged (Adjuster* a, double newval) } else if (a == vart) { listener->panelChanged (EvLvart, vart->getTextValue()); } else if (a == limd) { - listener->panelChanged (EvLlimd, vart->getTextValue()); + listener->panelChanged (EvLlimd, limd->getTextValue()); } } @@ -566,6 +648,7 @@ void Dehaz::adjusterChanged (Adjuster* a, double newval) void Dehaz::autoOpenCurve () { cdshape->openIfNonlinear(); + cdshapeH->openIfNonlinear(); transmissionShape->openIfNonlinear(); } @@ -576,6 +659,8 @@ void Dehaz::curveChanged (CurveEditor* ce) if (listener && getEnabled()) { if (ce == cdshape) { listener->panelChanged (EvLCDCurve, M("HISTORY_CUSTOMCURVE")); + } else if (ce == cdshapeH) { + listener->panelChanged (EvLCDHCurve, M("HISTORY_CUSTOMCURVE")); } else if (ce == transmissionShape) { listener->panelChanged (EvDehaztransmission, M("HISTORY_CUSTOMCURVE")); } @@ -620,6 +705,7 @@ void Dehaz::setBatchMode (bool batchMode) vart->showEditedCB (); limd->showEditedCB (); curveEditorGD->setBatchMode (batchMode); + curveEditorGDH->setBatchMode (batchMode); transmissionCurveEditorG->setBatchMode (batchMode); diff --git a/rtgui/dehaz.h b/rtgui/dehaz.h index aed67ba6f..13de88b1b 100644 --- a/rtgui/dehaz.h +++ b/rtgui/dehaz.h @@ -20,6 +20,7 @@ class Dehaz : public ToolParamBlock, public FoldableToolPanel, public rtengine: protected: CurveEditorGroup* curveEditorGD; + CurveEditorGroup* curveEditorGDH; Adjuster* str; Adjuster* scal; Adjuster* neigh; @@ -27,6 +28,7 @@ protected: Adjuster* offs; Adjuster* vart; Adjuster* limd; + MyExpander* expretinex; Gtk::Label* labmdh; Gtk::HBox* dhbox; @@ -48,6 +50,7 @@ protected: Gtk::Label* transLabels; DiagonalCurveEditor* cdshape; + DiagonalCurveEditor* cdshapeH; CurveEditorGroup* transmissionCurveEditorG; sigc::connection dehazmetConn; sigc::connection dehazColorSpaceConn; @@ -65,7 +68,6 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = NULL); void trimValues (rtengine::procparams::ProcParams* pp); void adjusterChanged (Adjuster* a, double newval); -// void setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd); void autoOpenCurve (); void retinexChanged (); void medianmapChanged (); @@ -79,6 +81,13 @@ public: void dehazmetChanged(); void dehazColorSpaceChanged(); void retinexUpdateUI(); + void ColorSpaceUpdateUI(); + void writeOptions (std::vector &tpOpen); + void updateToolState (std::vector &tpOpen); + void setAdjusterBehavior (bool strAdd, bool neighAdd, bool scalAdd, bool limdAdd, bool gainAdd, bool offsAdd, bool vartAdd); + +private: + void foldAllButMe (GdkEventButton* event, MyExpander *expander); }; diff --git a/rtgui/options.cc b/rtgui/options.cc index 44cfca208..5e0f02e15 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -597,6 +597,13 @@ void Options::setDefaults () 0, //ADDSET_WA_EDGEDETECTTHR2 0, //ADDSET_WA_TMRS 0, //ADDSET_WA_GAMMA + 0, //ADDSET_DH_STR + 0, //ADDSET_DH_SCAL + 0, //ADDSET_DH_NEIGH + 0, //ADDSET_DH_LIMD + 0, //ADDSET_DH_GAIN + 0, //ADDSET_DH_OFFS + 0, //ADDSET_DH_VART }; baBehav = std::vector (babehav, babehav + ADDSET_PARAM_NUM); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 23439c8e0..8d786bb69 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -50,6 +50,7 @@ void ParamsEdited::set (bool v) toneCurve.hrenabled = v; toneCurve.method = v; dehaz.cdcurve = v; + dehaz.cdHcurve = v; dehaz.dehazmet = v; dehaz.dehazcolorspace = v; dehaz.enabled = v; @@ -519,6 +520,7 @@ void ParamsEdited::initFrom (const std::vector toneCurve.hrenabled = toneCurve.hrenabled && p.toneCurve.hrenabled == other.toneCurve.hrenabled; toneCurve.method = toneCurve.method && p.toneCurve.method == other.toneCurve.method; dehaz.cdcurve = dehaz.cdcurve && p.dehaz.cdcurve == other.dehaz.cdcurve; + dehaz.cdHcurve = dehaz.cdHcurve && p.dehaz.cdHcurve == other.dehaz.cdHcurve; dehaz.transmissionCurve = dehaz.transmissionCurve && p.dehaz.transmissionCurve == other.dehaz.transmissionCurve; dehaz.dehazmet = dehaz.dehazmet && p.dehaz.dehazmet == other.dehaz.dehazmet; dehaz.dehazcolorspace = dehaz.dehazcolorspace && p.dehaz.dehazcolorspace == other.dehaz.dehazcolorspace; @@ -1030,6 +1032,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten if (dehaz.cdcurve) { toEdit.dehaz.cdcurve = mods.dehaz.cdcurve; } + + if (dehaz.cdHcurve) { + toEdit.dehaz.cdHcurve = mods.dehaz.cdHcurve; + } if (dehaz.transmissionCurve) { toEdit.dehaz.transmissionCurve = mods.dehaz.transmissionCurve; @@ -1044,11 +1050,11 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten } if (dehaz.str) { - toEdit.dehaz.str = mods.dehaz.str; + toEdit.dehaz.str = dontforceSet && options.baBehav[ADDSET_DH_STR] ? toEdit.dehaz.str + mods.dehaz.str : mods.dehaz.str; } if (dehaz.scal) { - toEdit.dehaz.scal = mods.dehaz.scal; + toEdit.dehaz.scal = dontforceSet && options.baBehav[ADDSET_DH_SCAL] ? toEdit.dehaz.scal + mods.dehaz.scal : mods.dehaz.scal; } if (dehaz.retinex) { @@ -1060,23 +1066,23 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten } if (dehaz.neigh) { - toEdit.dehaz.neigh = mods.dehaz.neigh; + toEdit.dehaz.neigh = dontforceSet && options.baBehav[ADDSET_DH_NEIGH] ? toEdit.dehaz.neigh + mods.dehaz.neigh : mods.dehaz.neigh; } if (dehaz.limd) { - toEdit.dehaz.limd = mods.dehaz.limd; + toEdit.dehaz.limd = dontforceSet && options.baBehav[ADDSET_DH_LIMD] ? toEdit.dehaz.limd + mods.dehaz.limd : mods.dehaz.limd; } if (dehaz.gain) { - toEdit.dehaz.gain = mods.dehaz.gain; - } + toEdit.dehaz.gain = dontforceSet && options.baBehav[ADDSET_DH_GAIN] ? toEdit.dehaz.gain + mods.dehaz.gain : mods.dehaz.gain; + } if (dehaz.offs) { - toEdit.dehaz.offs = mods.dehaz.offs; + toEdit.dehaz.offs = dontforceSet && options.baBehav[ADDSET_DH_OFFS] ? toEdit.dehaz.offs + mods.dehaz.offs : mods.dehaz.offs; } if (dehaz.vart) { - toEdit.dehaz.vart = mods.dehaz.vart; + toEdit.dehaz.vart = dontforceSet && options.baBehav[ADDSET_DH_VART] ? toEdit.dehaz.vart + mods.dehaz.vart : mods.dehaz.vart; } if (labCurve.lcurve) { diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 25f5750c3..2346965bc 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -71,6 +71,7 @@ public: bool method; bool transmissionCurve; bool cdcurve; + bool cdHcurve; bool retinex; bool medianmap; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index 4fbfe2d93..78dfd6803 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -52,6 +52,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE"))); sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS"))); epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD"))); + dehaz = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEHAZ"))); pcvignette = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PCVIGNETTE"))); gradient = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENT"))); labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE"))); @@ -141,6 +142,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) vboxes[0]->pack_start (*exposure, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*sh, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*epd, Gtk::PACK_SHRINK, 2); + vboxes[0]->pack_start (*dehaz, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*pcvignette, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*gradient, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*labcurve, Gtk::PACK_SHRINK, 2); @@ -294,6 +296,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); epdConn = epd->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); + dehazConn = dehaz->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); pcvignetteConn = pcvignette->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); gradientConn = gradient->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h index 697a9b830..ffa748040 100644 --- a/rtgui/partialpastedlg.h +++ b/rtgui/partialpastedlg.h @@ -46,6 +46,7 @@ public: Gtk::CheckButton* exposure; Gtk::CheckButton* sh; Gtk::CheckButton* epd; + Gtk::CheckButton* dehaz; Gtk::CheckButton* pcvignette; Gtk::CheckButton* gradient; Gtk::CheckButton* labcurve; @@ -123,7 +124,7 @@ public: sigc::connection everythingConn, basicConn, detailConn, colorConn, lensConn, compositionConn, metaConn, rawConn, wavConn; sigc::connection wbConn, exposureConn, shConn, pcvignetteConn, gradientConn, labcurveConn, colorappearanceConn; - sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, defringeConn, epdConn, dirpyreqConn, waveletConn; + sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, defringeConn, epdConn, dirpyreqConn, waveletConn, dehazConn; sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn, filmSimulationConn; sigc::connection distortionConn, cacorrConn, vignettingConn, lcpConn; sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 9c0918189..afc5dd6b8 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -170,6 +170,16 @@ Gtk::Widget* Preferences::getBatchProcPanel () appendBehavList (mi, M("TP_EXPOSURE_CONTRAST"), ADDSET_TC_CONTRAST, false); appendBehavList (mi, M("TP_EXPOSURE_SATURATION"), ADDSET_TC_SATURATION, false); + mi = behModel->append (); + mi->set_value (behavColumns.label, M("TP_DEHAZ_LABEL")); + appendBehavList (mi, M("TP_DEHAZ_STR"), ADDSET_DH_STR, false); + appendBehavList (mi, M("TP_DEHAZ_NEIGH"), ADDSET_DH_NEIGH, false); + appendBehavList (mi, M("TP_DEHAZ_SCAL"), ADDSET_DH_SCAL, false); + appendBehavList (mi, M("TP_DEHAZ_GAIN"), ADDSET_DH_GAIN, false); + appendBehavList (mi, M("TP_DEHAZ_OFFS"), ADDSET_DH_OFFS, false); + appendBehavList (mi, M("TP_DEHAZ_LIMD"), ADDSET_DH_LIMD, false); + appendBehavList (mi, M("TP_DEHAZ_VART"), ADDSET_DH_VART, false); + mi = behModel->append (); mi->set_value (behavColumns.label, M("TP_SHADOWSHLIGHTS_LABEL")); appendBehavList (mi, M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), ADDSET_SH_HIGHLIGHTS, false);