Add contrast curve to mask 4 ShadowsHighlight

This commit is contained in:
Desmis 2019-10-15 11:35:01 +02:00
parent e44d4c1324
commit e8dd1c4378
15 changed files with 75 additions and 8 deletions

View File

@ -1009,6 +1009,7 @@ HISTORY_MSG_768;Local - Grain Strength
HISTORY_MSG_769;Local - Grain Scale
HISTORY_MSG_770;Local - Color Mask contrast curve
HISTORY_MSG_771;Local - Exp Mask contrast curve
HISTORY_MSG_772;Local - SH Mask contrast curve
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction

View File

@ -888,8 +888,10 @@ void Crop::update(int todo)
LUTf exlocalcurve2(65536, 0);
bool localmaskutili = parent->localmaskutili;
bool localmaskexputili = parent->localmaskexputili;
bool localmaskSHutili = parent->localmaskSHutili;
LUTf lmasklocalcurve2(65536, 0);
LUTf lmaskexplocalcurve2(65536, 0);
LUTf lmaskSHlocalcurve2(65536, 0);
LUTf hltonecurveloc2(65536, 0); //65536
LUTf shtonecurveloc2(65536, 0);
LUTf tonecurveloc2(65536, 0);
@ -993,6 +995,8 @@ void Crop::update(int todo)
CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, sca);
localmaskexputili = false;
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca);
localmaskSHutili = false;
CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve2, sca);
double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1033,6 +1037,7 @@ void Crop::update(int todo)
lllocalcurve2,locallutili, loclhCurve, lochhCurve,
lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1052,6 +1057,7 @@ void Crop::update(int todo)
lllocalcurve2,locallutili, loclhCurve, lochhCurve,
lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1069,6 +1075,7 @@ void Crop::update(int todo)
exlocalcurve2.clear();
lmasklocalcurve2.clear();
lmaskexplocalcurve2.clear();
lmaskSHlocalcurve2.clear();
hltonecurveloc2.clear();
shtonecurveloc2.clear();
tonecurveloc2.clear();

View File

@ -173,6 +173,7 @@ ImProcCoordinator::ImProcCoordinator() :
lightCurveloc(32770, 0),
lmasklocalcurve(65536, 0),
lmaskexplocalcurve(65536, 0),
lmaskSHlocalcurve(65536, 0),
locallutili(false),
localcutili(false),
localexutili(false),
@ -181,6 +182,7 @@ ImProcCoordinator::ImProcCoordinator() :
lcmasutili(false),
localmaskutili(false),
localmaskexputili(false),
localmaskSHutili(false),
lcmasexputili(false),
lhmasexputili(false),
llmasexputili(false),
@ -922,7 +924,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lcmasexputili = false;
lhmasexputili = false;
llmasexputili = false;
localmaskutili = false;
localmaskexputili = false;
localmaskSHutili = false;
lcmasSHutili = false;
lhmasSHutili = false;
llmasSHutili = false;
@ -972,6 +975,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskutili, params->locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskexputili, params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskSHutili, params->locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, sca);
double ecomp = params->locallab.spots.at(sp).expcomp;
double black = params->locallab.spots.at(sp).black;
double hlcompr = params->locallab.spots.at(sp).hlcompr;
@ -1027,6 +1031,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1045,6 +1050,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1069,6 +1075,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
exlocalcurve.clear();
lmasklocalcurve.clear();
lmaskexplocalcurve.clear();
lmaskSHlocalcurve.clear();
hltonecurveloc.clear();
shtonecurveloc.clear();
tonecurveloc.clear();

View File

@ -235,6 +235,7 @@ protected:
LUTf lightCurveloc;
LUTf lmasklocalcurve;
LUTf lmaskexplocalcurve;
LUTf lmaskSHlocalcurve;
// LUTu lhist16loc;
LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve;
@ -272,6 +273,7 @@ protected:
bool lcmasutili;
bool localmaskutili;
bool localmaskexputili;
bool localmaskSHutili;
bool lcmasexputili;
bool lhmasexputili;
bool llmasexputili;

View File

@ -217,6 +217,7 @@ public:
void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve,
LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili,
LUTf & lmaskSHlocalcurve, bool & localmaskSHutili,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili,
const LocCCmaskCurve & locccmasexpCurve, bool &lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool &llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili,
const LocCCmaskCurve & locccmasSHCurve, bool &lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool &llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,

View File

@ -6714,6 +6714,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve,
LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili,
LUTf & lmaskSHlocalcurve, bool & localmaskSHutili,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili,
const LocCCmaskCurve & locccmasexpCurve, bool & lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool & llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili,
const LocCCmaskCurve & locccmasSHCurve, bool & lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool & llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,
@ -8010,12 +8011,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmaSH;
float lap = params->locallab.spots.at(sp).lapmaskSH;
float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigSH.get(), originalmaskSH.get(), original, inv, lp,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti);
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmaskSHlocalcurve, localmaskSHutili);
if (lp.showmaskSHmet == 3) {
showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskorigSH.get(), 0);
@ -8107,12 +8106,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmaSH;
float lap = params->locallab.spots.at(sp).lapmaskSH;
float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskSH.get(), original, inv, lp,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti);
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmaskSHlocalcurve, localmaskSHutili);
if (lp.showmaskSHmetinv == 1) {

View File

@ -798,6 +798,7 @@ enum ProcEventCode {
Evlocallabscalegr = 768,
EvlocallabLmaskshape = 769,
EvlocallabLmaskexpshape = 770,
EvlocallabLmaskSHshape = 771,
NUMOFEVENTS
};

View File

@ -2524,6 +2524,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
gammaskSH(1.0),
slomaskSH(0.0),
lapmaskSH(0.0),
LmaskSHcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
// Vibrance
expvibrance(false),
saturated(0),
@ -2808,6 +2809,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& gammaskSH == other.gammaskSH
&& slomaskSH == other.slomaskSH
&& lapmaskSH == other.lapmaskSH
&& LmaskSHcurve == other.LmaskSHcurve
// Vibrance
&& expvibrance == other.expvibrance
&& saturated == other.saturated
@ -4078,6 +4080,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskSH, "Locallab", "GammaskSH_" + std::to_string(i), spot.gammaskSH, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskSH, "Locallab", "SlomaskSH_" + std::to_string(i), spot.slomaskSH, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskSH, "Locallab", "LapmaskSH_" + std::to_string(i), spot.lapmaskSH, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LmaskSHcurve, "Locallab", "LmaskSHCurve_" + std::to_string(i), spot.LmaskSHcurve, keyFile);
// Vibrance
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expvibrance, "Locallab", "Expvibrance_" + std::to_string(i), spot.expvibrance, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).saturated, "Locallab", "Saturated_" + std::to_string(i), spot.saturated, keyFile);
@ -5463,6 +5466,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "GammaskSH_" + std::to_string(i), pedited, spot.gammaskSH, spotEdited.gammaskSH);
assignFromKeyfile(keyFile, "Locallab", "SlomaskSH_" + std::to_string(i), pedited, spot.slomaskSH, spotEdited.slomaskSH);
assignFromKeyfile(keyFile, "Locallab", "LapmaskSH_" + std::to_string(i), pedited, spot.lapmaskSH, spotEdited.lapmaskSH);
assignFromKeyfile(keyFile, "Locallab", "LmaskSHCurve_" + std::to_string(i), pedited, spot.LmaskSHcurve, spotEdited.LmaskSHcurve);
// Vibrance
assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + std::to_string(i), pedited, spot.expvibrance, spotEdited.expvibrance);
assignFromKeyfile(keyFile, "Locallab", "Saturated_" + std::to_string(i), pedited, spot.saturated, spotEdited.saturated);

View File

@ -1073,6 +1073,7 @@ struct LocallabParams {
double gammaskSH;
double slomaskSH;
double lapmaskSH;
std::vector<double> LmaskSHcurve;
// Vibrance
bool expvibrance;
int saturated;

View File

@ -797,7 +797,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabstrengr
LUMINANCECURVE, //Evlocallabscalegr
LUMINANCECURVE, //EvlocallabLmaskshape
LUMINANCECURVE //EvlocallabLmaskexpshape
LUMINANCECURVE, //EvlocallabLmaskexpshape
LUMINANCECURVE //EvlocallabLmaskSHshape
};
namespace rtengine

View File

@ -1126,6 +1126,7 @@ private:
LUTf exlocalcurve(65536, 0);
LUTf lmasklocalcurve(65536, 0);
LUTf lmaskexplocalcurve(65536, 0);
LUTf lmaskSHlocalcurve(65536, 0);
// int maxspot = 1;
float** shbuffer = nullptr;
@ -1150,6 +1151,7 @@ private:
bool lcmasutili = false;
bool localmaskutili = false;
bool localmaskexputili = false;
bool localmaskSHutili = false;
bool lcmasexputili = false;
bool lhmasexputili = false;
bool llmasexputili = false;
@ -1200,6 +1202,7 @@ private:
CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, 1);
//provisory
double ecomp = params.locallab.spots.at(sp).expcomp;
double black = params.locallab.spots.at(sp).black;
@ -1236,6 +1239,7 @@ private:
ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1255,6 +1259,7 @@ private:
hltonecurveloc.clear();
lmasklocalcurve.clear();
lmaskexplocalcurve.clear();
lmaskSHlocalcurve.clear();
shtonecurveloc.clear();
tonecurveloc.clear();
lightCurveloc.clear();

View File

@ -162,6 +162,7 @@ Locallab::Locallab():
mask2expCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
//Shadows Highlight
maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2SHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
// Vibranceretinex
curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))),
//Blur
@ -1099,6 +1100,21 @@ Locallab::Locallab():
maskSHCurveEditorG->curveListComplete();
mask2SHCurveEditorG->setCurveListener(this);
LmaskSHshape = static_cast<DiagonalCurveEditor*>(mask2SHCurveEditorG->addCurve(CT_Diagonal, "L(L)"));
LmaskSHshape->setResetCurve(DiagonalCurveType(defSpot.LmaskSHcurve.at(0)), defSpot.LmaskSHcurve);
if (showtooltip) {
LmaskSHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
}
std::vector<GradientMilestone> mLmaskSHshape;
mLmaskSHshape.push_back(GradientMilestone(0., 0., 0., 0.));
mLmaskSHshape.push_back(GradientMilestone(1., 1., 1., 1.));
LmaskSHshape->setBottomBarBgGradient(mLmaskSHshape);
LmaskSHshape->setLeftBarBgGradient(mLmaskSHshape);
mask2SHCurveEditorG->curveListComplete();
ToolParamBlock* const shadhighBox = Gtk::manage(new ToolParamBlock());
shadhighBox->pack_start(*highlights);
shadhighBox->pack_start(*h_tonalwidth);
@ -1121,6 +1137,7 @@ Locallab::Locallab():
maskSHBox->pack_start(*chromaskSH, Gtk::PACK_SHRINK, 0);
maskSHBox->pack_start(*gammaskSH, Gtk::PACK_SHRINK, 0);
maskSHBox->pack_start(*slomaskSH, Gtk::PACK_SHRINK, 0);
maskSHBox->pack_start(*mask2SHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmasksh->add(*maskSHBox, false);
shadhighBox->pack_start(*expmasksh);
@ -2249,6 +2266,7 @@ Locallab::~Locallab()
delete maskCurveEditorG;
delete mask2CurveEditorG;
delete mask2expCurveEditorG;
delete mask2SHCurveEditorG;
delete curveEditorG;
delete maskexpCurveEditorG;
delete maskSHCurveEditorG;
@ -3246,6 +3264,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).gammaskSH = gammaskSH->getValue();
pp->locallab.spots.at(pp->locallab.selspot).slomaskSH = slomaskSH->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmaskSH = lapmaskSH->getValue();
pp->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = LmaskSHshape->getCurve();
// Vibrance
pp->locallab.spots.at(pp->locallab.selspot).expvibrance = expvibrance->getEnabled();
pp->locallab.spots.at(pp->locallab.selspot).saturated = saturated->getIntValue();
@ -3576,6 +3595,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).gammaskSH = pe->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).slomaskSH = pe->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = pe->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve || !LmaskSHshape->isUnChanged();
// Vibrance
pe->locallab.spots.at(pp->locallab.selspot).expvibrance = pe->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).saturated = pe->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState();
@ -3864,6 +3884,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH = pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH = pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = pedited->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve || !LmaskSHshape->isUnChanged();
// Vibrance
pedited->locallab.spots.at(pp->locallab.selspot).expvibrance = pedited->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).saturated = pedited->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState();
@ -4240,6 +4261,13 @@ void Locallab::curveChanged(CurveEditor* ce)
listener->panelChanged(EvlocallabHHmaskSHshape, M("HISTORY_CUSTOMCURVE"));
}
}
if (ce == LmaskSHshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskSHshape, M("HISTORY_CUSTOMCURVE"));
}
}
}
//CBDL
@ -7966,6 +7994,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
gammaskSH->setValue(pp->locallab.spots.at(index).gammaskSH);
slomaskSH->setValue(pp->locallab.spots.at(index).slomaskSH);
lapmaskSH->setValue(pp->locallab.spots.at(index).lapmaskSH);
LmaskSHshape->setCurve(pp->locallab.spots.at(index).LmaskSHcurve);
// Vibrance
expvibrance->setEnabled(pp->locallab.spots.at(index).expvibrance);
@ -8328,6 +8357,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
gammaskSH->setEditedState(spotState->gammaskSH ? Edited : UnEdited);
slomaskSH->setEditedState(spotState->slomaskSH ? Edited : UnEdited);
lapmaskSH->setEditedState(spotState->lapmaskSH ? Edited : UnEdited);
LmaskSHshape->setUnChanged(!spotState->LmaskSHcurve);
// Vibrance
expvibrance->set_inconsistent(!spotState->expvibrance);

View File

@ -94,6 +94,8 @@ private:
FlatCurveEditor* HHmaskexpshape;
//Shadows Highlight
CurveEditorGroup* const maskSHCurveEditorG;
CurveEditorGroup* const mask2SHCurveEditorG;
DiagonalCurveEditor* LmaskSHshape;
FlatCurveEditor* CCmaskSHshape;
FlatCurveEditor* LLmaskSHshape;
FlatCurveEditor* HHmaskSHshape;

View File

@ -1065,6 +1065,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).gammaskSH = locallab.spots.at(j).gammaskSH && pSpot.gammaskSH == otherSpot.gammaskSH;
locallab.spots.at(j).slomaskSH = locallab.spots.at(j).slomaskSH && pSpot.slomaskSH == otherSpot.slomaskSH;
locallab.spots.at(j).lapmaskSH = locallab.spots.at(j).lapmaskSH && pSpot.lapmaskSH == otherSpot.lapmaskSH;
locallab.spots.at(j).LmaskSHcurve = locallab.spots.at(j).LmaskSHcurve && pSpot.LmaskSHcurve == otherSpot.LmaskSHcurve;
// Vibrance
locallab.spots.at(j).expvibrance = locallab.spots.at(j).expvibrance && pSpot.expvibrance == otherSpot.expvibrance;
locallab.spots.at(j).saturated = locallab.spots.at(j).saturated && pSpot.saturated == otherSpot.saturated;
@ -3140,6 +3141,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).lapmaskSH = mods.locallab.spots.at(i).lapmaskSH;
}
if (locallab.spots.at(i).LmaskSHcurve) {
toEdit.locallab.spots.at(i).LmaskSHcurve = mods.locallab.spots.at(i).LmaskSHcurve;
}
// Vibrance
if (locallab.spots.at(i).expvibrance) {
toEdit.locallab.spots.at(i).expvibrance = mods.locallab.spots.at(i).expvibrance;
@ -4842,6 +4847,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
gammaskSH(v),
slomaskSH(v),
lapmaskSH(v),
LmaskSHcurve(v),
// Vibrance
expvibrance(v),
saturated(v),
@ -5123,6 +5129,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
gammaskSH = v;
slomaskSH = v;
lapmaskSH = v;
LmaskSHcurve = v;
// Vibrance
expvibrance = v;
saturated = v;

View File

@ -483,6 +483,7 @@ public:
bool gammaskSH;
bool slomaskSH;
bool lapmaskSH;
bool LmaskSHcurve;
// Vibrance
bool expvibrance;
bool saturated;