From b69f9dc84bdaa66c462601b98de6e356d53dccf3 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 14 Mar 2019 16:53:03 +0100 Subject: [PATCH] Add chroma and gamma to Color Mask - use patch Floessie --- rtdata/languages/default | 3 ++ rtengine/improccoordinator.cc | 16 +++++++++- rtengine/iplocallab.cc | 25 +++++++++++++-- rtengine/procevents.h | 3 ++ rtengine/procparams.cc | 12 ++++++++ rtengine/procparams.h | 3 ++ rtengine/refreshmap.cc | 5 ++- rtgui/controlspotpanel.h | 2 ++ rtgui/locallab.cc | 58 ++++++++++++++++++++++++++++++++++- rtgui/locallab.h | 3 ++ rtgui/paramsedited.cc | 21 +++++++++++++ rtgui/paramsedited.h | 3 ++ 12 files changed, 149 insertions(+), 5 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 74552bfc9..16c8c9160 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -900,6 +900,9 @@ HISTORY_MSG_646;Local - Exp mask chroma HISTORY_MSG_647;Local - Exp mask gamma HISTORY_MSG_648;Local - Exp mask slope HISTORY_MSG_649;Local - Exp soft radius +HISTORY_MSG_650;Local - Color mask chroma +HISTORY_MSG_651;Local - Color mask gamma +HISTORY_MSG_652;Local - Color mask slope HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index f0a2ccc37..354b363ae 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -169,7 +169,21 @@ ImProcCoordinator::ImProcCoordinator() : shtonecurveloc(65536, 0), tonecurveloc(65536, 0), lightCurveloc(32770, 0), - locallutili(false), localcutili(false), localskutili(false), localexutili(false), LHutili(false), HHutili(false), + locallutili(false), + localcutili(false), + localskutili(false), + localexutili(false), + llmasutili(false), + lhmasutili(false), + lcmasutili(false), + lcmasexputili(false), + lhmasexputili(false), + llmasexputili(false), + lcmasSHutili(false), + lhmasSHutili(false), + llmasSHutili(false), + LHutili(false), + HHutili(false), huerefs(500, -100000.f), huerefblurs(500, -100000.f), chromarefblurs(500, -100000.f), diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index aba15624e..96a28e691 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -146,6 +146,9 @@ struct local_params { float struexc; float blendmacol; float radmacol; + float chromacol; + float gammacol; + float slomacol; float radmaexp; float chromaexp; float gammaexp; @@ -482,6 +485,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float structcolor = (float) locallab.spots.at(sp).structcol; float blendmaskcolor = ((float) locallab.spots.at(sp).blendmaskcol) / 100.f ; float radmaskcolor = ((float) locallab.spots.at(sp).radmaskcol); + float chromaskcolor = ((float) locallab.spots.at(sp).chromaskcol); + float gammaskcolor = ((float) locallab.spots.at(sp).gammaskcol); + float slomaskcolor = ((float) locallab.spots.at(sp).slomaskcol); float blendmaskexpo = ((float) locallab.spots.at(sp).blendmaskexp) / 100.f ; float radmaskexpo = ((float) locallab.spots.at(sp).radmaskexp); float chromaskexpo = ((float) locallab.spots.at(sp).chromaskexp); @@ -540,6 +546,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.strengrid = strengthgrid; lp.blendmacol = blendmaskcolor; lp.radmacol = radmaskcolor; + lp.chromacol = chromaskcolor; + lp.gammacol = gammaskcolor; + lp.slomacol = slomaskcolor; lp.radmaexp = radmaskexpo; lp.chromaexp = chromaskexpo; lp.gammaexp = gammaskexpo; @@ -8236,8 +8245,18 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float meanfab = 0.f; float fab = 0.f; - mean_fab(begx, begy, cx, cy, xEn, yEn, bufcolorig, transformed, original, fab, meanfab, 0.f); + mean_fab(begx, begy, cx, cy, xEn, yEn, bufcolorig, transformed, original, fab, meanfab, lp.chromacol); + LUTf *gammamask = nullptr; + LUTf lutTonemask; + lutTonemask(65536); + double pwr = 1.0 / lp.gammacol; + double gamm = lp.gammacol; + double ts = lp.slomacol; + double gamm2 = lp.gammacol; + + gamma_mask(lutTonemask, pwr, gamm, ts, gamm2); + gammamask = &lutTonemask; #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) @@ -8321,7 +8340,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; } - // } } if ((lp.showmaskcolmet == 2 || lp.enaColorMask || lp.showmaskcolmet == 3) && lp.radmacol > 0.f) { @@ -8334,7 +8352,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o for (int ir = 0; ir < bfh; ir++) //fill with 0 for (int jr = 0; jr < bfw; jr++) { + float L_; bufmaskblurcol->L[ir][jr] = LIM01(ble[ir][jr]) * 32768.f; + L_ = 2.f * bufmaskblurcol->L[ir][jr]; + bufmaskblurcol->L[ir][jr] = 0.5f * (*gammamask)[L_]; } } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 5e3ce7825..b6443fb08 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -676,6 +676,9 @@ enum ProcEventCode { Evlocallabgammaskexp = 646, Evlocallabslomaskexp = 647, Evlocallabsoftradiusexp = 648, + Evlocallabchromaskcol = 649, + Evlocallabgammaskcol = 650, + Evlocallabslomaskcol = 651, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 95d36cf1f..176b3badb 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2374,6 +2374,9 @@ LocallabParams::LocallabSpot::LocallabSpot() : blurcolde(5), blendmaskcol(0), radmaskcol(10.0), + chromaskcol(0.0), + gammaskcol(1.0), + slomaskcol(0.0), qualitycurveMethod("none"), gridMethod("one"), llcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, @@ -2545,6 +2548,9 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && structcol == other.structcol && blendmaskcol == other.blendmaskcol && radmaskcol == other.radmaskcol + && chromaskcol == other.chromaskcol + && gammaskcol == other.gammaskcol + && slomaskcol == other.slomaskcol && qualitycurveMethod == other.qualitycurveMethod && gridMethod == other.gridMethod && llcurve == other.llcurve @@ -3675,6 +3681,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blurcolde, "Locallab", "Blurcolde_" + std::to_string(i), spot.blurcolde, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskcol, "Locallab", "Blendmaskcol_" + std::to_string(i), spot.blendmaskcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radmaskcol, "Locallab", "Radmaskcol_" + std::to_string(i), spot.radmaskcol, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromaskcol, "Locallab", "Chromaskcol_" + std::to_string(i), spot.chromaskcol, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskcol, "Locallab", "Gammaskcol_" + std::to_string(i), spot.gammaskcol, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskcol, "Locallab", "Slomaskcol_" + std::to_string(i), spot.slomaskcol, 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).llcurve, "Locallab", "LLCurve_" + std::to_string(i), spot.llcurve, keyFile); @@ -4932,6 +4941,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Blurcolde_" + std::to_string(i), pedited, spot.blurcolde, spotEdited.blurcolde); assignFromKeyfile(keyFile, "Locallab", "Blendmaskcol_" + std::to_string(i), pedited, spot.blendmaskcol, spotEdited.blendmaskcol); assignFromKeyfile(keyFile, "Locallab", "Radmaskcol_" + std::to_string(i), pedited, spot.radmaskcol, spotEdited.radmaskcol); + assignFromKeyfile(keyFile, "Locallab", "Chromaskcol_" + std::to_string(i), pedited, spot.chromaskcol, spotEdited.chromaskcol); + assignFromKeyfile(keyFile, "Locallab", "Gammaskcol_" + std::to_string(i), pedited, spot.gammaskcol, spotEdited.gammaskcol); + assignFromKeyfile(keyFile, "Locallab", "Slomaskcol_" + std::to_string(i), pedited, spot.slomaskcol, spotEdited.slomaskcol); 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", "LLCurve_" + std::to_string(i), pedited, spot.llcurve, spotEdited.llcurve); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 30bf61d69..19da3f8da 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -974,6 +974,9 @@ struct LocallabParams { int blurcolde; int blendmaskcol; double radmaskcol; + double chromaskcol; + double gammaskcol; + double slomaskcol; Glib::ustring qualitycurveMethod; Glib::ustring gridMethod; std::vector llcurve; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index eee40d3c5..3c961afce 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -675,7 +675,10 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvLocallabchromaskexp LUMINANCECURVE, //EvLocallabgammaskexp LUMINANCECURVE, //EvLocallabslomaskexp - LUMINANCECURVE //EvLocallabsoftradiusexp + LUMINANCECURVE, //EvLocallabsoftradiusexp + LUMINANCECURVE, //EvLocallabchromaskcol + LUMINANCECURVE, //EvLocallabgammaskcol + LUMINANCECURVE //EvLocallabslomaskcol }; diff --git a/rtgui/controlspotpanel.h b/rtgui/controlspotpanel.h index ba3906df2..57453a531 100644 --- a/rtgui/controlspotpanel.h +++ b/rtgui/controlspotpanel.h @@ -249,6 +249,8 @@ private: bool button1Released(); bool drag1(int modifierKey); + using ToolPanel::setDefaults; + class ControlSpots: public Gtk::TreeModel::ColumnRecord { diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index af97e6989..bb2720bc1 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -86,6 +86,9 @@ Locallab::Locallab(): blurcolde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))), + chromaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), + gammaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), + slomaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), // 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))), @@ -261,6 +264,9 @@ Locallab::Locallab(): blendmaskcol->setAdjusterListener(this); radmaskcol->setAdjusterListener(this); + chromaskcol->setAdjusterListener(this); + gammaskcol->setAdjusterListener(this); + slomaskcol->setAdjusterListener(this); qualitycurveMethod->append(M("TP_LOCALLAB_CURVNONE")); qualitycurveMethod->append(M("TP_LOCALLAB_CURVCURR")); @@ -404,6 +410,9 @@ Locallab::Locallab(): maskcolBox->pack_start(*maskCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0); maskcolBox->pack_start(*radmaskcol, Gtk::PACK_SHRINK, 0); + maskcolBox->pack_start(*chromaskcol, Gtk::PACK_SHRINK, 0); + maskcolBox->pack_start(*gammaskcol, Gtk::PACK_SHRINK, 0); + maskcolBox->pack_start(*slomaskcol, Gtk::PACK_SHRINK, 0); maskcolFrame->add(*maskcolBox); colorBox->pack_start(*maskcolFrame); @@ -1694,6 +1703,9 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = HHmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskcol = blendmaskcol->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskcol = radmaskcol->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).chromaskcol = chromaskcol->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).gammaskcol = gammaskcol->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).slomaskcol = slomaskcol->getValue(); // Exposure pp->locallab.spots.at(pp->locallab.selspot).expexpose = expexpose->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).expcomp = expcomp->getValue(); @@ -1882,6 +1894,9 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).blurcolde = pe->locallab.spots.at(pp->locallab.selspot).blurcolde || blurcolde->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskcol = pe->locallab.spots.at(pp->locallab.selspot).blendmaskcol || blendmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskcol = pe->locallab.spots.at(pp->locallab.selspot).radmaskcol || radmaskcol->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).chromaskcol = pe->locallab.spots.at(pp->locallab.selspot).chromaskcol || chromaskcol->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).gammaskcol = pe->locallab.spots.at(pp->locallab.selspot).gammaskcol || gammaskcol->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).slomaskcol = pe->locallab.spots.at(pp->locallab.selspot).slomaskcol || slomaskcol->getEditedState(); // Exposure pe->locallab.spots.at(pp->locallab.selspot).expexpose = pe->locallab.spots.at(pp->locallab.selspot).expexpose || !expexpose->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).expcomp = pe->locallab.spots.at(pp->locallab.selspot).expcomp || expcomp->getEditedState(); @@ -2056,6 +2071,9 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).blurcolde = pedited->locallab.spots.at(pp->locallab.selspot).blurcolde || blurcolde->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcol || blendmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).radmaskcol || radmaskcol->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).chromaskcol = pedited->locallab.spots.at(pp->locallab.selspot).chromaskcol || chromaskcol->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).gammaskcol = pedited->locallab.spots.at(pp->locallab.selspot).gammaskcol || gammaskcol->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).slomaskcol = pedited->locallab.spots.at(pp->locallab.selspot).slomaskcol || slomaskcol->getEditedState(); // Exposure pedited->locallab.spots.at(pp->locallab.selspot).expexpose = pedited->locallab.spots.at(pp->locallab.selspot).expexpose || !expexpose->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).expcomp = pedited->locallab.spots.at(pp->locallab.selspot).expcomp || expcomp->getEditedState(); @@ -2951,6 +2969,9 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe blurcolde->setDefault((double)defSpot->blurcolde); blendmaskcol->setDefault((double)defSpot->blendmaskcol); radmaskcol->setDefault(defSpot->radmaskcol); + chromaskcol->setDefault(defSpot->chromaskcol); + gammaskcol->setDefault(defSpot->gammaskcol); + slomaskcol->setDefault(defSpot->slomaskcol); // Exposure expcomp->setDefault(defSpot->expcomp); hlcompr->setDefault((double)defSpot->hlcompr); @@ -3052,6 +3073,9 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe blurcolde->setDefaultEditedState(Irrelevant); blendmaskcol->setDefaultEditedState(Irrelevant); radmaskcol->setDefaultEditedState(Irrelevant); + chromaskcol->setDefaultEditedState(Irrelevant); + gammaskcol->setDefaultEditedState(Irrelevant); + slomaskcol->setDefaultEditedState(Irrelevant); // Exposure expcomp->setDefaultEditedState(Irrelevant); hlcompr->setDefaultEditedState(Irrelevant); @@ -3157,6 +3181,9 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe blurcolde->setDefaultEditedState(defSpotState->blurcolde ? Edited : UnEdited); blendmaskcol->setDefaultEditedState(defSpotState->blendmaskcol ? Edited : UnEdited); radmaskcol->setDefaultEditedState(defSpotState->radmaskcol ? Edited : UnEdited); + chromaskcol->setDefaultEditedState(defSpotState->chromaskcol ? Edited : UnEdited); + gammaskcol->setDefaultEditedState(defSpotState->gammaskcol ? Edited : UnEdited); + slomaskcol->setDefaultEditedState(defSpotState->slomaskcol ? Edited : UnEdited); // Exposure expcomp->setDefaultEditedState(defSpotState->expcomp ? Edited : UnEdited); hlcompr->setDefaultEditedState(defSpotState->hlcompr ? Edited : UnEdited); @@ -3342,6 +3369,24 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == chromaskcol) { + if (listener) { + listener->panelChanged(Evlocallabchromaskcol, chromaskcol->getTextValue()); + } + } + + if (a == gammaskcol) { + if (listener) { + listener->panelChanged(Evlocallabgammaskcol, gammaskcol->getTextValue()); + } + } + + if (a == slomaskcol) { + if (listener) { + listener->panelChanged(Evlocallabslomaskcol, slomaskcol->getTextValue()); + } + } + } // Exposure @@ -3889,6 +3934,9 @@ void Locallab::setBatchMode(bool batchMode) blurcolde->showEditedCB(); blendmaskcol->showEditedCB(); radmaskcol->showEditedCB(); + chromaskcol->showEditedCB(); + gammaskcol->showEditedCB(); + slomaskcol->showEditedCB(); // Exposure expcomp->showEditedCB(); hlcompr->showEditedCB(); @@ -4058,7 +4106,9 @@ void Locallab::unsubscribe() void Locallab::colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) { - float R, G, B; + float R = 0.f; + float G = 0.f; + float B = 0.f; if (elemType == ColorCaller::CCET_VERTICAL_BAR) { valY = 0.5; @@ -4262,6 +4312,9 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con blurcolde->setValue(pp->locallab.spots.at(index).blurcolde); blendmaskcol->setValue(pp->locallab.spots.at(index).blendmaskcol); radmaskcol->setValue(pp->locallab.spots.at(index).radmaskcol); + chromaskcol->setValue(pp->locallab.spots.at(index).chromaskcol); + gammaskcol->setValue(pp->locallab.spots.at(index).gammaskcol); + slomaskcol->setValue(pp->locallab.spots.at(index).slomaskcol); // Exposure expexpose->setEnabled(pp->locallab.spots.at(index).expexpose); @@ -4479,6 +4532,9 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con blurcolde->setEditedState(spotState->blurcolde ? Edited : UnEdited); blendmaskcol->setEditedState(spotState->blendmaskcol ? Edited : UnEdited); radmaskcol->setEditedState(spotState->radmaskcol ? Edited : UnEdited); + chromaskcol->setEditedState(spotState->chromaskcol ? Edited : UnEdited); + gammaskcol->setEditedState(spotState->gammaskcol ? Edited : UnEdited); + slomaskcol->setEditedState(spotState->slomaskcol ? Edited : UnEdited); // Exposure expexpose->set_inconsistent(!spotState->expexpose); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index d191d4dae..536f05517 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -104,6 +104,9 @@ private: Adjuster* const blurcolde; Adjuster* const blendmaskcol; Adjuster* const radmaskcol; + Adjuster* const chromaskcol; + Adjuster* const gammaskcol; + Adjuster* const slomaskcol; // Exposure Adjuster* const expcomp; Adjuster* const hlcompr; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index cd29fc243..50b53071b 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -963,6 +963,9 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).blurcolde = locallab.spots.at(j).blurcolde && pSpot.blurcolde == otherSpot.blurcolde; locallab.spots.at(j).blendmaskcol = locallab.spots.at(j).blendmaskcol && pSpot.blendmaskcol == otherSpot.blendmaskcol; locallab.spots.at(j).radmaskcol = locallab.spots.at(j).radmaskcol && pSpot.radmaskcol == otherSpot.radmaskcol; + locallab.spots.at(j).chromaskcol = locallab.spots.at(j).chromaskcol && pSpot.chromaskcol == otherSpot.chromaskcol; + locallab.spots.at(j).gammaskcol = locallab.spots.at(j).gammaskcol && pSpot.gammaskcol == otherSpot.gammaskcol; + locallab.spots.at(j).slomaskcol = locallab.spots.at(j).slomaskcol && pSpot.slomaskcol == otherSpot.slomaskcol; 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).llcurve = locallab.spots.at(j).llcurve && pSpot.llcurve == otherSpot.llcurve; @@ -2661,6 +2664,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).radmaskcol = mods.locallab.spots.at(i).radmaskcol; } + if (locallab.spots.at(i).chromaskcol) { + toEdit.locallab.spots.at(i).chromaskcol = mods.locallab.spots.at(i).chromaskcol; + } + + if (locallab.spots.at(i).gammaskcol) { + toEdit.locallab.spots.at(i).gammaskcol = mods.locallab.spots.at(i).gammaskcol; + } + + if (locallab.spots.at(i).slomaskcol) { + toEdit.locallab.spots.at(i).slomaskcol = mods.locallab.spots.at(i).slomaskcol; + } + if (locallab.spots.at(i).qualitycurveMethod) { toEdit.locallab.spots.at(i).qualitycurveMethod = mods.locallab.spots.at(i).qualitycurveMethod; } @@ -4112,6 +4127,9 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : blurcolde(v), blendmaskcol(v), radmaskcol(v), + chromaskcol(v), + gammaskcol(v), + slomaskcol(v), qualitycurveMethod(v), gridMethod(v), llcurve(v), @@ -4281,6 +4299,9 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) blurcolde = v; blendmaskcol = v; radmaskcol = v; + chromaskcol = v; + gammaskcol = v; + slomaskcol = v; qualitycurveMethod = v; gridMethod = v; llcurve = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index ed76a19b8..411b823a0 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -390,6 +390,9 @@ public: bool blurcolde; bool blendmaskcol; bool radmaskcol; + bool chromaskcol; + bool gammaskcol; + bool slomaskcol; bool qualitycurveMethod; bool gridMethod; bool llcurve;