diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index cbbc78148..8036cd204 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1118,7 +1118,7 @@ void Crop::update(int todo) locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, - parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, + parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); if (parent->locallListener) { parent->locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); @@ -1152,7 +1152,7 @@ void Crop::update(int todo) loccompwavCurve, loccompwavutili, locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, - huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); } diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 0d12e241b..663c0f33d 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1239,7 +1239,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, - locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask, + locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, localllcMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); if (locallListener) { @@ -1278,7 +1278,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) loccompwavCurve, loccompwavutili, locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, - huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index ea31db06e..c3aadb0b9 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -357,6 +357,7 @@ protected: int locallSHMask; int locallSHMaskinv; int locallvibMask; + int localllcMask; int locallcbMask; int locallretiMask; int locallsoftMask; @@ -431,7 +432,7 @@ public: updaterThreadStart.unlock(); } - void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override + void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int localllcMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override { this->locallColorMask = locallColorMask; this->locallColorMaskinv = locallColorMaskinv; @@ -440,6 +441,7 @@ public: this->locallSHMask = locallSHMask; this->locallvibMask = locallvibMask; this->locallSHMaskinv = locallSHMaskinv; + this->localllcMask = localllcMask; this->locallcbMask = locallcbMask; this->locallretiMask = locallretiMask; this->locallsoftMask = locallsoftMask; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index d73fa467e..5a83ad038 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -304,7 +304,7 @@ public: const LocwavCurve & locwavCurveden, bool & locwavdenutili, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav, - int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, + int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index cb034f9ca..f86a96391 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -312,6 +312,7 @@ struct local_params { int showmaskSHmet; int showmaskSHmetinv; int showmaskvibmet; + int showmasklcmet; int showmaskcbmet; int showmaskretimet; int showmasksoftmet; @@ -389,6 +390,7 @@ struct local_params { bool enaSHMask; bool enaSHMaskinv; bool enavibMask; + bool enalcMask; bool enacbMask; bool enaretiMask; bool enaretiMasktmap; @@ -498,7 +500,7 @@ static void SobelCannyLuma(float **sobelL, float **luma, int bfw, int bfh, float -static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool & locwavdenutili) +static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool & locwavdenutili) { int w = oW; int h = oH; @@ -585,22 +587,24 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskSHmet = llSHMask; lp.showmaskSHmetinv = llSHMaskinv; lp.showmaskvibmet = llvibMask; + lp.showmasklcmet = lllcMask; lp.showmaskcbmet = llcbMask; lp.showmaskretimet = llretiMask; lp.showmasksoftmet = llsoftMask; lp.showmasktmmet = lltmMask; lp.showmaskblmet = llblMask; - lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enaretiMask = locallab.spots.at(sp).enaretiMask && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; - lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0; + lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && lllcMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && lllcMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && lllcMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && lllcMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && lllcMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; + lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0; + lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; if (locallab.spots.at(sp).softMethod == "soft") { lp.softmet = 0; @@ -1090,20 +1094,20 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.detailsh = locallab.spots.at(sp).detailSH; lp.threshol = thresho; lp.chromacb = chromcbdl; - lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask - lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; - lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0; - lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; + lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask + lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; + lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0; + lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; lp.sharpena = locallab.spots.at(sp).expsharp; - lp.lcena = locallab.spots.at(sp).expcontrast; + lp.lcena = locallab.spots.at(sp).expcontrast && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; lp.sfena = locallab.spots.at(sp).expsoft; - lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; + lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; lp.expvib = locallab.spots.at(sp).expvibrance; lp.sensv = local_sensiv; lp.past = chromaPastel; lp.satur = chromaSatur; - lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible + lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llSHMask == 0 && lllcMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible lp.cut_past = cupas; lp.blac = locallab.spots.at(sp).black; lp.shcomp = locallab.spots.at(sp).shcompr; @@ -1115,7 +1119,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.expchroma = locallab.spots.at(sp).expchroma / 100.; lp.sensex = local_sensiex; lp.war = local_warm; - lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible + lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible lp.highlihs = highhs; lp.shadowhs = shadhs; lp.radiushs = radhs; @@ -1124,7 +1128,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.senshs = local_sensihs; lp.ftwlc = fftwlc; lp.ftwreti = fftwreti; - lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible + lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible } @@ -5582,7 +5586,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform if (params->locallab.enabled) { //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise struct local_params lp; - calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili); + calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili); int begy = lp.yc - lp.lyT; int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; @@ -9053,7 +9057,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const LocwavCurve & locwavCurveden, bool & locwavdenutili, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, int &lastsav, - int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, + int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, float & minCD, float & maxCD, float & mini, float & maxi, float & Tmean, float & Tsigma, float & Tmin, float & Tmax) { //general call of others functions : important return hueref, chromaref, lumaref @@ -9069,7 +9073,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1 int delxy = 0; struct local_params lp; - calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili); + calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili); const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip int strred = 1;//(lp.strucc - 1); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 9910920aa..a111bf5ce 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -900,6 +900,10 @@ enum ProcEventCode { EvlocallabLLmasklcshape = 871, EvLocallabEnalcMask = 872, EvlocallabshowmasklcMethod = 873, + Evlocallabblendmasklc = 874, + Evlocallabradmasklc = 875, + Evlocallabchromasklc = 876, + EvlocallabLmasklcshape = 877, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 4fb99c375..235587cab 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2747,6 +2747,10 @@ LocallabParams::LocallabSpot::LocallabSpot() : LLmasklccurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35}, HHmasklccurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35}, enalcMask(false), + blendmasklc(0), + radmasklc(0.0), + chromasklc(0.0), + Lmasklccurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, // Contrast by detail levels expcbdl(false), @@ -3148,6 +3152,10 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && LLmasklccurve == other.LLmasklccurve && HHmasklccurve == other.HHmasklccurve && enalcMask == other.enalcMask + && blendmasklc == other.blendmasklc + && radmasklc == other.radmasklc + && chromasklc == other.chromasklc + && Lmasklccurve == other.Lmasklccurve // Constrast by detail levels && expcbdl == other.expcbdl && [this, &other]()->bool { @@ -4529,6 +4537,10 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmasklccurve, "Locallab", "LLmasklcCurve_" + std::to_string(i), spot.LLmasklccurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmasklccurve, "Locallab", "HHmasklcCurve_" + std::to_string(i), spot.HHmasklccurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enalcMask, "Locallab", "EnalcMask_" + std::to_string(i), spot.enalcMask, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmasklc, "Locallab", "Blendmasklc_" + std::to_string(i), spot.blendmasklc, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radmasklc, "Locallab", "Radmasklc_" + std::to_string(i), spot.radmasklc, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromasklc, "Locallab", "Chromasklc_" + std::to_string(i), spot.chromasklc, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmasklccurve, "Locallab", "LmasklcCurve_" + std::to_string(i), spot.Lmasklccurve, keyFile); // Contrast by detail levels saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expcbdl, "Locallab", "Expcbdl_" + std::to_string(i), spot.expcbdl, keyFile); @@ -6059,6 +6071,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "LLmasklcCurve_" + std::to_string(i), pedited, spot.LLmasklccurve, spotEdited.LLmasklccurve); assignFromKeyfile(keyFile, "Locallab", "HHmasklcCurve_" + std::to_string(i), pedited, spot.HHmasklccurve, spotEdited.HHmasklccurve); assignFromKeyfile(keyFile, "Locallab", "EnalcMask_" + std::to_string(i), pedited, spot.enalcMask, spotEdited.enalcMask); + assignFromKeyfile(keyFile, "Locallab", "Blendmasklc_" + std::to_string(i), pedited, spot.blendmasklc, spotEdited.blendmasklc); + assignFromKeyfile(keyFile, "Locallab", "Radmasklc_" + std::to_string(i), pedited, spot.radmasklc, spotEdited.radmasklc); + assignFromKeyfile(keyFile, "Locallab", "Chromasklc_" + std::to_string(i), pedited, spot.chromasklc, spotEdited.chromasklc); + assignFromKeyfile(keyFile, "Locallab", "LmasklcCurve_" + std::to_string(i), pedited, spot.Lmasklccurve, spotEdited.Lmasklccurve); if (keyFile.has_key("Locallab", "CSThreshold_" + std::to_string(i))) { diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 8ce5fe942..ed509f25c 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1290,6 +1290,10 @@ struct LocallabParams { std::vector LLmasklccurve; std::vector HHmasklccurve; bool enalcMask; + int blendmasklc; + double radmasklc; + double chromasklc; + std::vector Lmasklccurve; // Contrast by detail levels bool expcbdl; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 0e111e387..958b6d698 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -903,7 +903,11 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvlocallabCCmasklcshape LUMINANCECURVE, //EvlocallabLLmasklcshape LUMINANCECURVE, //EvlocallabEnalcMask - LUMINANCECURVE //EvlocallabshowmasklcMethod + LUMINANCECURVE, //EvlocallabshowmasklcMethod + LUMINANCECURVE, //Evlocallabblendmasklc + LUMINANCECURVE, // Evlocallabradmasklc + LUMINANCECURVE, //Evlocallabchromasklc + LUMINANCECURVE //EvlocallabLmasklcshape }; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index eabfea2e3..cbfcf63bb 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -524,7 +524,7 @@ public: virtual void updateUnLock() = 0; - virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallvibMask, int locallSHMask, int locallSHMaskinv, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0; + virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallvibMask, int locallSHMask, int locallSHMaskinv, int localllcMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0; /** Creates and returns a Crop instance that acts as a window on the image * @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 3dacd44a2..1429cb3cd 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1313,7 +1313,7 @@ private: loccompwavCurve, loccompwavutili, locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, - huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); lastorigView->CopyFrom(labView); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 489d56e9f..059a68abd 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -357,6 +357,9 @@ Locallab::Locallab(): wavshapecomp(static_cast(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))), masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + mask2lcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), + + Lmasklcshape(static_cast(mask2lcCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), @@ -575,6 +578,9 @@ sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), fatdet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))), fatanch(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))), +blendmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), +radmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), +chromasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), multiplier( [this]() -> std::array { @@ -2900,6 +2906,10 @@ pe(nullptr) claricres->setAdjusterListener(this); sensilc->setAdjusterListener(this); + blendmasklc->setAdjusterListener(this); + radmasklc->setLogScale(10, -10); + radmasklc->setAdjusterListener(this); + chromasklc->setAdjusterListener(this); @@ -3032,6 +3042,19 @@ pe(nullptr) masklcCurveEditorG->curveListComplete(); + mask2lcCurveEditorG->setCurveListener(this); + Lmasklcshape->setResetCurve(DiagonalCurveType(defSpot.Lmasklccurve.at(0)), defSpot.Lmasklccurve); + + if (showtooltip) { + Lmasklcshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); + } + + const std::vector& mLmasklcshape = zero_one_shape; + Lmasklcshape->setBottomBarBgGradient(mLmasklcshape); + Lmasklcshape->setLeftBarBgGradient(mLmasklcshape); + mask2lcCurveEditorG->curveListComplete(); + + enalcMaskConn = enalcMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enalcMaskChanged)); showmasklcMethod->append(M("TP_LOCALLAB_SHOWMNONE")); @@ -3051,8 +3074,10 @@ pe(nullptr) masklcBox->pack_start(*showmasklcMethod, Gtk::PACK_SHRINK, 4); masklcBox->pack_start(*enalcMask, Gtk::PACK_SHRINK, 0); masklcBox->pack_start(*masklcCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor -// maskcbBox->pack_start(*blendmaskcb, Gtk::PACK_SHRINK, 0); -// maskcbBox->pack_start(*radmaskcb, Gtk::PACK_SHRINK, 0); + masklcBox->pack_start(*blendmasklc, Gtk::PACK_SHRINK, 0); + masklcBox->pack_start(*radmasklc, Gtk::PACK_SHRINK, 0); + masklcBox->pack_start(*chromasklc, Gtk::PACK_SHRINK, 0); + masklcBox->pack_start(*mask2lcCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor if (complexsoft < 1) { // maskcbBox->pack_start(*lapmaskcb, Gtk::PACK_SHRINK, 0); @@ -3741,6 +3766,7 @@ Locallab::~Locallab() delete maskretiCurveEditorG; delete mask2retiCurveEditorG; delete maskcbCurveEditorG; + delete mask2lcCurveEditorG; delete mask2cbCurveEditorG; } @@ -5248,6 +5274,10 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pp->locallab.spots.at(pp->locallab.selspot).CCmasklccurve = CCmasklcshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = HHmasklcshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enalcMask = enalcMask->get_active(); + pp->locallab.spots.at(pp->locallab.selspot).blendmasklc = blendmasklc->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).radmasklc = radmasklc->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).chromasklc = chromasklc->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).Lmasklccurve = Lmasklcshape->getCurve(); // Contrast by detail levels pp->locallab.spots.at(pp->locallab.selspot).expcbdl = expcbdl->getEnabled(); @@ -5647,6 +5677,10 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pe->locallab.spots.at(pp->locallab.selspot).LLmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).LLmasklccurve || !LLmasklcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).HHmasklccurve || !HHmasklcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enalcMask = pe->locallab.spots.at(pp->locallab.selspot).enalcMask || !enalcMask->get_inconsistent(); + pe->locallab.spots.at(pp->locallab.selspot).blendmasklc = pe->locallab.spots.at(pp->locallab.selspot).blendmasklc || blendmasklc->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).radmasklc = pe->locallab.spots.at(pp->locallab.selspot).radmasklc || radmasklc->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).chromasklc = pe->locallab.spots.at(pp->locallab.selspot).chromasklc || chromasklc->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).Lmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).Lmasklccurve || !Lmasklcshape->isUnChanged(); // Contrast by detail levels @@ -6050,6 +6084,11 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pedited->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmasklccurve || !HHmasklcshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enalcMask = pedited->locallab.spots.at(pp->locallab.selspot).enalcMask || !enalcMask->get_inconsistent(); + pedited->locallab.spots.at(pp->locallab.selspot).blendmasklc = pedited->locallab.spots.at(pp->locallab.selspot).blendmasklc || blendmasklc->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).radmasklc = pedited->locallab.spots.at(pp->locallab.selspot).radmasklc || radmasklc->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).chromasklc = pedited->locallab.spots.at(pp->locallab.selspot).chromasklc || chromasklc->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).Lmasklccurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmasklccurve || !Lmasklcshape->isUnChanged(); + // Contrast by detail levels pedited->locallab.spots.at(pp->locallab.selspot).expcbdl = pedited->locallab.spots.at(pp->locallab.selspot).expcbdl || !expcbdl->get_inconsistent(); @@ -6566,6 +6605,12 @@ void Locallab::curveChanged(CurveEditor* ce) } } + if (ce == Lmasklcshape) { + if (listener) { + listener->panelChanged(EvlocallabLmasklcshape, M("HISTORY_CUSTOMCURVE")); + } + } + } //denoise if (getEnabled() && expdenoi->getEnabled()) { @@ -8701,6 +8746,9 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c clarisoft->setDefault(defSpot->clarisoft); sensilc->setDefault((double)defSpot->sensilc); csThreshold->setDefault(defSpot->csthreshold); + blendmasklc->setDefault((double)defSpot->blendmasklc); + radmasklc->setDefault(defSpot->radmasklc); + chromasklc->setDefault(defSpot->chromasklc); // Contrast by detail levels for (int i = 0; i < 6; i++) { @@ -8937,6 +8985,9 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c clarisoft->setDefaultEditedState(Irrelevant); sensilc->setDefaultEditedState(Irrelevant); csThreshold->setDefaultEditedState(Irrelevant); + blendmasklc->setDefaultEditedState(Irrelevant); + radmasklc->setDefaultEditedState(Irrelevant); + chromasklc->setDefaultEditedState(Irrelevant); // Contrast by detail levels for (int i = 0; i < 6; i++) { @@ -9178,6 +9229,9 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c clarisoft->setDefaultEditedState(defSpotState->clarisoft ? Edited : UnEdited); sensilc->setDefaultEditedState(defSpotState->sensilc ? Edited : UnEdited); csThreshold->setDefaultEditedState(defSpotState->csthreshold ? Edited : UnEdited); + blendmasklc->setDefaultEditedState(defSpotState->blendmasklc ? Edited : UnEdited); + radmasklc->setDefaultEditedState(defSpotState->radmasklc ? Edited : UnEdited); + chromasklc->setDefaultEditedState(defSpotState->chromasklc ? Edited : UnEdited); // Contrast by detail levels for (int i = 0; i < 6; i++) { @@ -10385,6 +10439,25 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) listener->panelChanged(Evlocallabsensilc, sensilc->getTextValue()); } } + + if (a == blendmasklc) { + if (listener) { + listener->panelChanged(Evlocallabblendmasklc, blendmasklc->getTextValue()); + } + } + + if (a == radmasklc) { + if (listener) { + listener->panelChanged(Evlocallabradmasklc, radmasklc->getTextValue()); + } + } + + if (a == chromasklc) { + if (listener) { + listener->panelChanged(Evlocallabchromasklc, chromasklc->getTextValue()); + } + } + } // Contrast by detail levels @@ -10842,6 +10915,9 @@ void Locallab::setBatchMode(bool batchMode) clarisoft->showEditedCB(); csThreshold->showEditedCB(); sensilc->showEditedCB(); + blendmasklc->showEditedCB(); + radmasklc->showEditedCB(); + chromasklc->showEditedCB(); // Contrast by detail levels for (int i = 0; i < 6; i++) { @@ -11931,6 +12007,10 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con LLmasklcshape->setCurve(pp->locallab.spots.at(index).LLmasklccurve); HHmasklcshape->setCurve(pp->locallab.spots.at(index).HHmasklccurve); enalcMask->set_active(pp->locallab.spots.at(index).enalcMask); + blendmasklc->setValue(pp->locallab.spots.at(index).blendmasklc); + radmasklc->setValue(pp->locallab.spots.at(index).radmasklc); + chromasklc->setValue(pp->locallab.spots.at(index).chromasklc); + Lmasklcshape->setCurve(pp->locallab.spots.at(index).Lmasklccurve); if (fftwlc->get_active()) { lcradius->setLimits(20, 1000, 1, 80); @@ -12421,6 +12501,10 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con HHmasklcshape->setUnChanged(!spotState->HHmasklccurve); CCmasklcshape->setUnChanged(!spotState->CCmasklccurve); enalcMask->set_inconsistent(multiImage && !spotState->enalcMask); + blendmasklc->setEditedState(spotState->blendmasklc ? Edited : UnEdited); + radmasklc->setEditedState(spotState->radmasklc ? Edited : UnEdited); + chromasklc->setEditedState(spotState->chromasklc ? Edited : UnEdited); + Lmasklcshape->setUnChanged(!spotState->Lmasklccurve); if (!spotState->retinexMethod) { localcontMethod->set_active_text(M("GENERAL_UNCHANGED")); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index b75f786e1..69a4bc62e 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -174,7 +174,8 @@ private: CurveEditorGroup* const LocalcurveEditorwavcomp; FlatCurveEditor* const wavshapecomp; CurveEditorGroup* const masklcCurveEditorG; -// DiagonalCurveEditor* const Lmasklcshape; + CurveEditorGroup* const mask2lcCurveEditorG; + DiagonalCurveEditor* const Lmasklcshape; FlatCurveEditor* const CCmasklcshape; FlatCurveEditor* const LLmasklcshape; FlatCurveEditor* const HHmasklcshape; @@ -372,6 +373,9 @@ private: Adjuster* const fatdet; Adjuster* const fatanch; Adjuster* const fatres; + Adjuster* const blendmasklc; + Adjuster* const radmasklc; + Adjuster* const chromasklc; // Contrast by detail levels const std::array multiplier; Adjuster* const chromacbdl; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 0596509ca..5dd6e06d4 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1284,6 +1284,10 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).LLmasklccurve = locallab.spots.at(j).LLmasklccurve && pSpot.LLmasklccurve == otherSpot.LLmasklccurve; locallab.spots.at(j).HHmasklccurve = locallab.spots.at(j).HHmasklccurve && pSpot.HHmasklccurve == otherSpot.HHmasklccurve; locallab.spots.at(j).enalcMask = locallab.spots.at(j).enalcMask && pSpot.enalcMask == otherSpot.enalcMask; + locallab.spots.at(j).blendmasklc = locallab.spots.at(j).blendmasklc && pSpot.blendmasklc == otherSpot.blendmasklc; + locallab.spots.at(j).radmasklc = locallab.spots.at(j).radmasklc && pSpot.radmaskcb == otherSpot.radmasklc; + locallab.spots.at(j).chromasklc = locallab.spots.at(j).chromasklc && pSpot.chromasklc == otherSpot.chromasklc; + locallab.spots.at(j).Lmasklccurve = locallab.spots.at(j).Lmasklccurve && pSpot.Lmasklccurve == otherSpot.Lmasklccurve; // Contrast by detail levels locallab.spots.at(j).expcbdl = locallab.spots.at(j).expcbdl && pSpot.expcbdl == otherSpot.expcbdl; @@ -4102,6 +4106,23 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).enalcMask = mods.locallab.spots.at(i).enalcMask; } + if (locallab.spots.at(i).blendmasklc) { + toEdit.locallab.spots.at(i).blendmasklc = mods.locallab.spots.at(i).blendmasklc; + } + + if (locallab.spots.at(i).radmasklc) { + toEdit.locallab.spots.at(i).radmasklc = mods.locallab.spots.at(i).radmasklc; + } + + if (locallab.spots.at(i).chromasklc) { + toEdit.locallab.spots.at(i).chromasklc = mods.locallab.spots.at(i).chromasklc; + } + + if (locallab.spots.at(i).Lmasklccurve) { + toEdit.locallab.spots.at(i).Lmasklccurve = mods.locallab.spots.at(i).Lmasklccurve; + } + + // Contrast by detail levels if (locallab.spots.at(i).expcbdl) { toEdit.locallab.spots.at(i).expcbdl = mods.locallab.spots.at(i).expcbdl; @@ -5596,6 +5617,10 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : LLmasklccurve(v), HHmasklccurve(v), enalcMask(v), + blendmasklc(v), + radmasklc(v), + chromasklc(v), + Lmasklccurve(v), // Contrast by detail levels expcbdl(v), @@ -5987,6 +6012,10 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) LLmasklccurve = v; HHmasklccurve = v; enalcMask = v; + blendmasklc = v; + radmasklc = v; + chromasklc = v; + Lmasklccurve = v; // Contrast by detail levels expcbdl = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 88514fcea..4450b500c 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -716,6 +716,10 @@ public: bool LLmasklccurve; bool HHmasklccurve; bool enalcMask; + bool blendmasklc; + bool radmasklc; + bool chromasklc; + bool Lmasklccurve; // Contrast by detail levels bool expcbdl; bool mult[6]; diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 90d2b9c51..dda5dfbdd 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -509,9 +509,9 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const // Manage Locallab mask visibility if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod ||event == rtengine::EvlocallabshowmaskexpMethodinv || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskSHMethodinv || event == rtengine::EvlocallabshowmaskvibMethod || event == rtengine::EvlocallabshowmasksoftMethod - || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) { + || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmasklcMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) { Locallab::llMaskVisibility* maskStruc = locallab->getMaskVisibility(); - ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->expMaskinv, maskStruc->SHMask, maskStruc->SHMaskinv, maskStruc->vibMask, maskStruc->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask); + ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->expMaskinv, maskStruc->SHMask, maskStruc->SHMaskinv, maskStruc->vibMask, maskStruc->lcMask, maskStruc->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask); } ipc->endUpdateParams(changeFlags); // starts the IPC processing @@ -619,7 +619,7 @@ void ToolPanelCoordinator::profileChange( // Reset Locallab mask visibility when a picture is loaded if (event == rtengine::EvPhotoLoaded) { locallab->resetMaskVisibility(); - ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } // start the IPC processing