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);