Save GUI for mask retinex - disabled

This commit is contained in:
Desmis 2019-05-10 16:56:57 +02:00
parent a45ae2d970
commit 31f9b44d06
14 changed files with 647 additions and 9 deletions

View File

@ -1563,6 +1563,150 @@ void LocretigainCurverab::Set(const std::vector<double> &curvePoints)
}
}
LocHHmaskretiCurve::LocHHmaskretiCurve() : sum(0.f) {};
void LocHHmaskretiCurve::Reset()
{
lutLocHHmaskretiCurve.reset();
sum = 0.f;
}
void LocHHmaskretiCurve::Set(const Curve &pCurve)
{
if (pCurve.isIdentity()) {
Reset(); // raise this value if the quality suffers from this number of samples
return;
}
lutLocHHmaskretiCurve(501); // raise this value if the quality suffers from this number of samples
sum = 0.f;
for (int i = 0; i < 501; i++) {
lutLocHHmaskretiCurve[i] = pCurve.getVal(double (i) / 500.);
if (lutLocHHmaskretiCurve[i] < 0.02f) {
lutLocHHmaskretiCurve[i] = 0.02f;
}
sum += lutLocHHmaskretiCurve[i];
}
//lutLocHHCurve.dump("wav");
}
void LocHHmaskretiCurve::Set(const std::vector<double> &curvePoints, bool & lhmasretiutili)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
lhmasretiutili = true;
Set(ttcurve);
} else {
Reset();
}
}
LocLLmaskretiCurve::LocLLmaskretiCurve() : sum(0.f) {};
void LocLLmaskretiCurve::Reset()
{
lutLocLLmaskretiCurve.reset();
sum = 0.f;
}
void LocLLmaskretiCurve::Set(const Curve &pCurve)
{
if (pCurve.isIdentity()) {
Reset(); // raise this value if the quality suffers from this number of samples
return;
}
lutLocLLmaskretiCurve(501); // raise this value if the quality suffers from this number of samples
sum = 0.f;
for (int i = 0; i < 501; i++) {
lutLocLLmaskretiCurve[i] = pCurve.getVal(double (i) / 500.);
if (lutLocLLmaskretiCurve[i] < 0.02f) {
lutLocLLmaskretiCurve[i] = 0.02f; //avoid 0.f for wavelet : under 0.01f quasi no action for each value
}
sum += lutLocLLmaskretiCurve[i];
}
//lutLocHHCurve.dump("wav");
}
void LocLLmaskretiCurve::Set(const std::vector<double> &curvePoints, bool & llmasretiutili)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
llmasretiutili = true;
Set(ttcurve);
} else {
Reset();
}
}
LocCCmaskretiCurve::LocCCmaskretiCurve() : sum(0.f) {};
void LocCCmaskretiCurve::Reset()
{
lutLocCCmaskretiCurve.reset();
sum = 0.f;
}
void LocCCmaskretiCurve::Set(const Curve &pCurve)
{
if (pCurve.isIdentity()) {
Reset(); // raise this value if the quality suffers from this number of samples
return;
}
lutLocCCmaskretiCurve(501); // raise this value if the quality suffers from this number of samples
sum = 0.f;
for (int i = 0; i < 501; i++) {
lutLocCCmaskretiCurve[i] = pCurve.getVal(double (i) / 500.);
if (lutLocCCmaskretiCurve[i] < 0.02f) {
lutLocCCmaskretiCurve[i] = 0.02f; //avoid 0.f for wavelet : under 0.01f quasi no action for each value
}
sum += lutLocCCmaskretiCurve[i];
}
//lutLocHHCurve.dump("wav");
}
void LocCCmaskretiCurve::Set(const std::vector<double> &curvePoints, bool & lcmasretiutili)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
lcmasretiutili = true;
Set(ttcurve);
} else {
Reset();
}
}
LocHHmaskcbCurve::LocHHmaskcbCurve() : sum(0.f) {};
void LocHHmaskcbCurve::Reset()

View File

@ -647,6 +647,95 @@ public:
}
};
class LocHHmaskretiCurve
{
private:
LUTf lutLocHHmaskretiCurve; // 0xffff range
void Set(const Curve &pCurve);
public:
float sum;
virtual ~LocHHmaskretiCurve() {};
LocHHmaskretiCurve();
void Reset();
void Set(const std::vector<double> &curvePoints, bool & lhmasretiutili);
float getSum() const
{
return sum;
}
float operator[](float index) const
{
return lutLocHHmaskretiCurve[index];
}
operator bool (void) const
{
return lutLocHHmaskretiCurve;
}
};
class LocCCmaskretiCurve
{
private:
LUTf lutLocCCmaskretiCurve; // 0xffff range
void Set(const Curve &pCurve);
public:
float sum;
virtual ~LocCCmaskretiCurve() {};
LocCCmaskretiCurve();
void Reset();
void Set(const std::vector<double> &curvePoints, bool & lcmasretiutili);
float getSum() const
{
return sum;
}
float operator[](float index) const
{
return lutLocCCmaskretiCurve[index];
}
operator bool (void) const
{
return lutLocCCmaskretiCurve;
}
};
class LocLLmaskretiCurve
{
private:
LUTf lutLocLLmaskretiCurve; // 0xffff range
void Set(const Curve &pCurve);
public:
float sum;
virtual ~LocLLmaskretiCurve() {};
LocLLmaskretiCurve();
void Reset();
void Set(const std::vector<double> &curvePoints, bool & llmasretiutili);
float getSum() const
{
return sum;
}
float operator[](float index) const
{
return lutLocLLmaskretiCurve[index];
}
operator bool (void) const
{
return lutLocLLmaskretiCurve;
}
};
class LocHHmaskcbCurve
{
private:

View File

@ -204,6 +204,7 @@ ImProcCoordinator::ImProcCoordinator() :
locallExpMask(0),
locallSHMask(0),
locallcbMask(0),
locallretiMask(0),
avg(0),
retistrsav(nullptr)

View File

@ -279,6 +279,7 @@ protected:
int locallExpMask;
int locallSHMask;
int locallcbMask;
int locallretiMask;
float avg;
public:
@ -348,12 +349,13 @@ public:
updaterThreadStart.unlock();
}
void setLocallabMaskVisibility (int locallColorMask, int locallExpMask, int locallSHMask, int locallcbMask) override
void setLocallabMaskVisibility (int locallColorMask, int locallExpMask, int locallSHMask, int locallcbMask, int locallretiMask) override
{
this->locallColorMask = locallColorMask;
this->locallExpMask = locallExpMask;
this->locallSHMask = locallSHMask;
this->locallcbMask = locallcbMask;
this->locallretiMask = locallretiMask;
}
void setProgressListener (ProgressListener* pl) override

View File

@ -705,6 +705,16 @@ enum ProcEventCode {
EvLocallabSpotTransitgrad = 675,
Evlocallabamount = 676,
Evlocallabsatur = 677,
EvlocallabCCmaskretishape = 678,
EvlocallabLLmaskretishape = 679,
EvlocallabHHmaskretishape = 680,
EvLocallabEnaretiMask = 681,
Evlocallabblendmaskreti = 682,
Evlocallabradmaskreti = 683,
Evlocallabchromaskreti = 684,
Evlocallabgammaskreti = 685,
Evlocallabslomaskreti = 686,
EvlocallabshowmaskretiMethod = 687,
NUMOFEVENTS
};

View File

@ -2478,6 +2478,15 @@ LocallabParams::LocallabSpot::LocallabSpot() :
localTgaincurve{(double)FCT_MinMaxCPoints, 0.0, 0.12, 0.35, 0.35, 0.70, 0.50, 0.35, 0.35, 1.00, 0.12, 0.35, 0.35},
inversret(false),
softradiusret(0.0),
CCmaskreticurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35 },
LLmaskreticurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
HHmaskreticurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
enaretiMask(false),
blendmaskreti(0),
radmaskreti(10.0),
chromaskreti(0.0),
gammaskreti(1.0),
slomaskreti(0.0),
// Sharpening
expsharp(false),
sharcontrast(20),
@ -2677,6 +2686,15 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& localTgaincurve == other.localTgaincurve
&& inversret == other.inversret
&& softradiusret == other.softradiusret
&& CCmaskreticurve == other.CCmaskreticurve
&& LLmaskreticurve == other.LLmaskreticurve
&& HHmaskreticurve == other.HHmaskreticurve
&& enaretiMask == other.enaretiMask
&& blendmaskreti == other.blendmaskreti
&& radmaskreti == other.radmaskreti
&& chromaskreti == other.chromaskreti
&& gammaskreti == other.gammaskreti
&& slomaskreti == other.slomaskreti
// Sharpening
&& expsharp == other.expsharp
&& sharcontrast == other.sharcontrast
@ -3820,6 +3838,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensitm, "Locallab", "Sensitm_" + std::to_string(i), spot.sensitm, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).softradiustm, "Locallab", "Softradiustm_" + std::to_string(i), spot.softradiustm, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).amount, "Locallab", "Amount_" + std::to_string(i), spot.amount, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskreticurve, "Locallab", "CCmaskretiCurve_" + std::to_string(i), spot.CCmaskreticurve, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskreticurve, "Locallab", "LLmaskretiCurve_" + std::to_string(i), spot.LLmaskreticurve, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskreticurve, "Locallab", "HHmaskretiCurve_" + std::to_string(i), spot.HHmaskreticurve, keyFile);
// Retinex
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expreti, "Locallab", "Expreti_" + std::to_string(i), spot.expreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).retinexMethod, "Locallab", "retinexMethod_" + std::to_string(i), spot.retinexMethod, keyFile);
@ -3832,6 +3853,12 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).localTgaincurve, "Locallab", "TgainCurve_" + std::to_string(i), spot.localTgaincurve, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).inversret, "Locallab", "Inversret_" + std::to_string(i), spot.inversret, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).softradiusret, "Locallab", "Softradiusret_" + std::to_string(i), spot.softradiusret, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enaretiMask, "Locallab", "EnaretiMask_" + std::to_string(i), spot.enaretiMask, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskreti, "Locallab", "Blendmaskreti_" + std::to_string(i), spot.blendmaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radmaskreti, "Locallab", "Radmaskreti_" + std::to_string(i), spot.radmaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromaskreti, "Locallab", "Chromaskreti_" + std::to_string(i), spot.chromaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskreti, "Locallab", "Gammaskreti_" + std::to_string(i), spot.gammaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskreti, "Locallab", "Slomaskreti_" + std::to_string(i), spot.slomaskreti, keyFile);
// Sharpening
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expsharp, "Locallab", "Expsharp_" + std::to_string(i), spot.expsharp, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sharcontrast, "Locallab", "Sharcontrast_" + std::to_string(i), spot.sharcontrast, keyFile);
@ -5128,6 +5155,15 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "TgainCurve_" + std::to_string(i), pedited, spot.localTgaincurve, spotEdited.localTgaincurve);
assignFromKeyfile(keyFile, "Locallab", "Inversret_" + std::to_string(i), pedited, spot.inversret, spotEdited.inversret);
assignFromKeyfile(keyFile, "Locallab", "Softradiusret_" + std::to_string(i), pedited, spot.softradiusret, spotEdited.softradiusret);
assignFromKeyfile(keyFile, "Locallab", "CCmaskretiCurve_" + std::to_string(i), pedited, spot.CCmaskreticurve, spotEdited.CCmaskreticurve);
assignFromKeyfile(keyFile, "Locallab", "LLmaskretiCurve_" + std::to_string(i), pedited, spot.LLmaskreticurve, spotEdited.LLmaskreticurve);
assignFromKeyfile(keyFile, "Locallab", "HHmaskretiCurve_" + std::to_string(i), pedited, spot.HHmaskreticurve, spotEdited.HHmaskreticurve);
assignFromKeyfile(keyFile, "Locallab", "EnaretiMask_" + std::to_string(i), pedited, spot.enaretiMask, spotEdited.enaretiMask);
assignFromKeyfile(keyFile, "Locallab", "Blendmaskreti_" + std::to_string(i), pedited, spot.blendmaskreti, spotEdited.blendmaskreti);
assignFromKeyfile(keyFile, "Locallab", "Radmaskreti_" + std::to_string(i), pedited, spot.radmaskreti, spotEdited.radmaskreti);
assignFromKeyfile(keyFile, "Locallab", "Chromaskreti_" + std::to_string(i), pedited, spot.chromaskreti, spotEdited.chromaskreti);
assignFromKeyfile(keyFile, "Locallab", "Gammaskreti_" + std::to_string(i), pedited, spot.gammaskreti, spotEdited.gammaskreti);
assignFromKeyfile(keyFile, "Locallab", "Slomaskreti_" + std::to_string(i), pedited, spot.slomaskreti, spotEdited.slomaskreti);
// Sharpening
assignFromKeyfile(keyFile, "Locallab", "Expsharp_" + std::to_string(i), pedited, spot.expsharp, spotEdited.expsharp);
assignFromKeyfile(keyFile, "Locallab", "Sharcontrast_" + std::to_string(i), pedited, spot.sharcontrast, spotEdited.sharcontrast);
@ -5159,11 +5195,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Contresid_" + std::to_string(i), pedited, spot.contresid, spotEdited.contresid);
assignFromKeyfile(keyFile, "Locallab", "Blurcbdl_" + std::to_string(i), pedited, spot.blurcbdl, spotEdited.blurcbdl);
assignFromKeyfile(keyFile, "Locallab", "Softradiuscb_" + std::to_string(i), pedited, spot.softradiuscb, spotEdited.softradiuscb);
assignFromKeyfile(keyFile, "Locallab", "Blendmaskcb_" + std::to_string(i), pedited, spot.blendmaskcb, spotEdited.blendmaskcb);
assignFromKeyfile(keyFile, "Locallab", "EnacbMask_" + std::to_string(i), pedited, spot.enacbMask, spotEdited.enacbMask);
assignFromKeyfile(keyFile, "Locallab", "CCmaskcbCurve_" + std::to_string(i), pedited, spot.CCmaskcbcurve, spotEdited.CCmaskcbcurve);
assignFromKeyfile(keyFile, "Locallab", "LLmaskcbCurve_" + std::to_string(i), pedited, spot.LLmaskcbcurve, spotEdited.LLmaskcbcurve);
assignFromKeyfile(keyFile, "Locallab", "HHmaskcbCurve_" + std::to_string(i), pedited, spot.HHmaskcbcurve, spotEdited.HHmaskcbcurve);
assignFromKeyfile(keyFile, "Locallab", "Blendmaskcb_" + std::to_string(i), pedited, spot.blendmaskcb, spotEdited.blendmaskcb);
assignFromKeyfile(keyFile, "Locallab", "Radmaskcb_" + std::to_string(i), pedited, spot.radmaskcb, spotEdited.radmaskcb);
assignFromKeyfile(keyFile, "Locallab", "Chromaskcb_" + std::to_string(i), pedited, spot.chromaskcb, spotEdited.chromaskcb);
assignFromKeyfile(keyFile, "Locallab", "Gammaskcb_" + std::to_string(i), pedited, spot.gammaskcb, spotEdited.gammaskcb);

View File

@ -1079,6 +1079,15 @@ struct LocallabParams {
std::vector<double> localTgaincurve;
bool inversret;
double softradiusret;
std::vector<double> CCmaskreticurve;
std::vector<double> LLmaskreticurve;
std::vector<double> HHmaskreticurve;
bool enaretiMask;
int blendmaskreti;
double radmaskreti;
double chromaskreti;
double gammaskreti;
double slomaskreti;
// Sharpening
bool expsharp;
int sharcontrast;

View File

@ -704,7 +704,17 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabsoftradiustm
LUMINANCECURVE, // EvLocallabSpotTransitgrad
LUMINANCECURVE, // Evlocallabamount
LUMINANCECURVE // Evlocallabsatur
LUMINANCECURVE, // Evlocallabsatur
LUMINANCECURVE, //EvlocallabCCmaskretishape
LUMINANCECURVE, //EvlocallabLLmaskretishape
LUMINANCECURVE, //EvlocallabHHmaskretishape
LUMINANCECURVE, //EvLocallabEnaretiMask
LUMINANCECURVE, //Evlocallabblendmaskreti
LUMINANCECURVE, // Evlocallabradmaskreti
LUMINANCECURVE, //Evlocallabchromaskreti
LUMINANCECURVE, //Evlocallabgammaskreti
LUMINANCECURVE, //Evlocallabslomaskreti
LUMINANCECURVE //EvlocallabshowmaskretiMethod
};

View File

@ -499,7 +499,7 @@ public:
virtual void updateUnLock() = 0;
virtual void setLocallabMaskVisibility(int locallColorMask, int locallExpMask, int locallSHMask, int locallcbMask) = 0;
virtual void setLocallabMaskVisibility(int locallColorMask, int locallExpMask, int locallSHMask, int locallcbMask, int locallretiMask) = 0;
/** Creates and returns a Crop instance that acts as a window on the image
* @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber

View File

@ -62,6 +62,7 @@ Locallab::Locallab():
expmaskexp(new MyExpander(false, M("TP_LOCALLAB_SHOW"))),
expmasksh(new MyExpander(false, M("TP_LOCALLAB_SHOW"))),
expmaskcb(new MyExpander(false, M("TP_LOCALLAB_SHOW"))),
expmaskreti(new MyExpander(false, M("TP_LOCALLAB_SHOW"))),
// CurveEditorGroup widgets
// Color & Light
@ -77,6 +78,7 @@ Locallab::Locallab():
curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))),
// Retinex
LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))),
maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
//CBDL
maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
@ -154,6 +156,11 @@ Locallab::Locallab():
dehaz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZ"), 0, 100, 1, 0))),
sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIH"), 0, 100, 1, 30))),
softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GUIDFILTER"), 0.0, 100.0, 0.1, 0.))),
blendmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))),
chromaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
slomaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
// Sharpening
sharcontrast(Gtk::manage(new Adjuster(M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 20))),
sharradius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARRADIUS"), 0.4, 2.5, 0.01, 0.75))),
@ -214,6 +221,7 @@ Locallab::Locallab():
activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))),
// Retinex
inversret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))),
enaretiMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
// Sharpening
inverssha(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))),
//CBDL
@ -232,6 +240,7 @@ Locallab::Locallab():
blurMethod(Gtk::manage(new MyComboBoxText())),
// Retinex
retinexMethod(Gtk::manage(new MyComboBoxText())),
showmaskretiMethod(Gtk::manage(new MyComboBoxText())),
//CBDL
showmaskcbMethod(Gtk::manage(new MyComboBoxText())),
@ -816,6 +825,10 @@ Locallab::Locallab():
expreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expreti));
enableretiConn = expreti->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expreti));
setExpandAlignProperties (expmaskreti, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
expmaskreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskreti));
expmaskreti->setLevel (2);
retinexMethod->append(M("TP_RETINEX_LOW"));
retinexMethod->append(M("TP_RETINEX_UNIFORM"));
retinexMethod->append(M("TP_RETINEX_HIGH"));
@ -851,6 +864,60 @@ Locallab::Locallab():
inversretConn = inversret->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversretChanged));
maskretiCurveEditorG->setCurveListener(this);
CCmaskretishape = static_cast<FlatCurveEditor*>(maskretiCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false));
CCmaskretishape->setIdentityValue(0.);
CCmaskretishape->setResetCurve(FlatCurveType(defSpot.CCmaskreticurve.at(0)), defSpot.CCmaskreticurve);
if(showtooltip) CCmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
CCmaskretishape->setBottomBarColorProvider(this, 7);
LLmaskretishape = static_cast<FlatCurveEditor*>(maskretiCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false));
LLmaskretishape->setIdentityValue(0.);
LLmaskretishape->setResetCurve(FlatCurveType(defSpot.LLmaskreticurve.at(0)), defSpot.LLmaskreticurve);
if(showtooltip) LLmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmaskretishape->setBottomBarBgGradient(mllshape);
HHmaskretishape = static_cast<FlatCurveEditor *>(maskretiCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true));
HHmaskretishape->setIdentityValue(0.);
HHmaskretishape->setResetCurve(FlatCurveType(defSpot.HHmaskreticurve.at(0)), defSpot.HHmaskreticurve);
if(showtooltip) HHmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmaskretishape->setCurveColorProvider(this, 6);
HHmaskretishape->setBottomBarColorProvider(this, 6);
maskretiCurveEditorG->curveListComplete();
enaretiMaskConn = enaretiMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaretiMaskChanged));
showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMODIF"));
showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK"));
showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMASK"));
showmaskretiMethod->append(M("TP_LOCALLAB_PREVIEWSEL"));
showmaskretiMethod->set_active(0);
if(showtooltip) showmaskretiMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmaskretiMethodConn = showmaskretiMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskretiMethodChanged));
blendmaskreti->setAdjusterListener(this);
radmaskreti->setAdjusterListener(this);
chromaskreti->setAdjusterListener(this);
gammaskreti->setAdjusterListener(this);
slomaskreti->setAdjusterListener(this);
ToolParamBlock* const maskretiBox = Gtk::manage(new ToolParamBlock());
maskretiBox->pack_start(*showmaskretiMethod, Gtk::PACK_SHRINK, 4);
maskretiBox->pack_start(*enaretiMask, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*maskretiCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
maskretiBox->pack_start(*blendmaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*radmaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*chromaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*gammaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*slomaskreti, Gtk::PACK_SHRINK, 0);
expmaskreti->add(*maskretiBox);
ToolParamBlock* const retiBox = Gtk::manage(new ToolParamBlock());
retiBox->pack_start(*retinexMethod);
retiBox->pack_start(*str);
@ -861,6 +928,7 @@ Locallab::Locallab():
retiBox->pack_start(*softradiusret);
retiBox->pack_start(*sensih);
retiBox->pack_start(*LocalcurveEditorgainT, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
// retiBox->pack_start(*expmaskreti);
retiBox->pack_start(*inversret);
expreti->add(*retiBox);
expreti->setLevel(2);
@ -1163,6 +1231,7 @@ void Locallab::foldAllButMe(GdkEventButton* event, MyExpander *expander)
expmaskexp->set_expanded(expmaskexp == expander);
expmasksh->set_expanded(expmasksh == expander);
expmaskcb->set_expanded(expmaskcb == expander);
expmaskreti->set_expanded(expmaskreti == expander);
}
}
@ -1253,6 +1322,7 @@ void Locallab::writeOptions(std::vector<int> &tpOpen)
tpOpen.push_back(expmaskexp->get_expanded());
tpOpen.push_back(expmasksh->get_expanded());
tpOpen.push_back(expmaskcb->get_expanded());
tpOpen.push_back(expmaskreti->get_expanded());
}
@ -1302,6 +1372,11 @@ void Locallab::refChanged(double huer, double lumar, double chromar)
LLmaskcbshape->updateLocallabBackground(normLumar);
HHmaskcbshape->updateLocallabBackground(normHuer);
// Update Retinex mask background
CCmaskretishape->updateLocallabBackground(normChromar);
LLmaskretishape->updateLocallabBackground(normLumar);
HHmaskretishape->updateLocallabBackground(normHuer);
return false;
}
);
@ -1310,7 +1385,7 @@ void Locallab::refChanged(double huer, double lumar, double chromar)
void Locallab::updateToolState(std::vector<int> &tpOpen)
{
if (tpOpen.size() >= 18) {
if (tpOpen.size() >= 19) {
expsettings->setExpanded(tpOpen.at(0));
expcolor->set_expanded(tpOpen.at(1));
expexpose->set_expanded(tpOpen.at(2));
@ -1328,6 +1403,7 @@ void Locallab::updateToolState(std::vector<int> &tpOpen)
expmaskexp->set_expanded(tpOpen.at(14));
expmasksh->set_expanded(tpOpen.at(15));
expmaskcb->set_expanded(tpOpen.at(16));
expmaskreti->set_expanded(tpOpen.at(17));
}
}
@ -2043,6 +2119,16 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).localTgaincurve = cTgainshape->getCurve();
pp->locallab.spots.at(pp->locallab.selspot).inversret = inversret->get_active();
pp->locallab.spots.at(pp->locallab.selspot).softradiusret = softradiusret->getValue();
pp->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve = LLmaskretishape->getCurve();
pp->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve = CCmaskretishape->getCurve();
pp->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve = HHmaskretishape->getCurve();
pp->locallab.spots.at(pp->locallab.selspot).enaretiMask = enaretiMask->get_active();
pp->locallab.spots.at(pp->locallab.selspot).blendmaskreti = blendmaskreti->getIntValue();
pp->locallab.spots.at(pp->locallab.selspot).radmaskreti = radmaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).chromaskreti = chromaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).gammaskreti = gammaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).slomaskreti = slomaskreti->getValue();
// Sharpening
pp->locallab.spots.at(pp->locallab.selspot).expsharp = expsharp->getEnabled();
pp->locallab.spots.at(pp->locallab.selspot).sharcontrast = sharcontrast->getIntValue();
@ -2244,6 +2330,15 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).localTgaincurve = pe->locallab.spots.at(pp->locallab.selspot).localTgaincurve || !cTgainshape->isUnChanged();
pe->locallab.spots.at(pp->locallab.selspot).inversret = pe->locallab.spots.at(pp->locallab.selspot).inversret || !inversret->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).softradiusret = pe->locallab.spots.at(pp->locallab.selspot).softradiusret || softradiusret->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve || !CCmaskretishape->isUnChanged();
pe->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve || !LLmaskretishape->isUnChanged();
pe->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve || !HHmaskretishape->isUnChanged();
pe->locallab.spots.at(pp->locallab.selspot).enaretiMask = pe->locallab.spots.at(pp->locallab.selspot).enaretiMask || !enaretiMask->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).blendmaskreti = pe->locallab.spots.at(pp->locallab.selspot).blendmaskreti || blendmaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).radmaskreti = pe->locallab.spots.at(pp->locallab.selspot).radmaskreti || radmaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).chromaskreti = pe->locallab.spots.at(pp->locallab.selspot).chromaskreti || chromaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).gammaskreti = pe->locallab.spots.at(pp->locallab.selspot).gammaskreti || gammaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).slomaskreti = pe->locallab.spots.at(pp->locallab.selspot).slomaskreti || slomaskreti->getEditedState();
// Sharpening
pe->locallab.spots.at(pp->locallab.selspot).expsharp = pe->locallab.spots.at(pp->locallab.selspot).expsharp || !expsharp->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).sharcontrast = pe->locallab.spots.at(pp->locallab.selspot).sharcontrast || sharcontrast->getEditedState();
@ -2435,6 +2530,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).sensitm = pedited->locallab.spots.at(pp->locallab.selspot).sensitm || sensitm->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).softradiustm = pedited->locallab.spots.at(pp->locallab.selspot).softradiustm || softradiustm->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).amount = pedited->locallab.spots.at(pp->locallab.selspot).amount || amount->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask = pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask || !enaretiMask->get_inconsistent();
// Retinex
pedited->locallab.spots.at(pp->locallab.selspot).expreti = pedited->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod = pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED");
@ -2447,6 +2543,15 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).localTgaincurve = pedited->locallab.spots.at(pp->locallab.selspot).localTgaincurve || !cTgainshape->isUnChanged();
pedited->locallab.spots.at(pp->locallab.selspot).inversret = pedited->locallab.spots.at(pp->locallab.selspot).inversret || !inversret->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).softradiusret = pedited->locallab.spots.at(pp->locallab.selspot).softradiusret || softradiusret->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve || !CCmaskretishape->isUnChanged();
pedited->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve || !LLmaskretishape->isUnChanged();
pedited->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve || !HHmaskretishape->isUnChanged();
pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask = pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask || !enaretiMask->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).blendmaskreti = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskreti || blendmaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).radmaskreti = pedited->locallab.spots.at(pp->locallab.selspot).radmaskreti || radmaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).chromaskreti = pedited->locallab.spots.at(pp->locallab.selspot).chromaskreti || chromaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).gammaskreti = pedited->locallab.spots.at(pp->locallab.selspot).gammaskreti || gammaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).slomaskreti = pedited->locallab.spots.at(pp->locallab.selspot).slomaskreti || slomaskreti->getEditedState();
// Sharpening
pedited->locallab.spots.at(pp->locallab.selspot).expsharp = pedited->locallab.spots.at(pp->locallab.selspot).expsharp || !expsharp->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).sharcontrast = pedited->locallab.spots.at(pp->locallab.selspot).sharcontrast || sharcontrast->getEditedState();
@ -2738,6 +2843,25 @@ void Locallab::curveChanged(CurveEditor* ce)
listener->panelChanged(EvlocallabCTgainCurve, M("HISTORY_CUSTOMCURVE"));
}
}
if (ce == CCmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabCCmaskretishape, M("HISTORY_CUSTOMCURVE"));
}
}
if (ce == LLmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabLLmaskretishape, M("HISTORY_CUSTOMCURVE"));
}
}
if (ce == HHmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabHHmaskretishape, M("HISTORY_CUSTOMCURVE"));
}
}
}
}
@ -2795,6 +2919,7 @@ void Locallab::showmaskcolMethodChanged()
showmaskexpMethod->set_active(0);
showmaskSHMethod->set_active(0);
showmaskcbMethod->set_active(0);
showmaskretiMethod->set_active(0);
enableListener();
if (listener) {
@ -2811,6 +2936,7 @@ void Locallab::showmaskexpMethodChanged()
showmaskcolMethod->set_active(0);
showmaskcbMethod->set_active(0);
showmaskSHMethod->set_active(0);
showmaskretiMethod->set_active(0);
enableListener();
if (listener) {
@ -2827,6 +2953,7 @@ void Locallab::showmaskSHMethodChanged()
showmaskcolMethod->set_active(0);
showmaskexpMethod->set_active(0);
showmaskcbMethod->set_active(0);
showmaskretiMethod->set_active(0);
enableListener();
if (listener) {
@ -2843,6 +2970,7 @@ void Locallab::showmaskcbMethodChanged()
showmaskcolMethod->set_active(0);
showmaskSHMethod->set_active(0);
showmaskexpMethod->set_active(0);
showmaskretiMethod->set_active(0);
enableListener();
if (listener) {
@ -2850,6 +2978,23 @@ void Locallab::showmaskcbMethodChanged()
}
}
void Locallab::showmaskretiMethodChanged()
{
// printf("showmaskSHMethodChanged\n");
// When one mask state is changed, other masks are deactivated
disableListener();
showmaskcolMethod->set_active(0);
showmaskSHMethod->set_active(0);
showmaskexpMethod->set_active(0);
showmaskcbMethod->set_active(0);
enableListener();
if (listener) {
listener->panelChanged(EvlocallabshowmaskretiMethod, "");
}
}
void Locallab::resetMaskVisibility()
{
// printf("resetMaskVisibility\n");
@ -2859,6 +3004,7 @@ void Locallab::resetMaskVisibility()
showmaskexpMethod->set_active(0);
showmaskSHMethod->set_active(0);
showmaskcbMethod->set_active(0);
showmaskretiMethod->set_active(0);
enableListener();
}
@ -2869,6 +3015,7 @@ Locallab::llMaskVisibility* Locallab::getMaskVisibility()
maskStruct->expMask = showmaskexpMethod->get_active_row_number();
maskStruct->SHMask = showmaskSHMethod->get_active_row_number();
maskStruct->cbMask = showmaskcbMethod->get_active_row_number();
maskStruct->retiMask = showmaskretiMethod->get_active_row_number();
// printf("SHmask=%i \n", maskStruct->SHMask);
// printf("cbmask=%i \n", maskStruct->cbMask);
@ -2947,6 +3094,31 @@ void Locallab::enaSHMaskChanged()
}
}
void Locallab::enaretiMaskChanged()
{
// printf("enacbMaskChanged\n");
if (multiImage) {
if (enaretiMask->get_inconsistent()) {
enaretiMask->set_inconsistent(false);
enaretiMaskConn.block(true);
enaretiMask->set_active(false);
enaretiMaskConn.block(false);
}
}
if (getEnabled() && expreti->getEnabled()) {
if (listener) {
if (enaretiMask->get_active()) {
listener->panelChanged(EvLocallabEnaretiMask, M("GENERAL_ENABLED"));
} else {
listener->panelChanged(EvLocallabEnaretiMask, M("GENERAL_DISABLED"));
}
}
}
}
void Locallab::enacbMaskChanged()
{
// printf("enacbMaskChanged\n");
@ -3408,6 +3580,11 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
dehaz->setDefault((double)defSpot->dehaz);
sensih->setDefault((double)defSpot->sensih);
softradiusret->setDefault(defSpot->softradiusret);
blendmaskreti->setDefault((double)defSpot->blendmaskreti);
radmaskreti->setDefault(defSpot->radmaskreti);
chromaskreti->setDefault(defSpot->chromaskreti);
gammaskreti->setDefault(defSpot->gammaskreti);
slomaskreti->setDefault(defSpot->slomaskreti);
// Sharpening
sharcontrast->setDefault((double)defSpot->sharcontrast);
sharradius->setDefault(defSpot->sharradius);
@ -3531,6 +3708,11 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
dehaz->setDefaultEditedState(Irrelevant);
sensih->setDefaultEditedState(Irrelevant);
softradiusret->setDefaultEditedState(Irrelevant);
blendmaskreti->setDefaultEditedState(Irrelevant);
radmaskreti->setDefaultEditedState(Irrelevant);
chromaskreti->setDefaultEditedState(Irrelevant);
gammaskreti->setDefaultEditedState(Irrelevant);
slomaskreti->setDefaultEditedState(Irrelevant);
// Sharpening
sharcontrast->setDefaultEditedState(Irrelevant);
sharradius->setDefaultEditedState(Irrelevant);
@ -3658,6 +3840,11 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
dehaz->setDefaultEditedState(defSpotState->dehaz ? Edited : UnEdited);
sensih->setDefaultEditedState(defSpotState->sensih ? Edited : UnEdited);
softradiusret->setDefaultEditedState(defSpotState->softradiusret ? Edited : UnEdited);
blendmaskreti->setDefaultEditedState(defSpotState->blendmaskreti ? Edited : UnEdited);
radmaskreti->setDefaultEditedState(defSpotState->radmaskreti ? Edited : UnEdited);
chromaskreti->setDefaultEditedState(defSpotState->chromaskreti ? Edited : UnEdited);
gammaskreti->setDefaultEditedState(defSpotState->gammaskreti ? Edited : UnEdited);
slomaskreti->setDefaultEditedState(defSpotState->slomaskreti ? Edited : UnEdited);
// Sharpening
sharcontrast->setDefaultEditedState(defSpotState->sharcontrast ? Edited : UnEdited);
sharradius->setDefaultEditedState(defSpotState->sharradius ? Edited : UnEdited);
@ -4177,6 +4364,36 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
}
}
if (a == blendmaskreti) {
if (listener) {
listener->panelChanged(Evlocallabblendmaskreti, blendmaskreti->getTextValue());
}
}
if (a == radmaskreti) {
if (listener) {
listener->panelChanged(Evlocallabradmaskreti, radmaskreti->getTextValue());
}
}
if (a == chromaskreti) {
if (listener) {
listener->panelChanged(Evlocallabchromaskreti, chromaskreti->getTextValue());
}
}
if (a == gammaskreti) {
if (listener) {
listener->panelChanged(Evlocallabgammaskreti, gammaskreti->getTextValue());
}
}
if (a == slomaskreti) {
if (listener) {
listener->panelChanged(Evlocallabslomaskreti, slomaskreti->getTextValue());
}
}
}
// Sharpening
@ -4529,6 +4746,11 @@ void Locallab::setBatchMode(bool batchMode)
dehaz->showEditedCB();
sensih->showEditedCB();
softradiusret->showEditedCB();
blendmaskreti->showEditedCB();
radmaskreti->showEditedCB();
chromaskreti->showEditedCB();
gammaskreti->showEditedCB();
slomaskreti->showEditedCB();
// Sharpening
sharradius->showEditedCB();
sharamount->showEditedCB();
@ -4586,6 +4808,7 @@ void Locallab::setBatchMode(bool batchMode)
showmaskexpMethod->hide();
showmaskSHMethod->hide();
showmaskcbMethod->hide();
showmaskretiMethod->hide();
}
std::vector<double> Locallab::getCurvePoints(ThresholdSelector* tAdjuster) const
@ -4756,6 +4979,8 @@ void Locallab::enableListener()
enableretiConn.block(false);
retinexMethodConn.block(false);
inversretConn.block(false);
enaretiMaskConn.block(false);
showmaskretiMethodConn.block(false);
// Sharpening
enablesharpConn.block(false);
inversshaConn.block(false);
@ -4809,6 +5034,8 @@ void Locallab::disableListener()
enableretiConn.block(true);
retinexMethodConn.block(true);
inversretConn.block(true);
enaretiMaskConn.block(true);
showmaskretiMethodConn.block(true);
// Sharpening
enablesharpConn.block(true);
inversshaConn.block(true);
@ -4975,6 +5202,15 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
cTgainshape->setCurve(pp->locallab.spots.at(index).localTgaincurve);
inversret->set_active(pp->locallab.spots.at(index).inversret);
softradiusret->setValue(pp->locallab.spots.at(index).softradiusret);
CCmaskretishape->setCurve(pp->locallab.spots.at(index).CCmaskreticurve);
LLmaskretishape->setCurve(pp->locallab.spots.at(index).LLmaskreticurve);
HHmaskretishape->setCurve(pp->locallab.spots.at(index).HHmaskreticurve);
enaretiMask->set_active(pp->locallab.spots.at(index).enaretiMask);
blendmaskreti->setValue(pp->locallab.spots.at(index).blendmaskreti);
radmaskreti->setValue(pp->locallab.spots.at(index).radmaskreti);
chromaskreti->setValue(pp->locallab.spots.at(index).chromaskreti);
gammaskreti->setValue(pp->locallab.spots.at(index).gammaskreti);
slomaskreti->setValue(pp->locallab.spots.at(index).slomaskreti);
// Sharpening
expsharp->setEnabled(pp->locallab.spots.at(index).expsharp);
@ -5210,6 +5446,15 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
cTgainshape->setUnChanged(!spotState->localTgaincurve);
inversret->set_inconsistent(multiImage && !spotState->inversret);
softradiusret->setEditedState(spotState->softradiusret ? Edited : UnEdited);
CCmaskretishape->setUnChanged(!spotState->CCmaskreticurve);
LLmaskretishape->setUnChanged(!spotState->LLmaskreticurve);
HHmaskretishape->setUnChanged(!spotState->HHmaskreticurve);
enaretiMask->set_inconsistent(multiImage && !spotState->enaretiMask);
blendmaskreti->setEditedState(spotState->blendmaskreti ? Edited : UnEdited);
radmaskreti->setEditedState(spotState->radmaskreti ? Edited : UnEdited);
chromaskreti->setEditedState(spotState->chromaskreti ? Edited : UnEdited);
gammaskreti->setEditedState(spotState->gammaskreti ? Edited : UnEdited);
slomaskreti->setEditedState(spotState->slomaskreti ? Edited : UnEdited);
// Sharpening
expsharp->set_inconsistent(!spotState->expsharp);
@ -5395,10 +5640,11 @@ void Locallab::updateSpecificGUIState()
if (multiImage && inversret->get_inconsistent()) {
sensih->show();
softradiusret->show();
showmaskretiMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode
} else if (inversret->get_active()) {
sensih->show();
softradiusret->show();
} else {
showmaskretiMethod->hide();
sensih->show();
softradiusret->show();
}

View File

@ -64,6 +64,7 @@ private:
MyExpander* const expmaskexp;
MyExpander* const expmasksh;
MyExpander* const expmaskcb;
MyExpander* const expmaskreti;
sigc::connection enablecolorConn, enableexposeConn, enableshadhighConn, enablevibranceConn, enablesoftConn, enableblurConn, enabletonemapConn, enableretiConn, enablesharpConn, enablecontrastConn, enablecbdlConn, enabledenoiConn;
// Curve widgets
@ -95,7 +96,11 @@ private:
DiagonalCurveEditor* skinTonesCurve;
// Retinex
CurveEditorGroup* const LocalcurveEditorgainT;
CurveEditorGroup* const maskretiCurveEditorG;
FlatCurveEditor* cTgainshape;
FlatCurveEditor* CCmaskretishape;
FlatCurveEditor* LLmaskretishape;
FlatCurveEditor* HHmaskretishape;
//Cbdl
CurveEditorGroup* const maskcbCurveEditorG;
FlatCurveEditor* CCmaskcbshape;
@ -176,6 +181,13 @@ private:
Adjuster* const dehaz;
Adjuster* const sensih;
Adjuster* const softradiusret;
Adjuster* const blendmaskreti;
Adjuster* const radmaskreti;
Adjuster* const chromaskreti;
Adjuster* const gammaskreti;
Adjuster* const slomaskreti;
// Sharpening
Adjuster* const sharcontrast;
Adjuster* const sharradius;
@ -246,6 +258,8 @@ private:
// Retinex
Gtk::CheckButton* const inversret;
sigc::connection inversretConn;
Gtk::CheckButton* const enaretiMask;
sigc::connection enaretiMaskConn;
// Sharpening
Gtk::CheckButton* const inverssha;
sigc::connection inversshaConn;
@ -273,6 +287,8 @@ private:
// Retinex
MyComboBoxText* const retinexMethod;
sigc::connection retinexMethodConn;
MyComboBoxText* const showmaskretiMethod;
sigc::connection showmaskretiMethodConn;
//CBDL
MyComboBoxText* const showmaskcbMethod;
sigc::connection showmaskcbMethodConn;
@ -329,6 +345,7 @@ private:
void activlumChanged();
// Retinex
void inversretChanged();
void enaretiMaskChanged();
// Sharpening
void inversshaChanged();
//CBDL
@ -346,6 +363,7 @@ private:
void blurMethodChanged();
// Retinex
void retinexMethodChanged();
void showmaskretiMethodChanged();
//CBDL
void showmaskcbMethodChanged();
// Other widgets event functions
@ -383,6 +401,7 @@ public:
int expMask;
int SHMask;
int cbMask;
int retiMask;
};
void resetMaskVisibility();

View File

@ -1068,6 +1068,15 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).localTgaincurve = locallab.spots.at(j).localTgaincurve && pSpot.localTgaincurve == otherSpot.localTgaincurve;
locallab.spots.at(j).inversret = locallab.spots.at(j).inversret && pSpot.inversret == otherSpot.inversret;
locallab.spots.at(j).softradiusret = locallab.spots.at(j).softradiusret && pSpot.softradiusret == otherSpot.softradiusret;
locallab.spots.at(j).CCmaskreticurve = locallab.spots.at(j).CCmaskreticurve && pSpot.CCmaskreticurve == otherSpot.CCmaskreticurve;
locallab.spots.at(j).LLmaskreticurve = locallab.spots.at(j).LLmaskreticurve && pSpot.LLmaskreticurve == otherSpot.LLmaskreticurve;
locallab.spots.at(j).HHmaskreticurve = locallab.spots.at(j).HHmaskreticurve && pSpot.HHmaskreticurve == otherSpot.HHmaskreticurve;
locallab.spots.at(j).enaretiMask = locallab.spots.at(j).enaretiMask && pSpot.enaretiMask == otherSpot.enaretiMask;
locallab.spots.at(j).blendmaskreti = locallab.spots.at(j).blendmaskreti && pSpot.blendmaskreti == otherSpot.blendmaskreti;
locallab.spots.at(j).radmaskreti = locallab.spots.at(j).radmaskreti && pSpot.radmaskreti == otherSpot.radmaskreti;
locallab.spots.at(j).chromaskreti = locallab.spots.at(j).chromaskreti && pSpot.chromaskreti == otherSpot.chromaskreti;
locallab.spots.at(j).gammaskreti = locallab.spots.at(j).gammaskreti && pSpot.gammaskreti == otherSpot.gammaskreti;
locallab.spots.at(j).slomaskreti = locallab.spots.at(j).slomaskreti && pSpot.slomaskreti == otherSpot.slomaskreti;
// Sharpening
locallab.spots.at(j).expsharp = locallab.spots.at(j).expsharp && pSpot.expsharp == otherSpot.expsharp;
locallab.spots.at(j).sharcontrast = locallab.spots.at(j).sharcontrast && pSpot.sharcontrast == otherSpot.sharcontrast;
@ -3084,6 +3093,42 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).inversret = mods.locallab.spots.at(i).inversret;
}
if (locallab.spots.at(i).CCmaskreticurve) {
toEdit.locallab.spots.at(i).CCmaskreticurve = mods.locallab.spots.at(i).CCmaskreticurve;
}
if (locallab.spots.at(i).LLmaskreticurve) {
toEdit.locallab.spots.at(i).LLmaskreticurve = mods.locallab.spots.at(i).LLmaskreticurve;
}
if (locallab.spots.at(i).HHmaskreticurve) {
toEdit.locallab.spots.at(i).HHmaskreticurve = mods.locallab.spots.at(i).HHmaskreticurve;
}
if (locallab.spots.at(i).enaretiMask) {
toEdit.locallab.spots.at(i).enaretiMask = mods.locallab.spots.at(i).enaretiMask;
}
if (locallab.spots.at(i).blendmaskreti) {
toEdit.locallab.spots.at(i).blendmaskreti = mods.locallab.spots.at(i).blendmaskreti;
}
if (locallab.spots.at(i).radmaskreti) {
toEdit.locallab.spots.at(i).radmaskreti = mods.locallab.spots.at(i).radmaskreti;
}
if (locallab.spots.at(i).chromaskreti) {
toEdit.locallab.spots.at(i).chromaskreti = mods.locallab.spots.at(i).chromaskreti;
}
if (locallab.spots.at(i).gammaskreti) {
toEdit.locallab.spots.at(i).gammaskreti = mods.locallab.spots.at(i).gammaskreti;
}
if (locallab.spots.at(i).slomaskreti) {
toEdit.locallab.spots.at(i).slomaskreti = mods.locallab.spots.at(i).slomaskreti;
}
// Sharpening
if (locallab.spots.at(i).expsharp) {
toEdit.locallab.spots.at(i).expsharp = mods.locallab.spots.at(i).expsharp;
@ -4356,6 +4401,15 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
localTgaincurve(v),
inversret(v),
softradiusret(v),
CCmaskreticurve(v),
LLmaskreticurve(v),
HHmaskreticurve(v),
enaretiMask(v),
blendmaskreti(v),
radmaskreti(v),
chromaskreti(v),
gammaskreti(v),
slomaskreti(v),
// Sharpening
expsharp(v),
sharcontrast(v),
@ -4552,6 +4606,15 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
localTgaincurve = v;
inversret = v;
softradiusret = v;
CCmaskreticurve = v;
LLmaskreticurve = v;
HHmaskreticurve = v;
enaretiMask = v;
blendmaskreti = v;
radmaskreti = v;
chromaskreti = v;
gammaskreti = v;
slomaskreti = v;
// Sharpening
expsharp = v;
sharcontrast = v;

View File

@ -495,6 +495,15 @@ public:
bool localTgaincurve;
bool inversret;
bool softradiusret;
bool CCmaskreticurve;
bool LLmaskreticurve;
bool HHmaskreticurve;
bool enaretiMask;
bool blendmaskreti;
bool radmaskreti;
bool chromaskreti;
bool gammaskreti;
bool slomaskreti;
// Sharpening
bool expsharp;
bool sharcontrast;

View File

@ -466,9 +466,9 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
}
// Manage Locallab mask visibility
if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskexpMethod || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskcbMethod) {
if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskexpMethod || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmaskretiMethod ) {
Locallab::llMaskVisibility* maskStruc = locallab->getMaskVisibility();
ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->expMask, maskStruc->SHMask, maskStruc->cbMask);
ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->expMask, maskStruc->SHMask, maskStruc->cbMask, maskStruc->retiMask);
}
ipc->endUpdateParams(changeFlags); // starts the IPC processing
@ -576,7 +576,7 @@ void ToolPanelCoordinator::profileChange(
// Reset Locallab mask visibility when a picture is loaded
if (event == rtengine::EvPhotoLoaded) {
locallab->resetMaskVisibility();
ipc->setLocallabMaskVisibility(0, 0, 0, 0);
ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0);
}
// start the IPC processing