diff --git a/rtdata/languages/default b/rtdata/languages/default index 2968d3ef2..052d07c50 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -762,7 +762,7 @@ HISTORY_MSG_506;L*a*b Spot locYT HISTORY_MSG_507;L*a*b Spot center HISTORY_MSG_508;L*a*b Spot circrad HISTORY_MSG_509;L*a*b Spot quality method -HISTORY_MSG_510;L*a*b Spot transit +HISTORY_MSG_510;L*a*b Spot transition HISTORY_MSG_511;L*a*b Spot thresh HISTORY_MSG_512;L*a*b Spot deltaE-weakening HISTORY_MSG_513;L*a*b Spot scope @@ -909,6 +909,7 @@ HISTORY_MSG_655;Local - SH mask slope HISTORY_MSG_656;Local - Color soft radius HISTORY_MSG_657;Local - Retinex soft radius HISTORY_MSG_658;Local - CBDL soft radius +HISTORY_MSG_659;L*a*b Spot transition-weakening HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2121,6 +2122,9 @@ TP_LOCALLAB_SYM;Symmetrical (mouse) TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;Tone curve TP_LOCALLAB_TRANSIT;Transition TP_LOCALLAB_TRANSIT_TOOLTIP;Adjust smoothness of transition between affected and unaffected areas. +TP_LOCALLAB_TRANSITVALUE;Transition value +TP_LOCALLAB_TRANSITWEAK;Transition weakening +TP_LOCALLAB_TRANSITWEAK_TOOLTIP;Adjust weakening : change smoothness process - 1 linear - 2 parabolic - 3 cubic TP_LOCALLAB_VIBRANCE;Vibrance TP_LOCALLAB_WARM;Warm - Cool & Color artifacts TP_LOCALLAB_WARM_TOOLTIP;This slider use Ciecam algorithm and acts as White Balance, it can warm or cool the area selected.\nIt can also in some cases reduce color artifacts. diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 317d3c6cb..af637019d 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -184,6 +184,7 @@ struct local_params { double rad; double stren; int trans; + float transweak; int dehaze; bool inv; bool invex; @@ -519,6 +520,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float blurcolor = (float) locallab.spots.at(sp).blurcolde; float blurSH = (float) locallab.spots.at(sp).blurSHde; int local_transit = locallab.spots.at(sp).transit; + float local_transitweak = (float)locallab.spots.at(sp).transitweak; float radius = (float) locallab.spots.at(sp).radius; double sharradius = ((double) locallab.spots.at(sp).sharradius); sharradius = CLIP42_35(sharradius); @@ -610,6 +612,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall } lp.trans = local_transit; + lp.transweak = local_transitweak; lp.rad = radius; lp.stren = strength; lp.sensbn = local_sensibn; @@ -706,6 +709,7 @@ static void calcTransitionrect(const float lox, const float loy, const float ach } else { zone = 1; localFactor = calcLocalFactorrect(lox, loy, lp.xc, lp.lx, lp.yc, lp.ly, ach); + localFactor = pow(localFactor, lp.transweak); } } else if (lox >= lp.xc && lox < lp.xc + lp.lx && loy < lp.yc && loy > lp.yc - lp.lyT) { @@ -714,6 +718,7 @@ static void calcTransitionrect(const float lox, const float loy, const float ach } else { zone = 1; localFactor = calcLocalFactorrect(lox, loy, lp.xc, lp.lx, lp.yc, lp.lyT, ach); + localFactor = pow(localFactor, lp.transweak); } @@ -723,6 +728,7 @@ static void calcTransitionrect(const float lox, const float loy, const float ach } else { zone = 1; localFactor = calcLocalFactorrect(lox, loy, lp.xc, lp.lxL, lp.yc, lp.lyT, ach); + localFactor = pow(localFactor, lp.transweak); } } else if (lox < lp.xc && lox > lp.xc - lp.lxL && loy > lp.yc && loy < lp.yc + lp.ly) { @@ -731,6 +737,7 @@ static void calcTransitionrect(const float lox, const float loy, const float ach } else { zone = 1; localFactor = calcLocalFactorrect(lox, loy, lp.xc, lp.lxL, lp.yc, lp.ly, ach); + localFactor = pow(localFactor, lp.transweak); } } @@ -755,6 +762,7 @@ static void calcTransition(const float lox, const float loy, const float ach, co if (zone) { localFactor = calcLocalFactor(lox, loy, lp.xc, lp.lx, lp.yc, lp.ly, ach); + localFactor = pow(localFactor, lp.transweak); } } } else if (lox >= lp.xc && lox < lp.xc + lp.lx && loy < lp.yc && loy > lp.yc - lp.lyT) { @@ -766,6 +774,7 @@ static void calcTransition(const float lox, const float loy, const float ach, co if (zone) { localFactor = calcLocalFactor(lox, loy, lp.xc, lp.lx, lp.yc, lp.lyT, ach); + localFactor = pow(localFactor, lp.transweak); } } } else if (lox < lp.xc && lox > lp.xc - lp.lxL && loy <= lp.yc && loy > lp.yc - lp.lyT) { @@ -777,6 +786,7 @@ static void calcTransition(const float lox, const float loy, const float ach, co if (zone) { localFactor = calcLocalFactor(lox, loy, lp.xc, lp.lxL, lp.yc, lp.lyT, ach); + localFactor = pow(localFactor, lp.transweak); } } } else if (lox < lp.xc && lox > lp.xc - lp.lxL && loy > lp.yc && loy < lp.yc + lp.ly) { @@ -788,6 +798,7 @@ static void calcTransition(const float lox, const float loy, const float ach, co if (zone) { localFactor = calcLocalFactor(lox, loy, lp.xc, lp.lxL, lp.yc, lp.ly, ach); + localFactor = pow(localFactor, lp.transweak); } } } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index c7c82b890..3f20ac273 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -685,6 +685,7 @@ enum ProcEventCode { Evlocallabsoftradiuscol = 655, Evlocallabsoftradiusret = 656, Evlocallabsoftradiuscb = 657, + EvLocallabSpotTransitweak = 658, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index aa3dc3598..bdda44411 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2357,6 +2357,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : thresh(2.0), iter(2.0), balan(1.0), + transitweak(1.0), avoid(false), // Color & Light expcolor(false), @@ -2537,6 +2538,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && thresh == other.thresh && iter == other.iter && balan == other.balan + && transitweak == other.transitweak && avoid == other.avoid // Color & Light && expcolor == other.expcolor @@ -3673,6 +3675,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).thresh, "Locallab", "Thresh_" + std::to_string(i), spot.thresh, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).iter, "Locallab", "Iter_" + std::to_string(i), spot.iter, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).balan, "Locallab", "Balan_" + std::to_string(i), spot.balan, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).transitweak, "Locallab", "Transitweak_" + std::to_string(i), spot.transitweak, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).avoid, "Locallab", "Avoid_" + std::to_string(i), spot.avoid, keyFile); // Color & Light saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expcolor, "Locallab", "Expcolor_" + std::to_string(i), spot.expcolor, keyFile); @@ -4938,6 +4941,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Thresh_" + std::to_string(i), pedited, spot.thresh, spotEdited.thresh); assignFromKeyfile(keyFile, "Locallab", "Iter_" + std::to_string(i), pedited, spot.iter, spotEdited.iter); assignFromKeyfile(keyFile, "Locallab", "Balan_" + std::to_string(i), pedited, spot.balan, spotEdited.balan); + assignFromKeyfile(keyFile, "Locallab", "Transitweak_" + std::to_string(i), pedited, spot.transitweak, spotEdited.transitweak); assignFromKeyfile(keyFile, "Locallab", "Avoid_" + std::to_string(i), pedited, spot.avoid, spotEdited.avoid); // Color & Light assignFromKeyfile(keyFile, "Locallab", "Expcolor_" + std::to_string(i), pedited, spot.expcolor, spotEdited.expcolor); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 0af821e71..8c032ed6c 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -957,6 +957,7 @@ struct LocallabParams { double thresh; double iter; double balan; + double transitweak; bool avoid; // Color & Light bool expcolor; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index d3dc43d60..6bdce4598 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -684,7 +684,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvLocallabslomaskSH LUMINANCECURVE, //EvLocallabsoftradiuscol LUMINANCECURVE, //EvLocallabsoftradiusret - LUMINANCECURVE //EvLocallabsoftradiuscb + LUMINANCECURVE, //EvLocallabsoftradiuscb + LUMINANCECURVE // EvLocallabSpotTransitweak }; diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index f06280768..d1d851fe4 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -57,10 +57,11 @@ ControlSpotPanel::ControlSpotPanel(): centerX_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTER_X"), -1000, 1000, 1, 0))), centerY_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTER_Y"), -1000, 1000, 1, 0))), circrad_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CIRCRADIUS"), 2, 150, 1, 18))), - transit_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TRANSIT"), 5, 95, 1, 60))), + transit_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TRANSITVALUE"), 5, 95, 1, 60))), thresh_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRESDELTAE"), 0.0, 8.0, 0.1, 2.0))), iter_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_PROXI"), 0.2, 4.0, 0.1, 2.0))), balan_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALAN"), 0.3, 1.7, 0.1, 1.0, Gtk::manage(new RTImage("rawtherapee-logo-16.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + transitweak_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TRANSITWEAK"), 0.5, 4.0, 0.1, 1.0))), avoid_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AVOID")))), @@ -227,9 +228,20 @@ ControlSpotPanel::ControlSpotPanel(): ctboxqualitymethod->pack_start(*qualityMethod_); pack_start(*ctboxqualitymethod); - pack_start(*transit_); + Gtk::Frame* const transitFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TRANSIT"))); + transitFrame->set_label_align(0.025, 0.5); + transitFrame->set_tooltip_text(M("TP_LOCALLAB_TRANSIT_TOOLTIP")); + ToolParamBlock* const transitBox = Gtk::manage(new ToolParamBlock()); transit_->set_tooltip_text(M("TP_LOCALLAB_TRANSIT_TOOLTIP")); + transitweak_->set_tooltip_text(M("TP_LOCALLAB_TRANSITWEAK_TOOLTIP")); transit_->setAdjusterListener(this); + transitweak_->setAdjusterListener(this); + + transitBox->pack_start(*transit_); + transitBox->pack_start(*transitweak_); + transitFrame->add(*transitBox); + pack_start(*transitFrame); + Gtk::Frame* const artifFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_ARTIF"))); artifFrame->set_label_align(0.025, 0.5); @@ -487,6 +499,7 @@ void ControlSpotPanel::load_ControlSpot_param() thresh_->setValue(static_cast(row[spots_.thresh])); iter_->setValue(static_cast(row[spots_.iter])); balan_->setValue(static_cast(row[spots_.balan])); + transitweak_->setValue(static_cast(row[spots_.transitweak])); avoid_->set_active(row[spots_.avoid]); } @@ -875,6 +888,7 @@ void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval) } } + if (a == thresh_) { row[spots_.thresh] = thresh_->getValue(); @@ -899,7 +913,15 @@ void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvLocallabSpotbalan, balan_->getTextValue()); } } - + + if (a == transitweak_) { + row[spots_.transitweak] = transitweak_->getValue(); + + if (listener) { + listener->panelChanged(EvLocallabSpotTransitweak, transitweak_->getTextValue()); + } + } + } void ControlSpotPanel::avoidChanged() @@ -965,6 +987,7 @@ void ControlSpotPanel::disableParamlistener(bool cond) thresh_->block(cond); iter_->block(cond); balan_->block(cond); + transitweak_->block(cond); avoidConn_.block(cond); } @@ -990,6 +1013,7 @@ void ControlSpotPanel::setParamEditable(bool cond) thresh_->set_sensitive(cond); iter_->set_sensitive(cond); balan_->set_sensitive(cond); + transitweak_->set_sensitive(cond); avoid_->set_sensitive(cond); } @@ -1695,6 +1719,7 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(int id) r->thresh = row[spots_.thresh]; r->iter = row[spots_.iter]; r->balan = row[spots_.balan]; + r->transitweak = row[spots_.transitweak]; r->avoid = row[spots_.avoid]; return r; @@ -1817,6 +1842,7 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot) row[spots_.thresh] = newSpot->thresh; row[spots_.iter] = newSpot->iter; row[spots_.balan] = newSpot->balan; + row[spots_.transitweak] = newSpot->transitweak; row[spots_.avoid] = newSpot->avoid; updateParamVisibility(); disableParamlistener(false); @@ -1861,6 +1887,7 @@ int ControlSpotPanel::updateControlSpot(SpotRow* spot) row[spots_.thresh] = spot->thresh; row[spots_.iter] = spot->iter; row[spots_.balan] = spot->balan; + row[spots_.transitweak] = spot->transitweak; row[spots_.avoid] = spot->avoid; updateControlSpotCurve(row); @@ -1951,6 +1978,7 @@ ControlSpotPanel::SpotEdited* ControlSpotPanel::getEditedStates() se->thresh = thresh_->getEditedState(); se->iter = iter_->getEditedState(); se->balan = balan_->getEditedState(); + se->transitweak = transitweak_->getEditedState(); se->avoid = !avoid_->get_inconsistent(); return se; @@ -2018,6 +2046,7 @@ void ControlSpotPanel::setEditedStates(SpotEdited* se) thresh_->setEditedState(se->thresh ? Edited : UnEdited); iter_->setEditedState(se->iter ? Edited : UnEdited); balan_->setEditedState(se->balan ? Edited : UnEdited); + transitweak_->setEditedState(se->transitweak ? Edited : UnEdited); avoid_->set_inconsistent(multiImage && !se->avoid); // Update Control Spot GUI according to widgets edited states @@ -2061,6 +2090,7 @@ void ControlSpotPanel::setDefaults(const rtengine::procparams::ProcParams * defP thresh_->setDefault(defSpot->thresh); iter_->setDefault(defSpot->iter); balan_->setDefault(defSpot->balan); + transitweak_->setDefault(defSpot->transitweak); // Set default edited states for adjusters if (!pedited) { @@ -2078,6 +2108,7 @@ void ControlSpotPanel::setDefaults(const rtengine::procparams::ProcParams * defP thresh_->setDefaultEditedState(Irrelevant); iter_->setDefaultEditedState(Irrelevant); balan_->setDefaultEditedState(Irrelevant); + transitweak_->setDefaultEditedState(Irrelevant); } else { const LocallabParamsEdited::LocallabSpotEdited* defSpotState = new LocallabParamsEdited::LocallabSpotEdited(true); @@ -2099,6 +2130,7 @@ void ControlSpotPanel::setDefaults(const rtengine::procparams::ProcParams * defP thresh_->setDefaultEditedState(defSpotState->thresh ? Edited : UnEdited); iter_->setDefaultEditedState(defSpotState->iter ? Edited : UnEdited); balan_->setDefaultEditedState(defSpotState->balan ? Edited : UnEdited); + transitweak_->setDefaultEditedState(defSpotState->transitweak ? Edited : UnEdited); } } @@ -2121,6 +2153,7 @@ void ControlSpotPanel::setBatchMode(bool batchMode) thresh_->showEditedCB(); iter_->showEditedCB(); balan_->showEditedCB(); + transitweak_->showEditedCB(); // Set batch mode for comboBoxText shape_->append(M("GENERAL_UNCHANGED")); @@ -2158,6 +2191,7 @@ ControlSpotPanel::ControlSpots::ControlSpots() add(thresh); add(iter); add(balan); + add(transitweak); add(avoid); } diff --git a/rtgui/controlspotpanel.h b/rtgui/controlspotpanel.h index c43384ed5..0c9e72d25 100644 --- a/rtgui/controlspotpanel.h +++ b/rtgui/controlspotpanel.h @@ -63,6 +63,7 @@ public: double thresh; double iter; double balan; + double transitweak; bool avoid; }; @@ -92,6 +93,7 @@ public: bool thresh; bool iter; bool balan; + bool transitweak; bool avoid; }; @@ -283,6 +285,7 @@ private: Gtk::TreeModelColumn thresh; Gtk::TreeModelColumn iter; Gtk::TreeModelColumn balan; + Gtk::TreeModelColumn transitweak; Gtk::TreeModelColumn avoid; }; @@ -340,6 +343,7 @@ private: Adjuster* const thresh_; Adjuster* const iter_; Adjuster* const balan_; + Adjuster* const transitweak_; Gtk::CheckButton* const avoid_; sigc::connection avoidConn_; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 1e9b95385..8c403a32c 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -1303,6 +1303,7 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) r->thresh = pp->locallab.spots.at(i).thresh; r->iter = pp->locallab.spots.at(i).iter; r->balan = pp->locallab.spots.at(i).balan; + r->transitweak = pp->locallab.spots.at(i).transitweak; r->avoid = pp->locallab.spots.at(i).avoid; expsettings->addControlSpot(r); @@ -1404,6 +1405,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) r->thresh = newSpot->thresh; r->iter = newSpot->iter; r->balan = newSpot->balan; + r->transitweak = newSpot->transitweak; r->avoid = newSpot->avoid; expsettings->addControlSpot(r); @@ -1591,6 +1593,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) r->thresh = newSpot->thresh; r->iter = newSpot->iter; r->balan = newSpot->balan; + r->transitweak = newSpot->transitweak; r->avoid = newSpot->avoid; expsettings->addControlSpot(r); @@ -1680,6 +1683,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).thresh = r->thresh; pp->locallab.spots.at(pp->locallab.selspot).iter = r->iter; pp->locallab.spots.at(pp->locallab.selspot).balan = r->balan; + pp->locallab.spots.at(pp->locallab.selspot).transitweak = r->transitweak; pp->locallab.spots.at(pp->locallab.selspot).avoid = r->avoid; // Color & Light pp->locallab.spots.at(pp->locallab.selspot).expcolor = expcolor->getEnabled(); @@ -1889,6 +1893,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).transit = pe->locallab.spots.at(pp->locallab.selspot).transit || se->transit; pe->locallab.spots.at(pp->locallab.selspot).thresh = pe->locallab.spots.at(pp->locallab.selspot).thresh || se->thresh; pe->locallab.spots.at(pp->locallab.selspot).iter = pe->locallab.spots.at(pp->locallab.selspot).iter || se->iter; + pe->locallab.spots.at(pp->locallab.selspot).transitweak = pe->locallab.spots.at(pp->locallab.selspot).transitweak || se->transitweak; pe->locallab.spots.at(pp->locallab.selspot).balan = pe->locallab.spots.at(pp->locallab.selspot).balan || se->balan; pe->locallab.spots.at(pp->locallab.selspot).avoid = pe->locallab.spots.at(pp->locallab.selspot).avoid || se->avoid; // Color & Light @@ -2072,6 +2077,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).thresh = pedited->locallab.spots.at(pp->locallab.selspot).thresh || se->thresh; pedited->locallab.spots.at(pp->locallab.selspot).iter = pedited->locallab.spots.at(pp->locallab.selspot).iter || se->iter; pedited->locallab.spots.at(pp->locallab.selspot).balan = pedited->locallab.spots.at(pp->locallab.selspot).balan || se->balan; + pedited->locallab.spots.at(pp->locallab.selspot).transitweak = pedited->locallab.spots.at(pp->locallab.selspot).transitweak || se->transitweak; pedited->locallab.spots.at(pp->locallab.selspot).avoid = pedited->locallab.spots.at(pp->locallab.selspot).avoid || se->avoid; // Color & Light pedited->locallab.spots.at(pp->locallab.selspot).expcolor = pedited->locallab.spots.at(pp->locallab.selspot).expcolor || !expcolor->get_inconsistent(); @@ -4569,6 +4575,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con se->thresh = spotState->thresh; se->iter = spotState->iter; se->balan = spotState->balan; + se->transitweak = spotState->transitweak; se->avoid = spotState->avoid; expsettings->setEditedStates(se); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 00a35ed11..df2037dba 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -947,6 +947,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).thresh = locallab.spots.at(j).thresh && pSpot.thresh == otherSpot.thresh; locallab.spots.at(j).iter = locallab.spots.at(j).iter && pSpot.iter == otherSpot.iter; locallab.spots.at(j).balan = locallab.spots.at(j).balan && pSpot.balan == otherSpot.balan; + locallab.spots.at(j).transitweak = locallab.spots.at(j).transitweak && pSpot.transitweak == otherSpot.transitweak; locallab.spots.at(j).avoid = locallab.spots.at(j).avoid && pSpot.avoid == otherSpot.avoid; // Color & Light locallab.spots.at(j).expcolor = locallab.spots.at(j).expcolor && pSpot.expcolor == otherSpot.expcolor; @@ -2596,6 +2597,7 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).transit = mods.locallab.spots.at(i).transit; } + if (locallab.spots.at(i).thresh) { toEdit.locallab.spots.at(i).thresh = mods.locallab.spots.at(i).thresh; } @@ -2608,6 +2610,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).balan = mods.locallab.spots.at(i).balan; } + if (locallab.spots.at(i).transitweak) { + toEdit.locallab.spots.at(i).transitweak = mods.locallab.spots.at(i).transitweak; + } + if (locallab.spots.at(i).avoid) { toEdit.locallab.spots.at(i).avoid = mods.locallab.spots.at(i).avoid; } @@ -4139,6 +4145,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : thresh(v), iter(v), balan(v), + transitweak(v), avoid(v), // Color & Light expcolor(v), @@ -4316,6 +4323,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) thresh = v; iter = v; balan = v; + transitweak = v; avoid = v; // Color & Light expcolor = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 21ba52f4d..411b90867 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -374,6 +374,7 @@ public: bool thresh; bool iter; bool balan; + bool transitweak; bool avoid; // Color & Light bool expcolor;