diff --git a/rtdata/languages/default b/rtdata/languages/default index ae246e5ed..55361cd0f 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1171,6 +1171,9 @@ HISTORY_MSG_930;Local - Mask Common blend HISTORY_MSG_932;Local - Mask Common enable HISTORY_MSG_933;Local - Mask Common radius soft HISTORY_MSG_934;Local - Mask Common laplacian +HISTORY_MSG_935;Local - Mask Common chroma +HISTORY_MSG_936;Local - Mask Common gamma +HISTORY_MSG_937;Local - Mask Common slope 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 b155cb9be..53cf55590 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -957,6 +957,9 @@ enum ProcEventCode { EvLocallabEnaMask = 931, Evlocallabradmask = 932, Evlocallablapmask = 933, + Evlocallabchromask = 934, + Evlocallabgammask = 935, + Evlocallabslopmask = 936, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 358e5fd94..ee1834b1d 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -3740,7 +3740,10 @@ LocallabParams::LocallabSpot::LocallabSpot() : blendmask(0), enamask(false), radmask(0.0), - lapmask(0.0) + lapmask(0.0), + chromask(0.0), + gammask(1.0), + slopmask(0.0) { } @@ -4219,7 +4222,10 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && blendmask == other.blendmask && enamask == other.enamask && radmask == other.radmask - && lapmask == other.lapmask; + && lapmask == other.lapmask + && chromask == other.chromask + && gammask == other.gammask + && slopmask == other.slopmask; } @@ -5722,6 +5728,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->enamask, "Locallab", "Enamask_" + index_str, spot.enamask, keyFile); saveToKeyfile(!pedited || spot_edited->radmask, "Locallab", "Radmask_" + index_str, spot.radmask, keyFile); saveToKeyfile(!pedited || spot_edited->lapmask, "Locallab", "Lapmask_" + index_str, spot.lapmask, keyFile); + saveToKeyfile(!pedited || spot_edited->chromask, "Locallab", "Chromask_" + index_str, spot.chromask, keyFile); + saveToKeyfile(!pedited || spot_edited->gammask, "Locallab", "Gammask_" + index_str, spot.gammask, keyFile); + saveToKeyfile(!pedited || spot_edited->slopmask, "Locallab", "Slopmask_" + index_str, spot.slopmask, keyFile); } } } @@ -7443,6 +7452,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Enamask_" + index_str, pedited, spot.enamask, spotEdited.enamask); assignFromKeyfile(keyFile, "Locallab", "Radmask_" + index_str, pedited, spot.radmask, spotEdited.radmask); assignFromKeyfile(keyFile, "Locallab", "Lapmask_" + index_str, pedited, spot.lapmask, spotEdited.lapmask); + assignFromKeyfile(keyFile, "Locallab", "Chromask_" + index_str, pedited, spot.chromask, spotEdited.chromask); + assignFromKeyfile(keyFile, "Locallab", "Gammask_" + index_str, pedited, spot.gammask, spotEdited.gammask); + assignFromKeyfile(keyFile, "Locallab", "Slopmask_" + index_str, pedited, spot.slopmask, spotEdited.slopmask); if (spot.visimask) { spotEdited.visimask = true; diff --git a/rtengine/procparams.h b/rtengine/procparams.h index b2b23e2e7..73e3b4c70 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1429,6 +1429,9 @@ struct LocallabParams { bool enamask; double radmask; double lapmask; + double chromask; + double gammask; + double slopmask; LocallabSpot(); diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 091cf4532..2347b8917 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -960,7 +960,10 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // EvlocallabshowmaskmaskMethod LUMINANCECURVE, // EvLocallabEnaMask LUMINANCECURVE, // Evlocallabradmask - LUMINANCECURVE // Evlocallablapmask + LUMINANCECURVE, // Evlocallablapmask + LUMINANCECURVE, // Evlocallabchromask + LUMINANCECURVE, // Evlocallabgammask + LUMINANCECURVE // Evlocallabslopmask }; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index ae0c7cf98..7ddf1bbb1 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -1209,6 +1209,9 @@ private: Gtk::CheckButton* const enamask; Adjuster* const radmask; Adjuster* const lapmask; + Adjuster* const chromask; + Adjuster* const gammask; + Adjuster* const slopmask; sigc::connection showmaskMethodConn, enamaskConn; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 8aea1d0e8..e8e9e460d 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -4733,7 +4733,10 @@ LocallabMask::LocallabMask(): showmaskMethod(Gtk::manage(new MyComboBoxText())), enamask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), radmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), - lapmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))) + lapmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), + chromask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), + gammask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), + slopmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))) { // Parameter Mask common specific widgets @@ -4749,6 +4752,9 @@ LocallabMask::LocallabMask(): enamaskConn = enamask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::enamaskChanged)); radmask->setAdjusterListener(this); lapmask->setAdjusterListener(this); + chromask->setAdjusterListener(this); + gammask->setAdjusterListener(this); + slopmask->setAdjusterListener(this); pack_start(*sensimask, Gtk::PACK_SHRINK, 0); pack_start(*blendmask, Gtk::PACK_SHRINK, 0); @@ -4756,6 +4762,9 @@ LocallabMask::LocallabMask(): pack_start(*enamask, Gtk::PACK_SHRINK, 0); pack_start(*radmask, Gtk::PACK_SHRINK, 0); pack_start(*lapmask, Gtk::PACK_SHRINK, 0); + pack_start(*chromask, Gtk::PACK_SHRINK, 0); + pack_start(*gammask, Gtk::PACK_SHRINK, 0); + pack_start(*slopmask, Gtk::PACK_SHRINK, 0); } @@ -4845,6 +4854,9 @@ void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const Params enamask->set_active(spot.enamask); radmask->setValue(spot.radmask); lapmask->setValue(spot.lapmask); + chromask->setValue(spot.chromask); + gammask->setValue(spot.gammask); + slopmask->setValue(spot.slopmask); } @@ -4872,6 +4884,9 @@ void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.enamask = enamask->get_active(); spot.radmask = radmask->getValue(); spot.lapmask = lapmask->getValue(); + spot.chromask = chromask->getValue(); + spot.gammask = gammask->getValue(); + spot.slopmask = slopmask->getValue(); } @@ -4907,6 +4922,9 @@ void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams blendmask->setDefault((double)defSpot.blendmask); radmask->setDefault(defSpot.radmask); lapmask->setDefault(defSpot.lapmask); + chromask->setDefault(defSpot.chromask); + lapmask->setDefault(defSpot.lapmask); + slopmask->setDefault(defSpot.slopmask); } @@ -4946,6 +4964,27 @@ void LocallabMask::adjusterChanged(Adjuster* a, double newval) } } + if (a == chromask) { + if (listener) { + listener->panelChanged(Evlocallabchromask, + chromask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + + if (a == gammask) { + if (listener) { + listener->panelChanged(Evlocallabgammask, + gammask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + + if (a == slopmask) { + if (listener) { + listener->panelChanged(Evlocallabslopmask, + slopmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + } } diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index a981f06e5..8866885be 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1485,6 +1485,9 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).enamask = locallab.spots.at(j).enamask && pSpot.enamask == otherSpot.enamask; locallab.spots.at(j).radmask = locallab.spots.at(j).radmask && pSpot.radmask == otherSpot.radmask; locallab.spots.at(j).lapmask = locallab.spots.at(j).lapmask && pSpot.lapmask == otherSpot.lapmask; + locallab.spots.at(j).chromask = locallab.spots.at(j).chromask && pSpot.chromask == otherSpot.chromask; + locallab.spots.at(j).gammask = locallab.spots.at(j).gammask && pSpot.gammask == otherSpot.gammask; + locallab.spots.at(j).slopmask = locallab.spots.at(j).slopmask && pSpot.slopmask == otherSpot.slopmask; } } @@ -4819,6 +4822,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).lapmask = mods.locallab.spots.at(i).lapmask; } + if (locallab.spots.at(i).chromask) { + toEdit.locallab.spots.at(i).chromask = mods.locallab.spots.at(i).chromask; + } + + if (locallab.spots.at(i).gammask) { + toEdit.locallab.spots.at(i).gammask = mods.locallab.spots.at(i).gammask; + } + + if (locallab.spots.at(i).slopmask) { + toEdit.locallab.spots.at(i).slopmask = mods.locallab.spots.at(i).slopmask; + } + } if (pcvignette.enabled) { @@ -6395,7 +6410,10 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : blendmask(v), enamask(v), radmask(v), - lapmask(v) + lapmask(v), + chromask(v), + gammask(v), + slopmask(v) { } @@ -6865,6 +6883,9 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) enamask = v; radmask = v; lapmask = v; + chromask = v; + gammask = v; + slopmask = v; } bool CaptureSharpeningParamsEdited::isUnchanged() const diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index d235e4987..77d34d239 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -843,6 +843,9 @@ public: bool enamask; bool radmask; bool lapmask; + bool chromask; + bool gammask; + bool slopmask; LocallabSpotEdited(bool v);