diff --git a/rtdata/languages/default b/rtdata/languages/default index c3b472809..d9ff620fd 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1152,6 +1152,7 @@ HISTORY_MSG_911;Local - Blur Chroma Luma HISTORY_MSG_912;Local - Blur Guide filter strength HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR HISTORY_MSG_914;Local - Blur Wavelet Sigma BL +HISTORY_MSG_915;Local - Edge Wavelet Sigma ED HISTORY_MSG_CAT02PRESET;Cat02 automatic preset HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 41ae2d5c1..9fd3bcaf8 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -937,6 +937,7 @@ enum ProcEventCode { Evlocallabstrbl = 911, Evlocallabsigmadr = 912, Evlocallabsigmabl = 913, + Evlocallabsigmaed = 914, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index aed65997f..d215fc864 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2840,6 +2840,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : strwav(0.0), angwav(0.0), strengthw(0.0), + sigmaed(1.0), radiusw(15.0), detailw(10.0), gradw(90.0), @@ -3284,6 +3285,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && strwav == other.strwav && angwav == other.angwav && strengthw == other.strengthw + && sigmaed == other.sigmaed && radiusw == other.radiusw && detailw == other.detailw && gradw == other.gradw @@ -4724,6 +4726,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strwav, "Locallab", "Strwav_" + std::to_string(i), spot.strwav, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).angwav, "Locallab", "Angwav_" + std::to_string(i), spot.angwav, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strengthw, "Locallab", "Strengthw_" + std::to_string(i), spot.strengthw, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sigmaed, "Locallab", "Sigmaed_" + std::to_string(i), spot.sigmaed, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radiusw, "Locallab", "Radiusw_" + std::to_string(i), spot.radiusw, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).detailw, "Locallab", "Detailw_" + std::to_string(i), spot.detailw, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gradw, "Locallab", "Gradw_" + std::to_string(i), spot.gradw, keyFile); @@ -6369,6 +6372,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Strwav_" + std::to_string(i), pedited, spot.strwav, spotEdited.strwav); assignFromKeyfile(keyFile, "Locallab", "Angwav_" + std::to_string(i), pedited, spot.angwav, spotEdited.angwav); assignFromKeyfile(keyFile, "Locallab", "Strengthw_" + std::to_string(i), pedited, spot.strengthw, spotEdited.strengthw); + assignFromKeyfile(keyFile, "Locallab", "Sigmaed_" + std::to_string(i), pedited, spot.sigmaed, spotEdited.sigmaed); assignFromKeyfile(keyFile, "Locallab", "Radiusw_" + std::to_string(i), pedited, spot.radiusw, spotEdited.radiusw); assignFromKeyfile(keyFile, "Locallab", "Detailw_" + std::to_string(i), pedited, spot.detailw, spotEdited.detailw); assignFromKeyfile(keyFile, "Locallab", "Gradw_" + std::to_string(i), pedited, spot.gradw, spotEdited.gradw); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index d3f8bde6e..6a343feaa 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1316,6 +1316,7 @@ struct LocallabParams { double strwav; double angwav; double strengthw; + double sigmaed; double radiusw; double detailw; double gradw; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index dfbb2fa8e..3363728a2 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -940,7 +940,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // EvlocallabchroMethod LUMINANCECURVE, // Evlocallabstrbl LUMINANCECURVE, // Evlocallabsigmadr - LUMINANCECURVE // Evlocallabsigmabl + LUMINANCECURVE, // Evlocallabsigmabl + LUMINANCECURVE // Evlocallabsigmaed }; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 41136cccb..370571230 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -902,6 +902,7 @@ private: Gtk::CheckButton* const wavedg; ToolParamBlock* const edgsBox; Adjuster* const strengthw; + Adjuster* const sigmaed; CurveEditorGroup* const LocalcurveEditorwavedg; FlatCurveEditor* const wavshapeedg; Adjuster* const gradw; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index a0836affc..42ae381ad 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -2023,6 +2023,7 @@ LocallabContrast::LocallabContrast(): wavedg(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EDGFRA")))), edgsBox(Gtk::manage(new ToolParamBlock())), strengthw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDVAL"), 0., 100.0, 0.5, 0.))), + sigmaed(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), LocalcurveEditorwavedg(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVEDG"))), wavshapeedg(static_cast(LocalcurveEditorwavedg->addCurve(CT_Flat, "", nullptr, false, false))), gradw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECT"), 0., 100.0, 0.5, 90.))), @@ -2171,6 +2172,7 @@ LocallabContrast::LocallabContrast(): wavedgConn = wavedg->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavedgChanged)); strengthw->setAdjusterListener(this); + sigmaed->setAdjusterListener(this); LocalcurveEditorwavedg->setCurveListener(this); @@ -2405,6 +2407,7 @@ LocallabContrast::LocallabContrast(): blurcontBox->pack_start(*gradwavFrame); edgFrame->set_label_widget(*wavedg); edgsBox->pack_start(*strengthw); + edgsBox->pack_start(*sigmaed); edgsBox->pack_start(*LocalcurveEditorwavedg, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor edgsBox->pack_start(*gradw); edgsBox->pack_start(*waveshow); @@ -2612,6 +2615,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa angwav->setValue(pp->locallab.spots.at(index).angwav); wavedg->set_active(pp->locallab.spots.at(index).wavedg); strengthw->setValue(pp->locallab.spots.at(index).strengthw); + sigmaed->setValue(pp->locallab.spots.at(index).sigmaed); wavshapeedg->setCurve(pp->locallab.spots.at(index).locedgwavcurve); gradw->setValue(pp->locallab.spots.at(index).gradw); waveshow->set_active(pp->locallab.spots.at(index).waveshow); @@ -2729,6 +2733,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pp->locallab.spots.at(index).angwav = angwav->getValue(); pp->locallab.spots.at(index).wavedg = wavedg->get_active(); pp->locallab.spots.at(index).strengthw = strengthw->getValue(); + pp->locallab.spots.at(index).sigmaed = sigmaed->getValue(); pp->locallab.spots.at(index).locedgwavcurve = wavshapeedg->getCurve(); pp->locallab.spots.at(index).gradw = gradw->getValue(); pp->locallab.spots.at(index).waveshow = waveshow->get_active(); @@ -2815,6 +2820,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa strwav->setDefault(defSpot.strwav); angwav->setDefault(defSpot.angwav); strengthw->setDefault(defSpot.strengthw); + sigmaed->setDefault(defSpot.sigmaed); gradw->setDefault(defSpot.gradw); radiusw->setDefault(defSpot.radiusw); detailw->setDefault(defSpot.detailw); @@ -2944,6 +2950,13 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval) } } + if (a == sigmaed) { + if (listener) { + listener->panelChanged(Evlocallabsigmaed, + sigmaed->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == gradw) { if (listener) { listener->panelChanged(Evlocallabgradw, @@ -3461,6 +3474,7 @@ void LocallabContrast::updateContrastGUI1() strwav->hide(); angwav->hide(); strengthw->hide(); + sigmaed->hide(); LocalcurveEditorwavedg->hide(); gradw->hide(); radiusw->hide(); @@ -3501,6 +3515,7 @@ void LocallabContrast::updateContrastGUI1() strwav->show(); angwav->show(); strengthw->show(); + sigmaed->show(); LocalcurveEditorwavedg->show(); gradw->show(); radiusw->show(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 3e66c3924..e9ec0843a 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1343,6 +1343,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).strwav = locallab.spots.at(j).strwav && pSpot.strwav == otherSpot.strwav; locallab.spots.at(j).angwav = locallab.spots.at(j).angwav && pSpot.angwav == otherSpot.angwav; locallab.spots.at(j).strengthw = locallab.spots.at(j).strengthw && pSpot.strengthw == otherSpot.strengthw; + locallab.spots.at(j).sigmaed = locallab.spots.at(j).sigmaed && pSpot.sigmaed == otherSpot.sigmaed; locallab.spots.at(j).radiusw = locallab.spots.at(j).radiusw && pSpot.radiusw == otherSpot.radiusw; locallab.spots.at(j).detailw = locallab.spots.at(j).detailw && pSpot.detailw == otherSpot.detailw; locallab.spots.at(j).gradw = locallab.spots.at(j).gradw && pSpot.gradw == otherSpot.gradw; @@ -4296,6 +4297,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).strengthw = mods.locallab.spots.at(i).strengthw; } + if (locallab.spots.at(i).sigmaed) { + toEdit.locallab.spots.at(i).sigmaed = mods.locallab.spots.at(i).sigmaed; + } + if (locallab.spots.at(i).radiusw) { toEdit.locallab.spots.at(i).radiusw = mods.locallab.spots.at(i).radiusw; } @@ -6012,6 +6017,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : strwav(v), angwav(v), strengthw(v), + sigmaed(v), radiusw(v), detailw(v), gradw(v), @@ -6449,6 +6455,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) strwav = v; angwav = v; strengthw = v; + sigmaed = v; radiusw = v; detailw = v; gradw = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index ad1743c45..6a4b1ce01 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -743,6 +743,7 @@ public: bool strwav; bool angwav; bool strengthw; + bool sigmaed; bool radiusw; bool detailw; bool gradw;