diff --git a/rtdata/languages/default b/rtdata/languages/default
index 6e2124b21..5ae722656 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -786,6 +786,7 @@ HISTORY_MSG_WAVMERGEL;Merge L
HISTORY_MSG_WAVMERGEC;Merge C
HISTORY_MSG_WAVSOFTRAD;Soft radius clarity
HISTORY_MSG_WAVSOFTRADEND;Soft radius final
+HISTORY_MSG_WAVSHOWMASK;Show mask
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOT;Snapshot
@@ -2268,8 +2269,9 @@ TP_WAVELET_TMTYPE;Compression method
TP_WAVELET_TON;Toning
TP_WAVELET_USHARP;Clarity method
TP_WAVELET_USH;None
-TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels
+TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels.
TP_WAVELET_SHA;Sharp mask
+TP_WAVELET_SHOWMASK;Show mask
TP_WAVELET_CLA;Clarity
TP_WAVELET_USHARP;Sharp method
TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index f334a6d27..7d2d573ba 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -993,6 +993,12 @@ void Crop::update(int todo)
Glib::ustring provis;
LabImage *provradius = nullptr;
+ if(WaveParams.showmask) {
+ // WaveParams.showmask = false;
+ // WaveParams.expclari = true;
+ }
+
+
if (WaveParams.softrad > 0.f) {
provradius = new LabImage(labnCrop->W, labnCrop->H);
provradius->CopyFrom(labnCrop);
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index c6207964f..1c5b1d5df 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -857,6 +857,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
Glib::ustring provis;
LabImage *provradius = nullptr;
+ if(WaveParams.showmask) {
+ // WaveParams.showmask = false;
+ // WaveParams.expclari = true;
+ }
+
if (WaveParams.softrad > 0.f) {
provradius = new LabImage(pW, pH);
provradius->CopyFrom(nprevl);
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index 1bbab3f74..6aa680a62 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -2156,6 +2156,7 @@ WaveletParams::WaveletParams() :
softradend(0.),
lipst(false),
avoid(false),
+ showmask(false),
tmr(false),
strength(100),
balance(0),
@@ -2251,6 +2252,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
&& softradend == other.softradend
&& lipst == other.lipst
&& avoid == other.avoid
+ && showmask == other.showmask
&& tmr == other.tmr
&& strength == other.strength
&& balance == other.balance
@@ -3421,6 +3423,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->wavelet.edgval, "Wavelet", "Edgval", wavelet.edgval, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.edgthresh, "Wavelet", "ThrEdg", wavelet.edgthresh, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.avoid, "Wavelet", "AvoidColorShift", wavelet.avoid, keyFile);
+ saveToKeyfile(!pedited || pedited->wavelet.showmask, "Wavelet", "Showmask", wavelet.showmask, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.tmr, "Wavelet", "TMr", wavelet.tmr, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.rescon, "Wavelet", "ResidualcontShadow", wavelet.rescon, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.resconH, "Wavelet", "ResidualcontHighlight", wavelet.resconH, keyFile);
@@ -4481,6 +4484,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Wavelet", "Softradend", pedited, wavelet.softradend, pedited->wavelet.softradend);
assignFromKeyfile(keyFile, "Wavelet", "Lipst", pedited, wavelet.lipst, pedited->wavelet.lipst);
assignFromKeyfile(keyFile, "Wavelet", "AvoidColorShift", pedited, wavelet.avoid, pedited->wavelet.avoid);
+ assignFromKeyfile(keyFile, "Wavelet", "Showmask", pedited, wavelet.showmask, pedited->wavelet.showmask);
assignFromKeyfile(keyFile, "Wavelet", "TMr", pedited, wavelet.tmr, pedited->wavelet.tmr);
if (ppVersion < 331) { // wavelet.Lmethod was a string before version 331
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index f2328217a..1258ee05b 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -1187,6 +1187,7 @@ struct WaveletParams {
bool lipst;
bool avoid;
+ bool showmask;
bool tmr;
int strength;
int balance;
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index 52ab5a590..d4cdfc81e 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -1129,7 +1129,12 @@ private:
WavOpacityCurveW waOpacityCurveW;
WavOpacityCurveWL waOpacityCurveWL;
LabImage *provradius = nullptr;
-
+/*
+ if(WaveParams.showmask) {
+ WaveParams.showmask = false;
+ WaveParams.expclari = true;
+ }
+*/
if (WaveParams.softrad > 0.f) {
provradius = new LabImage(fw, fh);
provradius->CopyFrom(labView);
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index cec0a5c92..6e9a6372c 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -480,6 +480,7 @@ void ParamsEdited::set(bool v)
wavelet.Medgreinf = v;
wavelet.ushamethod = v;
wavelet.avoid = v;
+ wavelet.showmask = v;
wavelet.tmr = v;
wavelet.Lmethod = v;
wavelet.CLmethod = v;
@@ -1053,6 +1054,7 @@ void ParamsEdited::initFrom(const std::vector&
wavelet.softradend = wavelet.softradend && p.wavelet.softradend == other.wavelet.softradend;
wavelet.ushamethod = wavelet.ushamethod && p.wavelet.ushamethod == other.wavelet.ushamethod;
wavelet.avoid = wavelet.avoid && p.wavelet.avoid == other.wavelet.avoid;
+ wavelet.showmask = wavelet.showmask && p.wavelet.showmask == other.wavelet.showmask;
wavelet.tmr = wavelet.tmr && p.wavelet.tmr == other.wavelet.tmr;
wavelet.Lmethod = wavelet.Lmethod && p.wavelet.Lmethod == other.wavelet.Lmethod;
wavelet.CLmethod = wavelet.CLmethod && p.wavelet.CLmethod == other.wavelet.CLmethod;
@@ -2846,6 +2848,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.wavelet.avoid = mods.wavelet.avoid;
}
+ if (wavelet.showmask) {
+ toEdit.wavelet.showmask = mods.wavelet.showmask;
+ }
+
if (wavelet.tmr) {
toEdit.wavelet.tmr = mods.wavelet.tmr;
}
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 13d575d90..366703fc7 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -477,6 +477,7 @@ struct WaveletParamsEdited {
bool Medgreinf;
bool ushamethod;
bool avoid;
+ bool showmask;
bool tmr;
bool c[9];
bool ch[9];
diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc
index a6660610f..cda404d2a 100644
--- a/rtgui/wavelet.cc
+++ b/rtgui/wavelet.cc
@@ -75,6 +75,7 @@ Wavelet::Wavelet() :
lipst(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_LIPST")))),
avoid(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_AVOID")))),
tmr(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_BALCHRO")))),
+ showmask(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_SHOWMASK")))),
neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))),
rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))),
resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))),
@@ -161,6 +162,7 @@ Wavelet::Wavelet() :
EvWavmergeC = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMERGEC");
EvWavsoftrad = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRAD");
EvWavsoftradend = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRADEND");
+ EvWavshowmask = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSHOWMASK");
expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings));
@@ -477,6 +479,8 @@ Wavelet::Wavelet() :
mergeL->setAdjusterListener(this);
mergeC->setAdjusterListener(this);
softrad->setAdjusterListener(this);
+ showmask->set_active(false);
+ showmaskConn = showmask->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::showmaskToggled));
ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock());
ushamethod->append(M("TP_WAVELET_USH"));
@@ -491,6 +495,7 @@ Wavelet::Wavelet() :
clariBox->pack_start(*mergeL);
clariBox->pack_start(*mergeC);
clariBox->pack_start(*softrad);
+ clariBox->pack_start(*showmask);
// Edge Sharpness
ToolParamBlock* const edgBox = Gtk::manage(new ToolParamBlock());
@@ -1159,6 +1164,9 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
avoidConn.block(true);
avoid->set_active(pp->wavelet.avoid);
avoidConn.block(false);
+ showmaskConn.block(true);
+ showmask->set_active(pp->wavelet.showmask);
+ showmaskConn.block(false);
tmrConn.block(true);
tmr->set_active(pp->wavelet.tmr);
tmrConn.block(false);
@@ -1188,6 +1196,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
lastcbenab = pp->wavelet.cbenab;
lastlipst = pp->wavelet.lipst;
lastavoid = pp->wavelet.avoid;
+ lastshowmask = pp->wavelet.showmask;
lasttmr = pp->wavelet.tmr;
rescon->setValue(pp->wavelet.rescon);
resconH->setValue(pp->wavelet.resconH);
@@ -1333,6 +1342,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
Chshape->setUnChanged(!pedited->wavelet.Chcurve);
clshape->setUnChanged(!pedited->wavelet.wavclCurve);
avoid->set_inconsistent(!pedited->wavelet.avoid);
+ showmask->set_inconsistent(!pedited->wavelet.showmask);
tmr->set_inconsistent(!pedited->wavelet.tmr);
edgthresh->setEditedState(pedited->wavelet.edgthresh ? Edited : UnEdited);
rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited);
@@ -1512,6 +1522,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pp->wavelet.enabled = getEnabled();
pp->wavelet.avoid = avoid->get_active();
+ pp->wavelet.showmask = showmask->get_active();
pp->wavelet.tmr = tmr->get_active();
pp->wavelet.rescon = rescon->getValue();
pp->wavelet.resconH = resconH->getValue();
@@ -1597,6 +1608,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
if (pedited) {
pedited->wavelet.enabled = !get_inconsistent();
pedited->wavelet.avoid = !avoid->get_inconsistent();
+ pedited->wavelet.showmask = !showmask->get_inconsistent();
pedited->wavelet.tmr = !tmr->get_inconsistent();
pedited->wavelet.median = !median->get_inconsistent();
pedited->wavelet.medianlev = !medianlev->get_inconsistent();
@@ -2342,14 +2354,14 @@ void Wavelet::ushamethodChanged()
Dirmethod->set_active(3);
Lmethod->set_sensitive(true);
Dirmethod->set_sensitive(true);
- } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) {
+ } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) {
Backmethod->set_active(1);
CLmethod->set_active(3);
Lmethod->set_active(3);
Dirmethod->set_active(3);
Lmethod->set_sensitive(false);
Dirmethod->set_sensitive(false);
- } else if (expclari->getEnabled() == false) {
+ } else if (expclari->getEnabled() == false) {
Backmethod->set_active(1);
CLmethod->set_active(3);
Lmethod->set_active(3);
@@ -2975,6 +2987,72 @@ void Wavelet::avoidToggled()
}
}
+void Wavelet::showmaskToggled()
+{
+ if (ushamethod->get_active_row_number() == 2 && showmask->get_active()) {
+ Backmethod->set_active(2);
+ CLmethod->set_active(2);
+ Lmethod->set_active(6);
+ Lmethod->set_sensitive(true);
+ Dirmethod->set_sensitive(true);
+ Dirmethod->set_active(3);
+ expclari->setEnabled(false);
+
+ } else if (ushamethod->get_active_row_number() == 1 && showmask->get_active()) {
+ Backmethod->set_active(0);
+ CLmethod->set_active(1);
+ Lmethod->set_active(2);
+ Dirmethod->set_active(3);
+ Lmethod->set_sensitive(true);
+ Dirmethod->set_sensitive(true);
+ expclari->setEnabled(false);
+
+ }
+
+ if (ushamethod->get_active_row_number() == 2 && !showmask->get_active()) {
+ Backmethod->set_active(2);
+ CLmethod->set_active(2);
+ Lmethod->set_active(6);
+ Lmethod->set_sensitive(true);
+ Dirmethod->set_sensitive(true);
+ Dirmethod->set_active(3);
+ expclari->setEnabled(true);
+
+ } else if (ushamethod->get_active_row_number() == 1 && !showmask->get_active()) {
+ Backmethod->set_active(0);
+ CLmethod->set_active(1);
+ Lmethod->set_active(2);
+ Dirmethod->set_active(3);
+ Lmethod->set_sensitive(true);
+ Dirmethod->set_sensitive(true);
+ expclari->setEnabled(true);
+
+ }
+
+ if (multiImage) {
+ if (showmask->get_inconsistent()) {
+ showmask->set_inconsistent(false);
+ showmaskConn.block(true);
+ showmask->set_active(false);
+ showmaskConn.block(false);
+ } else if (lastshowmask) {
+ showmask->set_inconsistent(true);
+ }
+
+ lastshowmask = showmask->get_active();
+ }
+
+ if (listener && (multiImage || getEnabled())) {
+ if (showmask->get_inconsistent()) {
+ listener->panelChanged(EvWavshowmask, M("GENERAL_UNCHANGED"));
+ } else if (showmask->get_active()) {
+ listener->panelChanged(EvWavshowmask, M("GENERAL_ENABLED"));
+ } else {
+ listener->panelChanged(EvWavshowmask, M("GENERAL_DISABLED"));
+ }
+ }
+}
+
void Wavelet::tmrToggled()
{
@@ -3150,13 +3228,19 @@ void Wavelet::enableToggled(MyExpander *expander)
event = EvWavenafin;
} else if (expander == expclari) {
if (expclari->getEnabled() == false) {
- Backmethod->set_active(1);
- CLmethod->set_active(3);
- Lmethod->set_active(3);
- Dirmethod->set_active(3);
- Lmethod->set_sensitive(false);
- Dirmethod->set_sensitive(false);
- } else {
+ if (! showmask->get_active()) {
+ Backmethod->set_active(1);
+ CLmethod->set_active(3);
+ Lmethod->set_active(3);
+ Dirmethod->set_active(3);
+ Lmethod->set_sensitive(false);
+ Dirmethod->set_sensitive(false);
+ }
+ } else {
+ if (showmask->get_active()) {
+ showmask->set_active(false);
+ }
+
if (ushamethod->get_active_row_number() == 2) {
Backmethod->set_active(2);
CLmethod->set_active(2);
@@ -3173,7 +3257,6 @@ void Wavelet::enableToggled(MyExpander *expander)
Dirmethod->set_sensitive(true);
}
}
-
event = EvWavenaclari;
} else
// unknown expander, returning !
diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h
index 1e7a07fc6..7dee7e955 100644
--- a/rtgui/wavelet.h
+++ b/rtgui/wavelet.h
@@ -71,6 +71,7 @@ private:
rtengine::ProcEvent EvWavmergeC;
rtengine::ProcEvent EvWavsoftrad;
rtengine::ProcEvent EvWavsoftradend;
+ rtengine::ProcEvent EvWavshowmask;
void foldAllButMe (GdkEventButton* event, MyExpander *expander);
@@ -89,6 +90,7 @@ private:
void TMmethodChanged ();
void TilesmethodChanged ();
void avoidToggled ();
+ void showmaskToggled ();
void cbenabToggled ();
void contrastMinusPressed ();
void contrastPlusPressed ();
@@ -156,6 +158,7 @@ private:
Gtk::CheckButton* const lipst;
Gtk::CheckButton* const avoid;
Gtk::CheckButton* const tmr;
+ Gtk::CheckButton* const showmask;
Gtk::Button* const neutralchButton;
Adjuster* correction[9];
@@ -266,13 +269,13 @@ private:
sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn, enableclariConn;
sigc::connection enableNoiseConn, enableResidConn, enableToningConn;
- sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn;
+ sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn, showmaskConn;
sigc::connection neutralPressedConn;
sigc::connection contrastPlusPressedConn;
sigc::connection contrastMinusPressedConn;
sigc::connection neutralchPressedConn;
- bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab;
+ bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab, lastshowmask;
int nextnlevel;
IdleRegister idle_register;