diff --git a/rtdata/languages/default b/rtdata/languages/default index 15a7d9a30..aa77539e9 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2463,6 +2463,7 @@ TP_LOCALLAB_SHOWPOISSON;Poisson (pde) TP_LOCALLAB_SHOWR;6 - Mask and modifications TP_LOCALLAB_SHOWS;5+* - Mask and modifications TP_LOCALLAB_SHOWSTRUC;Show structure Spot +TP_LOCALLAB_SHOWSTRUCEX;Show structure Spot - disabled in "normal" TP_LOCALLAB_SHOWT;4 - Mask and modifications TP_LOCALLAB_SHOWVI;3 - Mask and modifications TP_LOCALLAB_SIM;Simple diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index f9d82c148..5c7312a53 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -869,6 +869,10 @@ void Crop::update(int todo) bool locallutili = parent->locallutili; LUTf lllocalcurve2(65536, 0); + bool localclutili = parent->localclutili; + LUTf cllocalcurve2(65536, 0); + bool locallcutili = parent->locallcutili; + LUTf lclocalcurve2(65536, 0); bool localcutili = parent->locallutili; LUTf cclocalcurve2(65536, 0); bool localrgbutili = parent->localrgbutili; @@ -1007,6 +1011,10 @@ void Crop::update(int todo) locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili); locallutili = false; CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve2, sca); + localclutili = false; + CurveFactory::curveLocal(localclutili, params.locallab.spots.at(sp).clcurve, cllocalcurve2, sca); + locallcutili = false; + CurveFactory::curveLocal(locallcutili, params.locallab.spots.at(sp).lccurve, lclocalcurve2, sca); localrgbutili = false; CurveFactory::curveLocal(localrgbutili, params.locallab.spots.at(sp).rgbcurve, rgblocalcurve2, sca); localcutili = false; @@ -1070,7 +1078,10 @@ void Crop::update(int todo) // Locallab mask are only shown for selected spot if (sp == params.locallab.selspot) { parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, lastorigCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve, - lllocalcurve2,locallutili, loclhCurve, lochhCurve, + lllocalcurve2,locallutili, + cllocalcurve2, localclutili, + lclocalcurve2, locallcutili, + loclhCurve, lochhCurve, lmasklocalcurve2, localmaskutili, lmaskexplocalcurve2, localmaskexputili, lmaskSHlocalcurve2, localmaskSHutili, @@ -1098,7 +1109,10 @@ void Crop::update(int todo) } } else { parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, lastorigCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve, - lllocalcurve2,locallutili, loclhCurve, lochhCurve, + lllocalcurve2,locallutili, + cllocalcurve2, localclutili, + lclocalcurve2, locallcutili, + loclhCurve, lochhCurve, lmasklocalcurve2, localmaskutili, lmaskexplocalcurve2, localmaskexputili, lmaskSHlocalcurve2, localmaskSHutili, @@ -1125,6 +1139,8 @@ void Crop::update(int todo) lastorigCrop->CopyFrom(labnCrop); lllocalcurve2.clear(); + lclocalcurve2.clear(); + cllocalcurve2.clear(); lightCurveloc2.clear(); rgblocalcurve2.clear(); cclocalcurve2.clear(); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index d7c626b39..30ae2f456 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1006,8 +1006,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve, locwavutili); CurveFactory::curveLocal(locallutili, params->locallab.spots.at(sp).llcurve, lllocalcurve, sca); - CurveFactory::curveLocal(localclutili, params->locallab.spots.at(sp).llcurve, cllocalcurve, sca); - CurveFactory::curveLocal(locallcutili, params->locallab.spots.at(sp).llcurve, lclocalcurve, sca); + CurveFactory::curveLocal(localclutili, params->locallab.spots.at(sp).clcurve, cllocalcurve, sca); + CurveFactory::curveLocal(locallcutili, params->locallab.spots.at(sp).lccurve, lclocalcurve, sca); CurveFactory::curveCCLocal(localcutili, params->locallab.spots.at(sp).cccurve, cclocalcurve, sca); CurveFactory::curveLocal(localrgbutili, params->locallab.spots.at(sp).rgbcurve, rgblocalcurve, sca); CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, sca); @@ -1086,7 +1086,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float Tmax; if (sp == params->locallab.selspot) { - ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, lastorigimp, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, + ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, lastorigimp, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, + lllocalcurve, locallutili, + cllocalcurve, localclutili, + lclocalcurve, locallcutili, + loclhCurve, lochhCurve, lmasklocalcurve, localmaskutili, lmaskexplocalcurve, localmaskexputili, lmaskSHlocalcurve, localmaskSHutili, @@ -1113,7 +1117,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); } } else { - ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, lastorigimp, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, + ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, lastorigimp, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, + lllocalcurve, locallutili, + cllocalcurve, localclutili, + lclocalcurve, locallcutili, + loclhCurve, lochhCurve, lmasklocalcurve, localmaskutili, lmaskexplocalcurve, localmaskexputili, lmaskSHlocalcurve, localmaskSHutili, @@ -1161,6 +1169,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) sobelrefs[sp] = sobeler; */ lllocalcurve.clear(); + lclocalcurve.clear(); + cllocalcurve.clear(); lightCurveloc.clear(); cclocalcurve.clear(); rgblocalcurve.clear(); diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 954969f74..d700fb680 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -271,7 +271,11 @@ public: void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &chromarefblur, double &lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, float &avg); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); - void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, LabImage* lastorig, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, + void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, LabImage* lastorig, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, + LUTf & lllocalcurve, bool & locallutili, + LUTf & cllocalcurve, bool & localclutili, + LUTf & lclocalcurve, bool & locallcutili, + const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmaskexplocalcurve, bool & localmaskexputili, LUTf & lmaskSHlocalcurve, bool & localmaskSHutili, diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index a9be93f3d..2d2ad23d5 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -4393,7 +4393,7 @@ void ImProcFunctions::transit_shapedetect2(int senstype, const LabImage * bufexp transformed->b[y + ystart][x + xstart] = CLIPC(difb); } else if (previewexp || previewvib || previewcol || previewSH || previewtm) {//show deltaE if (fabs(difb) < 500.f) {//if too low to be view use L - difb += 0.5f * diflc; + difb += 0.2f * diflc; } transformed->a[y + ystart][x + xstart] = 0.f; @@ -7764,7 +7764,11 @@ void rgbtone(float& maxval, float& medval, float& minval, LUTf & lutToneCurve) void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, LabImage * lastorig, int cx, int cy, int oW, int oH, int sk, - const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, + const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, + LUTf & lllocalcurve, bool & locallutili, + LUTf & cllocalcurve, bool & localclutili, + LUTf & lclocalcurve, bool & locallcutili, + const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmaskexplocalcurve, bool & localmaskexputili, LUTf & lmaskSHlocalcurve, bool & localmaskSHutili, @@ -12484,7 +12488,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float bufcolcalcb = origptr->b[ir][jr]; float bufcolcalcL = origptr->L[ir][jr]; - if (lp.chro != 0.f) { + if (lp.chro != 0.f) {//slider chroma with curve DCT_NURBS const float Chprov = sqrt(SQR(bufcolcalca) + SQR(bufcolcalcb)); float chp = Chprov; float2 sincosval; @@ -12492,7 +12496,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o sincosval.x = Chprov == 0.0f ? 0.f : bufcolcalcb / Chprov; if (lp.chro > 0.f) { - float buf = LIM01(chp / 35000.f);//35000 must be globaly good + float buf = LIM01(chp / 35000.f);//35000 must be globaly good, more than 32768...anf les than !! to avoid calculation min max buf = color_satur.getVal(buf); buf *= 35000.f; chp = buf; @@ -12509,7 +12513,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufcolcalca = chp * sincosval.y; bufcolcalcb = chp * sincosval.x; - // const float ch = (1.f + 0.01f * lp.chro) ; + // const float ch = (1.f + 0.01f * lp.chro) ;//whithout curve // bufcolcalca *= ch; // bufcolcalcb *= ch; } @@ -12521,25 +12525,44 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufcolcalcb *= ch; } - if (lochhCurve && HHcurve && lp.qualcurvemet != 0 && !ctoning) { + if (cllocalcurve && lp.qualcurvemet != 0 && localclutili) { // C=f(L) curve + float chromaCfactor = (cllocalcurve[bufcolcalcL * 2.f]) / (bufcolcalcL * 2.f); + bufcolcalca *= chromaCfactor; + bufcolcalcb *= chromaCfactor; + } + + if (lclocalcurve && lp.qualcurvemet != 0 && locallcutili) { // L=f(C) curve + const float chromat = sqrt(SQR(bufcolcalca) + SQR(bufcolcalcb)); + float Lc = lclocalcurve[chromat * adjustr] / ((chromat + 0.00001f) * adjustr); + + if (Lc > 1.f) { + Lc = (Lc - 1.0f) * 0.1f + 1.0f; //reduct action + } else { + Lc = (Lc - 1.0f) * 0.3f + 1.0f; + } + + bufcolcalcL *= Lc; + } + + if (lochhCurve && HHcurve && lp.qualcurvemet != 0 && !ctoning) { // H=f(H) const float chromat = sqrt(SQR(bufcolcalca) + SQR(bufcolcalcb)); const float hhforcurv = xatan2f(bufcolcalcb, bufcolcalca); - const float valparam = float ((lochhCurve[500.f * Color::huelab_to_huehsv2(hhforcurv)] - 0.5f)); //get H=f(H) 1.7 optimisation ! + const float valparam = float ((lochhCurve[500.f * Color::huelab_to_huehsv2(hhforcurv)] - 0.5f)); //get H=f(H) float2 sincosval = xsincosf(valparam); bufcolcalca = chromat * sincosval.y; bufcolcalcb = chromat * sincosval.x; } - if (lp.ligh != 0.f || lp.cont != 0) { - calclight(bufcolcalcL, lp.ligh, bufcolcalcL, lightCurveloc); //replace L-curve + if (lp.ligh != 0.f || lp.cont != 0) {//slider luminance or slider contrast with curve + calclight(bufcolcalcL, lp.ligh, bufcolcalcL, lightCurveloc); } - if (lllocalcurve && locallutili && lp.qualcurvemet != 0) {// L=f(L) curve enhanced + if (lllocalcurve && locallutili && lp.qualcurvemet != 0) {// L=f(L) curve bufcolcalcL = 0.5f * lllocalcurve[bufcolcalcL * 2.f]; } - if (loclhCurve && LHutili && lp.qualcurvemet != 0) { + if (loclhCurve && LHutili && lp.qualcurvemet != 0) {//L=f(H) curve const float rhue = xatan2f(bufcolcalcb, bufcolcalca); float l_r = bufcolcalcL / 32768.f; //Luminance Lab in 0..1 const float valparam = loclhCurve[500.f * Color::huelab_to_huehsv2(rhue)] - 0.5f; //get l_r=f(H) @@ -12556,7 +12579,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (ctoning) { + if (ctoning) {//color toning and direct change color if (lp.gridmet == 0) { bufcolcalca += kd * bufcolcalcL * a_scale + a_base; bufcolcalcb += kd * bufcolcalcL * b_scale + b_base; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 6535942d8..5c2a62256 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1117,6 +1117,8 @@ private: LocwavCurve loclmasCurvecolwav; LocwavCurve locwavCurve; LUTf lllocalcurve(65536, 0); + LUTf lclocalcurve(65536, 0); + LUTf cllocalcurve(65536, 0); LUTf cclocalcurve(65536, 0); LUTf rgblocalcurve(65536, 0); LUTf hltonecurveloc(65536, 0); @@ -1149,6 +1151,8 @@ private: bool LHutili = false; bool HHutili = false; bool locallutili = false; + bool localclutili = false; + bool locallcutili = false; bool localcutili = false; bool localrgbutili = false; bool localexutili = false; @@ -1222,6 +1226,8 @@ private: locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili); CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, 1); + CurveFactory::curveLocal(localclutili, params.locallab.spots.at(sp).clcurve, cllocalcurve, 1); + CurveFactory::curveLocal(locallcutili, params.locallab.spots.at(sp).lccurve, lclocalcurve, 1); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1); CurveFactory::curveLocal(localrgbutili, params.locallab.spots.at(sp).rgbcurve, rgblocalcurve, 1); CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 1); @@ -1267,28 +1273,32 @@ private: float Tmax; // No Locallab mask is shown in exported picture - ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, lastorigView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, - lmasklocalcurve, localmaskutili, - lmaskexplocalcurve, localmaskexputili, - lmaskSHlocalcurve, localmaskSHutili, - lmaskviblocalcurve, localmaskvibutili, - lmasktmlocalcurve, localmasktmutili, - lmaskretilocalcurve, localmaskretiutili, - lmaskcblocalcurve, localmaskcbutili, - lmaskbllocalcurve, localmaskblutili, - locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, - locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, - locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili, - locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, - locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, - locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, - locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, - loclmasCurveblwav,lmasutiliblwav, - loclmasCurvecolwav,lmasutilicolwav, - locwavCurve, locwavutili, - 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, - minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, lastorigView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, + lllocalcurve, locallutili, + cllocalcurve, localclutili, + lclocalcurve, locallcutili, + loclhCurve, lochhCurve, + lmasklocalcurve, localmaskutili, + lmaskexplocalcurve, localmaskexputili, + lmaskSHlocalcurve, localmaskSHutili, + lmaskviblocalcurve, localmaskvibutili, + lmasktmlocalcurve, localmasktmutili, + lmaskretilocalcurve, localmaskretiutili, + lmaskcblocalcurve, localmaskcbutili, + lmaskbllocalcurve, localmaskblutili, + locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, + locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, + locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili, + locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, + locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, + locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, + locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, + loclmasCurveblwav,lmasutiliblwav, + loclmasCurvecolwav,lmasutilicolwav, + locwavCurve, locwavutili, + 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, + minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); lastorigView->CopyFrom(labView); @@ -1300,6 +1310,8 @@ private: // Clear local curves lllocalcurve.clear(); + lclocalcurve.clear(); + cllocalcurve.clear(); cclocalcurve.clear(); rgblocalcurve.clear(); exlocalcurve.clear(); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index d84d500a9..400d8c5ed 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -783,6 +783,7 @@ pe(nullptr) if (showtooltip) { clshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } + const std::vector& mclshape = zero_one_shape; llCurveEditorG->curveListComplete(); @@ -796,6 +797,7 @@ pe(nullptr) if (showtooltip) { lcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } + const std::vector& mlcshape = zero_one_shape; lcshape->setResetCurve(DiagonalCurveType(defSpot.lccurve.at(0)), defSpot.lccurve); @@ -1065,19 +1067,22 @@ pe(nullptr) qualcurvbox->pack_start(*labqualcurv, Gtk::PACK_SHRINK, 4); qualcurvbox->pack_start(*qualitycurveMethod); colorBox->pack_start(*qualcurvbox); - colorBox->pack_start(*llCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - //colorBox->pack_start(*clCurveEditorG, Gtk::PACK_SHRINK, 4); + colorBox->pack_start(*llCurveEditorG, Gtk::PACK_SHRINK, 4); if (complexsoft < 2) { - colorBox->pack_start(*HCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + colorBox->pack_start(*clCurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { - colorBox->pack_start(*H2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + colorBox->pack_start(*HCurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { - colorBox->pack_start(*rgbCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + colorBox->pack_start(*H2CurveEditorG, Gtk::PACK_SHRINK, 4); + } + + if (complexsoft < 2) { + colorBox->pack_start(*rgbCurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { @@ -1311,7 +1316,7 @@ pe(nullptr) showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMASK")); - showmaskexpMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); + showmaskexpMethod->append(M("TP_LOCALLAB_SHOWSTRUCEX")); showmaskexpMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskexpMethod->set_active(0); @@ -1401,9 +1406,11 @@ pe(nullptr) ToolParamBlock* const fatBox = Gtk::manage(new ToolParamBlock()); fatBox->pack_start(*fatamount); fatBox->pack_start(*fatdetail); + if (complexsoft < 2) { fatBox->pack_start(*fatlevel); } + fatBox->pack_start(*fatanchor); pdeFrame->add(*pdeBox); fatFrame->add(*fatBox); @@ -1436,11 +1443,13 @@ pe(nullptr) if (complexsoft < 2) { exposeBox->pack_start(*black); } + // if (complexsoft < 2) { - exposeBox->pack_start(*fatFrame); + exposeBox->pack_start(*fatFrame); // } exposeBox->pack_start(*expcomp); + if (complexsoft < 2) { exposeBox->pack_start(*hlcompr); exposeBox->pack_start(*hlcomprthresh); @@ -1448,6 +1457,7 @@ pe(nullptr) exposeBox->pack_start(*shcompr); exposeBox->pack_start(*expchroma); } + exposeBox->pack_start(*warm); exposeBox->pack_start(*sensiex); @@ -1855,6 +1865,7 @@ pe(nullptr) if (complexsoft < 2) { vibranceBox->pack_start(*gradvibFrame, Gtk::PACK_SHRINK, 0); } + enavibMaskConn = enavibMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enavibMaskChanged)); showmaskvibMethod->append(M("TP_LOCALLAB_SHOWMNONE")); @@ -2142,15 +2153,19 @@ pe(nullptr) masktmBox->pack_start(*enatmMaskaft, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*masktmCurveEditorG, Gtk::PACK_SHRINK, 4); masktmBox->pack_start(*blendmasktm, Gtk::PACK_SHRINK, 0); + if (complexsoft < 1) { masktmBox->pack_start(*lapmasktm, Gtk::PACK_SHRINK, 0); } + masktmBox->pack_start(*radmasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*chromasktm, Gtk::PACK_SHRINK, 0); + if (complexsoft < 1) { masktmBox->pack_start(*gammasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*slomasktm, Gtk::PACK_SHRINK, 0); } + masktmBox->pack_start(*mask2tmCurveEditorG, Gtk::PACK_SHRINK, 4); expmasktm->add(*masktmBox, false); @@ -2159,15 +2174,19 @@ pe(nullptr) // tmBox->pack_start(*amount);//to use if we change transit_shapedetect parameters tmBox->pack_start(*stren); tmBox->pack_start(*equiltm); + if (complexsoft < 2) { tmBox->pack_start(*gamma); tmBox->pack_start(*satur); } + tmBox->pack_start(*estop); tmBox->pack_start(*scaltm); + if (complexsoft < 2) { tmBox->pack_start(*rewei); } + // tmBox->pack_start(*softradiustm);//always bad with TM ?? tmBox->pack_start(*sensitm); tmBox->pack_start(*expmasktm); @@ -2176,7 +2195,7 @@ pe(nullptr) exptonemap->setLevel(2); // if (complexsoft < 2) { - panel->pack_start(*exptonemap, false, false); + panel->pack_start(*exptonemap, false, false); // } // Retinex @@ -2596,7 +2615,7 @@ pe(nullptr) // contrastBox->pack_start(*levelwav); // if (complexsoft < 2) { - contrastBox->pack_start(*csThreshold); + contrastBox->pack_start(*csThreshold); // } // if (complexsoft < 2) { @@ -2817,6 +2836,7 @@ pe(nullptr) if (complexsoft < 2) { panel->pack_start(*expcbdl, false, false); } + // Blur & Noise Gtk::HBox* const BLTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const BLLabel = Gtk::manage(new Gtk::Label()); @@ -8197,7 +8217,7 @@ void Locallab::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newT { // Not used } - + void Locallab::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) {