diff --git a/rtdata/languages/default b/rtdata/languages/default
index 881f7ae77..270973878 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -740,7 +740,7 @@ HISTORY_MSG_489;HDR TM - Threshold
HISTORY_MSG_490;HDR TM - Amount
HISTORY_MSG_491;White Balance
HISTORY_MSG_492;RGB Curves
-HISTORY_MSG_493;Local L*a*b*
+HISTORY_MSG_493;L*a*b* Adjustments
HISTORY_MSG_494;Local - Bottom
HISTORY_MSG_495;Local - Right
HISTORY_MSG_496;Local - Center
@@ -842,6 +842,7 @@ HISTORY_MSG_592;Local - Warm Cool
HISTORY_MSG_593;Local - Noise lum detail
HISTORY_MSG_594;Local - Noise chro detail
HISTORY_MSG_595;Local - Noise Scope
+HISTORY_MSG_596;Local L*a*b*
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOT;Snapshot
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 49968ba0b..4fb7a8099 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -5597,6 +5597,10 @@ void ImProcFunctions::luminanceCurve(LabImage* lold, LabImage* lnew, LUTf & curv
SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, LUTf & acurve, LUTf & bcurve, LUTf & satcurve, LUTf & lhskcurve, LUTf & clcurve, LUTf & curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLCurve)
{
+ if (!params->labCurve.enabled) {
+ return;
+ }
+
int W = lold->W;
int H = lold->H;
// lhskcurve.dump("lh_curve");
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index adea58686..b219beecf 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -519,7 +519,7 @@ enum ProcEvent {
EvTMFattalAmount = 489,
EvWBEnabled = 490,
EvRGBEnabled = 491,
- EvlocallabEnabled = 492,
+ EvLEnabled = 492,
EvlocallablocY = 493,
EvlocallablocX = 494,
EvlocallabCenter = 495,
@@ -623,6 +623,7 @@ enum ProcEvent {
Evlocallabnoisechrodetail = 593,
Evlocallabsensiden = 594,
Evlocallabhuerefblur = 595,
+ EvlocallabEnabled = 596,
NUMOFEVENTS
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index 97e089d4a..4a296f083 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -501,6 +501,7 @@ void RetinexParams::getCurves(RetinextransmissionCurve &transmissionCurveLUT, Re
}
LCurveParams::LCurveParams() :
+ enabled(false),
lcurve{
DCT_Linear
},
@@ -540,7 +541,8 @@ lcredsk(true)
bool LCurveParams::operator ==(const LCurveParams& other) const
{
return
- lcurve == other.lcurve
+ enabled == other.enabled
+ && lcurve == other.lcurve
&& acurve == other.acurve
&& bcurve == other.bcurve
&& cccurve == other.cccurve
@@ -3189,6 +3191,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->blackwhite.afterCurve, "Black & White", "AfterCurve", blackwhite.afterCurve, keyFile);
// Luma curve
+ saveToKeyfile(!pedited || pedited->labCurve.enabled, "Luminance Curve", "Enabled", labCurve.enabled, keyFile);
saveToKeyfile(!pedited || pedited->labCurve.brightness, "Luminance Curve", "Brightness", labCurve.brightness, keyFile);
saveToKeyfile(!pedited || pedited->labCurve.contrast, "Luminance Curve", "Contrast", labCurve.contrast, keyFile);
saveToKeyfile(!pedited || pedited->labCurve.chromaticity, "Luminance Curve", "Chromaticity", labCurve.chromaticity, keyFile);
@@ -4078,7 +4081,16 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Retinex", "GainTransmissionCurve", pedited, retinex.gaintransmissionCurve, pedited->retinex.gaintransmissionCurve);
}
- if (keyFile.has_group("Luminance Curve")) {
+ if (keyFile.has_group ("Luminance Curve")) {
+ if (ppVersion >= 329) {
+ assignFromKeyfile(keyFile, "Luminance Curve", "Enabled", pedited, labCurve.enabled, pedited->labCurve.enabled);
+ } else {
+ labCurve.enabled = true;
+ if (pedited) {
+ pedited->labCurve.enabled = true;
+ }
+ }
+
assignFromKeyfile(keyFile, "Luminance Curve", "Brightness", pedited, labCurve.brightness, pedited->labCurve.brightness);
assignFromKeyfile(keyFile, "Luminance Curve", "Contrast", pedited, labCurve.contrast, pedited->labCurve.contrast);
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 949b66740..379da9692 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -343,7 +343,9 @@ struct RetinexParams {
/**
* Parameters of the luminance curve
*/
-struct LCurveParams {
+struct LCurveParams
+{
+ bool enabled;
std::vector lcurve;
std::vector acurve;
std::vector bcurve;
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 7eb8bdcac..9cb5d24b6 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -518,8 +518,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
HDR, // EvTMFattalThreshold
HDR, // EvTMFattalAmount
ALLNORAW, // EvWBEnabled
- RGBCURVE, // EvRGBEnabled
- LUMINANCECURVE, // EvlocallabEnabled
+ RGBCURVE, // EvRGBEnabled
+ LUMINANCECURVE, // EvLEnabled
LUMINANCECURVE, // EvlocallablocY
LUMINANCECURVE, // EvlocallablocX
LUMINANCECURVE, // EvlocallabCenter
@@ -622,7 +622,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // Evlocallabnoiselumdetail
LUMINANCECURVE, // Evlocallabnoisechrodetail
LUMINANCECURVE, // Evlocallabsensiden
- LUMINANCECURVE // Evlocallabhuerefblur
-
+ LUMINANCECURVE, // Evlocallabhuerefblur
+ LUMINANCECURVE // EvlocallabEnabled
};
diff --git a/rtgui/labcurve.cc b/rtgui/labcurve.cc
index c39dc99fc..8b2b2a217 100644
--- a/rtgui/labcurve.cc
+++ b/rtgui/labcurve.cc
@@ -24,7 +24,7 @@
using namespace rtengine;
using namespace rtengine::procparams;
-LCurve::LCurve () : FoldableToolPanel(this, "labcurves", M("TP_LABCURVE_LABEL"))
+LCurve::LCurve () : FoldableToolPanel(this, "labcurves", M("TP_LABCURVE_LABEL"), false, true)
{
std::vector milestones;
@@ -244,6 +244,8 @@ void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited)
hhshape->setUnChanged (!pedited->labCurve.hhcurve);
lcshape->setUnChanged (!pedited->labCurve.lccurve);
clshape->setUnChanged (!pedited->labCurve.clcurve);
+
+ set_inconsistent(multiImage && !pedited->labCurve.enabled);
}
brightness->setValue (pp->labCurve.brightness);
@@ -277,6 +279,8 @@ void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited)
lcshape->setCurve (pp->labCurve.lccurve);
clshape->setCurve (pp->labCurve.clcurve);
+ setEnabled(pp->labCurve.enabled);
+
queue_draw();
enableListener ();
@@ -338,7 +342,8 @@ void LCurve::setEditProvider (EditDataProvider *provider)
void LCurve::write (ProcParams* pp, ParamsEdited* pedited)
{
-
+ pp->labCurve.enabled = getEnabled();
+
pp->labCurve.brightness = brightness->getValue ();
pp->labCurve.contrast = (int)contrast->getValue ();
pp->labCurve.chromaticity = (int)chromaticity->getValue ();
@@ -380,7 +385,7 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited)
pedited->labCurve.lccurve = !lcshape->isUnChanged ();
pedited->labCurve.clcurve = !clshape->isUnChanged ();
-
+ pedited->labCurve.enabled = !get_inconsistent();
}
}
@@ -424,7 +429,7 @@ void LCurve::avoidcolorshift_toggled ()
lastACVal = avoidcolorshift->get_active ();
}
- if (listener) {
+ if (listener && getEnabled()) {
if (avoidcolorshift->get_active ()) {
listener->panelChanged (EvLAvoidColorShift, M("GENERAL_ENABLED"));
} else {
@@ -451,7 +456,7 @@ void LCurve::lcredsk_toggled ()
lcshape->refresh();
}
- if (listener) {
+ if (listener && getEnabled()) {
if (lcredsk->get_active ()) {
listener->panelChanged (EvLLCredsk, M("GENERAL_ENABLED"));
} else {
@@ -471,7 +476,7 @@ void LCurve::lcredsk_toggled ()
void LCurve::curveChanged (CurveEditor* ce)
{
- if (listener) {
+ if (listener && getEnabled()) {
if (ce == lshape) {
listener->panelChanged (EvLLCurve, M("HISTORY_CUSTOMCURVE"));
}
@@ -526,15 +531,15 @@ void LCurve::adjusterChanged (Adjuster* a, double newval)
}
if (a == brightness) {
- if (listener) {
+ if (listener && getEnabled()) {
listener->panelChanged (EvLBrightness, costr);
}
} else if (a == contrast) {
- if (listener) {
+ if (listener && getEnabled()) {
listener->panelChanged (EvLContrast, costr);
}
} else if (a == rstprotection) {
- if (listener) {
+ if (listener && getEnabled()) {
listener->panelChanged (EvLRSTProtection, costr);
}
} else if (a == chromaticity) {
@@ -550,7 +555,7 @@ void LCurve::adjusterChanged (Adjuster* a, double newval)
lcredsk->set_sensitive( int(newval) > -100 );
}
- if (listener) {
+ if (listener && getEnabled()) {
listener->panelChanged (EvLSaturation, costr);
}
}
@@ -668,3 +673,16 @@ void LCurve::trimValues (rtengine::procparams::ProcParams* pp)
contrast->trimValue(pp->labCurve.contrast);
chromaticity->trimValue(pp->labCurve.chromaticity);
}
+
+void LCurve::enabledChanged()
+{
+ if (listener) {
+ if (get_inconsistent()) {
+ listener->panelChanged (EvLEnabled, M("GENERAL_UNCHANGED"));
+ } else if (getEnabled()) {
+ listener->panelChanged (EvLEnabled, M("GENERAL_ENABLED"));
+ } else {
+ listener->panelChanged (EvLEnabled, M("GENERAL_DISABLED"));
+ }
+ }
+}
diff --git a/rtgui/labcurve.h b/rtgui/labcurve.h
index 403b49f9e..e0b912559 100644
--- a/rtgui/labcurve.h
+++ b/rtgui/labcurve.h
@@ -82,10 +82,7 @@ public:
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
-private:
-
-
-
+ void enabledChanged();
};
#endif
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index 57c9d489c..a0d56909e 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -82,6 +82,7 @@ void ParamsEdited::set(bool v)
retinex.radius = v;
retinex.retinex = v;
+ labCurve.enabled = v;
labCurve.lcurve = v;
labCurve.acurve = v;
labCurve.bcurve = v;
@@ -739,6 +740,7 @@ void ParamsEdited::initFrom(const std::vector&
retinex.radius = retinex.radius && p.retinex.radius == other.retinex.radius;
retinex.enabled = retinex.enabled && p.retinex.enabled == other.retinex.enabled;
+ labCurve.enabled = labCurve.enabled && p.labCurve.enabled == other.labCurve.enabled;
labCurve.lcurve = labCurve.lcurve && p.labCurve.lcurve == other.labCurve.lcurve;
labCurve.acurve = labCurve.acurve && p.labCurve.acurve == other.labCurve.acurve;
labCurve.bcurve = labCurve.bcurve && p.labCurve.bcurve == other.labCurve.bcurve;
@@ -1529,6 +1531,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
}
+ if (labCurve.enabled) {
+ toEdit.labCurve.enabled = mods.labCurve.enabled;
+ }
+
if (labCurve.lcurve) {
toEdit.labCurve.lcurve = mods.labCurve.lcurve;
}
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 67388825f..a47cfb3cb 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -100,6 +100,7 @@ public:
class LCurveParamsEdited
{
public:
+ bool enabled;
bool brightness;
bool contrast;
bool chromaticity;
@@ -115,8 +116,6 @@ public:
bool hhcurve;
bool lccurve;
bool clcurve;
- bool enabled;
- bool method;
};
class RGBCurvesParamsEdited