added on/off switches for Channel Mixer, HSV Equalizer and RGB Curves

This commit is contained in:
Alberto Griggio
2017-12-09 23:54:27 +01:00
parent 6a9e6729fd
commit 11ca61e3e2
15 changed files with 144 additions and 20 deletions

View File

@@ -22,7 +22,7 @@
using namespace rtengine;
using namespace rtengine::procparams;
ChMixer::ChMixer (): FoldableToolPanel(this, "chmixer", M("TP_CHMIXER_LABEL"))
ChMixer::ChMixer (): FoldableToolPanel(this, "chmixer", M("TP_CHMIXER_LABEL"), false, true)
{
imgIcon[0] = Gtk::manage (new RTImage ("Chanmixer-RR.png"));
@@ -99,12 +99,16 @@ void ChMixer::read (const ProcParams* pp, const ParamsEdited* pedited)
disableListener ();
if (pedited)
setEnabled(pp->chmixer.enabled);
if (pedited) {
for (int i = 0; i < 3; i++) {
red[i]->setEditedState (pedited->chmixer.red[i] ? Edited : UnEdited);
green[i]->setEditedState (pedited->chmixer.green[i] ? Edited : UnEdited);
blue[i]->setEditedState (pedited->chmixer.blue[i] ? Edited : UnEdited);
}
set_inconsistent(multiImage && !pedited->chmixer.enabled);
}
for (int i = 0; i < 3; i++) {
red[i]->setValue (pp->chmixer.red[i]);
@@ -123,13 +127,16 @@ void ChMixer::write (ProcParams* pp, ParamsEdited* pedited)
pp->chmixer.green[i] = (int) green[i]->getValue ();
pp->chmixer.blue[i] = (int) blue[i]->getValue ();
}
pp->chmixer.enabled = getEnabled();
if (pedited)
if (pedited) {
for (int i = 0; i < 3; i++) {
pedited->chmixer.red[i] = red[i]->getEditedState ();
pedited->chmixer.green[i] = green[i]->getEditedState ();
pedited->chmixer.blue[i] = blue[i]->getEditedState ();
}
pedited->chmixer.enabled = !get_inconsistent();
}
}
void ChMixer::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited)
@@ -158,7 +165,7 @@ void ChMixer::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
void ChMixer::adjusterChanged (Adjuster* a, double newval)
{
if (listener) {
if (listener && getEnabled()) {
Glib::ustring descr = Glib::ustring::compose ("R=%1,%2,%3\nG=%4,%5,%6\nB=%7,%8,%9",
(int)red[0]->getValue(), (int)red[1]->getValue(), (int)red[2]->getValue(),
(int)green[0]->getValue(), (int)green[1]->getValue(), (int)green[2]->getValue(),
@@ -167,6 +174,21 @@ void ChMixer::adjusterChanged (Adjuster* a, double newval)
}
}
void ChMixer::enabledChanged()
{
if (listener) {
if (get_inconsistent()) {
listener->panelChanged(EvChMixer, M("GENERAL_UNCHANGED"));
} else if (getEnabled()) {
listener->panelChanged(EvChMixer, M("GENERAL_ENABLED"));
} else {
listener->panelChanged(EvChMixer, M("GENERAL_DISABLED"));
}
}
}
void ChMixer::setBatchMode (bool batchMode)
{

View File

@@ -44,6 +44,7 @@ public:
void adjusterChanged (Adjuster* a, double newval);
void setAdjusterBehavior (bool rgbadd);
void trimValues (rtengine::procparams::ProcParams* pp);
void enabledChanged();
};
#endif

View File

@@ -25,7 +25,7 @@ using namespace rtengine::procparams;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
HSVEqualizer::HSVEqualizer () : FoldableToolPanel(this, "hsvequalizer", M("TP_HSVEQUALIZER_LABEL"))
HSVEqualizer::HSVEqualizer () : FoldableToolPanel(this, "hsvequalizer", M("TP_HSVEQUALIZER_LABEL"), false, true)
{
std::vector<GradientMilestone> bottomMilestones;
@@ -84,11 +84,13 @@ void HSVEqualizer::read (const ProcParams* pp, const ParamsEdited* pedited)
hshape->setUnChanged (!pedited->hsvequalizer.hcurve);
sshape->setUnChanged (!pedited->hsvequalizer.scurve);
vshape->setUnChanged (!pedited->hsvequalizer.vcurve);
set_inconsistent(multiImage && !pedited->hsvequalizer.enabled);
}
hshape->setCurve (pp->hsvequalizer.hcurve);
sshape->setCurve (pp->hsvequalizer.scurve);
vshape->setCurve (pp->hsvequalizer.vcurve);
setEnabled(pp->hsvequalizer.enabled);
enableListener ();
}
@@ -116,7 +118,7 @@ void HSVEqualizer::autoOpenCurve ()
void HSVEqualizer::write (ProcParams* pp, ParamsEdited* pedited)
{
pp->hsvequalizer.enabled = getEnabled();
pp->hsvequalizer.hcurve = hshape->getCurve ();
pp->hsvequalizer.scurve = sshape->getCurve ();
pp->hsvequalizer.vcurve = vshape->getCurve ();
@@ -126,6 +128,7 @@ void HSVEqualizer::write (ProcParams* pp, ParamsEdited* pedited)
pedited->hsvequalizer.hcurve = !hshape->isUnChanged ();
pedited->hsvequalizer.scurve = !sshape->isUnChanged ();
pedited->hsvequalizer.vcurve = !vshape->isUnChanged ();
pedited->hsvequalizer.enabled = !get_inconsistent();
}
}
@@ -138,7 +141,7 @@ void HSVEqualizer::write (ProcParams* pp, ParamsEdited* pedited)
void HSVEqualizer::curveChanged (CurveEditor* ce)
{
if (listener) {
if (listener && getEnabled()) {
if (ce == hshape) {
listener->panelChanged (EvHSVEqualizerH, M("HISTORY_CUSTOMCURVE"));
}
@@ -199,3 +202,17 @@ void HSVEqualizer::setBatchMode (bool batchMode)
curveEditorG->setBatchMode (batchMode);
}
void HSVEqualizer::enabledChanged()
{
if (listener) {
if (get_inconsistent()) {
listener->panelChanged (EvHSVEqEnabled, M("GENERAL_UNCHANGED"));
} else if (getEnabled()) {
listener->panelChanged (EvHSVEqEnabled, M("GENERAL_ENABLED"));
} else {
listener->panelChanged (EvHSVEqEnabled, M("GENERAL_DISABLED"));
}
}
}

View File

@@ -54,6 +54,7 @@ public:
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
//void adjusterChanged (Adjuster* a, double newval);
void enabledChanged();
};
#endif

View File

@@ -97,6 +97,7 @@ void ParamsEdited::set (bool v)
labCurve.avoidcolorshift = v;
labCurve.rstprotection = v;
labCurve.lcredsk = v;
rgbCurves.enabled = v;
rgbCurves.lumamode = v;
rgbCurves.rcurve = v;
rgbCurves.gcurve = v;
@@ -320,6 +321,7 @@ void ParamsEdited::set (bool v)
vignetting.strength = v;
vignetting.centerX = v;
vignetting.centerY = v;
chmixer.enabled = v;
chmixer.red[0] = v;
chmixer.red[1] = v;
chmixer.red[2] = v;
@@ -548,6 +550,7 @@ void ParamsEdited::set (bool v)
dirpyrequalizer.skinprotect = v;
dirpyrequalizer.hueskin = v;
//dirpyrequalizer.algo = v;
hsvequalizer.enabled = v;
hsvequalizer.hcurve = v;
hsvequalizer.scurve = v;
hsvequalizer.vcurve = v;
@@ -638,6 +641,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
labCurve.avoidcolorshift = labCurve.avoidcolorshift && p.labCurve.avoidcolorshift == other.labCurve.avoidcolorshift;
labCurve.rstprotection = labCurve.rstprotection && p.labCurve.rstprotection == other.labCurve.rstprotection;
labCurve.lcredsk = labCurve.lcredsk && p.labCurve.lcredsk == other.labCurve.lcredsk;
rgbCurves.enabled = rgbCurves.enabled && p.rgbCurves.enabled == other.rgbCurves.enabled;
rgbCurves.lumamode = rgbCurves.lumamode && p.rgbCurves.lumamode == other.rgbCurves.lumamode;
rgbCurves.rcurve = rgbCurves.rcurve && p.rgbCurves.rcurve == other.rgbCurves.rcurve;
rgbCurves.gcurve = rgbCurves.gcurve && p.rgbCurves.gcurve == other.rgbCurves.gcurve;
@@ -865,6 +869,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
vignetting.strength = vignetting.strength && p.vignetting.strength == other.vignetting.strength;
vignetting.centerX = vignetting.centerX && p.vignetting.centerX == other.vignetting.centerX;
vignetting.centerY = vignetting.centerY && p.vignetting.centerY == other.vignetting.centerY;
chmixer.enabled = chmixer.enabled && p.chmixer.enabled == other.chmixer.enabled;
chmixer.red[0] = chmixer.red[0] && p.chmixer.red[0] == other.chmixer.red[0];
chmixer.red[1] = chmixer.red[1] && p.chmixer.red[1] == other.chmixer.red[1];
chmixer.red[2] = chmixer.red[2] && p.chmixer.red[2] == other.chmixer.red[2];
@@ -1086,6 +1091,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
dirpyrequalizer.skinprotect = dirpyrequalizer.skinprotect && p.dirpyrequalizer.skinprotect == other.dirpyrequalizer.skinprotect;
// dirpyrequalizer.algo = dirpyrequalizer.algo && p.dirpyrequalizer.algo == other.dirpyrequalizer.algo;
dirpyrequalizer.hueskin = dirpyrequalizer.hueskin && p.dirpyrequalizer.hueskin == other.dirpyrequalizer.hueskin;
hsvequalizer.enabled = hsvequalizer.enabled && p.hsvequalizer.enabled == other.hsvequalizer.enabled;
hsvequalizer.hcurve = hsvequalizer.hcurve && p.hsvequalizer.hcurve == other.hsvequalizer.hcurve;
hsvequalizer.scurve = hsvequalizer.scurve && p.hsvequalizer.scurve == other.hsvequalizer.scurve;
hsvequalizer.vcurve = hsvequalizer.vcurve && p.hsvequalizer.vcurve == other.hsvequalizer.vcurve;
@@ -1358,6 +1364,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
toEdit.labCurve.lcredsk = mods.labCurve.lcredsk;
}
if (rgbCurves.enabled) {
toEdit.rgbCurves.enabled = mods.rgbCurves.enabled;
}
if (rgbCurves.lumamode) {
toEdit.rgbCurves.lumamode = mods.rgbCurves.lumamode;
}
@@ -2195,6 +2205,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
toEdit.vignetting.centerY = dontforceSet && options.baBehav[ADDSET_VIGN_CENTER] ? toEdit.vignetting.centerY + mods.vignetting.centerY : mods.vignetting.centerY;
}
if (chmixer.enabled) {
toEdit.chmixer.enabled = mods.chmixer.enabled;
}
for (int i = 0; i < 3; i++) {
if (chmixer.red[i]) {
toEdit.chmixer.red[i] = dontforceSet && options.baBehav[ADDSET_CHMIXER] ? toEdit.chmixer.red[i] + mods.chmixer.red[i] : mods.chmixer.red[i];
@@ -3014,6 +3028,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
}
// if (dirpyrequalizer.algo) toEdit.dirpyrequalizer.algo = mods.dirpyrequalizer.algo;
if (hsvequalizer.enabled) {
toEdit.hsvequalizer.enabled = mods.hsvequalizer.enabled;
}
if (hsvequalizer.hcurve) {
toEdit.hsvequalizer.hcurve = mods.hsvequalizer.hcurve;
}

View File

@@ -123,6 +123,7 @@ class RGBCurvesParamsEdited
{
public:
bool enabled;
bool lumamode;
bool rcurve;
bool gcurve;
@@ -488,6 +489,7 @@ class ChannelMixerParamsEdited
{
public:
bool enabled;
bool red[3];
bool green[3];
bool blue[3];
@@ -678,6 +680,7 @@ class HSVEqualizerParamsEdited
{
public:
bool enabled;
bool hcurve;
bool scurve;
bool vcurve;

View File

@@ -1,11 +1,13 @@
#pragma once
// This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes
#define PPVERSION 328
#define PPVERSION 329
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
/*
Log of version changes
329 2017-12-09
Added 'Enabled' flag for Channel Mixer, RGB Curves and HSV Equalizer
328 2017-11-22
Fix wrong type of ff_clipControl
327 2017-09-15

View File

@@ -21,7 +21,7 @@
using namespace rtengine;
using namespace rtengine::procparams;
RGBCurves::RGBCurves () : FoldableToolPanel(this, "rgbcurves", M("TP_RGBCURVES_LABEL"))
RGBCurves::RGBCurves () : FoldableToolPanel(this, "rgbcurves", M("TP_RGBCURVES_LABEL"), false, true)
{
lumamode = Gtk::manage (new Gtk::CheckButton (M("TP_RGBCURVES_LUMAMODE")));
@@ -84,6 +84,7 @@ void RGBCurves::read (const ProcParams* pp, const ParamsEdited* pedited)
Gshape->setUnChanged (!pedited->rgbCurves.gcurve);
Bshape->setUnChanged (!pedited->rgbCurves.bcurve);
lumamode->set_inconsistent (!pedited->rgbCurves.lumamode);
set_inconsistent(multiImage && !pedited->rgbCurves.enabled);
}
lumamodeConn.block (true);
@@ -96,6 +97,8 @@ void RGBCurves::read (const ProcParams* pp, const ParamsEdited* pedited)
Gshape->setCurve (pp->rgbCurves.gcurve);
Bshape->setCurve (pp->rgbCurves.bcurve);
setEnabled(pp->rgbCurves.enabled);
enableListener ();
}
@@ -122,13 +125,14 @@ void RGBCurves::autoOpenCurve ()
void RGBCurves::write (ProcParams* pp, ParamsEdited* pedited)
{
pp->rgbCurves.enabled = getEnabled();
pp->rgbCurves.rcurve = Rshape->getCurve ();
pp->rgbCurves.gcurve = Gshape->getCurve ();
pp->rgbCurves.bcurve = Bshape->getCurve ();
pp->rgbCurves.lumamode = lumamode->get_active();
if (pedited) {
pedited->rgbCurves.enabled = !get_inconsistent();
pedited->rgbCurves.rcurve = !Rshape->isUnChanged ();
pedited->rgbCurves.gcurve = !Gshape->isUnChanged ();
pedited->rgbCurves.bcurve = !Bshape->isUnChanged ();
@@ -146,7 +150,7 @@ void RGBCurves::write (ProcParams* pp, ParamsEdited* pedited)
void RGBCurves::curveChanged (CurveEditor* ce)
{
if (listener) {
if (listener && getEnabled()) {
if (ce == Rshape) {
listener->panelChanged (EvRGBrCurve, M("HISTORY_CUSTOMCURVE"));
}
@@ -177,7 +181,7 @@ void RGBCurves::lumamodeChanged ()
lastLumamode = lumamode->get_active ();
}
if (listener) {
if (listener && getEnabled()) {
if (lumamode->get_active ()) {
listener->panelChanged (EvRGBrCurveLumamode, M("GENERAL_ENABLED"));
} else {
@@ -202,3 +206,16 @@ void RGBCurves::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & his
// Bshape->updateBackgroundHistogram (histBlue);
}
void RGBCurves::enabledChanged()
{
if (listener) {
if (get_inconsistent()) {
listener->panelChanged(EvRGBEnabled, M("GENERAL_UNCHANGED"));
} else if (getEnabled()) {
listener->panelChanged(EvRGBEnabled, M("GENERAL_ENABLED"));
} else {
listener->panelChanged(EvRGBEnabled, M("GENERAL_DISABLED"));
}
}
}

View File

@@ -53,6 +53,7 @@ public:
void curveChanged (CurveEditor* ce);
void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI);
void lumamodeChanged ();
void enabledChanged();
};
#endif