Wavelet levels - Added Damper to local contrast final
This commit is contained in:
parent
60bb7b520b
commit
71da91c85f
@ -816,6 +816,7 @@ HISTORY_MSG_WAVBL;Blur levels
|
|||||||
HISTORY_MSG_BLURWAV;Blur luminance
|
HISTORY_MSG_BLURWAV;Blur luminance
|
||||||
HISTORY_MSG_BLURCWAV;Blur chroma
|
HISTORY_MSG_BLURCWAV;Blur chroma
|
||||||
HISTORY_MSG_EDGEFFECT;Edge Damper
|
HISTORY_MSG_EDGEFFECT;Edge Damper
|
||||||
|
HISTORY_MSG_SIGMAFIN;Final contrast Damper
|
||||||
HISTORY_NEWSNAPSHOT;Add
|
HISTORY_NEWSNAPSHOT;Add
|
||||||
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
|
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
|
||||||
HISTORY_SNAPSHOT;Snapshot
|
HISTORY_SNAPSHOT;Snapshot
|
||||||
@ -2227,6 +2228,7 @@ TP_WAVELET_EDSL;Threshold Sliders
|
|||||||
TP_WAVELET_EDTYPE;Local contrast method
|
TP_WAVELET_EDTYPE;Local contrast method
|
||||||
TP_WAVELET_EDVAL;Strength
|
TP_WAVELET_EDVAL;Strength
|
||||||
TP_WAVELET_FINAL;Final Touchup
|
TP_WAVELET_FINAL;Final Touchup
|
||||||
|
TP_WAVELET_FINCFRAME;Final Local Contrast
|
||||||
TP_WAVELET_FINEST;Finest
|
TP_WAVELET_FINEST;Finest
|
||||||
TP_WAVELET_HIGHLIGHT;Highlight luminance range
|
TP_WAVELET_HIGHLIGHT;Highlight luminance range
|
||||||
TP_WAVELET_HS1;Whole luminance range
|
TP_WAVELET_HS1;Whole luminance range
|
||||||
@ -2273,7 +2275,7 @@ TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight
|
|||||||
TP_WAVELET_OLDSH;Algorithm using negatives values
|
TP_WAVELET_OLDSH;Algorithm using negatives values
|
||||||
TP_WAVELET_OPACITY;Opacity Blue-Yellow
|
TP_WAVELET_OPACITY;Opacity Blue-Yellow
|
||||||
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
|
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
|
||||||
TP_WAVELET_OPACITYWL;Final local contrast
|
TP_WAVELET_OPACITYWL;Local contrast
|
||||||
TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right.
|
TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right.
|
||||||
TP_WAVELET_PASTEL;Pastel chroma
|
TP_WAVELET_PASTEL;Pastel chroma
|
||||||
TP_WAVELET_PROC;Process
|
TP_WAVELET_PROC;Process
|
||||||
@ -2294,6 +2296,7 @@ TP_WAVELET_SHA;Sharp mask
|
|||||||
TP_WAVELET_SHFRAME;Shadows/Highlights
|
TP_WAVELET_SHFRAME;Shadows/Highlights
|
||||||
TP_WAVELET_SHOWMASK;Show wavelet 'mask'
|
TP_WAVELET_SHOWMASK;Show wavelet 'mask'
|
||||||
TP_WAVELET_SIGMA;Damper
|
TP_WAVELET_SIGMA;Damper
|
||||||
|
TP_WAVELET_SIGMAFIN;Damper
|
||||||
TP_WAVELET_SIGMA_TOOLTIP;The effect of the contrast sliders is stronger in medium contrast details, and weaker in high and low contrast details.\n With this slider you can control how quickly the effect dampens towards the extreme contrasts.\n The higher the slider is set, the wider the range of contrasts which will get a strong change, and the higher the risk to generate artifacts.\n The lower it is, the more pinpoint will the effect be applied to a narrow range of contrast values.
|
TP_WAVELET_SIGMA_TOOLTIP;The effect of the contrast sliders is stronger in medium contrast details, and weaker in high and low contrast details.\n With this slider you can control how quickly the effect dampens towards the extreme contrasts.\n The higher the slider is set, the wider the range of contrasts which will get a strong change, and the higher the risk to generate artifacts.\n The lower it is, the more pinpoint will the effect be applied to a narrow range of contrast values.
|
||||||
TP_WAVELET_SKIN;Skin targetting/protection
|
TP_WAVELET_SKIN;Skin targetting/protection
|
||||||
TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected.
|
TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected.
|
||||||
|
@ -113,6 +113,7 @@ struct cont_params {
|
|||||||
int TMmeth;
|
int TMmeth;
|
||||||
float tmstrength;
|
float tmstrength;
|
||||||
float balan;
|
float balan;
|
||||||
|
float sigmafin;
|
||||||
int ite;
|
int ite;
|
||||||
int contmet;
|
int contmet;
|
||||||
bool opaW;
|
bool opaW;
|
||||||
@ -191,6 +192,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
|
|||||||
cp.ite = params->wavelet.iter;
|
cp.ite = params->wavelet.iter;
|
||||||
cp.tonemap = params->wavelet.tmrs != 0;
|
cp.tonemap = params->wavelet.tmrs != 0;
|
||||||
cp.bam = false;
|
cp.bam = false;
|
||||||
|
cp.sigmafin = params->wavelet.sigmafin;
|
||||||
|
|
||||||
if (params->wavelet.TMmethod == "cont") {
|
if (params->wavelet.TMmethod == "cont") {
|
||||||
cp.contmet = 1;
|
cp.contmet = 1;
|
||||||
@ -2955,11 +2957,11 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0,
|
|||||||
if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve
|
if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve
|
||||||
float insigma = 0.666f; //SD
|
float insigma = 0.666f; //SD
|
||||||
float logmax = log(MaxP[level]); //log Max
|
float logmax = log(MaxP[level]); //log Max
|
||||||
float rapX = (mean[level] + sigma[level]) / MaxP[level]; //rapport between sD / max
|
float rapX = (mean[level] + cp.sigmafin * sigma[level]) / MaxP[level]; //rapport between sD / max
|
||||||
float inx = log(insigma);
|
float inx = log(insigma);
|
||||||
float iny = log(rapX);
|
float iny = log(rapX);
|
||||||
float rap = inx / iny; //koef
|
float rap = inx / iny; //koef
|
||||||
float asig = 0.166f / sigma[level];
|
float asig = 0.166f / (sigma[level] * cp.sigmafin);
|
||||||
float bsig = 0.5f - asig * mean[level];
|
float bsig = 0.5f - asig * mean[level];
|
||||||
float amean = 0.5f / mean[level];
|
float amean = 0.5f / mean[level];
|
||||||
|
|
||||||
@ -2970,7 +2972,7 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0,
|
|||||||
for (int i = 0; i < W_L * H_L; i++) {
|
for (int i = 0; i < W_L * H_L; i++) {
|
||||||
float absciss;
|
float absciss;
|
||||||
|
|
||||||
if (std::fabs(WavCoeffs_L[dir][i]) >= (mean[level] + sigma[level])) { //for max
|
if (std::fabs(WavCoeffs_L[dir][i]) >= (mean[level] + cp.sigmafin * sigma[level])) { //for max
|
||||||
float valcour = xlogf(std::fabs(WavCoeffs_L[dir][i]));
|
float valcour = xlogf(std::fabs(WavCoeffs_L[dir][i]));
|
||||||
float valc = valcour - logmax;
|
float valc = valcour - logmax;
|
||||||
float vald = valc * rap;
|
float vald = valc * rap;
|
||||||
|
@ -2263,6 +2263,7 @@ WaveletParams::WaveletParams() :
|
|||||||
tmr(false),
|
tmr(false),
|
||||||
strength(100),
|
strength(100),
|
||||||
balance(0),
|
balance(0),
|
||||||
|
sigmafin(1.0),
|
||||||
iter(0),
|
iter(0),
|
||||||
expcontrast(false),
|
expcontrast(false),
|
||||||
expchroma(false),
|
expchroma(false),
|
||||||
@ -2377,6 +2378,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
|
|||||||
&& tmr == other.tmr
|
&& tmr == other.tmr
|
||||||
&& strength == other.strength
|
&& strength == other.strength
|
||||||
&& balance == other.balance
|
&& balance == other.balance
|
||||||
|
&& sigmafin == other.sigmafin
|
||||||
&& iter == other.iter
|
&& iter == other.iter
|
||||||
&& expcontrast == other.expcontrast
|
&& expcontrast == other.expcontrast
|
||||||
&& expchroma == other.expchroma
|
&& expchroma == other.expchroma
|
||||||
@ -3514,6 +3516,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
|||||||
saveToKeyfile(!pedited || pedited->wavelet.enabled, "Wavelet", "Enabled", wavelet.enabled, keyFile);
|
saveToKeyfile(!pedited || pedited->wavelet.enabled, "Wavelet", "Enabled", wavelet.enabled, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->wavelet.strength, "Wavelet", "Strength", wavelet.strength, keyFile);
|
saveToKeyfile(!pedited || pedited->wavelet.strength, "Wavelet", "Strength", wavelet.strength, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->wavelet.balance, "Wavelet", "Balance", wavelet.balance, keyFile);
|
saveToKeyfile(!pedited || pedited->wavelet.balance, "Wavelet", "Balance", wavelet.balance, keyFile);
|
||||||
|
saveToKeyfile(!pedited || pedited->wavelet.sigmafin, "Wavelet", "Sigmafin", wavelet.sigmafin, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->wavelet.iter, "Wavelet", "Iter", wavelet.iter, keyFile);
|
saveToKeyfile(!pedited || pedited->wavelet.iter, "Wavelet", "Iter", wavelet.iter, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->wavelet.thres, "Wavelet", "MaxLev", wavelet.thres, keyFile);
|
saveToKeyfile(!pedited || pedited->wavelet.thres, "Wavelet", "MaxLev", wavelet.thres, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->wavelet.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, keyFile);
|
saveToKeyfile(!pedited || pedited->wavelet.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, keyFile);
|
||||||
@ -4691,6 +4694,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
|||||||
assignFromKeyfile(keyFile, "Wavelet", "Enabled", pedited, wavelet.enabled, pedited->wavelet.enabled);
|
assignFromKeyfile(keyFile, "Wavelet", "Enabled", pedited, wavelet.enabled, pedited->wavelet.enabled);
|
||||||
assignFromKeyfile(keyFile, "Wavelet", "Strength", pedited, wavelet.strength, pedited->wavelet.strength);
|
assignFromKeyfile(keyFile, "Wavelet", "Strength", pedited, wavelet.strength, pedited->wavelet.strength);
|
||||||
assignFromKeyfile(keyFile, "Wavelet", "Balance", pedited, wavelet.balance, pedited->wavelet.balance);
|
assignFromKeyfile(keyFile, "Wavelet", "Balance", pedited, wavelet.balance, pedited->wavelet.balance);
|
||||||
|
assignFromKeyfile(keyFile, "Wavelet", "Sigmafin", pedited, wavelet.sigmafin, pedited->wavelet.sigmafin);
|
||||||
assignFromKeyfile(keyFile, "Wavelet", "Iter", pedited, wavelet.iter, pedited->wavelet.iter);
|
assignFromKeyfile(keyFile, "Wavelet", "Iter", pedited, wavelet.iter, pedited->wavelet.iter);
|
||||||
assignFromKeyfile(keyFile, "Wavelet", "Median", pedited, wavelet.median, pedited->wavelet.median);
|
assignFromKeyfile(keyFile, "Wavelet", "Median", pedited, wavelet.median, pedited->wavelet.median);
|
||||||
assignFromKeyfile(keyFile, "Wavelet", "Medianlev", pedited, wavelet.medianlev, pedited->wavelet.medianlev);
|
assignFromKeyfile(keyFile, "Wavelet", "Medianlev", pedited, wavelet.medianlev, pedited->wavelet.medianlev);
|
||||||
|
@ -1221,6 +1221,7 @@ struct WaveletParams {
|
|||||||
bool tmr;
|
bool tmr;
|
||||||
int strength;
|
int strength;
|
||||||
int balance;
|
int balance;
|
||||||
|
double sigmafin;
|
||||||
int iter;
|
int iter;
|
||||||
bool expcontrast;
|
bool expcontrast;
|
||||||
bool expchroma;
|
bool expchroma;
|
||||||
|
@ -475,6 +475,7 @@ void ParamsEdited::set(bool v)
|
|||||||
wavelet.strength = v;
|
wavelet.strength = v;
|
||||||
wavelet.balance = v;
|
wavelet.balance = v;
|
||||||
wavelet.iter = v;
|
wavelet.iter = v;
|
||||||
|
wavelet.sigmafin = v;
|
||||||
wavelet.median = v;
|
wavelet.median = v;
|
||||||
wavelet.medianlev = v;
|
wavelet.medianlev = v;
|
||||||
wavelet.linkedg = v;
|
wavelet.linkedg = v;
|
||||||
@ -1085,6 +1086,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
|||||||
wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength;
|
wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength;
|
||||||
wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance;
|
wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance;
|
||||||
wavelet.iter = wavelet.iter && p.wavelet.iter == other.wavelet.iter;
|
wavelet.iter = wavelet.iter && p.wavelet.iter == other.wavelet.iter;
|
||||||
|
wavelet.sigmafin = wavelet.sigmafin && p.wavelet.sigmafin == other.wavelet.sigmafin;
|
||||||
wavelet.median = wavelet.median && p.wavelet.median == other.wavelet.median;
|
wavelet.median = wavelet.median && p.wavelet.median == other.wavelet.median;
|
||||||
wavelet.medianlev = wavelet.medianlev && p.wavelet.medianlev == other.wavelet.medianlev;
|
wavelet.medianlev = wavelet.medianlev && p.wavelet.medianlev == other.wavelet.medianlev;
|
||||||
wavelet.linkedg = wavelet.linkedg && p.wavelet.linkedg == other.wavelet.linkedg;
|
wavelet.linkedg = wavelet.linkedg && p.wavelet.linkedg == other.wavelet.linkedg;
|
||||||
@ -2893,6 +2895,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
|||||||
toEdit.wavelet.balance = mods.wavelet.balance;
|
toEdit.wavelet.balance = mods.wavelet.balance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wavelet.sigmafin) {
|
||||||
|
toEdit.wavelet.sigmafin = mods.wavelet.sigmafin;
|
||||||
|
}
|
||||||
|
|
||||||
if (wavelet.iter) {
|
if (wavelet.iter) {
|
||||||
toEdit.wavelet.iter = mods.wavelet.iter;
|
toEdit.wavelet.iter = mods.wavelet.iter;
|
||||||
}
|
}
|
||||||
|
@ -499,6 +499,7 @@ struct WaveletParamsEdited {
|
|||||||
bool strength;
|
bool strength;
|
||||||
bool balance;
|
bool balance;
|
||||||
bool iter;
|
bool iter;
|
||||||
|
bool sigmafin;
|
||||||
bool median;
|
bool median;
|
||||||
bool medianlev;
|
bool medianlev;
|
||||||
bool linkedg;
|
bool linkedg;
|
||||||
|
@ -112,6 +112,7 @@ Wavelet::Wavelet() :
|
|||||||
strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))),
|
strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))),
|
||||||
balance(Gtk::manage(new Adjuster(M("TP_WAVELET_BALANCE"), -30, 100, 1, 0))),
|
balance(Gtk::manage(new Adjuster(M("TP_WAVELET_BALANCE"), -30, 100, 1, 0))),
|
||||||
iter(Gtk::manage(new Adjuster(M("TP_WAVELET_ITER"), -3, 3, 1, 0))),
|
iter(Gtk::manage(new Adjuster(M("TP_WAVELET_ITER"), -3, 3, 1, 0))),
|
||||||
|
sigmafin(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMAFIN"), 0.025, 2.5, 0.01, 1.))),
|
||||||
hueskin(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKIN"), -314., 314., -5., 25., 170., 120., 0, false))),
|
hueskin(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKIN"), -314., 314., -5., 25., 170., 120., 0, false))),
|
||||||
hueskin2(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKY"), -314., 314., -260., -250, -130., -140., 0, false))),
|
hueskin2(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKY"), -314., 314., -260., -250, -130., -140., 0, false))),
|
||||||
hllev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HIGHLIGHT"), 0., 100., 50., 75., 100., 98., 0, false))),
|
hllev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HIGHLIGHT"), 0., 100., 50., 75., 100., 98., 0, false))),
|
||||||
@ -162,6 +163,7 @@ Wavelet::Wavelet() :
|
|||||||
blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))),
|
blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))),
|
||||||
chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))),
|
chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))),
|
||||||
chroFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROFRAME")))),
|
chroFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROFRAME")))),
|
||||||
|
fincFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_FINCFRAME")))),
|
||||||
wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))),
|
wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))),
|
||||||
labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))),
|
labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))),
|
||||||
labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))),
|
labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))),
|
||||||
@ -207,6 +209,8 @@ Wavelet::Wavelet() :
|
|||||||
EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV");
|
EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV");
|
||||||
EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV");
|
EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV");
|
||||||
EvWavedgeffect = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_EDGEFFECT");
|
EvWavedgeffect = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_EDGEFFECT");
|
||||||
|
EvWavsigmafin = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_SIGMAFIN");
|
||||||
|
|
||||||
expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings));
|
expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings));
|
||||||
|
|
||||||
expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast));
|
expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast));
|
||||||
@ -978,7 +982,7 @@ Wavelet::Wavelet() :
|
|||||||
iter->setAdjusterListener(this);
|
iter->setAdjusterListener(this);
|
||||||
iter->set_tooltip_text(M("TP_WAVELET_ITER_TOOLTIP"));
|
iter->set_tooltip_text(M("TP_WAVELET_ITER_TOOLTIP"));
|
||||||
|
|
||||||
Gtk::HSeparator* const separatorbalend = Gtk::manage(new Gtk::HSeparator());
|
// Gtk::HSeparator* const separatorbalend = Gtk::manage(new Gtk::HSeparator());
|
||||||
|
|
||||||
opacityCurveEditorWL->setCurveListener(this);
|
opacityCurveEditorWL->setCurveListener(this);
|
||||||
|
|
||||||
@ -986,6 +990,7 @@ Wavelet::Wavelet() :
|
|||||||
opacityShapeWL->setIdentityValue(0.);
|
opacityShapeWL->setIdentityValue(0.);
|
||||||
opacityShapeWL->setResetCurve(FlatCurveType(default_params.opacityCurveWL.at(0)), default_params.opacityCurveWL);
|
opacityShapeWL->setResetCurve(FlatCurveType(default_params.opacityCurveWL.at(0)), default_params.opacityCurveWL);
|
||||||
opacityShapeWL->setTooltip(M("TP_WAVELET_OPACITYWL_TOOLTIP"));
|
opacityShapeWL->setTooltip(M("TP_WAVELET_OPACITYWL_TOOLTIP"));
|
||||||
|
sigmafin->setAdjusterListener(this);
|
||||||
|
|
||||||
// This will add the reset button at the end of the curveType buttons
|
// This will add the reset button at the end of the curveType buttons
|
||||||
opacityCurveEditorWL->curveListComplete();
|
opacityCurveEditorWL->curveListComplete();
|
||||||
@ -1004,6 +1009,13 @@ Wavelet::Wavelet() :
|
|||||||
tmr->set_tooltip_text(M("TP_WAVELET_BALCHRO_TOOLTIP"));
|
tmr->set_tooltip_text(M("TP_WAVELET_BALCHRO_TOOLTIP"));
|
||||||
tmrConn = tmr->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::tmrToggled));
|
tmrConn = tmr->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::tmrToggled));
|
||||||
|
|
||||||
|
fincFrame->set_label_align(0.025, 0.5);
|
||||||
|
ToolParamBlock* const fincBox = Gtk::manage(new ToolParamBlock());
|
||||||
|
fincBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2);
|
||||||
|
fincBox->pack_start(*sigmafin);
|
||||||
|
fincFrame->add(*fincBox);
|
||||||
|
|
||||||
|
|
||||||
ToolParamBlock* const finalBox = Gtk::manage(new ToolParamBlock());
|
ToolParamBlock* const finalBox = Gtk::manage(new ToolParamBlock());
|
||||||
|
|
||||||
finalBox->pack_start(*ctboxBA);
|
finalBox->pack_start(*ctboxBA);
|
||||||
@ -1014,9 +1026,10 @@ Wavelet::Wavelet() :
|
|||||||
finalBox->pack_start(*iter);
|
finalBox->pack_start(*iter);
|
||||||
|
|
||||||
finalBox->pack_start(*tmr);
|
finalBox->pack_start(*tmr);
|
||||||
finalBox->pack_start(*separatorbalend, Gtk::PACK_SHRINK, 2);
|
// finalBox->pack_start(*separatorbalend, Gtk::PACK_SHRINK, 2);
|
||||||
finalBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2);
|
// finalBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2);
|
||||||
|
// finalBox->pack_start(*sigmafin);
|
||||||
|
finalBox->pack_start(*fincFrame);
|
||||||
finalBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4);
|
finalBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4);
|
||||||
finalBox->pack_start(*softradend);
|
finalBox->pack_start(*softradend);
|
||||||
|
|
||||||
@ -1420,6 +1433,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
strength->setValue(pp->wavelet.strength);
|
strength->setValue(pp->wavelet.strength);
|
||||||
balance->setValue(pp->wavelet.balance);
|
balance->setValue(pp->wavelet.balance);
|
||||||
iter->setValue(pp->wavelet.iter);
|
iter->setValue(pp->wavelet.iter);
|
||||||
|
sigmafin->setValue(pp->wavelet.sigmafin);
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
correction[i]->setValue(pp->wavelet.c[i]);
|
correction[i]->setValue(pp->wavelet.c[i]);
|
||||||
@ -1537,6 +1551,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
thres->setEditedState(pedited->wavelet.thres ? Edited : UnEdited);
|
thres->setEditedState(pedited->wavelet.thres ? Edited : UnEdited);
|
||||||
balance->setEditedState(pedited->wavelet.balance ? Edited : UnEdited);
|
balance->setEditedState(pedited->wavelet.balance ? Edited : UnEdited);
|
||||||
iter->setEditedState(pedited->wavelet.iter ? Edited : UnEdited);
|
iter->setEditedState(pedited->wavelet.iter ? Edited : UnEdited);
|
||||||
|
sigmafin->setEditedState(pedited->wavelet.sigmafin ? Edited : UnEdited);
|
||||||
threshold->setEditedState(pedited->wavelet.threshold ? Edited : UnEdited);
|
threshold->setEditedState(pedited->wavelet.threshold ? Edited : UnEdited);
|
||||||
threshold2->setEditedState(pedited->wavelet.threshold2 ? Edited : UnEdited);
|
threshold2->setEditedState(pedited->wavelet.threshold2 ? Edited : UnEdited);
|
||||||
edgedetect->setEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited);
|
edgedetect->setEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited);
|
||||||
@ -1808,6 +1823,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
|
|
||||||
pp->wavelet.iter = (int) iter->getValue();
|
pp->wavelet.iter = (int) iter->getValue();
|
||||||
pp->wavelet.wavclCurve = clshape->getCurve();
|
pp->wavelet.wavclCurve = clshape->getCurve();
|
||||||
|
pp->wavelet.sigmafin = sigmafin->getValue();
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
pp->wavelet.c[i] = (int) correction[i]->getValue();
|
pp->wavelet.c[i] = (int) correction[i]->getValue();
|
||||||
@ -1914,6 +1930,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pedited->wavelet.softradend = softradend->getEditedState();
|
pedited->wavelet.softradend = softradend->getEditedState();
|
||||||
pedited->wavelet.balance = balance->getEditedState();
|
pedited->wavelet.balance = balance->getEditedState();
|
||||||
pedited->wavelet.iter = iter->getEditedState();
|
pedited->wavelet.iter = iter->getEditedState();
|
||||||
|
pedited->wavelet.sigmafin = sigmafin->getEditedState();
|
||||||
pedited->wavelet.wavclCurve = !clshape->isUnChanged();
|
pedited->wavelet.wavclCurve = !clshape->isUnChanged();
|
||||||
pedited->wavelet.expcontrast = !expcontrast->get_inconsistent();
|
pedited->wavelet.expcontrast = !expcontrast->get_inconsistent();
|
||||||
pedited->wavelet.expchroma = !expchroma->get_inconsistent();
|
pedited->wavelet.expchroma = !expchroma->get_inconsistent();
|
||||||
@ -2094,6 +2111,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit
|
|||||||
strength->setDefault(defParams->wavelet.strength);
|
strength->setDefault(defParams->wavelet.strength);
|
||||||
balance->setDefault(defParams->wavelet.balance);
|
balance->setDefault(defParams->wavelet.balance);
|
||||||
iter->setDefault(defParams->wavelet.iter);
|
iter->setDefault(defParams->wavelet.iter);
|
||||||
|
sigmafin->setDefault(defParams->wavelet.sigmafin);
|
||||||
sigma->setDefault(defParams->wavelet.sigma);
|
sigma->setDefault(defParams->wavelet.sigma);
|
||||||
offset->setDefault(defParams->wavelet.offset);
|
offset->setDefault(defParams->wavelet.offset);
|
||||||
lowthr->setDefault(defParams->wavelet.lowthr);
|
lowthr->setDefault(defParams->wavelet.lowthr);
|
||||||
@ -2216,6 +2234,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit
|
|||||||
strength->setDefaultEditedState(pedited->wavelet.strength ? Edited : UnEdited);
|
strength->setDefaultEditedState(pedited->wavelet.strength ? Edited : UnEdited);
|
||||||
balance->setDefaultEditedState(pedited->wavelet.balance ? Edited : UnEdited);
|
balance->setDefaultEditedState(pedited->wavelet.balance ? Edited : UnEdited);
|
||||||
iter->setDefaultEditedState(pedited->wavelet.iter ? Edited : UnEdited);
|
iter->setDefaultEditedState(pedited->wavelet.iter ? Edited : UnEdited);
|
||||||
|
sigmafin->setDefaultEditedState(pedited->wavelet.sigmafin ? Edited : UnEdited);
|
||||||
level0noise->setDefaultEditedState(pedited->wavelet.level0noise ? Edited : UnEdited);
|
level0noise->setDefaultEditedState(pedited->wavelet.level0noise ? Edited : UnEdited);
|
||||||
level1noise->setDefaultEditedState(pedited->wavelet.level1noise ? Edited : UnEdited);
|
level1noise->setDefaultEditedState(pedited->wavelet.level1noise ? Edited : UnEdited);
|
||||||
level2noise->setDefaultEditedState(pedited->wavelet.level2noise ? Edited : UnEdited);
|
level2noise->setDefaultEditedState(pedited->wavelet.level2noise ? Edited : UnEdited);
|
||||||
@ -2278,6 +2297,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit
|
|||||||
strength->setDefaultEditedState(Irrelevant);
|
strength->setDefaultEditedState(Irrelevant);
|
||||||
balance->setDefaultEditedState(Irrelevant);
|
balance->setDefaultEditedState(Irrelevant);
|
||||||
iter->setDefaultEditedState(Irrelevant);
|
iter->setDefaultEditedState(Irrelevant);
|
||||||
|
sigmafin->setDefaultEditedState(Irrelevant);
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
correction[i]->setDefaultEditedState(Irrelevant);
|
correction[i]->setDefaultEditedState(Irrelevant);
|
||||||
@ -2810,6 +2830,7 @@ void Wavelet::setBatchMode(bool batchMode)
|
|||||||
strength->showEditedCB();
|
strength->showEditedCB();
|
||||||
balance->showEditedCB();
|
balance->showEditedCB();
|
||||||
iter->showEditedCB();
|
iter->showEditedCB();
|
||||||
|
sigmafin->showEditedCB();
|
||||||
level0noise->showEditedCB();
|
level0noise->showEditedCB();
|
||||||
level1noise->showEditedCB();
|
level1noise->showEditedCB();
|
||||||
level2noise->showEditedCB();
|
level2noise->showEditedCB();
|
||||||
@ -2959,6 +2980,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval)
|
|||||||
listener->panelChanged(EvWavbalance, balance->getTextValue());
|
listener->panelChanged(EvWavbalance, balance->getTextValue());
|
||||||
} else if (a == iter) {
|
} else if (a == iter) {
|
||||||
listener->panelChanged(EvWaviter, iter->getTextValue());
|
listener->panelChanged(EvWaviter, iter->getTextValue());
|
||||||
|
} else if (a == sigmafin) {
|
||||||
|
listener->panelChanged(EvWavsigmafin, sigmafin->getTextValue());
|
||||||
} else if (a == greenhigh) {
|
} else if (a == greenhigh) {
|
||||||
listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue());
|
listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue());
|
||||||
} else if (a == bluehigh) {
|
} else if (a == bluehigh) {
|
||||||
|
@ -93,6 +93,7 @@ private:
|
|||||||
rtengine::ProcEvent EvWavresblur;
|
rtengine::ProcEvent EvWavresblur;
|
||||||
rtengine::ProcEvent EvWavresblurc;
|
rtengine::ProcEvent EvWavresblurc;
|
||||||
rtengine::ProcEvent EvWavedgeffect;
|
rtengine::ProcEvent EvWavedgeffect;
|
||||||
|
rtengine::ProcEvent EvWavsigmafin;
|
||||||
|
|
||||||
void foldAllButMe(GdkEventButton* event, MyExpander *expander);
|
void foldAllButMe(GdkEventButton* event, MyExpander *expander);
|
||||||
|
|
||||||
@ -218,6 +219,7 @@ private:
|
|||||||
Adjuster* const strength;
|
Adjuster* const strength;
|
||||||
Adjuster* const balance;
|
Adjuster* const balance;
|
||||||
Adjuster* const iter;
|
Adjuster* const iter;
|
||||||
|
Adjuster* const sigmafin;
|
||||||
|
|
||||||
Adjuster* greenlow;
|
Adjuster* greenlow;
|
||||||
Adjuster* bluelow;
|
Adjuster* bluelow;
|
||||||
@ -294,6 +296,7 @@ private:
|
|||||||
Gtk::Frame* const blurFrame;
|
Gtk::Frame* const blurFrame;
|
||||||
Gtk::Frame* const chromaFrame;
|
Gtk::Frame* const chromaFrame;
|
||||||
Gtk::Frame* const chroFrame;
|
Gtk::Frame* const chroFrame;
|
||||||
|
Gtk::Frame* const fincFrame;
|
||||||
|
|
||||||
Gtk::Label* const wavLabels;
|
Gtk::Label* const wavLabels;
|
||||||
Gtk::Label* const labmC;
|
Gtk::Label* const labmC;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user