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