diff --git a/rtdata/languages/default b/rtdata/languages/default index 9a7a22801..25565c394 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1060,8 +1060,10 @@ HISTORY_MSG_820;Local - Vib mask contrast curve HISTORY_MSG_821;Local - color grid background HISTORY_MSG_822;Local - color background merge HISTORY_MSG_823;Local - color background luminance -HISTORY_MSG_824;Local - Exp gradient strength -HISTORY_MSG_825;Local - Exp gradient angle +HISTORY_MSG_824;Local - Exp gradient mask strength +HISTORY_MSG_825;Local - Exp gradient mask angle +HISTORY_MSG_826;Local - Exp gradient strength +HISTORY_MSG_827;Local - Exp gradient angle HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2290,6 +2292,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_GRADFRA;Graduated Filter 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 diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index dab4150f7..8173c556c 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -212,6 +212,8 @@ struct local_params { float slomaexp; float strmaexp; float angmaexp; + float strexp; + float angexp; float softradiusexp; float softradiuscol; float softradiuscb; @@ -734,6 +736,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float slomaskexpo = ((float) locallab.spots.at(sp).slomaskexp); float strmaskexpo = ((float) locallab.spots.at(sp).strmaskexp); float angmaskexpo = ((float) locallab.spots.at(sp).angmaskexp); + float strexpo = ((float) locallab.spots.at(sp).strexp); + float angexpo = ((float) locallab.spots.at(sp).angexp); float softradiusexpo = ((float) locallab.spots.at(sp).softradiusexp); float softradiuscolor = ((float) locallab.spots.at(sp).softradiuscol); float softradiusreti = ((float) locallab.spots.at(sp).softradiusret); @@ -839,6 +843,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.slomaexp = slomaskexpo; lp.strmaexp = strmaskexpo; lp.angmaexp = angmaskexpo; + lp.strexp = strexpo; + lp.angexp = angexpo; lp.softradiusexp = softradiusexpo; lp.softradiuscol = softradiuscolor; lp.softradiusret = softradiusreti; @@ -2571,16 +2577,26 @@ struct grad_params { int h; }; -void calcGradientParams (int oW, int oH, const struct local_params& lp, struct grad_params& gp, float ystart, float xstart, int bfw, int bfh) +void calcGradientParams (int oW, int oH, const struct local_params& lp, struct grad_params& gp, float ystart, float xstart, int bfw, int bfh, int indic) { int w = oW; int h = oH; - double gradient_stops = lp.strmaexp; + float stops = 0.f; + float angs = 0.f; + + if(indic == 0) { + stops = lp.strmaexp; + angs = lp.angmaexp; + } else if (indic == 1) { + stops = -lp.strexp; + angs = lp.angexp; + } + double gradient_stops = stops; double gradient_span = 1.f; //gradient.feather / 100.0 not used because we have transition and others gradients double gradient_center_x = LIM01((lp.xc - xstart) / bfw); double gradient_center_y = LIM01((lp.yc - ystart) / bfh); - double gradient_angle = lp.angmaexp / 180.0 * rtengine::RT_PI; + double gradient_angle = angs / 180.0 * rtengine::RT_PI; // printf("xstart=%f ysta=%f lpxc=%f lpyc=%f aa=%f bb=%f cc=%f dd=%f ee=%f ff=%d gg=%d\n", xstart, ystart, lp.xc, lp.yc, gradient_stops, gradient_span, gradient_center_x, gradient_center_y, gradient_angle, w, h); @@ -3758,7 +3774,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int struct grad_params gp; if (lp.strmaexp != 0.f) { - calcGradientParams (bfw, bfh, lp, gp, ystart, xstart, bfw, bfh); + calcGradientParams (bfw, bfh, lp, gp, ystart, xstart, bfw, bfh, 0); for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { double factor = 1.0; @@ -3766,7 +3782,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int bufmaskblurcol->L[ir][jr] *= factor; } } - + if (lap > 0.f) { float *datain = new float[bfh * bfw]; @@ -11540,7 +11556,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o enablefat = true; } - bool execex = (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.laplacexp > 0.1f || enablefat || lp.showmaskexpmet == 2 || lp.enaExpMask || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5 || (exlocalcurve && localexutili))); + bool execex = (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.laplacexp > 0.1f || lp.strexp > 0.f || enablefat || lp.showmaskexpmet == 2 || lp.enaExpMask || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5 || (exlocalcurve && localexutili))); if (!lp.invex && execex) { int ystart = std::max(static_cast(lp.yc - lp.lyT) - cy, 0); @@ -11811,6 +11827,20 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexporig.get(), bufexpfin.get(), hltonecurveloc, shtonecurveloc, tonecurveloc, meanorig); } +//gradient + struct grad_params gp; + + if (lp.strexp != 0.f) { + calcGradientParams (bfw, bfh, lp, gp, ystart, xstart, bfw, bfh, 1); + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + double factor = 1.0; + factor = calcGradientFactor (gp, jr, ir); + bufexpfin->L[ir][jr] *= factor; + } + } + + //exposure_pde if (lp.expmet == 1) { diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 12418800a..b8f5de78d 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -849,6 +849,8 @@ enum ProcEventCode { Evlocallabmerlucol = 822, Evlocallabstrmaskexp = 823, Evlocallabangmaskexp = 824, + Evlocallabstrexp = 825, + Evlocallabangexp = 826, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 14b3c7427..f51b162a3 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2511,6 +2511,8 @@ LocallabParams::LocallabSpot::LocallabSpot() : sensiex(15), structexp(0), blurexpde(5), + strexp(0.), + angexp(0.), excurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, inversex(false), enaExpMask(false), @@ -2852,6 +2854,8 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && sensiex == other.sensiex && structexp == other.structexp && blurexpde == other.blurexpde + && strexp == other.strexp + && angexp == other.angexp && excurve == other.excurve && inversex == other.inversex && enaExpMask == other.enaExpMask @@ -4188,6 +4192,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensiex, "Locallab", "Sensiex_" + std::to_string(i), spot.sensiex, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structexp, "Locallab", "Structexp_" + std::to_string(i), spot.structexp, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blurexpde, "Locallab", "Blurexpde_" + std::to_string(i), spot.blurexpde, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strexp, "Locallab", "Strexp_" + std::to_string(i), spot.strexp, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).angexp, "Locallab", "Angexp_" + std::to_string(i), spot.angexp, keyFile); 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); @@ -5643,6 +5649,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Sensiex_" + std::to_string(i), pedited, spot.sensiex, spotEdited.sensiex); assignFromKeyfile(keyFile, "Locallab", "Structexp_" + std::to_string(i), pedited, spot.structexp, spotEdited.structexp); assignFromKeyfile(keyFile, "Locallab", "Blurexpde_" + std::to_string(i), pedited, spot.blurexpde, spotEdited.blurexpde); + assignFromKeyfile(keyFile, "Locallab", "Strexp_" + std::to_string(i), pedited, spot.strexp, spotEdited.strexp); + assignFromKeyfile(keyFile, "Locallab", "Angexp_" + std::to_string(i), pedited, spot.angexp, spotEdited.angexp); 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); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 9ca3dd5b1..3921dede1 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1054,6 +1054,8 @@ struct LocallabParams { int sensiex; int structexp; int blurexpde; + double strexp; + double angexp; std::vector excurve; bool inversex; bool enaExpMask; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 677063d13..8d5c22239 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -852,7 +852,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvLocallabmercol LUMINANCECURVE, //EvLocallabmerlucol LUMINANCECURVE, //Evlocallabstrmaskexp - LUMINANCECURVE //Evlocallabangmaskexp + LUMINANCECURVE, //Evlocallabangmaskexp + LUMINANCECURVE, // Evlocallabstrexp + LUMINANCECURVE // Evlocallabangexp }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 077799184..ccdf1639a 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -291,6 +291,8 @@ Locallab::Locallab(): sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), + strexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))), + angexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))), blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), chromaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), @@ -589,6 +591,7 @@ mergecolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGECOLFRA")))), merge1colFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGE1COLFRA")))), pdeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_PDEFRA")))), fatFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_FATFRA")))), +gradFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADFRA")))), fatSHFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_FATSHFRA")))), gamFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GAMFRA")))), dehaFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DEHAFRA")))), @@ -1120,6 +1123,8 @@ pe(nullptr) structexp->setAdjusterListener(this); blurexpde->setAdjusterListener(this); + strexp->setAdjusterListener(this); + angexp->setAdjusterListener(this); blendmaskexp->setAdjusterListener(this); radmaskexp->setAdjusterListener(this); @@ -1258,10 +1263,15 @@ pe(nullptr) fatBox->pack_start(*fatdetail); fatBox->pack_start(*fatlevel); fatBox->pack_start(*fatanchor); - pdeFrame->add(*pdeBox); fatFrame->add(*fatBox); + gradFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const gradBox = Gtk::manage(new ToolParamBlock()); + gradBox->pack_start(*strexp); + gradBox->pack_start(*angexp); + gradFrame->add(*gradBox); + ToolParamBlock* const exposeBox = Gtk::manage(new ToolParamBlock()); exposeBox->pack_start(*expMethod); exposeBox->pack_start(*pdeFrame); @@ -1277,6 +1287,8 @@ pe(nullptr) exposeBox->pack_start(*sensiex); exposeBox->pack_start(*structexp); exposeBox->pack_start(*blurexpde); + exposeBox->pack_start(*gradFrame); + exposeBox->pack_start(*softradiusexp); exposeBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor exposeBox->pack_start(*inversex); @@ -3946,6 +3958,8 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pp->locallab.spots.at(pp->locallab.selspot).sensiex = sensiex->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).structexp = structexp->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).blurexpde = blurexpde->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).strexp = strexp->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).angexp = angexp->getValue(); 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(); @@ -4362,6 +4376,8 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pe->locallab.spots.at(pp->locallab.selspot).sensiex = pe->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).structexp = pe->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blurexpde = pe->locallab.spots.at(pp->locallab.selspot).blurexpde || blurexpde->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).strexp = pe->locallab.spots.at(pp->locallab.selspot).strexp || strexp->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).angexp = pe->locallab.spots.at(pp->locallab.selspot).angexp || angexp->getEditedState(); 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(); @@ -4708,6 +4724,8 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pedited->locallab.spots.at(pp->locallab.selspot).sensiex = pedited->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).structexp = pedited->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blurexpde = pedited->locallab.spots.at(pp->locallab.selspot).blurexpde || blurexpde->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).strexp = pedited->locallab.spots.at(pp->locallab.selspot).strexp || strexp->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).angexp = pedited->locallab.spots.at(pp->locallab.selspot).angexp || angexp->getEditedState(); 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(); @@ -7022,6 +7040,8 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c sensiex->setDefault((double)defSpot->sensiex); structexp->setDefault((double)defSpot->structexp); blurexpde->setDefault((double)defSpot->blurexpde); + strexp->setDefault((double)defSpot->strexp); + angexp->setDefault((double)defSpot->angexp); blendmaskexp->setDefault((double)defSpot->blendmaskexp); radmaskexp->setDefault(defSpot->radmaskexp); chromaskexp->setDefault(defSpot->chromaskexp); @@ -7229,6 +7249,8 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c sensiex->setDefaultEditedState(Irrelevant); structexp->setDefaultEditedState(Irrelevant); blurexpde->setDefaultEditedState(Irrelevant); + strexp->setDefaultEditedState(Irrelevant); + angexp->setDefaultEditedState(Irrelevant); blendmaskexp->setDefaultEditedState(Irrelevant); radmaskexp->setDefaultEditedState(Irrelevant); chromaskexp->setDefaultEditedState(Irrelevant); @@ -7440,6 +7462,8 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c sensiex->setDefaultEditedState(defSpotState->sensiex ? Edited : UnEdited); structexp->setDefaultEditedState(defSpotState->structexp ? Edited : UnEdited); blurexpde->setDefaultEditedState(defSpotState->blurexpde ? Edited : UnEdited); + strexp->setDefaultEditedState(defSpotState->strexp ? Edited : UnEdited); + angexp->setDefaultEditedState(defSpotState->angexp ? Edited : UnEdited); blendmaskexp->setDefaultEditedState(defSpotState->blendmaskexp ? Edited : UnEdited); radmaskexp->setDefaultEditedState(defSpotState->radmaskexp ? Edited : UnEdited); chromaskexp->setDefaultEditedState(defSpotState->chromaskexp ? Edited : UnEdited); @@ -7878,6 +7902,18 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == strexp) { + if (listener) { + listener->panelChanged(Evlocallabstrexp, strexp->getTextValue()); + } + } + + if (a == angexp) { + if (listener) { + listener->panelChanged(Evlocallabangexp, angexp->getTextValue()); + } + } + if (a == blendmaskexp) { if (listener) { listener->panelChanged(Evlocallabblendmaskexp, blendmaskexp->getTextValue()); @@ -8896,6 +8932,8 @@ void Locallab::setBatchMode(bool batchMode) sensiex->showEditedCB(); structexp->showEditedCB(); blurexpde->showEditedCB(); + strexp->showEditedCB(); + angexp->showEditedCB(); blendmaskexp->showEditedCB(); radmaskexp->showEditedCB(); chromaskexp->showEditedCB(); @@ -9560,6 +9598,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con sensiex->setValue(pp->locallab.spots.at(index).sensiex); structexp->setValue(pp->locallab.spots.at(index).structexp); blurexpde->setValue(pp->locallab.spots.at(index).blurexpde); + strexp->setValue(pp->locallab.spots.at(index).strexp); + angexp->setValue(pp->locallab.spots.at(index).angexp); 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); @@ -10009,6 +10049,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con sensiex->setEditedState(spotState->sensiex ? Edited : UnEdited); structexp->setEditedState(spotState->structexp ? Edited : UnEdited); blurexpde->setEditedState(spotState->blurexpde ? Edited : UnEdited); + strexp->setEditedState(spotState->strexp ? Edited : UnEdited); + angexp->setEditedState(spotState->angexp ? Edited : UnEdited); shapeexpos->setUnChanged(!spotState->excurve); inversex->set_inconsistent(multiImage && !spotState->inversex); enaExpMask->set_inconsistent(multiImage && !spotState->enaExpMask); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index bb70ce8ba..138cbba95 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -194,6 +194,8 @@ private: Adjuster* const sensiex; Adjuster* const structexp; Adjuster* const blurexpde; + Adjuster* const strexp; + Adjuster* const angexp; Adjuster* const blendmaskexp; Adjuster* const radmaskexp; Adjuster* const chromaskexp; @@ -509,6 +511,7 @@ private: Gtk::Frame* const merge1colFrame; Gtk::Frame* const pdeFrame; Gtk::Frame* const fatFrame; + Gtk::Frame* const gradFrame; Gtk::Frame* const fatSHFrame; Gtk::Frame* const gamFrame; Gtk::Frame* const dehaFrame; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 4dd3fcabf..2cdebb66e 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1046,6 +1046,8 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).sensiex = locallab.spots.at(j).sensiex && pSpot.sensiex == otherSpot.sensiex; locallab.spots.at(j).structexp = locallab.spots.at(j).structexp && pSpot.structexp == otherSpot.structexp; locallab.spots.at(j).blurexpde = locallab.spots.at(j).blurexpde && pSpot.blurexpde == otherSpot.blurexpde; + locallab.spots.at(j).strexp = locallab.spots.at(j).strexp && pSpot.strexp == otherSpot.strexp; + locallab.spots.at(j).angexp = locallab.spots.at(j).angexp && pSpot.angexp == otherSpot.angexp; 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; @@ -3126,6 +3128,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).blurexpde = mods.locallab.spots.at(i).blurexpde; } + if (locallab.spots.at(i).strexp) { + toEdit.locallab.spots.at(i).strexp = mods.locallab.spots.at(i).strexp; + } + + if (locallab.spots.at(i).angexp) { + toEdit.locallab.spots.at(i).angexp = mods.locallab.spots.at(i).angexp; + } + if (locallab.spots.at(i).excurve) { toEdit.locallab.spots.at(i).excurve = mods.locallab.spots.at(i).excurve; } @@ -5114,6 +5124,8 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : sensiex(v), structexp(v), blurexpde(v), + strexp(v), + angexp(v), excurve(v), inversex(v), enaExpMask(v), @@ -5452,6 +5464,8 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) sensiex = v; structexp = v; blurexpde = v; + strexp = v; + angexp = v; excurve = v; inversex = v; enaExpMask = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 9e7f91e3e..2b2bab17b 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -480,6 +480,8 @@ public: bool sensiex; bool structexp; bool blurexpde; + bool strexp; + bool angexp; bool excurve; bool inversex; bool enaExpMask;