diff --git a/rtdata/languages/default b/rtdata/languages/default index 0d0c2bd70..b06a37d37 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1044,6 +1044,7 @@ HISTORY_MSG_803;Local - Color Merge HISTORY_MSG_804;Local - Color mask Structure HISTORY_MSG_805;Local - Blur Noise mask Structure HISTORY_MSG_806;Local - Color mask Structure as tool +HISTORY_MSG_807;Local - Blur Noise mask Structure as tool HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 32fa04a94..d0d921504 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -3355,7 +3355,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int for (int ir = 0; ir < bfh; ir++) { for (int jr = 0; jr < bfw; jr++) { - bufmaskblurcol->L[ir][jr] *= blendstru[ir][jr]; + bufmaskblurcol->L[ir][jr] *= (1.f + blendstru[ir][jr]); } } @@ -7623,8 +7623,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bool blurz = false; bool delt = params->locallab.spots.at(sp).deltae; + bool astool = params->locallab.spots.at(sp).toolbl; - if (((radius > 1.5 * GAUSS_SKIP) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 1 || lp.showmaskblmet == 2 || delt || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) { + if (((radius > 1.5 * GAUSS_SKIP) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 1 || lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) { blurz = true; } @@ -7662,10 +7663,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufgb->b[y][x] = original->b[y][x]; } } + float strumask = 0.02f * (float) params->locallab.spots.at(sp).strumaskbl; + JaggedArray blendstru(GW, GH); if (lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) { - JaggedArray blendstru(GW, GH); - float strumask = 0.02f * (float) params->locallab.spots.at(sp).strumaskbl; if(strumask > 0.f){ float delstrumask = 4.1f - strumask;//4.1 = 2 * max slider strumask + 0.1 @@ -7689,7 +7690,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float kmaskCH = 0; float kmasstru = 0.f; - if(strumask > 0.f){ + if(strumask > 0.f && !astool){ kmasstru = bufgb->L[ir][jr]* blendstru[ir][jr]; } @@ -7762,6 +7763,19 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } + if(strumask > 0.f && astool && (lp.enablMask || lp.showmaskblmet == 3)){ + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int ir = 0; ir < GH; ir++) { + for (int jr = 0; jr < GW; jr++) { + bufmaskblurbl->L[ir][jr] *= (1.f + blendstru[ir][jr]); + } + } + + } if (lmaskbllocalcurve && localmaskblutili) { #ifdef _OPENMP diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 8f4fef99b..bc95e723b 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -830,6 +830,7 @@ enum ProcEventCode { Evlocallabstrumaskcol = 803, Evlocallabstrumaskbl = 804, EvLocallabtoolcol = 805, + Evlocallabtoolbl = 806, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 37b076d72..cb1cbb02a 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2590,6 +2590,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : HHmaskblcurve{(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}, enablMask(false), fftwbl(false), + toolbl(false), blendmaskbl(0), radmaskbl(0.0), chromaskbl(0.0), @@ -2919,6 +2920,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && HHmaskblcurve == other.HHmaskblcurve && enablMask == other.enablMask && fftwbl == other.fftwbl + && toolbl == other.toolbl && blendmaskbl == other.blendmaskbl && radmaskbl == other.radmaskbl && chromaskbl == other.chromaskbl @@ -4227,6 +4229,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskblcurve, "Locallab", "HHmaskblCurve_" + std::to_string(i), spot.HHmaskblcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enablMask, "Locallab", "EnablMask_" + std::to_string(i), spot.enablMask, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fftwbl, "Locallab", "Fftwbl_" + std::to_string(i), spot.fftwbl, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).toolbl, "Locallab", "Toolbl_" + std::to_string(i), spot.toolbl, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskbl, "Locallab", "Blendmaskbl_" + std::to_string(i), spot.blendmaskbl, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radmaskbl, "Locallab", "Radmaskbl_" + std::to_string(i), spot.radmaskbl, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromaskbl, "Locallab", "Chromaskbl_" + std::to_string(i), spot.chromaskbl, keyFile); @@ -5672,6 +5675,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "HHmaskblCurve_" + std::to_string(i), pedited, spot.HHmaskblcurve, spotEdited.HHmaskblcurve); assignFromKeyfile(keyFile, "Locallab", "EnablMask_" + std::to_string(i), pedited, spot.enablMask, spotEdited.enablMask); assignFromKeyfile(keyFile, "Locallab", "Fftwbl_" + std::to_string(i), pedited, spot.fftwbl, spotEdited.fftwbl); + assignFromKeyfile(keyFile, "Locallab", "Toolbl_" + std::to_string(i), pedited, spot.toolbl, spotEdited.toolbl); assignFromKeyfile(keyFile, "Locallab", "Blendmaskbl_" + std::to_string(i), pedited, spot.blendmaskbl, spotEdited.blendmaskbl); assignFromKeyfile(keyFile, "Locallab", "Radmaskbl_" + std::to_string(i), pedited, spot.radmaskbl, spotEdited.radmaskbl); assignFromKeyfile(keyFile, "Locallab", "Chromaskbl_" + std::to_string(i), pedited, spot.chromaskbl, spotEdited.chromaskbl); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index a24698126..0e4bf97c4 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1135,6 +1135,7 @@ struct LocallabParams { std::vector HHmaskblcurve; bool enablMask; bool fftwbl; + bool toolbl; int blendmaskbl; double radmaskbl; double chromaskbl; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index b97ff3058..2253992af 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -833,7 +833,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvLocallabmerMethod LUMINANCECURVE, //EvLocallabstrumaskcol LUMINANCECURVE, //EvLocallabstrumaskbl - LUMINANCECURVE // EvLocallabtoolcol + LUMINANCECURVE, // EvLocallabtoolcol + LUMINANCECURVE //Evlocallabtoolbl }; namespace rtengine diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index a4a2d5d04..a3a233627 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -3,6 +3,7 @@ * * Copyright (c) 2004-2010 Gabor Horvath frame * + *F * * RawTherapee is free software: you can redistribute it and/or modify * RawTherapee is free software: you can redistribute it and/or modify @@ -488,6 +489,7 @@ pastSatTog(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PASTSATTOG")))), activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))), enablMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), fftwbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW2")))), +toolbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), //TM equiltm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), enatmMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), @@ -558,6 +560,7 @@ lumaneutralButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL" lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))), gridFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRID")))), toolcolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))), +toolblFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))), 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")))), @@ -2288,6 +2291,7 @@ pe(nullptr) expblur->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expblur)); enableblurConn = expblur->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expblur)); fftwblConn = fftwbl->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::fftwblChanged)); + toolblConn = toolbl->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::toolblChanged)); blMethod->append(M("TP_LOCALLAB_BLUR")); blMethod->append(M("TP_LOCALLAB_BLMED")); @@ -2445,23 +2449,28 @@ pe(nullptr) strumaskbl->setAdjusterListener(this); Gtk::HSeparator* const separatorstrubl = Gtk::manage(new Gtk::HSeparator()); + toolblFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const toolblBox = Gtk::manage(new ToolParamBlock()); + ToolParamBlock* const maskblBox = Gtk::manage(new ToolParamBlock()); maskblBox->pack_start(*showmaskblMethod, Gtk::PACK_SHRINK, 4); maskblBox->pack_start(*enablMask, Gtk::PACK_SHRINK, 0); maskblBox->pack_start(*maskblCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskblBox->pack_start(*strumaskbl, Gtk::PACK_SHRINK, 0); + maskblBox->pack_start(*toolbl, Gtk::PACK_SHRINK, 0); maskblBox->pack_start(*separatorstrubl, Gtk::PACK_SHRINK, 2); maskblBox->pack_start(*blendmaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*radmaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*lapmaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*shadmaskbl, Gtk::PACK_SHRINK, 0); - maskblBox->pack_start(*mask2blCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - maskblBox->pack_start(*mask2blCurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - maskblBox->pack_start(*csThresholdblur, Gtk::PACK_SHRINK, 0); - + toolblBox->pack_start(*radmaskbl, Gtk::PACK_SHRINK, 0); + toolblBox->pack_start(*lapmaskbl, Gtk::PACK_SHRINK, 0); + toolblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0); + toolblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0); + toolblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0); + toolblBox->pack_start(*shadmaskbl, Gtk::PACK_SHRINK, 0); + toolblBox->pack_start(*mask2blCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + toolblBox->pack_start(*mask2blCurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + toolblBox->pack_start(*csThresholdblur, Gtk::PACK_SHRINK, 0); + toolblFrame->add(*toolblBox); + maskblBox->pack_start(*toolblFrame); expmaskbl->add(*maskblBox, false); panel->pack_start(*expmaskbl); @@ -3894,6 +3903,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pp->locallab.spots.at(pp->locallab.selspot).shadmaskbl = shadmaskbl->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).strumaskbl = strumaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fftwbl = fftwbl->get_active(); + pp->locallab.spots.at(pp->locallab.selspot).toolbl = toolbl->get_active(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = Lmaskblshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav = LLmaskblshapewav->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).csthresholdblur = csThresholdblur->getValue(); @@ -4236,6 +4246,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pe->locallab.spots.at(pp->locallab.selspot).shadmaskbl = pe->locallab.spots.at(pp->locallab.selspot).shadmaskbl || shadmaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strumaskbl = pe->locallab.spots.at(pp->locallab.selspot).strumaskbl || strumaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fftwbl = pe->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent(); + pe->locallab.spots.at(pp->locallab.selspot).toolbl = pe->locallab.spots.at(pp->locallab.selspot).toolbl || !toolbl->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav = pe->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav || !LLmaskblshapewav->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).csthresholdblur = pe->locallab.spots.at(pp->locallab.selspot).csthresholdblur || csThresholdblur->getEditedState(); @@ -4565,6 +4576,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pedited->locallab.spots.at(pp->locallab.selspot).shadmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).shadmaskbl || shadmaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strumaskbl = pedited->locallab.spots.at(pp->locallab.selspot).strumaskbl || strumaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fftwbl = pedited->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent(); + pedited->locallab.spots.at(pp->locallab.selspot).toolbl = pedited->locallab.spots.at(pp->locallab.selspot).toolbl || !toolbl->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav || !LLmaskblshapewav->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).csthresholdblur = pedited->locallab.spots.at(pp->locallab.selspot).csthresholdblur || csThresholdblur->getEditedState(); @@ -5864,6 +5876,30 @@ void Locallab::fftwblChanged() } } +void Locallab::toolblChanged() +{ + // printf("fftwblChanged\n"); + + if (multiImage) { + if (toolbl->get_inconsistent()) { + toolbl->set_inconsistent(false); + toolblConn.block(true); + toolbl->set_active(false); + toolblConn.block(false); + } + } + + if (getEnabled() && expblur->getEnabled()) { + if (listener) { + if (toolbl->get_active()) { + listener->panelChanged(Evlocallabtoolbl, M("GENERAL_ENABLED")); + } else { + listener->panelChanged(Evlocallabtoolbl, M("GENERAL_DISABLED")); + } + } + } +} + void Locallab::enatmMaskChanged() { @@ -8754,6 +8790,7 @@ void Locallab::enableListener() activlumConn.block(false); enablMaskConn.block(false); fftwblConn.block(false); + toolblConn.block(false); showmaskblMethodConn.block(false); // Tone Mapping enabletonemapConn.block(false); @@ -8839,6 +8876,7 @@ void Locallab::disableListener() activlumConn.block(true); enablMaskConn.block(true); fftwblConn.block(true); + toolblConn.block(true); showmaskblMethodConn.block(true); // Tone Mapping enabletonemapConn.block(true); @@ -9165,6 +9203,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shadmaskbl->setValue(pp->locallab.spots.at(index).shadmaskbl); strumaskbl->setValue(pp->locallab.spots.at(index).strumaskbl); fftwbl->set_active(pp->locallab.spots.at(index).fftwbl); + toolbl->set_active(pp->locallab.spots.at(index).toolbl); Lmaskblshape->setCurve(pp->locallab.spots.at(index).Lmaskblcurve); LLmaskblshapewav->setCurve(pp->locallab.spots.at(index).LLmaskblcurvewav); csThresholdblur->setValue(pp->locallab.spots.at(index).csthresholdblur); @@ -9563,6 +9602,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shadmaskbl->setEditedState(spotState->shadmaskbl ? Edited : UnEdited); strumaskbl->setEditedState(spotState->strumaskbl ? Edited : UnEdited); fftwbl->set_inconsistent(multiImage && !spotState->fftwbl); + toolbl->set_inconsistent(multiImage && !spotState->toolbl); Lmaskblshape->setUnChanged(!spotState->Lmaskblcurve); LLmaskblshapewav->setUnChanged(!spotState->LLmaskblcurvewav); csThresholdblur->setEditedState(spotState->csthresholdblur ? Edited : UnEdited); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 88504a0d4..3c98df581 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -364,6 +364,8 @@ private: sigc::connection enablMaskConn; Gtk::CheckButton* const fftwbl; sigc::connection fftwblConn; + Gtk::CheckButton* const toolbl; + sigc::connection toolblConn; //Tone mapping Gtk::CheckButton* const equiltm; sigc::connection equiltmConn; @@ -474,6 +476,7 @@ private: sigc::connection lumacontrastMinusPressedConn, lumaneutralPressedConn, lumacontrastPlusPressedConn; Gtk::Frame* const gridFrame; Gtk::Frame* const toolcolFrame; + Gtk::Frame* const toolblFrame; Gtk::Frame* const mergecolFrame; Gtk::Frame* const merge1colFrame; Gtk::Frame* const pdeFrame; @@ -546,6 +549,7 @@ private: void activlumChanged(); void enablMaskChanged(); void fftwblChanged(); + void toolblChanged(); //TM void equiltmChanged(); void enatmMaskChanged(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 36e584b7d..36247549b 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1135,6 +1135,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).shadmaskbl = locallab.spots.at(j).shadmaskbl && pSpot.shadmaskbl == otherSpot.shadmaskbl; locallab.spots.at(j).strumaskbl = locallab.spots.at(j).strumaskbl && pSpot.strumaskbl == otherSpot.strumaskbl; locallab.spots.at(j).fftwbl = locallab.spots.at(j).fftwbl && pSpot.fftwbl == otherSpot.fftwbl; + locallab.spots.at(j).toolbl = locallab.spots.at(j).toolbl && pSpot.toolbl == otherSpot.toolbl; locallab.spots.at(j).Lmaskblcurve = locallab.spots.at(j).Lmaskblcurve && pSpot.Lmaskblcurve == otherSpot.Lmaskblcurve; locallab.spots.at(j).LLmaskblcurvewav = locallab.spots.at(j).LLmaskblcurvewav && pSpot.LLmaskblcurvewav == otherSpot.LLmaskblcurvewav; locallab.spots.at(j).csthresholdblur = locallab.spots.at(j).csthresholdblur && pSpot.csthresholdblur == otherSpot.csthresholdblur; @@ -3418,6 +3419,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).fftwbl = mods.locallab.spots.at(i).fftwbl; } + if (locallab.spots.at(i).toolbl) { + toEdit.locallab.spots.at(i).toolbl = mods.locallab.spots.at(i).toolbl; + } + if (locallab.spots.at(i).blendmaskbl) { toEdit.locallab.spots.at(i).blendmaskbl = mods.locallab.spots.at(i).blendmaskbl; } @@ -5084,6 +5089,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : HHmaskblcurve(v), enablMask(v), fftwbl(v), + toolbl(v), blendmaskbl(v), radmaskbl(v), chromaskbl(v), @@ -5403,6 +5409,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) HHmaskblcurve = v; enablMask = v; fftwbl = v; + toolbl = v; blendmaskbl = v; radmaskbl = v; chromaskbl = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index bff366ba1..0579e5ce0 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -557,6 +557,7 @@ public: bool HHmaskblcurve; bool enablMask; bool fftwbl; + bool toolbl; bool blendmaskbl; bool radmaskbl; bool chromaskbl;