diff --git a/rtdata/languages/default b/rtdata/languages/default index a0b0216e7..4e8225e30 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1035,6 +1035,8 @@ HISTORY_MSG_794;Local - SH TRC slope HISTORY_MSG_795;Local - Mask save restore image HISTORY_MSG_796;Local - Recursive references HISTORY_MSG_797;Local - Merge and Masks method +HISTORY_MSG_798;Local - Merge Original method +HISTORY_MSG_799;Local - Opacity HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2155,6 +2157,12 @@ TP_LOCALLAB_MERGETYPE;Merge image and mask TP_LOCALLAB_MERGENONE;None TP_LOCALLAB_MERGEONE;Short Curves 'L' Mask TP_LOCALLAB_MERGETWO;Original +TP_LOCALLAB_MERGE1COLFRA;Merge with Original +TP_LOCALLAB_OPACOL;Opacity +TP_LOCALLAB_MERGECOLFRA;Mask LCH +TP_LOCALLAB_MERONE;Normal +TP_LOCALLAB_MERTWO;Substraction +TP_LOCALLAB_MERTHR;Multiply TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTake into account deltaE image to avoid retouching the selection area when sliders gamma mask, slope mask, chroma mask and contrast curves and levels contrasts curves are used.\nDisabled in Inverse TP_LOCALLAB_WAMASKCOL;Mask Wavelet level TP_LOCALLAB_CSTHRESHOLDBLUR;Mask Wavelet level @@ -2350,7 +2358,7 @@ TP_LOCALLAB_SHOWT;3 - Mask and modifications TP_LOCALLAB_SHOWS;4+* - Mask and modifications TP_LOCALLAB_SHOWR;5 - Mask and modifications TP_LOCALLAB_SHOWE;6+ - Mask and modifications -TP_LOCALLAB_SHOWC;7+* - Mask and modifications +TP_LOCALLAB_SHOWC;7+* - Mask and modifications - Merge TP_LOCALLAB_SHOWPLUS;1+* - Mask and modifications - Smooth-Blur & Denoise TP_LOCALLAB_SHOWMASKCOL_TOOLTIP;Display modifications.\nBeware, you can only view one modification (color and light or Exposure or Shadows-Highlight or TM or CBDL or Retinex MSR or Blur).\n\nUse Mask is before algorihtm shape detection TP_LOCALLAB_SHOWMNONE;None diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 4619d3d97..e5136bd3b 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -824,6 +824,8 @@ enum ProcEventCode { Evlocallabsavrest = 794, Evlocallabrecurs = 795, EvLocallabSpotmergeMethod = 796, + EvLocallabmergecolMethod = 797, + Evlocallabopacol = 798, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 57079a7fc..3abf7d02d 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2463,6 +2463,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : lapmaskcol(0.0), qualitycurveMethod("none"), gridMethod("one"), + mergecolMethod("one"), llcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, cccurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, LHcurve{(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.166, 0.50, 0.35, 0.35, 0.333, 0.50, 0.35, 0.35, 0.50, 0.50, 0.35, 0.35, 0.666, 0.50, 0.35, 0.35, 0.833, 0.50, 0.35, 0.35}, @@ -2473,6 +2474,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : LLmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 }, HHmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 }, softradiuscol(0.0), + opacol(100.0), Lmaskcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, LLmaskcolcurvewav{(double)FCT_MinMaxCPoints, 0.0, 0.5, 0.35, 0.35, 1., 0.5, 0.35, 0.35}, csthresholdcol(0, 0, 6, 5, false), @@ -2772,6 +2774,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && lapmaskcol == other.lapmaskcol && qualitycurveMethod == other.qualitycurveMethod && gridMethod == other.gridMethod + && mergecolMethod == other.mergecolMethod && llcurve == other.llcurve && cccurve == other.cccurve && LHcurve == other.LHcurve @@ -2783,6 +2786,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && HHmaskcurve == other.HHmaskcurve && blurcolde == other.blurcolde && softradiuscol == other.softradiuscol + && opacol == other.opacol && Lmaskcurve == other.Lmaskcurve && LLmaskcolcurvewav == other.LLmaskcolcurvewav && csthresholdcol == other.csthresholdcol @@ -4078,6 +4082,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskcol, "Locallab", "Lapmaskcol_" + std::to_string(i), spot.lapmaskcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).qualitycurveMethod, "Locallab", "QualityCurveMethod_" + std::to_string(i), spot.qualitycurveMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gridMethod, "Locallab", "gridMethod_" + std::to_string(i), spot.gridMethod, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).mergecolMethod, "Locallab", "mergecolMethod_" + std::to_string(i), spot.mergecolMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).llcurve, "Locallab", "LLCurve_" + std::to_string(i), spot.llcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).cccurve, "Locallab", "CCCurve_" + std::to_string(i), spot.cccurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LHcurve, "Locallab", "LHCurve_" + std::to_string(i), spot.LHcurve, keyFile); @@ -4088,6 +4093,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskcurve, "Locallab", "LLmaskCurve_" + std::to_string(i), spot.LLmaskcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskcurve, "Locallab", "HHmaskCurve_" + std::to_string(i), spot.HHmaskcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).softradiuscol, "Locallab", "Softradiuscol_" + std::to_string(i), spot.softradiuscol, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).opacol, "Locallab", "Opacol_" + std::to_string(i), spot.opacol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmaskcurve, "Locallab", "LmaskCurve_" + std::to_string(i), spot.Lmaskcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskcolcurvewav, "Locallab", "LLmaskcolCurvewav_" + std::to_string(i), spot.LLmaskcolcurvewav, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).csthresholdcol, "Locallab", "CSThresholdcol_" + std::to_string(i), spot.csthresholdcol.toVector(), keyFile); @@ -5491,6 +5497,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Lapmaskcol_" + std::to_string(i), pedited, spot.lapmaskcol, spotEdited.lapmaskcol); assignFromKeyfile(keyFile, "Locallab", "QualityCurveMethod_" + std::to_string(i), pedited, spot.qualitycurveMethod, spotEdited.qualitycurveMethod); assignFromKeyfile(keyFile, "Locallab", "gridMethod_" + std::to_string(i), pedited, spot.gridMethod, spotEdited.gridMethod); + assignFromKeyfile(keyFile, "Locallab", "mergecolMethod_" + std::to_string(i), pedited, spot.mergecolMethod, spotEdited.mergecolMethod); assignFromKeyfile(keyFile, "Locallab", "LLCurve_" + std::to_string(i), pedited, spot.llcurve, spotEdited.llcurve); assignFromKeyfile(keyFile, "Locallab", "CCCurve_" + std::to_string(i), pedited, spot.cccurve, spotEdited.cccurve); assignFromKeyfile(keyFile, "Locallab", "LHCurve_" + std::to_string(i), pedited, spot.LHcurve, spotEdited.LHcurve); @@ -5501,6 +5508,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "LLmaskCurve_" + std::to_string(i), pedited, spot.LLmaskcurve, spotEdited.LLmaskcurve); assignFromKeyfile(keyFile, "Locallab", "HHmaskCurve_" + std::to_string(i), pedited, spot.HHmaskcurve, spotEdited.HHmaskcurve); assignFromKeyfile(keyFile, "Locallab", "Softradiuscol_" + std::to_string(i), pedited, spot.softradiuscol, spotEdited.softradiuscol); + assignFromKeyfile(keyFile, "Locallab", "Opacol_" + std::to_string(i), pedited, spot.opacol, spotEdited.opacol); assignFromKeyfile(keyFile, "Locallab", "LmaskCurve_" + std::to_string(i), pedited, spot.Lmaskcurve, spotEdited.Lmaskcurve); assignFromKeyfile(keyFile, "Locallab", "LLmaskcolCurvewav_" + std::to_string(i), pedited, spot.LLmaskcolcurvewav, spotEdited.LLmaskcolcurvewav); if (keyFile.has_key("Locallab", "CSThresholdcol_" + std::to_string(i))) { diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 2ca8dd10b..cfaebe3b3 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1010,6 +1010,7 @@ struct LocallabParams { double lapmaskcol; Glib::ustring qualitycurveMethod; Glib::ustring gridMethod; + Glib::ustring mergecolMethod; std::vector llcurve; std::vector cccurve; std::vector LHcurve; @@ -1020,6 +1021,7 @@ struct LocallabParams { std::vector LLmaskcurve; std::vector HHmaskcurve; double softradiuscol; + double opacol; std::vector Lmaskcurve; std::vector LLmaskcolcurvewav; Threshold csthresholdcol; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 30d0454d7..4bba6a86e 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -823,7 +823,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvlocallabsloSH LUMINANCECURVE, //Evlocallabsavrest LUMINANCECURVE, //Evlocallabrecurs - LUMINANCECURVE // EvLocallabSpotmergeMethod + LUMINANCECURVE, // EvLocallabSpotmergeMethod + LUMINANCECURVE, //EvLocallabmergecolMethod + LUMINANCECURVE, //EvLocallabopacol }; namespace rtengine diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index feff18792..ab279172f 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -204,6 +204,7 @@ Locallab::Locallab(): lapmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), shadmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))), softradiuscol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 0.))), + opacol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OPACOL"), 0.0, 100.0, 0.5, 100.))), // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -2.0, 4.0, 0.05, 0.0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 0))), @@ -406,6 +407,7 @@ Locallab::Locallab(): gridMethod(Gtk::manage(new MyComboBoxText())), showmaskcolMethod(Gtk::manage(new MyComboBoxText())), showmaskcolMethodinv(Gtk::manage(new MyComboBoxText())), + mergecolMethod(Gtk::manage(new MyComboBoxText())), csThresholdcol(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))), //Exposure showmaskexpMethod(Gtk::manage(new MyComboBoxText())), @@ -447,6 +449,8 @@ Locallab::Locallab(): 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")))), + 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")))), fatSHFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_FATSHFRA")))), @@ -527,6 +531,7 @@ Locallab::Locallab(): slomaskcol->setAdjusterListener(this); shadmaskcol->setAdjusterListener(this); softradiuscol->setAdjusterListener(this); + opacol->setAdjusterListener(this); lapmaskcol->setAdjusterListener(this); if (showtooltip) { @@ -624,6 +629,14 @@ Locallab::Locallab(): inversConn = invers->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversChanged)); + + mergecolMethod->append(M("TP_LOCALLAB_MERONE")); + mergecolMethod->append(M("TP_LOCALLAB_MERTWO")); + mergecolMethod->append(M("TP_LOCALLAB_MERTHR")); + mergecolMethod->set_active(0); + mergecolMethodConn = mergecolMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::mergecolMethodChanged)); + + showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); @@ -754,6 +767,14 @@ Locallab::Locallab(): colorBox->pack_start(*llCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor colorBox->pack_start(*HCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor colorBox->pack_start(*invers); + + mergecolFrame->set_label_align(0.025, 0.5); + merge1colFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const mergecolBox = Gtk::manage(new ToolParamBlock()); + mergecolBox->pack_start(*mergecolMethod); + mergecolBox->pack_start(*opacol); + merge1colFrame->add(*mergecolBox); + ToolParamBlock* const maskcolBox = Gtk::manage(new ToolParamBlock()); maskcolBox->pack_start(*showmaskcolMethod, Gtk::PACK_SHRINK, 4); maskcolBox->pack_start(*showmaskcolMethodinv, Gtk::PACK_SHRINK, 4); @@ -769,7 +790,14 @@ Locallab::Locallab(): maskcolBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskcolBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskcolBox->pack_start(*csThresholdcol, Gtk::PACK_SHRINK, 0); - expmaskcol->add(*maskcolBox, false); + + mergecolFrame->add(*maskcolBox); + + ToolParamBlock* const maskcol1Box = Gtk::manage(new ToolParamBlock()); + maskcol1Box->pack_start(*merge1colFrame); + maskcol1Box->pack_start(*mergecolFrame); + + expmaskcol->add(*maskcol1Box, false); colorBox->pack_start(*expmaskcol); expcolor->add(*colorBox, false); @@ -2849,10 +2877,17 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) if (pp->locallab.spots.at(i).mergeMethod == "none") { r->mergeMethod = 0; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (pp->locallab.spots.at(i).mergeMethod == "short") { r->mergeMethod = 1; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (pp->locallab.spots.at(i).mergeMethod == "orig") { r->mergeMethod = 2; + merge1colFrame->show(); + mergecolFrame->hide(); + } r->sensiexclu = pp->locallab.spots.at(i).sensiexclu; @@ -2972,10 +3007,17 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) if (newSpot->mergeMethod == "none") { r->mergeMethod = 0; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (newSpot->mergeMethod == "short") { r->mergeMethod = 1; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (newSpot->mergeMethod == "orig") { r->mergeMethod = 2; + merge1colFrame->show(); + mergecolFrame->hide(); + } r->sensiexclu = newSpot->sensiexclu; @@ -3203,10 +3245,16 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) if (newSpot->mergeMethod == "none") { r->mergeMethod = 0; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (newSpot->mergeMethod == "short") { r->mergeMethod = 1; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (newSpot->mergeMethod == "orig") { r->mergeMethod = 2; + merge1colFrame->show(); + mergecolFrame->hide(); } r->sensiexclu = newSpot->sensiexclu; @@ -3351,10 +3399,18 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) if (r->mergeMethod == 0) { pp->locallab.spots.at(pp->locallab.selspot).mergeMethod = "none"; + merge1colFrame->hide(); + mergecolFrame->show(); + } else if (r->mergeMethod == 1) { pp->locallab.spots.at(pp->locallab.selspot).mergeMethod = "short"; + merge1colFrame->hide(); + mergecolFrame->show(); } else if (r->mergeMethod == 2) { pp->locallab.spots.at(pp->locallab.selspot).mergeMethod = "orig"; + merge1colFrame->show(); + mergecolFrame->hide(); + } pp->locallab.spots.at(pp->locallab.selspot).sensiexclu = r->sensiexclu; @@ -3427,6 +3483,14 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).gridMethod = "two"; } + if (mergecolMethod->get_active_row_number() == 0) { + pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "one"; + } else if (mergecolMethod->get_active_row_number() == 1) { + pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "two"; + } else if (mergecolMethod->get_active_row_number() == 2) { + pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "thr"; + } + pp->locallab.spots.at(pp->locallab.selspot).llcurve = llshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).cccurve = ccshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LHcurve = LHshape->getCurve(); @@ -3444,6 +3508,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).shadmaskcol = shadmaskcol->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskcol = lapmaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).softradiuscol = softradiuscol->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).opacol = opacol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskcurve = Lmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav = LLmaskcolshapewav->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).csthresholdcol = csThresholdcol->getValue(); @@ -3814,6 +3879,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).structcol = pe->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).gridMethod = pe->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED"); + pe->locallab.spots.at(pp->locallab.selspot).mergecolMethod = pe->locallab.spots.at(pp->locallab.selspot).mergecolMethod || mergecolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).llcurve = pe->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).cccurve = pe->locallab.spots.at(pp->locallab.selspot).cccurve || !ccshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LHcurve = pe->locallab.spots.at(pp->locallab.selspot).LHcurve || !LHshape->isUnChanged(); @@ -3832,6 +3898,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).shadmaskcol = pe->locallab.spots.at(pp->locallab.selspot).shadmaskcol || shadmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskcol = pe->locallab.spots.at(pp->locallab.selspot).lapmaskcol || lapmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softradiuscol = pe->locallab.spots.at(pp->locallab.selspot).softradiuscol || softradiuscol->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).opacol = pe->locallab.spots.at(pp->locallab.selspot).opacol || opacol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskcurve || !Lmaskshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav = pe->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav || !LLmaskcolshapewav->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).csthresholdcol = pe->locallab.spots.at(pp->locallab.selspot).csthresholdcol || csThresholdcol->getEditedState(); @@ -4132,6 +4199,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).structcol = pedited->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).gridMethod = pedited->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED"); + pedited->locallab.spots.at(pp->locallab.selspot).mergecolMethod = pedited->locallab.spots.at(pp->locallab.selspot).mergecolMethod || mergecolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).llcurve = pedited->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).cccurve = pedited->locallab.spots.at(pp->locallab.selspot).cccurve || !ccshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LHcurve = pedited->locallab.spots.at(pp->locallab.selspot).LHcurve || !LHshape->isUnChanged(); @@ -4150,6 +4218,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).shadmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).shadmaskcol || shadmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskcol || lapmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softradiuscol = pedited->locallab.spots.at(pp->locallab.selspot).softradiuscol || softradiuscol->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).opacol = pedited->locallab.spots.at(pp->locallab.selspot).opacol || opacol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskcurve || !Lmaskshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav || !LLmaskcolshapewav->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).csthresholdcol = pedited->locallab.spots.at(pp->locallab.selspot).csthresholdcol || csThresholdcol->getEditedState(); @@ -4946,6 +5015,18 @@ void Locallab::gridMethodChanged() } } + +void Locallab::mergecolMethodChanged() +{ + // printf("mergecolMethodChanged\n"); + + if (getEnabled() && expcolor->getEnabled()) { + if (listener) { + listener->panelChanged(EvLocallabmergecolMethod, mergecolMethod->get_active_text()); + } + } +} + void Locallab::showmaskcolMethodChanged() { // printf("showmaskcolMethodChanged\n"); @@ -6183,6 +6264,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe shadmaskcol->setDefault(defSpot->shadmaskcol); lapmaskcol->setDefault(defSpot->lapmaskcol); softradiuscol->setDefault(defSpot->softradiuscol); + opacol->setDefault(defSpot->opacol); csThresholdcol->setDefault(defSpot->csthresholdcol); // Exposure expcomp->setDefault(defSpot->expcomp); @@ -6374,6 +6456,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe shadmaskcol->setDefaultEditedState(Irrelevant); lapmaskcol->setDefaultEditedState(Irrelevant); softradiuscol->setDefaultEditedState(Irrelevant); + opacol->setDefaultEditedState(Irrelevant); csThresholdcol->setDefaultEditedState(Irrelevant); // Exposure expcomp->setDefaultEditedState(Irrelevant); @@ -6569,6 +6652,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe shadmaskcol->setDefaultEditedState(defSpotState->shadmaskcol ? Edited : UnEdited); lapmaskcol->setDefaultEditedState(defSpotState->lapmaskcol ? Edited : UnEdited); softradiuscol->setDefaultEditedState(defSpotState->softradiuscol ? Edited : UnEdited); + opacol->setDefaultEditedState(defSpotState->opacol ? Edited : UnEdited); csThresholdcol->setDefaultEditedState(defSpotState->csthresholdcol ? Edited : UnEdited); // Exposure expcomp->setDefaultEditedState(defSpotState->expcomp ? Edited : UnEdited); @@ -6892,6 +6976,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == opacol) { + if (listener) { + listener->panelChanged(Evlocallabopacol, opacol->getTextValue()); + } + } + } // Exposure @@ -7925,6 +8015,7 @@ void Locallab::setBatchMode(bool batchMode) shadmaskcol->showEditedCB(); lapmaskcol->showEditedCB(); softradiuscol->showEditedCB(); + opacol->showEditedCB(); csThresholdcol->showEditedCB(); // Exposure expcomp->showEditedCB(); @@ -8099,6 +8190,7 @@ void Locallab::setBatchMode(bool batchMode) // Color & Light qualitycurveMethod->append(M("GENERAL_UNCHANGED")); gridMethod->append(M("GENERAL_UNCHANGED")); + mergecolMethod->append(M("GENERAL_UNCHANGED")); //exposure expMethod->append(M("GENERAL_UNCHANGED")); exnoiseMethod->append(M("GENERAL_UNCHANGED")); @@ -8266,6 +8358,7 @@ void Locallab::enableListener() curvactivConn.block(false); qualitycurveMethodConn.block(false); gridMethodConn.block(false); + mergecolMethodConn.block(false); inversConn.block(false); showmaskcolMethodConn.block(false); showmaskcolMethodConninv.block(false); @@ -8346,6 +8439,7 @@ void Locallab::disableListener() curvactivConn.block(true); qualitycurveMethodConn.block(true); gridMethodConn.block(true); + mergecolMethodConn.block(true); inversConn.block(true); showmaskcolMethodConn.block(true); showmaskcolMethodConninv.block(true); @@ -8445,6 +8539,14 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con gridMethod->set_active(1); } + if (pp->locallab.spots.at(index).mergecolMethod == "one") { + mergecolMethod->set_active(0); + } else if (pp->locallab.spots.at(index).mergecolMethod == "two") { + mergecolMethod->set_active(1); + } else if (pp->locallab.spots.at(index).mergecolMethod == "thr") { + mergecolMethod->set_active(2); + } + if (pp->locallab.spots.at(index).scalereti == 1) { LocalcurveEditorgainT->hide(); @@ -8477,6 +8579,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shadmaskcol->setValue(pp->locallab.spots.at(index).shadmaskcol); lapmaskcol->setValue(pp->locallab.spots.at(index).lapmaskcol); softradiuscol->setValue(pp->locallab.spots.at(index).softradiuscol); + opacol->setValue(pp->locallab.spots.at(index).opacol); Lmaskshape->setCurve(pp->locallab.spots.at(index).Lmaskcurve); LLmaskcolshapewav->setCurve(pp->locallab.spots.at(index).LLmaskcolcurvewav); csThresholdcol->setValue(pp->locallab.spots.at(index).csthresholdcol); @@ -8870,6 +8973,10 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con gridMethod->set_active_text(M("GENERAL_UNCHANGED")); } + if (!spotState->gridMethod) { + mergecolMethod->set_active_text(M("GENERAL_UNCHANGED")); + } + llshape->setUnChanged(!spotState->llcurve); ccshape->setUnChanged(!spotState->cccurve); LHshape->setUnChanged(!spotState->LHcurve); @@ -8888,6 +8995,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shadmaskcol->setEditedState(spotState->shadmaskcol ? Edited : UnEdited); lapmaskcol->setEditedState(spotState->lapmaskcol ? Edited : UnEdited); softradiuscol->setEditedState(spotState->softradiuscol ? Edited : UnEdited); + opacol->setEditedState(spotState->opacol ? Edited : UnEdited); Lmaskshape->setUnChanged(!spotState->Lmaskcurve); LLmaskcolshapewav->setUnChanged(!spotState->LLmaskcolcurvewav); csThresholdcol->setEditedState(spotState->csthresholdcol ? Edited : UnEdited); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index cd08eeedd..eb2c81aed 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -160,6 +160,7 @@ private: Adjuster* const lapmaskcol; Adjuster* const shadmaskcol; Adjuster* const softradiuscol; + Adjuster* const opacol; // Exposure Adjuster* const expcomp; Adjuster* const hlcompr; @@ -395,6 +396,9 @@ private: sigc::connection showmaskcolMethodConn; MyComboBoxText* const showmaskcolMethodinv; sigc::connection showmaskcolMethodConninv; + MyComboBoxText* const mergecolMethod; + sigc::connection mergecolMethodConn; + ThresholdAdjuster* const csThresholdcol; //Exposure MyComboBoxText* const showmaskexpMethod; @@ -454,6 +458,8 @@ private: Gtk::Button* const lumacontrastPlusButton; sigc::connection lumacontrastMinusPressedConn, lumaneutralPressedConn, lumacontrastPlusPressedConn; Gtk::Frame* gridFrame; + Gtk::Frame* mergecolFrame; + Gtk::Frame* merge1colFrame; Gtk::Frame* pdeFrame; Gtk::Frame* fatFrame; Gtk::Frame* fatSHFrame; @@ -545,6 +551,7 @@ private: void gridMethodChanged(); void showmaskcolMethodChanged(); void showmaskcolMethodChangedinv(); + void mergecolMethodChanged(); //Exposure void showmaskexpMethodChanged(); void showmaskexpMethodChangedinv(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 90cbebd29..5b16a7394 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1004,6 +1004,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).lapmaskcol = locallab.spots.at(j).lapmaskcol && pSpot.lapmaskcol == otherSpot.lapmaskcol; locallab.spots.at(j).qualitycurveMethod = locallab.spots.at(j).qualitycurveMethod && pSpot.qualitycurveMethod == otherSpot.qualitycurveMethod; locallab.spots.at(j).gridMethod = locallab.spots.at(j).gridMethod && pSpot.gridMethod == otherSpot.gridMethod; + locallab.spots.at(j).mergecolMethod = locallab.spots.at(j).mergecolMethod && pSpot.mergecolMethod == otherSpot.mergecolMethod; locallab.spots.at(j).llcurve = locallab.spots.at(j).llcurve && pSpot.llcurve == otherSpot.llcurve; locallab.spots.at(j).cccurve = locallab.spots.at(j).cccurve && pSpot.cccurve == otherSpot.cccurve; locallab.spots.at(j).LHcurve = locallab.spots.at(j).LHcurve && pSpot.LHcurve == otherSpot.LHcurve; @@ -1014,6 +1015,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).LLmaskcurve = locallab.spots.at(j).LLmaskcurve && pSpot.LLmaskcurve == otherSpot.LLmaskcurve; locallab.spots.at(j).HHmaskcurve = locallab.spots.at(j).HHmaskcurve && pSpot.HHmaskcurve == otherSpot.HHmaskcurve; locallab.spots.at(j).softradiuscol = locallab.spots.at(j).softradiuscol && pSpot.softradiuscol == otherSpot.softradiuscol; + locallab.spots.at(j).opacol = locallab.spots.at(j).opacol && pSpot.opacol == otherSpot.opacol; locallab.spots.at(j).Lmaskcurve = locallab.spots.at(j).Lmaskcurve && pSpot.Lmaskcurve == otherSpot.Lmaskcurve; locallab.spots.at(j).LLmaskcolcurvewav = locallab.spots.at(j).LLmaskcolcurvewav && pSpot.LLmaskcolcurvewav == otherSpot.LLmaskcolcurvewav; locallab.spots.at(j).csthresholdcol = locallab.spots.at(j).csthresholdcol && pSpot.csthresholdcol == otherSpot.csthresholdcol; @@ -2934,6 +2936,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).gridMethod = mods.locallab.spots.at(i).gridMethod; } + if (locallab.spots.at(i).mergecolMethod) { + toEdit.locallab.spots.at(i).mergecolMethod = mods.locallab.spots.at(i).mergecolMethod; + } + if (locallab.spots.at(i).llcurve) { toEdit.locallab.spots.at(i).llcurve = mods.locallab.spots.at(i).llcurve; } @@ -2974,6 +2980,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).softradiuscol = mods.locallab.spots.at(i).softradiuscol; } + if (locallab.spots.at(i).opacol) { + toEdit.locallab.spots.at(i).opacol = mods.locallab.spots.at(i).opacol; + } + if (locallab.spots.at(i).Lmaskcurve) { toEdit.locallab.spots.at(i).Lmaskcurve = mods.locallab.spots.at(i).Lmaskcurve; } @@ -4916,6 +4926,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : lapmaskcol(v), qualitycurveMethod(v), gridMethod(v), + mergecolMethod(v), llcurve(v), cccurve(v), LHcurve(v), @@ -4926,6 +4937,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : LLmaskcurve(v), HHmaskcurve(v), softradiuscol(v), + opacol(v), Lmaskcurve(v), LLmaskcolcurvewav(v), csthresholdcol(v), @@ -5223,6 +5235,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) lapmaskcol = v; qualitycurveMethod = v; gridMethod = v; + mergecolMethod = v; llcurve = v; cccurve = v; LHcurve = v; @@ -5233,6 +5246,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) LLmaskcurve = v; HHmaskcurve = v; softradiuscol = v; + opacol = v; Lmaskcurve = v; LLmaskcolcurvewav = v; csthresholdcol = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 01457ec2f..e4c860c60 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -422,6 +422,7 @@ public: bool lapmaskcol; bool qualitycurveMethod; bool gridMethod; + bool mergecolMethod; bool llcurve; bool cccurve; bool LHcurve; @@ -432,6 +433,7 @@ public: bool LLmaskcurve; bool HHmaskcurve; bool softradiuscol; + bool opacol; bool Lmaskcurve; bool LLmaskcolcurvewav; bool csthresholdcol;