diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 3402f0388..d98a8a6c2 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -950,7 +950,7 @@ enum ProcEventCode { EvLocallabSpotcolorscope = 924, EvlocallabshowmasktypMethod = 925, Evlocallabshadmaskblsha = 926, - EvLocenamask = 927, + EvLocena_mask = 927, Evlocallabsensimask = 928, Evlocallabblendmask = 929, EvlocallabshowmaskmaskMethod = 930, @@ -963,6 +963,8 @@ enum ProcEventCode { EvlocallabCCmask_shape = 937, EvlocallabLLmask_shape = 938, EvlocallabHHmask_shape = 939, + EvLocallabtoolmask = 940, + Evlocallabstrumaskmask = 941, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 8f35d68df..1bcec4de2 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -3785,6 +3785,8 @@ LocallabParams::LocallabSpot::LocallabSpot() : 0.35, 0.35 }, + strumaskmask(0.), + toolmask(true), radmask(0.0), lapmask(0.0), chromask(0.0), @@ -4271,6 +4273,8 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && CCmask_curve == other.CCmask_curve && LLmask_curve == other.LLmask_curve && HHmask_curve == other.HHmask_curve + && strumaskmask == other.strumaskmask + && toolmask == other.toolmask && radmask == other.radmask && lapmask == other.lapmask && chromask == other.chromask @@ -5780,6 +5784,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->CCmask_curve, "Locallab", "CCmask_Curve_" + index_str, spot.CCmask_curve, keyFile); saveToKeyfile(!pedited || spot_edited->LLmask_curve, "Locallab", "LLmask_Curve_" + index_str, spot.LLmask_curve, keyFile); saveToKeyfile(!pedited || spot_edited->HHmask_curve, "Locallab", "HHmask_Curve_" + index_str, spot.HHmask_curve, keyFile); + saveToKeyfile(!pedited || spot_edited->strumaskmask, "Locallab", "Strumaskmask_" + index_str, spot.strumaskmask, keyFile); + saveToKeyfile(!pedited || spot_edited->toolmask, "Locallab", "Toolmask_" + index_str, spot.toolmask, 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); @@ -7508,6 +7514,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "CCmask_Curve_" + index_str, pedited, spot.CCmask_curve, spotEdited.CCmask_curve); assignFromKeyfile(keyFile, "Locallab", "LLmask_Curve_" + index_str, pedited, spot.LLmask_curve, spotEdited.LLmask_curve); assignFromKeyfile(keyFile, "Locallab", "HHmask_Curve_" + index_str, pedited, spot.HHmask_curve, spotEdited.HHmask_curve); + assignFromKeyfile(keyFile, "Locallab", "Strumaskmask_" + index_str, pedited, spot.strumaskmask, spotEdited.strumaskmask); + assignFromKeyfile(keyFile, "Locallab", "Toolmask_" + index_str, pedited, spot.toolmask, spotEdited.toolmask); 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); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index b744b4be2..79c81e63e 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1431,6 +1431,8 @@ struct LocallabParams { std::vector CCmask_curve; std::vector LLmask_curve; std::vector HHmask_curve; + double strumaskmask; + bool toolmask; double radmask; double lapmask; double chromask; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index c778560be..29417c059 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -958,7 +958,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // Evlocallabsensimask LUMINANCECURVE, // Evlocallabblendmask LUMINANCECURVE, // EvlocallabshowmaskmaskMethod - LUMINANCECURVE, // EvLocallabEnaMask + LUMINANCECURVE, // EvLocallabEna_Mask LUMINANCECURVE, // Evlocallabradmask LUMINANCECURVE, // Evlocallablapmask LUMINANCECURVE, // Evlocallabchromask @@ -966,7 +966,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // Evlocallabslopmask LUMINANCECURVE, // EvlocallabCCmask_shape LUMINANCECURVE, // EvlocallabLLmask_shape - LUMINANCECURVE // EvlocallabHHmask_shape + LUMINANCECURVE, // EvlocallabHHmask_shape + LUMINANCECURVE, // EvLocallabtoolmask + LUMINANCECURVE // Evlocallabstrumaskmask }; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 3472c3ea4..91f7d4989 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -1212,6 +1212,9 @@ private: FlatCurveEditor* const CCmask_shape; FlatCurveEditor* const LLmask_shape; FlatCurveEditor* const HHmask_shape; + Gtk::Frame* const struFrame; + Adjuster* const strumaskmask; + Gtk::CheckButton* const toolmask; Adjuster* const radmask; Adjuster* const lapmask; @@ -1219,7 +1222,7 @@ private: Adjuster* const gammask; Adjuster* const slopmask; - sigc::connection showmaskMethodConn, enamaskConn; + sigc::connection showmaskMethodConn, enamaskConn, toolmaskConn; public: LocallabMask(); @@ -1245,6 +1248,7 @@ private: void enabledChanged() override; void showmaskMethodChanged(); void enamaskChanged(); + void toolmaskChanged(); void convertParamToNormal() override; void updateGUIToMode(const modeType new_type) override; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 7c7de4a91..f3448de71 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -4738,7 +4738,11 @@ LocallabMask::LocallabMask(): CCmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), - + + struFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))), + strumaskmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))), + toolmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), + 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.))), chromask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), @@ -4776,6 +4780,12 @@ LocallabMask::LocallabMask(): mask_CurveEditorG->curveListComplete(); + struFrame->set_label_align(0.025, 0.5); + + strumaskmask->setAdjusterListener(this); + + toolmaskConn = toolmask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::toolmaskChanged)); + radmask->setAdjusterListener(this); lapmask->setAdjusterListener(this); chromask->setAdjusterListener(this); @@ -4784,15 +4794,31 @@ LocallabMask::LocallabMask(): pack_start(*sensimask, Gtk::PACK_SHRINK, 0); pack_start(*blendmask, Gtk::PACK_SHRINK, 0); - pack_start(*showmaskMethod, Gtk::PACK_SHRINK, 4); - pack_start(*mask_CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - 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); + + ToolParamBlock* const maskmaskBox = Gtk::manage(new ToolParamBlock()); + maskmaskBox->pack_start(*showmaskMethod, Gtk::PACK_SHRINK, 4); + maskmaskBox->pack_start(*mask_CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + maskmaskBox->pack_start(*enamask, Gtk::PACK_SHRINK, 0); + ToolParamBlock* const strumBox = Gtk::manage(new ToolParamBlock()); + strumBox->pack_start(*strumaskmask); + strumBox->pack_start(*toolmask); + + struFrame->add(*strumBox); + maskmaskBox->pack_start(*struFrame, Gtk::PACK_SHRINK, 0); + + Gtk::Frame* const toolmaskFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK"))); + toolmaskFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const toolmaskBox = Gtk::manage(new ToolParamBlock()); + + toolmaskBox->pack_start(*radmask, Gtk::PACK_SHRINK, 0); + toolmaskBox->pack_start(*lapmask, Gtk::PACK_SHRINK, 0); + toolmaskBox->pack_start(*chromask, Gtk::PACK_SHRINK, 0); + toolmaskBox->pack_start(*gammask, Gtk::PACK_SHRINK, 0); + toolmaskBox->pack_start(*slopmask, Gtk::PACK_SHRINK, 0); + toolmaskFrame->add(*toolmaskBox); + maskmaskBox->pack_start(*toolmaskFrame); + pack_start(*maskmaskBox); } bool LocallabMask::isMaskViewActive() @@ -4824,6 +4850,7 @@ void LocallabMask::updateAdviceTooltips(const bool showTooltips) CCmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); LLmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); HHmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); + struFrame->set_tooltip_text(M("TP_LOCALLAB_STRUMASK_TOOLTIP")); } else { exp->set_tooltip_text(M("")); @@ -4832,6 +4859,7 @@ void LocallabMask::updateAdviceTooltips(const bool showTooltips) CCmask_shape->setTooltip(M("")); LLmask_shape->setTooltip(M("")); HHmask_shape->setTooltip(M("")); + struFrame->set_tooltip_text(M("")); } } @@ -4845,6 +4873,7 @@ void LocallabMask::disableListener() LocallabTool::disableListener(); showmaskMethodConn.block(true); enamaskConn.block(true); + toolmaskConn.block(true); } @@ -4853,6 +4882,7 @@ void LocallabMask::enableListener() LocallabTool::enableListener(); showmaskMethodConn.block(false); enamaskConn.block(false); + toolmaskConn.block(false); } @@ -4894,6 +4924,8 @@ void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const Params CCmask_shape->setCurve(spot.CCmask_curve); LLmask_shape->setCurve(spot.LLmask_curve); HHmask_shape->setCurve(spot.HHmask_curve); + strumaskmask->setValue(spot.strumaskmask); + toolmask->set_active(spot.toolmask); radmask->setValue(spot.radmask); lapmask->setValue(spot.lapmask); chromask->setValue(spot.chromask); @@ -4931,6 +4963,8 @@ void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.CCmask_curve = CCmask_shape->getCurve(); spot.LLmask_curve = LLmask_shape->getCurve(); spot.HHmask_curve = HHmask_shape->getCurve(); + spot.strumaskmask = strumaskmask->getValue(); + spot.toolmask = toolmask->get_active(); spot.radmask = radmask->getValue(); spot.lapmask = lapmask->getValue(); spot.chromask = chromask->getValue(); @@ -4968,6 +5002,8 @@ void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams // Set default value for adjuster widgets sensimask->setDefault((double)defSpot.sensimask); + strumaskmask->setDefault(defSpot.strumaskmask); + toolmask->set_active(defSpot.toolmask); blendmask->setDefault((double)defSpot.blendmask); radmask->setDefault(defSpot.radmask); lapmask->setDefault(defSpot.lapmask); @@ -4987,11 +5023,13 @@ void LocallabMask::updateGUIToMode(const modeType new_type) lapmask->hide(); gammask->hide(); slopmask->hide(); + struFrame->hide(); } else { // Advanced widgets are shown in Expert mode lapmask->show(); gammask->show(); slopmask->show(); + struFrame->show(); } } @@ -5006,6 +5044,8 @@ void LocallabMask::convertParamToNormal() lapmask->setValue(defSpot.lapmask); gammask->setValue(defSpot.gammask); slopmask->setValue(defSpot.slopmask); + strumaskmask->setValue(defSpot.strumaskmask); + toolmask->set_active(defSpot.toolmask); // Enable all listeners enableListener(); @@ -5054,6 +5094,12 @@ void LocallabMask::adjusterChanged(Adjuster* a, double newval) } } + if (a == strumaskmask) { + if (listener) { + listener->panelChanged(Evlocallabstrumaskmask, + strumaskmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } if (a == blendmask) { if (listener) { @@ -5106,10 +5152,25 @@ void LocallabMask::enabledChanged() if (isLocActivated) { if (listener) { if (exp->getEnabled()) { - listener->panelChanged(EvLocenamask, + listener->panelChanged(EvLocena_mask, M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")"); } else { - listener->panelChanged(EvLocenamask, + listener->panelChanged(EvLocena_mask, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")"); + } + } + } +} + +void LocallabMask::toolmaskChanged() +{ + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (toolmask->get_active()) { + listener->panelChanged(EvLocallabtoolmask, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")"); + } else { + listener->panelChanged(EvLocallabtoolmask, M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")"); } } diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 8f0abbcf4..7111d1986 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1487,6 +1487,8 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).CCmask_curve = locallab.spots.at(j).CCmask_curve && pSpot.CCmask_curve == otherSpot.CCmask_curve; locallab.spots.at(j).LLmask_curve = locallab.spots.at(j).LLmask_curve && pSpot.LLmask_curve == otherSpot.LLmask_curve; locallab.spots.at(j).HHmask_curve = locallab.spots.at(j).HHmask_curve && pSpot.HHmask_curve == otherSpot.HHmask_curve; + locallab.spots.at(j).strumaskmask = locallab.spots.at(j).strumaskmask && pSpot.strumaskmask == otherSpot.strumaskmask; + locallab.spots.at(j).toolmask = locallab.spots.at(j).toolmask && pSpot.toolmask == otherSpot.toolmask; 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; @@ -4834,6 +4836,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).HHmask_curve = mods.locallab.spots.at(i).HHmask_curve; } + if (locallab.spots.at(i).strumaskmask) { + toEdit.locallab.spots.at(i).strumaskmask = mods.locallab.spots.at(i).strumaskmask; + } + + if (locallab.spots.at(i).toolmask) { + toEdit.locallab.spots.at(i).toolmask = mods.locallab.spots.at(i).toolmask; + } + if (locallab.spots.at(i).radmask) { toEdit.locallab.spots.at(i).radmask = mods.locallab.spots.at(i).radmask; } @@ -6433,6 +6443,8 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : CCmask_curve(v), LLmask_curve(v), HHmask_curve(v), + strumaskmask(v), + toolmask(v), radmask(v), lapmask(v), chromask(v), @@ -6909,6 +6921,8 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) CCmask_curve = v; LLmask_curve = v; HHmask_curve = v; + strumaskmask = v; + toolmask = v; radmask = v; lapmask = v; chromask = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 49fc7d07a..b177101f3 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -845,6 +845,8 @@ public: bool CCmask_curve; bool LLmask_curve; bool HHmask_curve; + bool strumaskmask; + bool toolmask; bool radmask; bool lapmask; bool chromask;