Review idle_register.add() calls: denoise

This commit is contained in:
heckflosse
2018-10-24 23:56:25 +02:00
parent ccc882dbcf
commit 7038104a20
2 changed files with 92 additions and 183 deletions

View File

@@ -30,11 +30,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
{ {
std::vector<GradientMilestone> milestones; std::vector<GradientMilestone> milestones;
CurveListener::setMulti(true); CurveListener::setMulti(true);
nextnresid = 0.;
nexthighresid = 0.;
nextchroma = 15.;
nextred = 0.;
nextblue = 0.;
std::vector<double> defaultCurve; std::vector<double> defaultCurve;
@@ -44,8 +39,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
Gtk::VBox * lumaVBox = Gtk::manage ( new Gtk::VBox()); Gtk::VBox * lumaVBox = Gtk::manage ( new Gtk::VBox());
lumaVBox->set_spacing(2); lumaVBox->set_spacing(2);
ctboxL = Gtk::manage (new Gtk::HBox ()); ctboxL = Gtk::manage (new Gtk::HBox ());
Gtk::Label* labmL = Gtk::manage (new Gtk::Label (M("TP_DIRPYRDENOISE_LUMINANCE_CONTROL") + ":")); Gtk::Label* labmL = Gtk::manage (new Gtk::Label (M("TP_DIRPYRDENOISE_LUMINANCE_CONTROL") + ":"));
ctboxL->pack_start (*labmL, Gtk::PACK_SHRINK, 1); ctboxL->pack_start (*labmL, Gtk::PACK_SHRINK, 1);
@@ -66,11 +59,10 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
lshape->setIdentityValue(0.); lshape->setIdentityValue(0.);
lshape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve); lshape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
//lshape->setEditID(EUID_Lab_LCurve, BT_SINGLEPLANE_FLOAT);
milestones.push_back( GradientMilestone(0., 0., 0., 0.) ); milestones.push_back( GradientMilestone(0., 0., 0., 0.) );
milestones.push_back( GradientMilestone(1., 1., 1., 1.) ); milestones.push_back( GradientMilestone(1., 1., 1., 1.) );
lshape->setBottomBarBgGradient(milestones); lshape->setBottomBarBgGradient(milestones);
//lshape->setLeftBarBgGradient(milestones);
milestones.push_back( GradientMilestone(0., 0., 0., 0.) ); milestones.push_back( GradientMilestone(0., 0., 0., 0.) );
milestones.push_back( GradientMilestone(1., 1., 1., 1.) ); milestones.push_back( GradientMilestone(1., 1., 1., 1.) );
NoiscurveEditorG->curveListComplete(); NoiscurveEditorG->curveListComplete();
@@ -107,7 +99,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
C2method->set_active(0); C2method->set_active(0);
C2methodconn = C2method->signal_changed().connect ( sigc::mem_fun(*this, &DirPyrDenoise::C2methodChanged) ); C2methodconn = C2method->signal_changed().connect ( sigc::mem_fun(*this, &DirPyrDenoise::C2methodChanged) );
NoiseLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); NoiseLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER));
NoiseLabels->set_tooltip_text(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP")); NoiseLabels->set_tooltip_text(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP"));
@@ -129,7 +120,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
hb1->pack_end (*dmethod, Gtk::PACK_EXPAND_WIDGET, 1); hb1->pack_end (*dmethod, Gtk::PACK_EXPAND_WIDGET, 1);
pack_start(*hb1, Gtk::PACK_SHRINK, 1); pack_start(*hb1, Gtk::PACK_SHRINK, 1);
dmethodconn = dmethod->signal_changed().connect ( sigc::mem_fun(*this, &DirPyrDenoise::dmethodChanged) ); dmethodconn = dmethod->signal_changed().connect ( sigc::mem_fun(*this, &DirPyrDenoise::dmethodChanged) );
luma->setAdjusterListener (this); luma->setAdjusterListener (this);
@@ -150,9 +140,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
CCcurveEditorG->curveListComplete(); CCcurveEditorG->curveListComplete();
//-----------------------------------------
luma->hide(); luma->hide();
Ldetail->show(); Ldetail->show();
@@ -162,8 +149,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
chroma->show(); chroma->show();
redchro->show(); redchro->show();
bluechro->show(); bluechro->show();
// perform->show();
// perform->set_active (true);
// ---- Median FIltering ---- // ---- Median FIltering ----
@@ -225,10 +210,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
smethod = Gtk::manage (new MyComboBoxText ()); smethod = Gtk::manage (new MyComboBoxText ());
smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE")); smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE"));
// smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_SHBI"));
smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE")); smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE"));
// smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_SHALAL"));
// smethod->append (M("TP_DIRPYRDENOISE_MAIN_MODE_SHBIBI"));
smethod->set_active(1); smethod->set_active(1);
hb11->pack_start (*smethod, Gtk::PACK_EXPAND_WIDGET, 1); hb11->pack_start (*smethod, Gtk::PACK_EXPAND_WIDGET, 1);
pack_start( *hb11, Gtk::PACK_SHRINK, 1); pack_start( *hb11, Gtk::PACK_SHRINK, 1);
@@ -272,17 +254,9 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
chromaFrame->add(*chromaVBox); chromaFrame->add(*chromaVBox);
pack_start (*chromaFrame); pack_start (*chromaFrame);
// pack_start( *hb11, Gtk::PACK_SHRINK, 4);
// pack_start (*median);
ctboxm->pack_start (*methodmed); ctboxm->pack_start (*methodmed);
ctbox->pack_start (*medmethod); ctbox->pack_start (*medmethod);
ctboxrgb->pack_start (*rgbmethod); ctboxrgb->pack_start (*rgbmethod);
// pack_start (*ctboxm);
// pack_start (*ctbox);
// pack_start (*ctboxrgb);
// pack_start (*passes,Gtk::PACK_SHRINK, 1);
medianVBox->pack_start (*ctboxm); medianVBox->pack_start (*ctboxm);
medianVBox->pack_start (*ctbox); medianVBox->pack_start (*ctbox);
@@ -309,123 +283,87 @@ DirPyrDenoise::~DirPyrDenoise ()
void DirPyrDenoise::chromaChanged (double autchroma, double autred, double autblue) void DirPyrDenoise::chromaChanged (double autchroma, double autred, double autblue)
{ {
nextchroma = autchroma; struct Data {
nextred = autred; DirPyrDenoise *me;
nextblue = autblue; double autchroma;
double autred;
const auto func = [](gpointer data) -> gboolean { double autblue;
static_cast<DirPyrDenoise*>(data)->chromaComputed_();
return false;
}; };
idle_register.add(func, this); const auto func = [](gpointer data) -> gboolean {
} Data *d = static_cast<Data *>(data);
DirPyrDenoise *me = d->me;
me->disableListener();
me->chroma->setValue(d->autchroma);
me->redchro->setValue(d->autred);
me->bluechro->setValue(d->autblue);
me->enableListener();
delete d;
return FALSE;
};
bool DirPyrDenoise::chromaComputed_ () idle_register.add(func, new Data { this, autchroma, autred, autblue });
{
disableListener ();
chroma->setValue (nextchroma);
redchro->setValue (nextred);
bluechro->setValue (nextblue);
enableListener ();
updateNoiseLabel ();
return false;
} }
void DirPyrDenoise::noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP) void DirPyrDenoise::noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP)
{ {
nexttileX = tileX; if (!batchMode) {
nexttileY = tileY; struct Data {
nextprevX = prevX; DirPyrDenoise *me;
nextprevY = prevY; int tileX;
nextsizeT = sizeT; int tileY;
nextsizeP = sizeP; int prevX;
int prevY;
const auto func = [](gpointer data) -> gboolean { int sizeT;
static_cast<DirPyrDenoise*>(data)->TilePrevComputed_(); int sizeP;
return false;
}; };
idle_register.add(func, this); const auto func = [](gpointer data) -> gboolean {
} Data *d = static_cast<Data *>(data);
DirPyrDenoise *me = d->me;
bool DirPyrDenoise::TilePrevComputed_ () me->TileLabels->set_text(
{
disableListener ();
enableListener ();
updateTileLabel ();
updatePrevLabel ();
return false;
}
void DirPyrDenoise::updateTileLabel ()
{
if (!batchMode) {
float sT;
float nX, nY;
sT = nextsizeT;
nX = nexttileX;
nY = nexttileY;
{
TileLabels->set_text(
Glib::ustring::compose(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO"), Glib::ustring::compose(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO"),
Glib::ustring::format(std::fixed, std::setprecision(0), sT), Glib::ustring::format(std::fixed, std::setprecision(0), d->sizeT),
Glib::ustring::format(std::fixed, std::setprecision(0), nX), Glib::ustring::format(std::fixed, std::setprecision(0), d->tileX),
Glib::ustring::format(std::fixed, std::setprecision(0), nY)) Glib::ustring::format(std::fixed, std::setprecision(0), d->tileY))
); );
} me->PrevLabels->set_text(
}
}
void DirPyrDenoise::updatePrevLabel ()
{
if (!batchMode) {
float sP;
float pX, pY;
sP = nextsizeP;
pX = nextprevX;
pY = nextprevY;
{
PrevLabels->set_text(
Glib::ustring::compose(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO"), Glib::ustring::compose(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO"),
Glib::ustring::format(std::fixed, std::setprecision(0), sP), Glib::ustring::format(std::fixed, std::setprecision(0), d->sizeP),
Glib::ustring::format(std::fixed, std::setprecision(0), pX), Glib::ustring::format(std::fixed, std::setprecision(0), d->prevX),
Glib::ustring::format(std::fixed, std::setprecision(0), pY)) Glib::ustring::format(std::fixed, std::setprecision(0), d->prevY))
); );
} delete d;
return FALSE;
};
idle_register.add(func, new Data { this, tileX, tileY, prevX, prevY, sizeT, sizeP });
} }
} }
void DirPyrDenoise::noiseChanged (double nresid, double highresid) void DirPyrDenoise::noiseChanged (double nresid, double highresid)
{ {
nextnresid = nresid; if (!batchMode) {
nexthighresid = highresid; struct Data {
DirPyrDenoise *me;
const auto func = [](gpointer data) -> gboolean { double nresid;
static_cast<DirPyrDenoise*>(data)->noiseComputed_(); double highresid;
return false;
}; };
idle_register.add(func, this); const auto func = [](gpointer data) -> gboolean {
Data *d = static_cast<Data *>(data);
DirPyrDenoise *me = d->me;
me->updateNoiseLabel(d->nresid, d->highresid);
delete d;
return FALSE;
};
idle_register.add(func, new Data { this, nresid, highresid });
}
} }
bool DirPyrDenoise::noiseComputed_ () void DirPyrDenoise::updateNoiseLabel (float nois, float high)
{ {
disableListener ();
enableListener ();
updateNoiseLabel ();
return false;
}
void DirPyrDenoise::updateNoiseLabel ()
{
if (!batchMode) {
float nois, high;
nois = nextnresid;
high = nexthighresid;
if(nois == 0.f && high == 0.f) { if(nois == 0.f && high == 0.f) {
NoiseLabels->set_text(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY")); NoiseLabels->set_text(M("TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY"));
} else { } else {
@@ -436,9 +374,6 @@ void DirPyrDenoise::updateNoiseLabel ()
); );
} }
} }
}
void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited)
{ {

View File

@@ -47,36 +47,16 @@ public:
void curveChanged (CurveEditor* ce); void curveChanged (CurveEditor* ce);
void setEditProvider (EditDataProvider *provider); void setEditProvider (EditDataProvider *provider);
void autoOpenCurve (); void autoOpenCurve ();
void adjusterChanged (Adjuster* a, double newval); void adjusterChanged (Adjuster* a, double newval);
void adjusterAutoToggled(Adjuster* a, bool newval); void adjusterAutoToggled(Adjuster* a, bool newval);
void enabledChanged (); void enabledChanged ();
void medianChanged ();
void chromaChanged (double autchroma, double autred, double autblue); void chromaChanged (double autchroma, double autred, double autblue);
bool chromaComputed_ ();
void noiseChanged (double nresid, double highresid); void noiseChanged (double nresid, double highresid);
bool noiseComputed_ ();
void noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP); void noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP);
bool TilePrevComputed_ (); void updateNoiseLabel (float nois = 0.f, float high = 0.f);
// void perform_toggled ();
void updateNoiseLabel ();
void LmethodChanged ();
void CmethodChanged ();
void C2methodChanged ();
void updateTileLabel ();
void updatePrevLabel ();
void dmethodChanged ();
void medmethodChanged ();
void methodmedChanged ();
void rgbmethodChanged ();
void smethodChanged ();
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
void setAdjusterBehavior (bool lumaadd, bool lumdetadd, bool chromaadd, bool chromaredadd, bool chromablueadd, bool gammaadd, bool passesadd); void setAdjusterBehavior (bool lumaadd, bool lumdetadd, bool chromaadd, bool chromaredadd, bool chromablueadd, bool gammaadd, bool passesadd);
void trimValues (rtengine::procparams::ProcParams* pp); void trimValues (rtengine::procparams::ProcParams* pp);
Glib::ustring getSettingString ();
private: private:
CurveEditorGroup* NoiscurveEditorG; CurveEditorGroup* NoiscurveEditorG;
@@ -90,17 +70,12 @@ private:
Adjuster* passes; Adjuster* passes;
FlatCurveEditor* lshape; FlatCurveEditor* lshape;
FlatCurveEditor* ccshape; FlatCurveEditor* ccshape;
sigc::connection medianConn; sigc::connection medianConn;
Gtk::CheckButton* median; Gtk::CheckButton* median;
bool lastmedian; bool lastmedian;
Gtk::Label* NoiseLabels; Gtk::Label* NoiseLabels;
Gtk::Label* TileLabels; Gtk::Label* TileLabels;
Gtk::Label* PrevLabels; Gtk::Label* PrevLabels;
// Gtk::CheckButton* perform;
// bool lastperform;
// sigc::connection perfconn;
MyComboBoxText* dmethod; MyComboBoxText* dmethod;
sigc::connection dmethodconn; sigc::connection dmethodconn;
MyComboBoxText* Lmethod; MyComboBoxText* Lmethod;
@@ -120,22 +95,21 @@ private:
MyComboBoxText* rgbmethod; MyComboBoxText* rgbmethod;
sigc::connection rgbmethodconn; sigc::connection rgbmethodconn;
Gtk::HBox* ctboxrgb; Gtk::HBox* ctboxrgb;
double nextchroma;
double nextred;
double nextblue;
double nextnresid;
double nexthighresid;
Gtk::HBox* ctboxL; Gtk::HBox* ctboxL;
Gtk::HBox* ctboxC; Gtk::HBox* ctboxC;
Gtk::HBox* ctboxC2; Gtk::HBox* ctboxC2;
int nexttileX;
int nexttileY;
int nextprevX;
int nextprevY;
int nextsizeT;
int nextsizeP;
IdleRegister idle_register; IdleRegister idle_register;
void LmethodChanged ();
void CmethodChanged ();
void C2methodChanged ();
void dmethodChanged ();
void medmethodChanged ();
void methodmedChanged ();
void rgbmethodChanged ();
void smethodChanged ();
void medianChanged ();
}; };
#endif #endif