From a307b5a739efaefa89521808b073fa31aaa9ae7d Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 10 Sep 2019 11:14:40 +0200 Subject: [PATCH] Improve Exposure PDE --- rtdata/languages/default | 2 ++ rtengine/dcrop.cc | 2 +- rtengine/improccoordinator.cc | 2 +- rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 19 ++++++++++++++++++- rtengine/procevents.h | 1 + rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtengine/refreshmap.cc | 3 ++- rtengine/rtthumbnail.cc | 2 +- rtengine/simpleprocess.cc | 2 +- rtengine/tmo_fattal02.cc | 4 ++-- rtgui/locallab.cc | 20 ++++++++++++++++++++ rtgui/locallab.h | 1 + rtgui/paramsedited.cc | 13 ++++++++++--- rtgui/paramsedited.h | 1 + 16 files changed, 67 insertions(+), 12 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index f54ce81ca..341aa6e6b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -982,6 +982,7 @@ HISTORY_MSG_742;Local - Exp Laplacian gamma HISTORY_MSG_743;Local - Exp Fattal Amount HISTORY_MSG_744;Local - Exp Fattal Detail HISTORY_MSG_745;Local - Exp Fattal Anchor +HISTORY_MSG_746;Local - Exp Fattal levels HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2146,6 +2147,7 @@ TP_LOCALLAB_FATFRA;PDE Fattal - Dynamic Range Compression TP_LOCALLAB_FATAMOUNT;Amount TP_LOCALLAB_FATDETAIL;Detail TP_LOCALLAB_FATANCHOR;Anchor +TP_LOCALLAB_FATLEVEL;Detail levels TP_LOCALLAB_QUAL_METHOD;Global quality TP_LOCALLAB_QUALCURV_METHOD;Curves type TP_LOCALLAB_GAM;Gamma diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 20e286050..ec5c9f71d 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -751,7 +751,7 @@ void Crop::update(int todo) if (need_fattal) { parent->ipf.dehaze(f, params.dehaze); - parent->ipf.ToneMapFattal02(f, params.fattal); + parent->ipf.ToneMapFattal02(f, params.fattal, 3); } // crop back to the size expected by the rest of the pipeline diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 89d0bb3a1..ea5e3eda1 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -576,7 +576,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } ipf.dehaze(orig_prev, params->dehaze); - ipf.ToneMapFattal02(orig_prev, params->fattal); + ipf.ToneMapFattal02(orig_prev, params->fattal, 3); if (oprevi != orig_prev) { delete oprevi; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index a95f3fb82..8663c3925 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -416,7 +416,7 @@ public: void BadpixelsLab(LabImage * lab, double radius, int thresh, float chrom); void dehaze(Imagefloat *rgb, const DehazeParams &dehazeParams); - void ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingParams &fatParams); + void ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingParams &fatParams, int detail_level); void localContrast(LabImage *lab, float **destination, const LocalContrastParams &localContrastParams, bool fftwlc, double scale); void colorToningLabGrid(LabImage *lab, int xstart, int xend, int ystart, int yend, bool MultiThread); // void shadowsHighlights(LabImage *lab); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index bd3775993..5368b19ee 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -9105,9 +9105,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o fatParams.threshold = params->locallab.spots.at(sp).fatdetail; fatParams.amount = params->locallab.spots.at(sp).fatamount; fatParams.anchor = params->locallab.spots.at(sp).fatanchor; + int nlev = params->locallab.spots.at(sp).fatlevel; tmpImagefat = new Imagefloat(bfwr, bfhr); lab2rgb(*bufexpfin, *tmpImagefat, params->icm.workingProfile); - ToneMapFattal02(tmpImagefat, fatParams); + ToneMapFattal02(tmpImagefat, fatParams, nlev); rgb2lab(*tmpImagefat, *bufexpfin, params->icm.workingProfile); delete tmpImagefat; } @@ -9120,6 +9121,21 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float *dataor = new float[bfwr * bfhr]; float gam = params->locallab.spots.at(sp).gamm; float igam = 1.f / gam; + + if(lp.blac < -1000.f) { + Median med; + //soft denoise, user must use Local Denoise to best result + if (lp.blac < - 10000.f) { + med = Median::TYPE_5X5_SOFT; + } else if (lp.blac < - 5000.f) { + med = Median::TYPE_3X3_STRONG; + } else { + med = Median:: TYPE_3X3_SOFT; + } + + Median_Denoise(bufexpfin->L, bufexpfin->L, bfwr, bfhr, med, 1, multiThread); + + } #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -9127,6 +9143,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o for (int y = 0; y < bfhr; y++) { for (int x = 0; x < bfwr; x++) { float L = LIM01(bufexpfin->L[y][x] / 32768.f);//change gamma for Laplacian + L = pow(L, gam); L *= 32768.f; datain[y * bfwr + x] = L; diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 5e8027e9b..6ba3506a9 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -772,6 +772,7 @@ enum ProcEventCode { Evlocallabfatamount = 742, Evlocallabfatdetail = 743, Evlocallabfatanchor = 744, + Evlocallabfatlevel = 745, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index a14e2d57e..c5effe975 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2462,6 +2462,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : fatamount(1.0), fatdetail(40.0), fatanchor(50.0), + fatlevel(2), // Shadow highlight expshadhigh(false), highlights(0), @@ -2721,6 +2722,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && fatamount == other.fatamount && fatdetail == other.fatdetail && fatanchor == other.fatanchor + && fatlevel == other.fatlevel // Shadow highlight && expshadhigh == other.expshadhigh && highlights == other.highlights @@ -3961,6 +3963,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatamount, "Locallab", "Fatamount_" + std::to_string(i), spot.fatamount, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatdetail, "Locallab", "Fatdetail_" + std::to_string(i), spot.fatdetail, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatanchor, "Locallab", "Fatanchor_" + std::to_string(i), spot.fatanchor, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatlevel, "Locallab", "Fatlevel_" + std::to_string(i), spot.fatlevel, keyFile); // Shadow highlight saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expshadhigh, "Locallab", "Expshadhigh_" + std::to_string(i), spot.expshadhigh, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).highlights, "Locallab", "highlights_" + std::to_string(i), spot.highlights, keyFile); @@ -5311,6 +5314,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Fatamount_" + std::to_string(i), pedited, spot.fatamount, spotEdited.fatamount); assignFromKeyfile(keyFile, "Locallab", "Fatdetail_" + std::to_string(i), pedited, spot.fatdetail, spotEdited.fatdetail); assignFromKeyfile(keyFile, "Locallab", "Fatanchor_" + std::to_string(i), pedited, spot.fatanchor, spotEdited.fatanchor); + assignFromKeyfile(keyFile, "Locallab", "Fatlevel_" + std::to_string(i), pedited, spot.fatlevel, spotEdited.fatlevel); // Shadow highlight assignFromKeyfile(keyFile, "Locallab", "Expshadhigh_" + std::to_string(i), pedited, spot.expshadhigh, spotEdited.expshadhigh); assignFromKeyfile(keyFile, "Locallab", "highlights_" + std::to_string(i), pedited, spot.highlights, spotEdited.highlights); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 9caa415af..dab87723e 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1027,6 +1027,7 @@ struct LocallabParams { double fatamount; double fatdetail; double fatanchor; + int fatlevel; // Shadow highlight bool expshadhigh; int highlights; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 56ef9ead5..a1c8b26d8 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -771,7 +771,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //Evlocallabgamm LUMINANCECURVE, //Evlocallabfatamount LUMINANCECURVE, //Evlocallabfatdetail - LUMINANCECURVE //Evlocallabfatanchor + LUMINANCECURVE, //Evlocallabfatanchor + LUMINANCECURVE //Evlocallabfatlevel }; diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 9f6a33894..c126acc81 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -1243,7 +1243,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT ipf.firstAnalysis (baseImg, params, hist16); ipf.dehaze(baseImg, params.dehaze); - ipf.ToneMapFattal02(baseImg, params.fattal); + ipf.ToneMapFattal02(baseImg, params.fattal, 3); // perform transform if (ipf.needsTransform()) { diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 977498167..16e067558 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -878,7 +878,7 @@ private: ipf.firstAnalysis(baseImg, params, hist16); ipf.dehaze(baseImg, params.dehaze); - ipf.ToneMapFattal02(baseImg, params.fattal); + ipf.ToneMapFattal02(baseImg, params.fattal, 3); // perform transform (excepted resizing) if (ipf.needsTransform()) { diff --git a/rtengine/tmo_fattal02.cc b/rtengine/tmo_fattal02.cc index 236f96a12..b226bf3f0 100644 --- a/rtengine/tmo_fattal02.cc +++ b/rtengine/tmo_fattal02.cc @@ -1047,13 +1047,13 @@ inline int find_fast_dim (int dim) } // namespace -void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb, const FattalToneMappingParams &fatParams) +void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb, const FattalToneMappingParams &fatParams, int detail_level) { if (!fatParams.enabled) { return; } BENCHFUN - const int detail_level = 3; +// const int detail_level = 3; float alpha = 1.f; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 6a5c7c43c..498f582d5 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -215,6 +215,7 @@ Locallab::Locallab(): fatamount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATAMOUNT"), 1., 100., 1., 1.))), fatdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))), fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0, 3, 1, 2))), //Shadow hightlights highlights(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), 0, 100, 1, 0))), h_tonalwidth(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HLTONALW"), 10, 100, 1, 70))), @@ -732,6 +733,7 @@ Locallab::Locallab(): fatamount->setAdjusterListener(this); fatdetail->setAdjusterListener(this); fatanchor->setAdjusterListener(this); + fatlevel->setAdjusterListener(this); curveEditorG->setCurveListener(this); @@ -831,6 +833,7 @@ Locallab::Locallab(): ToolParamBlock* const fatBox = Gtk::manage(new ToolParamBlock()); fatBox->pack_start(*fatamount); fatBox->pack_start(*fatdetail); + fatBox->pack_start(*fatlevel); fatBox->pack_start(*fatanchor); pdeFrame->add(*pdeBox); @@ -2842,6 +2845,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).fatamount = fatamount->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatdetail = fatdetail->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatanchor = fatanchor->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).fatlevel = fatlevel->getIntValue(); // Shadow highlight pp->locallab.spots.at(pp->locallab.selspot).expshadhigh = expshadhigh->getEnabled(); @@ -3148,6 +3152,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).fatamount = pe->locallab.spots.at(pp->locallab.selspot).fatamount || fatamount->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatdetail = pe->locallab.spots.at(pp->locallab.selspot).fatdetail || fatdetail->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatanchor = pe->locallab.spots.at(pp->locallab.selspot).fatanchor || fatanchor->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).fatlevel = pe->locallab.spots.at(pp->locallab.selspot).fatlevel || fatlevel->getEditedState(); // Shadow highlight pe->locallab.spots.at(pp->locallab.selspot).expshadhigh = pe->locallab.spots.at(pp->locallab.selspot).expshadhigh || !expshadhigh->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).highlights = pe->locallab.spots.at(pp->locallab.selspot).highlights || highlights->getEditedState(); @@ -3411,6 +3416,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).fatamount = pedited->locallab.spots.at(pp->locallab.selspot).fatamount || fatamount->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatdetail = pedited->locallab.spots.at(pp->locallab.selspot).fatdetail || fatdetail->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatanchor = pedited->locallab.spots.at(pp->locallab.selspot).fatanchor || fatanchor->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).fatlevel = pedited->locallab.spots.at(pp->locallab.selspot).fatlevel || fatlevel->getEditedState(); // Shadow highlight pedited->locallab.spots.at(pp->locallab.selspot).expshadhigh = pedited->locallab.spots.at(pp->locallab.selspot).expshadhigh || !expshadhigh->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).highlights = pedited->locallab.spots.at(pp->locallab.selspot).highlights || highlights->getEditedState(); @@ -4156,6 +4162,7 @@ void Locallab::expMethodChanged() fatamount->set_sensitive(false); fatdetail->set_sensitive(false); fatanchor->set_sensitive(false); + fatlevel->set_sensitive(false); } else if (expMethod->get_active_row_number() == 1) { laplacexp->set_sensitive(true); balanexp->set_sensitive(true); @@ -4166,6 +4173,7 @@ void Locallab::expMethodChanged() fatamount->set_sensitive(true); fatdetail->set_sensitive(true); fatanchor->set_sensitive(true); + fatlevel->set_sensitive(true); } enableListener(); @@ -5122,6 +5130,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe fatamount->setDefault(defSpot->fatamount); fatdetail->setDefault(defSpot->fatdetail); fatanchor->setDefault(defSpot->fatanchor); + fatlevel->setDefault(defSpot->fatlevel); // Shadow highlight highlights->setDefault((double)defSpot->highlights); h_tonalwidth->setDefault((double)defSpot->h_tonalwidth); @@ -5283,6 +5292,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe fatamount->setDefaultEditedState(Irrelevant); fatdetail->setDefaultEditedState(Irrelevant); fatanchor->setDefaultEditedState(Irrelevant); + fatlevel->setDefaultEditedState(Irrelevant); // Shadow highlight highlights->setDefaultEditedState(Irrelevant); h_tonalwidth->setDefaultEditedState(Irrelevant); @@ -5448,6 +5458,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe fatamount->setDefaultEditedState(defSpotState->fatamount ? Edited : UnEdited); fatdetail->setDefaultEditedState(defSpotState->fatdetail ? Edited : UnEdited); fatanchor->setDefaultEditedState(defSpotState->fatanchor ? Edited : UnEdited); + fatlevel->setDefaultEditedState(defSpotState->fatlevel ? Edited : UnEdited); // Shadow highlight highlights->setDefaultEditedState(defSpotState->highlights ? Edited : UnEdited); h_tonalwidth->setDefaultEditedState(defSpotState->h_tonalwidth ? Edited : UnEdited); @@ -5855,6 +5866,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == fatlevel) { + if (listener) { + listener->panelChanged(Evlocallabfatlevel, fatlevel->getTextValue()); + } + } + } if (getEnabled() && expshadhigh->getEnabled()) { @@ -6602,6 +6619,7 @@ void Locallab::setBatchMode(bool batchMode) fatamount->showEditedCB(); fatdetail->showEditedCB(); fatanchor->showEditedCB(); + fatlevel->showEditedCB(); //Shadow Highlight highlights->showEditedCB(); h_tonalwidth->showEditedCB(); @@ -7119,6 +7137,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con fatamount->setValue(pp->locallab.spots.at(index).fatamount); fatdetail->setValue(pp->locallab.spots.at(index).fatdetail); fatanchor->setValue(pp->locallab.spots.at(index).fatanchor); + fatlevel->setValue(pp->locallab.spots.at(index).fatlevel); // Shadow highlight expshadhigh->setEnabled(pp->locallab.spots.at(index).expshadhigh); @@ -7453,6 +7472,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con fatamount->setEditedState(spotState->fatamount ? Edited : UnEdited); fatdetail->setEditedState(spotState->fatdetail ? Edited : UnEdited); fatanchor->setEditedState(spotState->fatanchor ? Edited : UnEdited); + fatlevel->setEditedState(spotState->fatlevel ? Edited : UnEdited); // Shadow highlight expshadhigh->set_inconsistent(!spotState->expshadhigh); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 7e7e954dd..ac1310862 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -163,6 +163,7 @@ private: Adjuster* const fatamount; Adjuster* const fatdetail; Adjuster* const fatanchor; + Adjuster* const fatlevel; //Shadow highlight Adjuster* const highlights; Adjuster* const h_tonalwidth; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index e57f77cea..88e1c9649 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1015,9 +1015,10 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).balanexp = locallab.spots.at(j).balanexp && pSpot.balanexp == otherSpot.balanexp; locallab.spots.at(j).linear = locallab.spots.at(j).linear && pSpot.linear == otherSpot.linear; locallab.spots.at(j).gamm = locallab.spots.at(j).gamm && pSpot.gamm == otherSpot.gamm; - locallab.spots.at(j).fatamount = locallab.spots.at(j).linear && pSpot.fatamount == otherSpot.fatamount; - locallab.spots.at(j).fatdetail = locallab.spots.at(j).linear && pSpot.fatdetail == otherSpot.fatdetail; - locallab.spots.at(j).fatanchor = locallab.spots.at(j).linear && pSpot.fatanchor == otherSpot.fatanchor; + locallab.spots.at(j).fatamount = locallab.spots.at(j).fatamount && pSpot.fatamount == otherSpot.fatamount; + locallab.spots.at(j).fatdetail = locallab.spots.at(j).fatdetail && pSpot.fatdetail == otherSpot.fatdetail; + locallab.spots.at(j).fatanchor = locallab.spots.at(j).fatanchor && pSpot.fatanchor == otherSpot.fatanchor; + locallab.spots.at(j).fatlevel = locallab.spots.at(j).fatlevel && pSpot.fatlevel == otherSpot.fatlevel; // Shadow highlight locallab.spots.at(j).expshadhigh = locallab.spots.at(j).expshadhigh && pSpot.expshadhigh == otherSpot.expshadhigh; locallab.spots.at(j).highlights = locallab.spots.at(j).highlights && pSpot.highlights == otherSpot.highlights; @@ -2951,6 +2952,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).fatanchor = mods.locallab.spots.at(i).fatanchor; } + if (locallab.spots.at(i).fatlevel) { + toEdit.locallab.spots.at(i).fatlevel = mods.locallab.spots.at(i).fatlevel; + } + // Shadow highlight if (locallab.spots.at(i).expshadhigh) { toEdit.locallab.spots.at(i).expshadhigh = mods.locallab.spots.at(i).expshadhigh; @@ -4630,6 +4635,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : fatamount(v), fatdetail(v), fatanchor(v), + fatlevel(v), // Shadow highlight expshadhigh(v), highlights(v), @@ -4886,6 +4892,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) fatamount = v; fatdetail = v; fatanchor = v; + fatlevel = v; // Shadow highlight expshadhigh = v; highlights = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index a34187c94..d279fd5d1 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -441,6 +441,7 @@ public: bool fatamount; bool fatdetail; bool fatanchor; + bool fatlevel; // Shadow highlight bool expshadhigh; bool highlights;