From 7ec1b27a91d7f8a19f35c9dc65e1365ee6358602 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 23 Mar 2019 12:45:44 +0100 Subject: [PATCH] Add show mask to Clarity --- rtdata/languages/default | 4 +- rtengine/dcrop.cc | 6 ++ rtengine/improccoordinator.cc | 5 ++ rtengine/procparams.cc | 4 ++ rtengine/procparams.h | 1 + rtengine/simpleprocess.cc | 7 ++- rtgui/paramsedited.cc | 6 ++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 103 ++++++++++++++++++++++++++++++---- rtgui/wavelet.h | 7 ++- 10 files changed, 130 insertions(+), 14 deletions(-) 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;