diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 68034aff2..4b5334d8d 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1016,7 +1016,7 @@ void Crop::update(int todo) locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locwavCurve, LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, - parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallSHMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask); + parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask); } else { parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, lllocalcurve2,locallutili, loclhCurve, lochhCurve, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, @@ -1026,7 +1026,7 @@ void Crop::update(int todo) locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locwavCurve, - LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0); + LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } lllocalcurve2.clear(); lightCurveloc2.clear(); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 11a448f4b..45390db22 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -205,7 +205,9 @@ ImProcCoordinator::ImProcCoordinator() : locallColorMask(0), locallColorMaskinv(0), locallExpMask(0), + locallExpMaskinv(0), locallSHMask(0), + locallSHMaskinv(0), locallcbMask(0), locallretiMask(0), locallsoftMask(0), @@ -987,7 +989,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locwavCurve, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, - locallColorMask, locallColorMaskinv, locallExpMask, locallSHMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask); + locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask); } else { ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, @@ -996,7 +998,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locwavCurve, - LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, 0, 0, 0, 0, 0, 0, 0, 0, 0); + LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } //recalculate references after if (params->locallab.spots.at(sp).spotMethod == "exc") { diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index d5eefabfc..ec2b9aae5 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -299,7 +299,9 @@ protected: int locallColorMask; int locallColorMaskinv; int locallExpMask; + int locallExpMaskinv; int locallSHMask; + int locallSHMaskinv; int locallcbMask; int locallretiMask; int locallsoftMask; @@ -374,12 +376,14 @@ public: updaterThreadStart.unlock(); } - void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallSHMask, 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 locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override { this->locallColorMask = locallColorMask; this->locallColorMaskinv = locallColorMaskinv; this->locallExpMask = locallExpMask; + this->locallExpMaskinv = locallExpMaskinv; this->locallSHMask = locallSHMask; + this->locallSHMaskinv = locallSHMaskinv; this->locallcbMask = locallcbMask; this->locallretiMask = locallretiMask; this->locallsoftMask = locallsoftMask; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 695f37f4b..f20de4fea 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -318,8 +318,8 @@ public: const LocCCmaskCurve & locccmastmCurve, bool &lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool &llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili, const LocCCmaskCurve & locccmasblCurve, bool &lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool &llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili, const LocwavCurve & locwavCurve, - bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, 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 llColorMask, int llColorMaskinv, - int llExpMask, int llSHMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask); + bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, 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 llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); void InverseBlurNoise_Local(LabImage * originalmask, float **bufchro, const struct local_params& lp, const float hueref, const float chromaref, const float lumaref, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 4fe5d1ade..526778f73 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -272,7 +272,9 @@ struct local_params { int showmaskcolmet; int showmaskcolmetinv; int showmaskexpmet; + int showmaskexpmetinv; int showmaskSHmet; + int showmaskSHmetinv; int showmaskcbmet; int showmaskretimet; int showmasksoftmet; @@ -335,7 +337,9 @@ struct local_params { bool enaColorMask; bool enaColorMaskinv; bool enaExpMask; + bool enaExpMaskinv; bool enaSHMask; + bool enaSHMaskinv; bool enacbMask; bool enaretiMask; bool enaretiMasktmap; @@ -434,7 +438,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 llSHMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask) +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 llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask) { int w = oW; int h = oH; @@ -514,7 +518,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskcolmet = llColorMask; lp.showmaskcolmetinv = llColorMaskinv; lp.showmaskexpmet = llExpMask; + lp.showmaskexpmetinv = llExpMaskinv; lp.showmaskSHmet = llSHMask; + lp.showmaskSHmetinv = llSHMaskinv; lp.showmaskcbmet = llcbMask; lp.showmaskretimet = llretiMask; lp.showmasksoftmet = llsoftMask; @@ -523,12 +529,15 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 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;// 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;// 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;// 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 ; + lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 ; lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0; lp.enaretiMask = locallab.spots.at(sp).enaretiMask && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0; lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0; lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0; +//printf("lp.showmaskSHmetinv=%i\n", lp.showmaskSHmetinv); if (locallab.spots.at(sp).softMethod == "soft") { lp.softmet = 0; } else if (locallab.spots.at(sp).softMethod == "reti") { @@ -3664,7 +3673,8 @@ void ImProcFunctions::InverseColorLight_Local(int sp, int senstype, const struct std::unique_ptr origblur(new LabImage(GW, GH)); std::unique_ptr origblurmask; const bool usemaskcol = (lp.enaColorMaskinv) && senstype == 0; - const bool usemaskall = (usemaskcol); + const bool usemaskexp = (lp.enaExpMaskinv) && senstype == 1; + const bool usemaskall = (usemaskcol || usemaskexp); float radius = 3.f / sk; @@ -3924,7 +3934,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); + calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); int begy = lp.yc - lp.lyT; int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; @@ -5252,8 +5262,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const LocCCmaskCurve & locccmastmCurve, bool & lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool & llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili, const LocCCmaskCurve & locccmasblCurve, bool & lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool & llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili, const LocwavCurve & locwavCurve, - bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, 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 llColorMask, int llColorMaskinv, - int llExpMask, int llSHMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask) + bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, 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 llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask) { /* comment on processus deltaE * the algo uses 3 different ways to manage deltaE according to the type of intervention @@ -5283,7 +5293,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 struct local_params lp; - calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llSHMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask); + calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask); const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip int strred = 1;//(lp.strucc - 1); @@ -7321,6 +7331,65 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } } else if (lp.invsh && (lp.highlihs > 0.f || lp.shadowhs > 0.f) && call < 3 && lp.hsena) { + std::unique_ptr bufmaskblurcol; + std::unique_ptr originalmaskcol; + std::unique_ptr bufcolorig; + int GW = transformed->W; + int GH = transformed->H; + bufcolorig.reset(new LabImage(GW, GH)); + + if (lp.enaSHMaskinv || lp.showmaskSHmetinv == 1) { + bufmaskblurcol.reset(new LabImage(GW, GH, true)); + originalmaskcol.reset(new LabImage(GW, GH)); + } + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < GH ; y++) { + for (int x = 0; x < GW; x++) { + bufcolorig->L[y][x] = original->L[y][x]; + } + } + + int inv = 1; + bool showmaske = false; + bool enaMask = false; + bool deltaE = false; + bool modmask = false; + bool zero = false; + bool modif = false; + + // printf("showmaskcolmetinv=%i\n", lp.showmaskcolmetinv); + if (lp.showmaskSHmetinv == 1) { + showmaske = true; + } + + if (lp.enaSHMaskinv) { + enaMask = true; + } + + if (lp.showmaskSHmetinv == 0) { + zero = true; + } + + float chrom = lp.chromaSH; + float rad = lp.radmaSH; + float gamma = lp.gammaSH; + float slope = lp.slomaSH; + float blendm = lp.blendmaSH; + + maskcalccol(GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, transformed, inv, lp, + locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, gamma, slope, blendm); + + + if (lp.showmaskSHmetinv == 1) { + showmask(lp, 0, 0, cx, cy, GW, GH, bufcolorig.get(), transformed, bufmaskblurcol.get(), inv); + + return; + } float adjustr = 2.f; InverseColorLight_Local(sp, 2, lp, nullptr, lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk); @@ -8717,7 +8786,66 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o //inverse else if (lp.invex && (lp.expcomp != 0.0 || lp.war != 0 || (exlocalcurve && localexutili)) && lp.exposena) { float adjustr = 2.f; - InverseColorLight_Local(sp, 1, lp, nullptr, lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk); + std::unique_ptr bufmaskblurexp; + std::unique_ptr originalmaskexp; + std::unique_ptr bufexporig; + int GW = transformed->W; + int GH = transformed->H; + bufexporig.reset(new LabImage(GW, GH)); + + if (lp.enaExpMaskinv || lp.showmaskexpmetinv == 1) { + bufmaskblurexp.reset(new LabImage(GW, GH, true)); + originalmaskexp.reset(new LabImage(GW, GH)); + } + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < GH ; y++) { + for (int x = 0; x < GW; x++) { + bufexporig->L[y][x] = original->L[y][x]; + } + } + + int inv = 1; + bool showmaske = false; + bool enaMask = false; + bool deltaE = false; + bool modmask = false; + bool zero = false; + bool modif = false; + + // printf("showmaskcolmetinv=%i\n", lp.showmaskcolmetinv); + if (lp.showmaskexpmetinv == 1) { + showmaske = true; + } + + if (lp.enaExpMaskinv) { + enaMask = true; + } + + if (lp.showmaskexpmetinv == 0) { + zero = true; + } + + float chrom = lp.chromaexp; + float rad = lp.radmaexp; + float gamma = lp.gammaexp; + float slope = lp.slomaexp; + float blendm = lp.blendmaexp; + + maskcalccol(GW, GH, 0, 0, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, transformed, inv, lp, + locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, gamma, slope, blendm); + + if (lp.showmaskexpmetinv == 1) { + showmask(lp, 0, 0, cx, cy, GW, GH, bufexporig.get(), transformed, bufmaskblurexp.get(), inv); + + return; + } + + InverseColorLight_Local(sp, 1, lp, originalmaskexp.get(), lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk); } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 74a652592..10b7e966e 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -762,6 +762,8 @@ enum ProcEventCode { Evlocallabguidbl = 732, Evlocallabepsbl = 733, EvlocallabshowmaskcolMethodinv = 734, + EvlocallabshowmaskexpMethodinv = 735, + EvlocallabshowmaskSHMethodinv = 736, NUMOFEVENTS }; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 959d55237..4a3eb67c8 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -761,7 +761,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // Evlocallabitera LUMINANCECURVE, // Evlocallabguidbl LUMINANCECURVE, // Evlocallabepsbl - LUMINANCECURVE // EvlocallabshowmaskcolMethodinv + LUMINANCECURVE, // EvlocallabshowmaskcolMethodinv + LUMINANCECURVE, // EvlocallabshowmaskexpMethodinv + LUMINANCECURVE // EvlocallabshowmaskSHMethodinv }; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index fe2a589e3..0bc2960c8 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -507,7 +507,7 @@ public: virtual void updateUnLock() = 0; - virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallSHMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0; + virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, 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 290751670..887a78407 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1217,7 +1217,7 @@ private: locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locwavCurve, - LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0); + LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); // Clear local curves diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index cf47848dd..4a5ef9438 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -134,7 +134,6 @@ Locallab::Locallab(): expshadhigh(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_SHADHIGH")))), expvibrance(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_VIBRANCE")))), expsoft(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_SOFT")))), -// expblur(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_BLUFR")))), expblur(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), exptonemap(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), expreti(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), @@ -364,9 +363,11 @@ Locallab::Locallab(): showmaskcolMethodinv(Gtk::manage(new MyComboBoxText())), //Exposure showmaskexpMethod(Gtk::manage(new MyComboBoxText())), + showmaskexpMethodinv(Gtk::manage(new MyComboBoxText())), expMethod(Gtk::manage(new MyComboBoxText())), //Shadows Highlight showmaskSHMethod(Gtk::manage(new MyComboBoxText())), + showmaskSHMethodinv(Gtk::manage(new MyComboBoxText())), // Blur & Noise blurMethod(Gtk::manage(new MyComboBoxText())), //soft Method @@ -752,6 +753,17 @@ Locallab::Locallab(): showmaskexpMethodConn = showmaskexpMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskexpMethodChanged)); + showmaskexpMethodinv->append(M("TP_LOCALLAB_SHOWMNONE")); + showmaskexpMethodinv->append(M("TP_LOCALLAB_SHOWMASK")); + + showmaskexpMethodinv->set_active(0); + + if (showtooltip) { + showmaskexpMethodinv->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); + } + + showmaskexpMethodConninv = showmaskexpMethodinv->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskexpMethodChangedinv)); + maskexpCurveEditorG->setCurveListener(this); CCmaskexpshape = static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false)); @@ -816,6 +828,7 @@ Locallab::Locallab(): exposeBox->pack_start(*inversex); ToolParamBlock* const maskexpBox = Gtk::manage(new ToolParamBlock()); maskexpBox->pack_start(*showmaskexpMethod, Gtk::PACK_SHRINK, 4); + maskexpBox->pack_start(*showmaskexpMethodinv, Gtk::PACK_SHRINK, 4); maskexpBox->pack_start(*enaExpMask, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*maskexpCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskexpBox->pack_start(*blendmaskexp, Gtk::PACK_SHRINK, 0); @@ -877,6 +890,17 @@ Locallab::Locallab(): showmaskSHMethodConn = showmaskSHMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskSHMethodChanged)); + showmaskSHMethodinv->append(M("TP_LOCALLAB_SHOWMNONE")); + showmaskSHMethodinv->append(M("TP_LOCALLAB_SHOWMASK")); + + showmaskSHMethodinv->set_active(0); + + if (showtooltip) { + showmaskSHMethodinv->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); + } + + showmaskSHMethodConninv = showmaskSHMethodinv->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskSHMethodChangedinv)); + maskSHCurveEditorG->setCurveListener(this); CCmaskSHshape = static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false)); @@ -925,6 +949,7 @@ Locallab::Locallab(): ToolParamBlock* const maskSHBox = Gtk::manage(new ToolParamBlock()); maskSHBox->pack_start(*showmaskSHMethod, Gtk::PACK_SHRINK, 4); + maskSHBox->pack_start(*showmaskSHMethodinv, Gtk::PACK_SHRINK, 4); maskSHBox->pack_start(*enaSHMask, Gtk::PACK_SHRINK, 0); maskSHBox->pack_start(*maskSHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskSHBox->pack_start(*blendmaskSH, Gtk::PACK_SHRINK, 0); @@ -3949,8 +3974,11 @@ void Locallab::showmaskcolMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskcolMethodinv->set_active(0); showmaskexpMethod->set_active(0); + showmaskexpMethodinv->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); @@ -3971,7 +3999,9 @@ void Locallab::showmaskcolMethodChangedinv() disableListener(); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); + showmaskexpMethodinv->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); @@ -3984,6 +4014,28 @@ void Locallab::showmaskcolMethodChangedinv() } } +void Locallab::showmaskexpMethodChangedinv() +{ + // printf("showmaskcolMethodChanged\n"); + + // When one mask state is changed, other masks are deactivated + disableListener(); + showmaskcolMethodinv->set_active(0); + showmaskcolMethod->set_active(0); + showmaskexpMethod->set_active(0); + showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); + showmaskcbMethod->set_active(0); + showmaskretiMethod->set_active(0); + showmasksoftMethod->set_active(0); + showmasktmMethod->set_active(0); + showmaskblMethod->set_active(0); + enableListener(); + + if (listener) { + listener->panelChanged(EvlocallabshowmaskexpMethodinv, ""); + } +} void Locallab::showmaskexpMethodChanged() { @@ -3991,10 +4043,12 @@ void Locallab::showmaskexpMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); @@ -4039,9 +4093,11 @@ void Locallab::showmaskSHMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); @@ -4054,15 +4110,39 @@ void Locallab::showmaskSHMethodChanged() } } +void Locallab::showmaskSHMethodChangedinv() +{ + // printf("showmaskSHMethodChanged\n"); + + // When one mask state is changed, other masks are deactivated + disableListener(); + showmaskexpMethodinv->set_active(0); + showmaskcolMethodinv->set_active(0); + showmaskcolMethod->set_active(0); + showmaskexpMethod->set_active(0); + showmaskcbMethod->set_active(0); + showmaskretiMethod->set_active(0); + showmasksoftMethod->set_active(0); + showmasktmMethod->set_active(0); + showmaskblMethod->set_active(0); + enableListener(); + + if (listener) { + listener->panelChanged(EvlocallabshowmaskSHMethodinv, ""); + } +} + void Locallab::showmaskcbMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); @@ -4081,9 +4161,11 @@ void Locallab::showmaskblMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); @@ -4104,9 +4186,11 @@ void Locallab::showmasktmMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); @@ -4125,9 +4209,11 @@ void Locallab::showmaskretiMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskcbMethod->set_active(0); showmasksoftMethod->set_active(0); @@ -4145,10 +4231,12 @@ void Locallab::showmasksoftMethodChanged() // When one mask state is changed, other masks are deactivated disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasktmMethod->set_active(0); @@ -4164,10 +4252,12 @@ void Locallab::resetMaskVisibility() // printf("resetMaskVisibility\n"); disableListener(); + showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); @@ -4181,7 +4271,9 @@ Locallab::llMaskVisibility* Locallab::getMaskVisibility() maskStruct->colorMaskinv = showmaskcolMethodinv->get_active_row_number(); maskStruct->colorMask = showmaskcolMethod->get_active_row_number(); maskStruct->expMask = showmaskexpMethod->get_active_row_number(); + maskStruct->expMaskinv = showmaskexpMethodinv->get_active_row_number(); maskStruct->SHMask = showmaskSHMethod->get_active_row_number(); + maskStruct->SHMaskinv = showmaskSHMethodinv->get_active_row_number(); maskStruct->cbMask = showmaskcbMethod->get_active_row_number(); maskStruct->retiMask = showmaskretiMethod->get_active_row_number(); maskStruct->softMask = showmasksoftMethod->get_active_row_number(); @@ -4491,17 +4583,21 @@ void Locallab::inversexChanged() pdeFrame->show(); } + showmaskexpMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode + softradiusexp->show(); - showmaskexpMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode + showmaskexpMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inversex->get_active()) { sensiex->show(); curveEditorG->show(); - expmaskexp->hide(); + expmaskexp->show(); structexp->hide(); shadex->hide(); blurexpde->show(); softradiusexp->hide(); expMethod->hide(); + showmaskexpMethod->hide(); + showmaskexpMethodinv->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); @@ -4525,9 +4621,12 @@ void Locallab::inversexChanged() pdeFrame->show(); } + showmaskexpMethodinv->show(); + showmaskexpMethod->hide(); if (batchMode) { showmaskexpMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode + showmaskexpMethodinv->hide(); } } @@ -4561,20 +4660,29 @@ void Locallab::inversshChanged() sensihs->show(); blurSHde->show(); expmasksh->show(); + showmaskSHMethod->show(); + showmaskSHMethodinv->hide(); showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inverssh->get_active()) { - sensihs->show(); - expmasksh->hide(); - blurSHde->show(); - - } else { + // printf("Inv SH\n"); sensihs->show(); expmasksh->show(); blurSHde->show(); + showmaskSHMethod->hide(); + showmaskSHMethodinv->show(); + + } else { + // printf("Pas Inv SH\n"); + sensihs->show(); + expmasksh->show(); + blurSHde->show(); + showmaskSHMethod->show(); + showmaskSHMethodinv->hide(); if (batchMode) { showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode + showmaskSHMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } } @@ -6454,7 +6562,9 @@ void Locallab::setBatchMode(bool batchMode) showmaskcolMethod->hide(); showmaskcolMethodinv->hide(); showmaskexpMethod->hide(); + showmaskexpMethodinv->hide(); showmaskSHMethod->hide(); + showmaskSHMethodinv->hide(); showmaskcbMethod->hide(); showmaskretiMethod->hide(); showmasktmMethod->hide(); @@ -6607,11 +6717,13 @@ void Locallab::enableListener() enableexposeConn.block(false); inversexConn.block(false); showmaskexpMethodConn.block(false); + showmaskexpMethodConninv.block(false); expMethodConn.block(false); enaExpMaskConn.block(false); // Shadow highlight enableshadhighConn.block(false); showmaskSHMethodConn.block(false); + showmaskSHMethodConninv.block(false); enaSHMaskConn.block(false); inversshConn.block(false); // Vibrance @@ -6678,11 +6790,13 @@ void Locallab::disableListener() enableexposeConn.block(true); inversexConn.block(true); showmaskexpMethodConn.block(true); + showmaskexpMethodConninv.block(true); expMethodConn.block(true); enaExpMaskConn.block(true); // Shadow highlight enableshadhighConn.block(true); showmaskSHMethodConn.block(true); + showmaskSHMethodConninv.block(true); enaSHMaskConn.block(true); inversshConn.block(true); // Vibrance @@ -7402,6 +7516,7 @@ void Locallab::updateSpecificGUIState() softradiusexp->show(); shadex->show(); expMethod->show(); + expmaskexp->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); @@ -7409,6 +7524,7 @@ void Locallab::updateSpecificGUIState() pdeFrame->show(); } + showmaskexpMethodinv->hide(); showmaskexpMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inversex->get_active()) { structexp->hide(); @@ -7416,6 +7532,9 @@ void Locallab::updateSpecificGUIState() shadex->hide(); expMethod->hide(); pdeFrame->hide(); + expmaskexp->show(); + showmaskexpMethodinv->show(); + showmaskexpMethod->hide(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); @@ -7427,6 +7546,9 @@ void Locallab::updateSpecificGUIState() softradiusexp->show(); shadex->show(); expMethod->show(); + expmaskexp->show(); + showmaskexpMethodinv->hide(); + showmaskexpMethod->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); @@ -7443,12 +7565,26 @@ void Locallab::updateSpecificGUIState() sensihs->show(); blurSHde->show(); - if (multiImage && inversex->get_inconsistent()) { + if (multiImage && inverssh->get_inconsistent()) { + expmasksh->show(); showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode - } else if (batchMode && !inverssh->get_active()) { - showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode - } + } else if (inverssh->get_active()) { + // printf("GUI inv SH\n"); + expmasksh->show(); + showmaskSHMethodinv->show(); + showmaskSHMethod->hide(); + } else { + // printf("GUI NON inv SH\n"); + expmasksh->show(); + showmaskSHMethodinv->hide(); + showmaskSHMethod->show(); + + if (batchMode) { + showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode + showmaskSHMethodinv->hide(); + } + } if (multiImage && black->getEditedState() != Edited) { shcompr->set_sensitive(true); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 26f862aff..94d722634 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -337,11 +337,15 @@ private: //Exposure MyComboBoxText* const showmaskexpMethod; sigc::connection showmaskexpMethodConn; + MyComboBoxText* const showmaskexpMethodinv; + sigc::connection showmaskexpMethodConninv; MyComboBoxText* const expMethod; sigc::connection expMethodConn; //Shadows Highlight MyComboBoxText* const showmaskSHMethod; sigc::connection showmaskSHMethodConn; + MyComboBoxText* const showmaskSHMethodinv; + sigc::connection showmaskSHMethodConninv; // Blur & Noise MyComboBoxText* const blurMethod; sigc::connection blurMethodConn; @@ -448,9 +452,11 @@ private: void showmaskcolMethodChangedinv(); //Exposure void showmaskexpMethodChanged(); + void showmaskexpMethodChangedinv(); void expMethodChanged(); //Shadows Highlight void showmaskSHMethodChanged(); + void showmaskSHMethodChangedinv(); // Blur & Noise void blMethodChanged(); void medMethodChanged(); @@ -503,7 +509,9 @@ public: int colorMask; int colorMaskinv; int expMask; + int expMaskinv; int SHMask; + int SHMaskinv; int cbMask; int retiMask; int softMask; diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index c9a778cd0..9984c2d3b 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -474,10 +474,11 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const } // Manage Locallab mask visibility - if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmasksoftMethod + if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod ||event == rtengine::EvlocallabshowmaskexpMethodinv + || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskSHMethodinv || event == rtengine::EvlocallabshowmasksoftMethod || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) { Locallab::llMaskVisibility* maskStruc = locallab->getMaskVisibility(); - ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->SHMask, 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->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask); } ipc->endUpdateParams(changeFlags); // starts the IPC processing @@ -585,7 +586,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); + ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } // start the IPC processing