diff --git a/rtdata/languages/default b/rtdata/languages/default index f80329eaa..ce3ff23f3 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -993,6 +993,7 @@ HISTORY_MSG_752;Local - Reti Offset HISTORY_MSG_753;Local - Reti Transmission map HISTORY_MSG_754;Local - Reti Clip HISTORY_MSG_755;Local - TM use tm mask +HISTORY_MSG_756;Local - Exp use algo exposure mask HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2146,6 +2147,7 @@ TP_LOCALLAB_EXCLUTYPE_TOOLTIP;Normal spot use recursive data.\nExcluding spot re TP_LOCALLAB_EXNORM;Normal spot TP_LOCALLAB_EXECLU;Excluding spot TP_LOCALLAB_EXPOSE;Exposure +TP_LOCALLAB_ENABLE_MASKAFT;Use all algorithms Exposure TP_LOCALLAB_EXPOSURE_TOOLTIP;In some cases (strong shadows ..) you can use the module "Shadows Highlights" TP_LOCALLAB_EXPCHROMA;Chroma compensation TP_LOCALLAB_GUIDFILTER;Guided filter radius diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 726350748..442471907 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -2579,7 +2579,7 @@ void maskcalccol(int bfw, int bfh, int xstart, int ystart, int sk, int cx, int c } if (zero || modif || modmask || deltaE || enaMask) { - originalmaskcol->CopyFrom(transformed); + originalmaskcol->CopyFrom(bufcolorig); blendmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig, original, bufmaskblurcol, originalmaskcol, blendm, inv); } } @@ -7573,6 +7573,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o return; } + original->CopyFrom(orimask); } @@ -9773,8 +9774,12 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o std::unique_ptr bufexporig(new LabImage(bfw, bfh)); std::unique_ptr bufexpfin(new LabImage(bfw, bfh)); + std::unique_ptr bufexporigmas(new LabImage(bfw, bfh)); + std::unique_ptr bufexpfinmas(new LabImage(bfw, bfh)); std::unique_ptr bufmaskblurexp; std::unique_ptr originalmaskexp; + LabImage *orimask = nullptr; + orimask = new LabImage(original->W, original->H); array2D buflight(bfw, bfh); @@ -9786,9 +9791,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (call <= 3) { //simpleprocess, dcrop, improccoordinator float meansob = 0.f; - if (lp.showmaskexpmet == 2 || lp.enaExpMask || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 5) { + if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 2 || lp.enaExpMask || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 5) { bufmaskblurexp.reset(new LabImage(bfw, bfh)); originalmaskexp.reset(new LabImage(bfw, bfh)); + orimask->CopyFrom(original); } #ifdef _OPENMP @@ -9798,6 +9804,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o for (int y = ystart; y < yend; y++) { for (int x = xstart; x < xend; x++) { bufexporig->L[y - ystart][x - xstart] = original->L[y][x]; + bufexporigmas->L[y - ystart][x - xstart] = original->L[y][x]; } } @@ -9884,21 +9891,25 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float gamma = lp.gammaexp; float slope = lp.slomaexp; float blendm = lp.blendmaexp; - maskcalccol(bfw, bfh, xstart, ystart, 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.showmaskexpmet == 3) { - showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskblurexp.get(), 0); + if (!params->locallab.spots.at(sp).enaExpMaskaft) { - return; + maskcalccol(bfw, bfh, xstart, ystart, sk, cx, cy, bufexporigmas.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.showmaskexpmet == 3) { + showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskblurexp.get(), 0); + + return; + } } if (lp.showmaskexpmet == 4) { return; } - if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 5 || lp.enaExpMask) { + if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 5 || lp.enaExpMask) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10046,6 +10057,25 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } + bufexpfinmas->CopyFrom(bufexpfin.get()); + + if (params->locallab.spots.at(sp).enaExpMaskaft) { + blendm = -lp.blendmaexp; + + maskcalccol(bfw, bfh, xstart, ystart, sk, cx, cy, bufexpfinmas.get(), bufmaskblurexp.get(), originalmaskexp.get(), orimask, transformed, inv, lp, + locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, gamma, slope, blendm); + + if (lp.showmaskexpmet == 3) { + showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexpfinmas.get(), transformed, bufmaskblurexp.get(), 0); + + return; + } + } + + delete orimask; + + constexpr float ampli = 70.f; const float ch = (1.f + 0.02f * lp.expchroma); const float chprosl = ch <= 1.f ? 99.f * ch - 99.f : CLIPCHRO(ampli * ch - ampli); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 8463001a3..3847e7949 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -782,6 +782,7 @@ enum ProcEventCode { EvlocallabCTtransCurve = 752, Evlocallabcliptm = 753, EvLocallabEnatmMaskaft = 754, + EvLocallabEnaExpMaskaft = 755, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 57925349c..c529034e5 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2479,6 +2479,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : excurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, inversex(false), enaExpMask(false), + enaExpMaskaft(false), CCmaskexpcurve{(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 }, LLmaskexpcurve{(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}, HHmaskexpcurve{(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}, @@ -2598,7 +2599,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : LLmaskreticurve{(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}, HHmaskreticurve{(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}, enaretiMask(false), - enaretiMasktmap(false), + enaretiMasktmap(true), blendmaskreti(0), radmaskreti(10.0), chromaskreti(0.0), @@ -2747,6 +2748,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && excurve == other.excurve && inversex == other.inversex && enaExpMask == other.enaExpMask + && enaExpMaskaft == other.enaExpMaskaft && CCmaskexpcurve == other.CCmaskexpcurve && LLmaskexpcurve == other.LLmaskexpcurve && HHmaskexpcurve == other.HHmaskexpcurve @@ -4001,6 +4003,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).excurve, "Locallab", "ExCurve_" + std::to_string(i), spot.excurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).inversex, "Locallab", "Inversex_" + std::to_string(i), spot.inversex, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enaExpMask, "Locallab", "EnaExpMask_" + std::to_string(i), spot.enaExpMask, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enaExpMaskaft, "Locallab", "EnaExpMaskaft_" + std::to_string(i), spot.enaExpMaskaft, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskexpcurve, "Locallab", "CCmaskexpCurve_" + std::to_string(i), spot.CCmaskexpcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskexpcurve, "Locallab", "LLmaskexpCurve_" + std::to_string(i), spot.LLmaskexpcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskexpcurve, "Locallab", "HHmaskexpCurve_" + std::to_string(i), spot.HHmaskexpcurve, keyFile); @@ -5370,6 +5373,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "ExCurve_" + std::to_string(i), pedited, spot.excurve, spotEdited.excurve); assignFromKeyfile(keyFile, "Locallab", "Inversex_" + std::to_string(i), pedited, spot.inversex, spotEdited.inversex); assignFromKeyfile(keyFile, "Locallab", "EnaExpMask_" + std::to_string(i), pedited, spot.enaExpMask, spotEdited.enaExpMask); + assignFromKeyfile(keyFile, "Locallab", "EnaExpMaskaft_" + std::to_string(i), pedited, spot.enaExpMaskaft, spotEdited.enaExpMaskaft); assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + std::to_string(i), pedited, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); assignFromKeyfile(keyFile, "Locallab", "LLmaskexpCurve_" + std::to_string(i), pedited, spot.LLmaskexpcurve, spotEdited.LLmaskexpcurve); assignFromKeyfile(keyFile, "Locallab", "HHmaskexpCurve_" + std::to_string(i), pedited, spot.HHmaskexpcurve, spotEdited.HHmaskexpcurve); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index f6fe06ee0..9771be5a2 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1028,6 +1028,7 @@ struct LocallabParams { std::vector excurve; bool inversex; bool enaExpMask; + bool enaExpMaskaft; std::vector CCmaskexpcurve; std::vector LLmaskexpcurve; std::vector HHmaskexpcurve; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 4d14b078d..513095fee 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -781,7 +781,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // Evlocallaboffs LUMINANCECURVE, //EvlocallabCTtransCurve LUMINANCECURVE, //Evlocallabcliptm - LUMINANCECURVE //Evlocallabenatmmaskaft + LUMINANCECURVE, //Evlocallabenatmmaskaft + LUMINANCECURVE //EvlocallabenaExpmaskaft }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 8b7f8ed31..b8c35924e 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -339,6 +339,7 @@ Locallab::Locallab(): enaColorMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), // Exposure enaExpMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), + enaExpMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASKAFT")))), inversex(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), //Shadows Highlight enaSHMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), @@ -793,6 +794,7 @@ Locallab::Locallab(): curveEditorG->curveListComplete(); enaExpMaskConn = enaExpMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaExpMaskChanged)); + enaExpMaskaftConn = enaExpMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaExpMaskaftChanged)); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIF")); @@ -906,6 +908,7 @@ Locallab::Locallab(): 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(*enaExpMaskaft, 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); maskexpBox->pack_start(*radmaskexp, Gtk::PACK_SHRINK, 0); @@ -1271,7 +1274,7 @@ Locallab::Locallab(): ToolParamBlock* const masktmBox = Gtk::manage(new ToolParamBlock()); masktmBox->pack_start(*showmasktmMethod, Gtk::PACK_SHRINK, 4); masktmBox->pack_start(*enatmMask, Gtk::PACK_SHRINK, 0); - masktmBox->pack_start(*enatmMaskaft, Gtk::PACK_SHRINK, 0); +// masktmBox->pack_start(*enatmMaskaft, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*masktmCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor masktmBox->pack_start(*blendmasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*radmasktm, Gtk::PACK_SHRINK, 0); @@ -3019,6 +3022,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).excurve = shapeexpos->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).inversex = inversex->get_active(); pp->locallab.spots.at(pp->locallab.selspot).enaExpMask = enaExpMask->get_active(); + pp->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft = enaExpMaskaft->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = LLmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = CCmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = HHmaskexpshape->getCurve(); @@ -3356,6 +3360,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).excurve = pe->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).inversex = pe->locallab.spots.at(pp->locallab.selspot).inversex || !inversex->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).enaExpMask = pe->locallab.spots.at(pp->locallab.selspot).enaExpMask || !enaExpMask->get_inconsistent(); + pe->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft = pe->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft || !enaExpMaskaft->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); @@ -3628,6 +3633,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).excurve = pedited->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).inversex = pedited->locallab.spots.at(pp->locallab.selspot).inversex || !inversex->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enaExpMask = pedited->locallab.spots.at(pp->locallab.selspot).enaExpMask || !enaExpMask->get_inconsistent(); + pedited->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft = pedited->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft || !enaExpMaskaft->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); @@ -4685,6 +4691,30 @@ void Locallab::enaExpMaskChanged() } } +void Locallab::enaExpMaskaftChanged() +{ + // printf("enaExpMaskChanged\n"); + + if (multiImage) { + if (enaExpMaskaft->get_inconsistent()) { + enaExpMaskaft->set_inconsistent(false); + enaExpMaskaftConn.block(true); + enaExpMaskaft->set_active(false); + enaExpMaskaftConn.block(false); + } + } + + if (getEnabled() && expexpose->getEnabled()) { + if (listener) { + if (enaExpMaskaft->get_active()) { + listener->panelChanged(EvLocallabEnaExpMaskaft, M("GENERAL_ENABLED")); + } else { + listener->panelChanged(EvLocallabEnaExpMaskaft, M("GENERAL_DISABLED")); + } + } + } +} + void Locallab::enaSHMaskChanged() { // printf("enaSHMaskChanged\n"); @@ -7293,6 +7323,7 @@ void Locallab::enableListener() expMethodConn.block(false); exnoiseMethodConn.block(false); enaExpMaskConn.block(false); + enaExpMaskaftConn.block(false); // Shadow highlight enableshadhighConn.block(false); showmaskSHMethodConn.block(false); @@ -7370,6 +7401,7 @@ void Locallab::disableListener() expMethodConn.block(true); exnoiseMethodConn.block(true); enaExpMaskConn.block(true); + enaExpMaskaftConn.block(true); // Shadow highlight enableshadhighConn.block(true); showmaskSHMethodConn.block(true); @@ -7501,6 +7533,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shapeexpos->setCurve(pp->locallab.spots.at(index).excurve); inversex->set_active(pp->locallab.spots.at(index).inversex); enaExpMask->set_active(pp->locallab.spots.at(index).enaExpMask); + enaExpMaskaft->set_active(pp->locallab.spots.at(index).enaExpMaskaft); CCmaskexpshape->setCurve(pp->locallab.spots.at(index).CCmaskexpcurve); LLmaskexpshape->setCurve(pp->locallab.spots.at(index).LLmaskexpcurve); HHmaskexpshape->setCurve(pp->locallab.spots.at(index).HHmaskexpcurve); @@ -7862,6 +7895,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shapeexpos->setUnChanged(!spotState->excurve); inversex->set_inconsistent(multiImage && !spotState->inversex); enaExpMask->set_inconsistent(multiImage && !spotState->enaExpMask); + enaExpMaskaft->set_inconsistent(multiImage && !spotState->enaExpMaskaft); CCmaskexpshape->setUnChanged(!spotState->CCmaskexpcurve); LLmaskexpshape->setUnChanged(!spotState->LLmaskexpcurve); HHmaskexpshape->setUnChanged(!spotState->HHmaskexpcurve); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index bca79068d..f10e1635c 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -294,6 +294,8 @@ private: // Exposure Gtk::CheckButton* const enaExpMask; sigc::connection enaExpMaskConn; + Gtk::CheckButton* const enaExpMaskaft; + sigc::connection enaExpMaskaftConn; Gtk::CheckButton* const inversex; sigc::connection inversexConn; //Shadows highlight @@ -459,6 +461,7 @@ private: void enaColorMaskChanged(); // Exposure void enaExpMaskChanged(); + void enaExpMaskaftChanged(); void inversexChanged(); //Shadows Highlight void enaSHMaskChanged(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index eac45a210..75379c635 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1020,6 +1020,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).excurve = locallab.spots.at(j).excurve && pSpot.excurve == otherSpot.excurve; locallab.spots.at(j).inversex = locallab.spots.at(j).inversex && pSpot.inversex == otherSpot.inversex; locallab.spots.at(j).enaExpMask = locallab.spots.at(j).enaExpMask && pSpot.enaExpMask == otherSpot.enaExpMask; + locallab.spots.at(j).enaExpMaskaft = locallab.spots.at(j).enaExpMaskaft && pSpot.enaExpMaskaft == otherSpot.enaExpMaskaft; locallab.spots.at(j).CCmaskexpcurve = locallab.spots.at(j).CCmaskexpcurve && pSpot.CCmaskexpcurve == otherSpot.CCmaskexpcurve; locallab.spots.at(j).LLmaskexpcurve = locallab.spots.at(j).LLmaskexpcurve && pSpot.LLmaskexpcurve == otherSpot.LLmaskexpcurve; locallab.spots.at(j).HHmaskexpcurve = locallab.spots.at(j).HHmaskexpcurve && pSpot.HHmaskexpcurve == otherSpot.HHmaskexpcurve; @@ -2948,6 +2949,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).enaExpMask = mods.locallab.spots.at(i).enaExpMask; } + if (locallab.spots.at(i).enaExpMaskaft) { + toEdit.locallab.spots.at(i).enaExpMaskaft = mods.locallab.spots.at(i).enaExpMaskaft; + } + if (locallab.spots.at(i).CCmaskexpcurve) { toEdit.locallab.spots.at(i).CCmaskexpcurve = mods.locallab.spots.at(i).CCmaskexpcurve; } @@ -4718,6 +4723,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : excurve(v), inversex(v), enaExpMask(v), + enaExpMaskaft(v), CCmaskexpcurve(v), LLmaskexpcurve(v), HHmaskexpcurve(v), @@ -4983,6 +4989,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) excurve = v; inversex = v; enaExpMask = v; + enaExpMaskaft = v; CCmaskexpcurve = v; LLmaskexpcurve = v; HHmaskexpcurve = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 80026b749..34877c8f2 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -438,6 +438,7 @@ public: bool excurve; bool inversex; bool enaExpMask; + bool enaExpMaskaft; bool CCmaskexpcurve; bool LLmaskexpcurve; bool HHmaskexpcurve;