Save provisory work GUI

This commit is contained in:
Desmis 2019-12-20 18:16:10 +01:00
parent 7c79cc7184
commit cf214c7a1b
16 changed files with 194 additions and 39 deletions

View File

@ -1118,7 +1118,7 @@ void Crop::update(int todo)
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 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); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
if (parent->locallListener) { if (parent->locallListener) {
parent->locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); parent->locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
@ -1152,7 +1152,7 @@ void Crop::update(int todo)
loccompwavCurve, loccompwavutili, loccompwavCurve, loccompwavutili,
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, 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); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} }

View File

@ -1239,7 +1239,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 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); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
if (locallListener) { if (locallListener) {
@ -1278,7 +1278,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
loccompwavCurve, loccompwavutili, loccompwavCurve, loccompwavutili,
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, 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); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} }

View File

@ -357,6 +357,7 @@ protected:
int locallSHMask; int locallSHMask;
int locallSHMaskinv; int locallSHMaskinv;
int locallvibMask; int locallvibMask;
int localllcMask;
int locallcbMask; int locallcbMask;
int locallretiMask; int locallretiMask;
int locallsoftMask; int locallsoftMask;
@ -431,7 +432,7 @@ public:
updaterThreadStart.unlock(); 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->locallColorMask = locallColorMask;
this->locallColorMaskinv = locallColorMaskinv; this->locallColorMaskinv = locallColorMaskinv;
@ -440,6 +441,7 @@ public:
this->locallSHMask = locallSHMask; this->locallSHMask = locallSHMask;
this->locallvibMask = locallvibMask; this->locallvibMask = locallvibMask;
this->locallSHMaskinv = locallSHMaskinv; this->locallSHMaskinv = locallSHMaskinv;
this->localllcMask = localllcMask;
this->locallcbMask = locallcbMask; this->locallcbMask = locallcbMask;
this->locallretiMask = locallretiMask; this->locallretiMask = locallretiMask;
this->locallsoftMask = locallsoftMask; this->locallsoftMask = locallsoftMask;

View File

@ -304,7 +304,7 @@ public:
const LocwavCurve & locwavCurveden, bool & locwavdenutili, 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, 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, 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); 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); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);

View File

@ -312,6 +312,7 @@ struct local_params {
int showmaskSHmet; int showmaskSHmet;
int showmaskSHmetinv; int showmaskSHmetinv;
int showmaskvibmet; int showmaskvibmet;
int showmasklcmet;
int showmaskcbmet; int showmaskcbmet;
int showmaskretimet; int showmaskretimet;
int showmasksoftmet; int showmasksoftmet;
@ -389,6 +390,7 @@ struct local_params {
bool enaSHMask; bool enaSHMask;
bool enaSHMaskinv; bool enaSHMaskinv;
bool enavibMask; bool enavibMask;
bool enalcMask;
bool enacbMask; bool enacbMask;
bool enaretiMask; bool enaretiMask;
bool enaretiMasktmap; 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 w = oW;
int h = oH; int h = oH;
@ -585,22 +587,24 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.showmaskSHmet = llSHMask; lp.showmaskSHmet = llSHMask;
lp.showmaskSHmetinv = llSHMaskinv; lp.showmaskSHmetinv = llSHMaskinv;
lp.showmaskvibmet = llvibMask; lp.showmaskvibmet = llvibMask;
lp.showmasklcmet = lllcMask;
lp.showmaskcbmet = llcbMask; lp.showmaskcbmet = llcbMask;
lp.showmaskretimet = llretiMask; lp.showmaskretimet = llretiMask;
lp.showmasksoftmet = llsoftMask; lp.showmasksoftmet = llsoftMask;
lp.showmasktmmet = lltmMask; lp.showmasktmmet = lltmMask;
lp.showmaskblmet = llblMask; 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.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 && 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 && 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 && 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 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; 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 && llColorMask == 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 && llColorMask == 0 && llExpMask == 0 && llSHMask == 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 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 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 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 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 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 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 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 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") { if (locallab.spots.at(sp).softMethod == "soft") {
lp.softmet = 0; 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.detailsh = locallab.spots.at(sp).detailSH;
lp.threshol = thresho; lp.threshol = thresho;
lp.chromacb = chromcbdl; 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.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 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; 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 && llretiMask == 0 && llColorMask == 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 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 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.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.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.expvib = locallab.spots.at(sp).expvibrance;
lp.sensv = local_sensiv; lp.sensv = local_sensiv;
lp.past = chromaPastel; lp.past = chromaPastel;
lp.satur = chromaSatur; 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.cut_past = cupas;
lp.blac = locallab.spots.at(sp).black; lp.blac = locallab.spots.at(sp).black;
lp.shcomp = locallab.spots.at(sp).shcompr; 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.expchroma = locallab.spots.at(sp).expchroma / 100.;
lp.sensex = local_sensiex; lp.sensex = local_sensiex;
lp.war = local_warm; 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.highlihs = highhs;
lp.shadowhs = shadhs; lp.shadowhs = shadhs;
lp.radiushs = radhs; lp.radiushs = radhs;
@ -1124,7 +1128,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.senshs = local_sensihs; lp.senshs = local_sensihs;
lp.ftwlc = fftwlc; lp.ftwlc = fftwlc;
lp.ftwreti = fftwreti; 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) { if (params->locallab.enabled) {
//always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise
struct local_params lp; 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 begy = lp.yc - lp.lyT;
int begx = lp.xc - lp.lxL; int begx = lp.xc - lp.lxL;
int yEn = lp.yc + lp.ly; 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, 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, 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, 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) 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 //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 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; int delxy = 0;
struct local_params lp; 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 const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip
int strred = 1;//(lp.strucc - 1); int strred = 1;//(lp.strucc - 1);

View File

@ -900,6 +900,10 @@ enum ProcEventCode {
EvlocallabLLmasklcshape = 871, EvlocallabLLmasklcshape = 871,
EvLocallabEnalcMask = 872, EvLocallabEnalcMask = 872,
EvlocallabshowmasklcMethod = 873, EvlocallabshowmasklcMethod = 873,
Evlocallabblendmasklc = 874,
Evlocallabradmasklc = 875,
Evlocallabchromasklc = 876,
EvlocallabLmasklcshape = 877,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -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}, 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}, 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), 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 // Contrast by detail levels
expcbdl(false), expcbdl(false),
@ -3148,6 +3152,10 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& LLmasklccurve == other.LLmasklccurve && LLmasklccurve == other.LLmasklccurve
&& HHmasklccurve == other.HHmasklccurve && HHmasklccurve == other.HHmasklccurve
&& enalcMask == other.enalcMask && enalcMask == other.enalcMask
&& blendmasklc == other.blendmasklc
&& radmasklc == other.radmasklc
&& chromasklc == other.chromasklc
&& Lmasklccurve == other.Lmasklccurve
// Constrast by detail levels // Constrast by detail levels
&& expcbdl == other.expcbdl && expcbdl == other.expcbdl
&& [this, &other]()->bool { && [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).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).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).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 // Contrast by detail levels
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expcbdl, "Locallab", "Expcbdl_" + std::to_string(i), spot.expcbdl, keyFile); 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", "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", "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", "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))) { if (keyFile.has_key("Locallab", "CSThreshold_" + std::to_string(i))) {

View File

@ -1290,6 +1290,10 @@ struct LocallabParams {
std::vector<double> LLmasklccurve; std::vector<double> LLmasklccurve;
std::vector<double> HHmasklccurve; std::vector<double> HHmasklccurve;
bool enalcMask; bool enalcMask;
int blendmasklc;
double radmasklc;
double chromasklc;
std::vector<double> Lmasklccurve;
// Contrast by detail levels // Contrast by detail levels
bool expcbdl; bool expcbdl;

View File

@ -903,7 +903,11 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //EvlocallabCCmasklcshape LUMINANCECURVE, //EvlocallabCCmasklcshape
LUMINANCECURVE, //EvlocallabLLmasklcshape LUMINANCECURVE, //EvlocallabLLmasklcshape
LUMINANCECURVE, //EvlocallabEnalcMask LUMINANCECURVE, //EvlocallabEnalcMask
LUMINANCECURVE //EvlocallabshowmasklcMethod LUMINANCECURVE, //EvlocallabshowmasklcMethod
LUMINANCECURVE, //Evlocallabblendmasklc
LUMINANCECURVE, // Evlocallabradmasklc
LUMINANCECURVE, //Evlocallabchromasklc
LUMINANCECURVE //EvlocallabLmasklcshape
}; };

View File

@ -524,7 +524,7 @@ public:
virtual void updateUnLock() = 0; 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 /** 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 * @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber

View File

@ -1313,7 +1313,7 @@ private:
loccompwavCurve, loccompwavutili, loccompwavCurve, loccompwavutili,
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, 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); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
lastorigView->CopyFrom(labView); lastorigView->CopyFrom(labView);

View File

@ -357,6 +357,9 @@ Locallab::Locallab():
wavshapecomp(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))), wavshapecomp(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))),
masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2lcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmasklcshape(static_cast<DiagonalCurveEditor*>(mask2lcCurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
CCmasklcshape(static_cast<FlatCurveEditor*>(masklcCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), CCmasklcshape(static_cast<FlatCurveEditor*>(masklcCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))),
LLmasklcshape(static_cast<FlatCurveEditor*>(masklcCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), LLmasklcshape(static_cast<FlatCurveEditor*>(masklcCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmasklcshape(static_cast<FlatCurveEditor *>(masklcCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), HHmasklcshape(static_cast<FlatCurveEditor *>(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.))), 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"))))), 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.))), 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( multiplier(
[this]() -> std::array<Adjuster*, 6> { [this]() -> std::array<Adjuster*, 6> {
@ -2900,6 +2906,10 @@ pe(nullptr)
claricres->setAdjusterListener(this); claricres->setAdjusterListener(this);
sensilc->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(); 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<GradientMilestone>& mLmasklcshape = zero_one_shape;
Lmasklcshape->setBottomBarBgGradient(mLmasklcshape);
Lmasklcshape->setLeftBarBgGradient(mLmasklcshape);
mask2lcCurveEditorG->curveListComplete();
enalcMaskConn = enalcMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enalcMaskChanged)); enalcMaskConn = enalcMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enalcMaskChanged));
showmasklcMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmasklcMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
@ -3051,8 +3074,10 @@ pe(nullptr)
masklcBox->pack_start(*showmasklcMethod, Gtk::PACK_SHRINK, 4); masklcBox->pack_start(*showmasklcMethod, Gtk::PACK_SHRINK, 4);
masklcBox->pack_start(*enalcMask, Gtk::PACK_SHRINK, 0); 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 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); masklcBox->pack_start(*blendmasklc, Gtk::PACK_SHRINK, 0);
// maskcbBox->pack_start(*radmaskcb, 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) { if (complexsoft < 1) {
// maskcbBox->pack_start(*lapmaskcb, Gtk::PACK_SHRINK, 0); // maskcbBox->pack_start(*lapmaskcb, Gtk::PACK_SHRINK, 0);
@ -3741,6 +3766,7 @@ Locallab::~Locallab()
delete maskretiCurveEditorG; delete maskretiCurveEditorG;
delete mask2retiCurveEditorG; delete mask2retiCurveEditorG;
delete maskcbCurveEditorG; delete maskcbCurveEditorG;
delete mask2lcCurveEditorG;
delete mask2cbCurveEditorG; 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).CCmasklccurve = CCmasklcshape->getCurve();
pp->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = HHmasklcshape->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).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 // Contrast by detail levels
pp->locallab.spots.at(pp->locallab.selspot).expcbdl = expcbdl->getEnabled(); 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).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).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).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 // 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).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).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 // Contrast by detail levels
pedited->locallab.spots.at(pp->locallab.selspot).expcbdl = pedited->locallab.spots.at(pp->locallab.selspot).expcbdl || !expcbdl->get_inconsistent(); 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 //denoise
if (getEnabled() && expdenoi->getEnabled()) { if (getEnabled() && expdenoi->getEnabled()) {
@ -8701,6 +8746,9 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
clarisoft->setDefault(defSpot->clarisoft); clarisoft->setDefault(defSpot->clarisoft);
sensilc->setDefault((double)defSpot->sensilc); sensilc->setDefault((double)defSpot->sensilc);
csThreshold->setDefault<int>(defSpot->csthreshold); csThreshold->setDefault<int>(defSpot->csthreshold);
blendmasklc->setDefault((double)defSpot->blendmasklc);
radmasklc->setDefault(defSpot->radmasklc);
chromasklc->setDefault(defSpot->chromasklc);
// Contrast by detail levels // Contrast by detail levels
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
@ -8937,6 +8985,9 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
clarisoft->setDefaultEditedState(Irrelevant); clarisoft->setDefaultEditedState(Irrelevant);
sensilc->setDefaultEditedState(Irrelevant); sensilc->setDefaultEditedState(Irrelevant);
csThreshold->setDefaultEditedState(Irrelevant); csThreshold->setDefaultEditedState(Irrelevant);
blendmasklc->setDefaultEditedState(Irrelevant);
radmasklc->setDefaultEditedState(Irrelevant);
chromasklc->setDefaultEditedState(Irrelevant);
// Contrast by detail levels // Contrast by detail levels
for (int i = 0; i < 6; i++) { 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); clarisoft->setDefaultEditedState(defSpotState->clarisoft ? Edited : UnEdited);
sensilc->setDefaultEditedState(defSpotState->sensilc ? Edited : UnEdited); sensilc->setDefaultEditedState(defSpotState->sensilc ? Edited : UnEdited);
csThreshold->setDefaultEditedState(defSpotState->csthreshold ? 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 // Contrast by detail levels
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
@ -10385,6 +10439,25 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
listener->panelChanged(Evlocallabsensilc, sensilc->getTextValue()); 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 // Contrast by detail levels
@ -10842,6 +10915,9 @@ void Locallab::setBatchMode(bool batchMode)
clarisoft->showEditedCB(); clarisoft->showEditedCB();
csThreshold->showEditedCB(); csThreshold->showEditedCB();
sensilc->showEditedCB(); sensilc->showEditedCB();
blendmasklc->showEditedCB();
radmasklc->showEditedCB();
chromasklc->showEditedCB();
// Contrast by detail levels // Contrast by detail levels
for (int i = 0; i < 6; i++) { 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); LLmasklcshape->setCurve(pp->locallab.spots.at(index).LLmasklccurve);
HHmasklcshape->setCurve(pp->locallab.spots.at(index).HHmasklccurve); HHmasklcshape->setCurve(pp->locallab.spots.at(index).HHmasklccurve);
enalcMask->set_active(pp->locallab.spots.at(index).enalcMask); 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()) { if (fftwlc->get_active()) {
lcradius->setLimits(20, 1000, 1, 80); lcradius->setLimits(20, 1000, 1, 80);
@ -12421,6 +12501,10 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
HHmasklcshape->setUnChanged(!spotState->HHmasklccurve); HHmasklcshape->setUnChanged(!spotState->HHmasklccurve);
CCmasklcshape->setUnChanged(!spotState->CCmasklccurve); CCmasklcshape->setUnChanged(!spotState->CCmasklccurve);
enalcMask->set_inconsistent(multiImage && !spotState->enalcMask); 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) { if (!spotState->retinexMethod) {
localcontMethod->set_active_text(M("GENERAL_UNCHANGED")); localcontMethod->set_active_text(M("GENERAL_UNCHANGED"));

View File

@ -174,7 +174,8 @@ private:
CurveEditorGroup* const LocalcurveEditorwavcomp; CurveEditorGroup* const LocalcurveEditorwavcomp;
FlatCurveEditor* const wavshapecomp; FlatCurveEditor* const wavshapecomp;
CurveEditorGroup* const masklcCurveEditorG; CurveEditorGroup* const masklcCurveEditorG;
// DiagonalCurveEditor* const Lmasklcshape; CurveEditorGroup* const mask2lcCurveEditorG;
DiagonalCurveEditor* const Lmasklcshape;
FlatCurveEditor* const CCmasklcshape; FlatCurveEditor* const CCmasklcshape;
FlatCurveEditor* const LLmasklcshape; FlatCurveEditor* const LLmasklcshape;
FlatCurveEditor* const HHmasklcshape; FlatCurveEditor* const HHmasklcshape;
@ -372,6 +373,9 @@ private:
Adjuster* const fatdet; Adjuster* const fatdet;
Adjuster* const fatanch; Adjuster* const fatanch;
Adjuster* const fatres; Adjuster* const fatres;
Adjuster* const blendmasklc;
Adjuster* const radmasklc;
Adjuster* const chromasklc;
// Contrast by detail levels // Contrast by detail levels
const std::array<Adjuster*, 6> multiplier; const std::array<Adjuster*, 6> multiplier;
Adjuster* const chromacbdl; Adjuster* const chromacbdl;

View File

@ -1284,6 +1284,10 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).LLmasklccurve = locallab.spots.at(j).LLmasklccurve && pSpot.LLmasklccurve == otherSpot.LLmasklccurve; 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).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).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 // Contrast by detail levels
locallab.spots.at(j).expcbdl = locallab.spots.at(j).expcbdl && pSpot.expcbdl == otherSpot.expcbdl; 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; 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 // Contrast by detail levels
if (locallab.spots.at(i).expcbdl) { if (locallab.spots.at(i).expcbdl) {
toEdit.locallab.spots.at(i).expcbdl = mods.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), LLmasklccurve(v),
HHmasklccurve(v), HHmasklccurve(v),
enalcMask(v), enalcMask(v),
blendmasklc(v),
radmasklc(v),
chromasklc(v),
Lmasklccurve(v),
// Contrast by detail levels // Contrast by detail levels
expcbdl(v), expcbdl(v),
@ -5987,6 +6012,10 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
LLmasklccurve = v; LLmasklccurve = v;
HHmasklccurve = v; HHmasklccurve = v;
enalcMask = v; enalcMask = v;
blendmasklc = v;
radmasklc = v;
chromasklc = v;
Lmasklccurve = v;
// Contrast by detail levels // Contrast by detail levels
expcbdl = v; expcbdl = v;

View File

@ -716,6 +716,10 @@ public:
bool LLmasklccurve; bool LLmasklccurve;
bool HHmasklccurve; bool HHmasklccurve;
bool enalcMask; bool enalcMask;
bool blendmasklc;
bool radmasklc;
bool chromasklc;
bool Lmasklccurve;
// Contrast by detail levels // Contrast by detail levels
bool expcbdl; bool expcbdl;
bool mult[6]; bool mult[6];

View File

@ -509,9 +509,9 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
// Manage Locallab mask visibility // Manage Locallab mask visibility
if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod ||event == rtengine::EvlocallabshowmaskexpMethodinv 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::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(); 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 ipc->endUpdateParams(changeFlags); // starts the IPC processing
@ -619,7 +619,7 @@ void ToolPanelCoordinator::profileChange(
// Reset Locallab mask visibility when a picture is loaded // Reset Locallab mask visibility when a picture is loaded
if (event == rtengine::EvPhotoLoaded) { if (event == rtengine::EvPhotoLoaded) {
locallab->resetMaskVisibility(); 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 // start the IPC processing