diff --git a/rtdata/languages/default b/rtdata/languages/default
index 23d12e1be..f4546245e 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -707,6 +707,10 @@ HISTORY_MSG_475;PS - Equalize channel
HISTORY_MSG_476;CAM02 - Temp out
HISTORY_MSG_477;CAM02 - Green out
HISTORY_MSG_478;CAM02 - Yb out
+HISTORY_MSG_479;CAM02 - CAT adaptation out
+HISTORY_MSG_480;CAM02 - CAT auto out
+HISTORY_MSG_481;CAM02 - temp scene
+HISTORY_MSG_482;CAM02 - green scene
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOT;Snapshot
@@ -1308,6 +1312,7 @@ TP_COLORAPP_DATACIE;CIECAM02 output histograms in curves
TP_COLORAPP_DATACIE_TOOLTIP;When enabled, histograms in CIECAM02 curves show approximate values/ranges for J or Q, and C, s or M after the CIECAM02 adjustments.\nThis selection does not impact the main histogram panel.\n\nWhen disabled, histograms in CIECAM02 curves show L*a*b* values before CIECAM02 adjustments.
TP_COLORAPP_DEGREE_AUTO_TOOLTIP;If the check-box is checked (recommended), RawTherapee calculates an optimum value, which is then used by CAT02, and also for the entire CIECAM02.\nTo set the value manually, uncheck the check-box first (values above 65 are recommended).
TP_COLORAPP_DEGREE_TOOLTIP;Amount of CIE Chromatic Adaptation Transform 2002.
+TP_COLORAPP_FREE;Free temp+green + CAT02 + [output]
TP_COLORAPP_GAMUT;Gamut control (L*a*b*)
TP_COLORAPP_GAMUT_TOOLTIP;Allow gamut control in L*a*b* mode.
TP_COLORAPP_HUE;Hue (h)
@@ -1319,7 +1324,7 @@ TP_COLORAPP_LABEL_VIEWING;Viewing Conditions
TP_COLORAPP_LIGHT;Lightness (J)
TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness.
TP_COLORAPP_MODEL;WP Model
-TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.
+TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions.
TP_COLORAPP_RSTPRO;Red & skin-tones protection
TP_COLORAPP_RSTPRO_TOOLTIP;Red and skin-tones protection affects both sliders and curves.
TP_COLORAPP_SHARPCIE;--unused--
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index d03ceca2c..1429b3b68 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -541,7 +541,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
xw = 100.0 * Xw;
yw = 100.0 * Yw;
zw = 100.0 * Zw;
- double xw1, yw1, zw1, xw2, yw2, zw2;
+ double xw1 =0., yw1 = 0., zw1 = 0., xw2 = 0., yw2 = 0., zw2 = 0.;
// settings of WB: scene and viewing
if (params->colorappearance.wbmodel == "RawT") {
@@ -1497,10 +1497,11 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
double Xw, Zw;
float f, nc, yb = 0.f, la, c, xw, yw, zw, f2 = 1.f, c2 = 1.f, nc2 = 1.f, yb2;
float fl, n, nbb, ncb, aw; //d
- float xwd, ywd, zwd;
+ float xwd, ywd, zwd, xws, yws, zws;
int alg = 0;
bool algepd = false;
double Xwout, Zwout;
+ double Xwsc, Zwsc;
const bool epdEnabled = params->epd.enabled;
bool ciedata = (params->colorappearance.datacie && pW != 1) && ! ((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
@@ -1509,6 +1510,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
ColorTemp::temp2mulxyz (params->wb.temperature, params->wb.green, params->wb.method, Xw, Zw); //compute white Xw Yw Zw : white current WB
ColorTemp::temp2mulxyz (params->colorappearance.tempout, params->colorappearance.greenout, "Custom", Xwout, Zwout);
+ ColorTemp::temp2mulxyz (params->colorappearance.tempsc, params->colorappearance.greensc, "Custom", Xwsc, Zwsc);
//viewing condition for surround
if (params->colorappearance.surround == "Average") {
@@ -1556,6 +1558,12 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
xwd = 100.f * Xwout;
zwd = 100.f * Zwout;
ywd = 100.f / params->colorappearance.greenout;//approximation to simplify
+
+ xws = 100.f * Xwsc;
+ zws = 100.f * Zwsc;
+ yws = 100.f / params->colorappearance.greensc;//approximation to simplify
+
+
/*
//settings white point of output device - or illuminant viewing
if (settings->viewingdevice == 0) {
@@ -1841,7 +1849,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
xw = 100.0f * Xw;
yw = 100.0f * Yw;
zw = 100.0f * Zw;
- float xw1, yw1, zw1, xw2, yw2, zw2;
+ float xw1 = 0.f, yw1 = 0.f, zw1 = 0.f, xw2 = 0.f, yw2 = 0.f, zw2 = 0.f;
// settings of WB: scene and viewing
if (params->colorappearance.wbmodel == "RawT") {
@@ -1851,14 +1859,22 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
xw2 = xwd;
yw2 = ywd;
zw2 = zwd;
- } else { /*if(params->colorappearance.wbmodel == "RawTCAT02")*/
+ } else if(params->colorappearance.wbmodel == "RawTCAT02") {
xw1 = xw; // Settings RT WB are used for CAT02 => mix , CAT02 is use for output device (screen: D50 D65, projector: lamp, LED) see preferences
yw1 = yw;
zw1 = zw;
xw2 = xwd;
yw2 = ywd;
zw2 = zwd;
- }
+ } else if(params->colorappearance.wbmodel == "free") {
+ xw1 = xws; // free temp and green
+ yw1 = yws;
+ zw1 = zws;
+ xw2 = xwd;
+ yw2 = ywd;
+ zw2 = zwd;
+ }
+
float cz, wh, pfl;
Ciecam02::initcam1float (gamu, yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c);
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index 5070a9b0d..88aaf0e3f 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -507,6 +507,8 @@ enum ProcEvent {
EvCATybout = 477,
EvCATDegreeout = 478,
EvCATAutoDegreeout = 479,
+ EvCATtempsc = 480,
+ EvCATgreensc = 481,
NUMOFEVENTS
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index a16703f5a..8ed7236cb 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -1154,6 +1154,8 @@ void ProcParams::setDefaults ()
colorappearance.tempout = 5000;
colorappearance.greenout = 1.0;
colorappearance.ybout = 18;
+ colorappearance.tempsc = 5000;
+ colorappearance.greensc = 1.0;
impulseDenoise.enabled = false;
impulseDenoise.thresh = 50;
@@ -2149,6 +2151,14 @@ int ProcParams::save (const Glib::ustring &fname, const Glib::ustring &fname2, b
keyFile.set_double ("Color appearance", "Greenout", colorappearance.greenout);
}
+ if (!pedited || pedited->colorappearance.tempsc) {
+ keyFile.set_integer ("Color appearance", "Tempsc", colorappearance.tempsc);
+ }
+
+ if (!pedited || pedited->colorappearance.greensc) {
+ keyFile.set_double ("Color appearance", "Greensc", colorappearance.greensc);
+ }
+
if (!pedited || pedited->colorappearance.ybout) {
keyFile.set_integer ("Color appearance", "Ybout", colorappearance.ybout);
}
@@ -5124,6 +5134,22 @@ int ProcParams::load (const Glib::ustring &fname, ParamsEdited* pedited)
}
}
+ if (keyFile.has_key ("Color appearance", "Tempsc")) {
+ colorappearance.tempsc = keyFile.get_integer ("Color appearance", "Tempsc");
+
+ if (pedited) {
+ pedited->colorappearance.tempsc = true;
+ }
+ }
+
+ if (keyFile.has_key ("Color appearance", "Greensc")) {
+ colorappearance.greensc = keyFile.get_double ("Color appearance", "Greensc");
+
+ if (pedited) {
+ pedited->colorappearance.greensc = true;
+ }
+ }
+
if (keyFile.has_key ("Color appearance", "Ybout")) {
colorappearance.ybout = keyFile.get_integer ("Color appearance", "Ybout");
@@ -8260,6 +8286,8 @@ bool ProcParams::operator== (const ProcParams& other)
&& colorappearance.colorh == other.colorappearance.colorh
&& colorappearance.tempout == other.colorappearance.tempout
&& colorappearance.greenout == other.colorappearance.greenout
+ && colorappearance.tempsc == other.colorappearance.tempsc
+ && colorappearance.greensc == other.colorappearance.greensc
&& colorappearance.ybout == other.colorappearance.ybout
&& impulseDenoise.enabled == other.impulseDenoise.enabled
&& impulseDenoise.thresh == other.impulseDenoise.thresh
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 1ee5d16df..636308800 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -619,6 +619,8 @@ public:
int tempout;
int ybout;
double greenout;
+ int tempsc;
+ double greensc;
// bool sharpcie;
};
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 0a345d8ac..732e2e05d 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -506,7 +506,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // EvCATgreenout
LUMINANCECURVE, // EvCATybout
LUMINANCECURVE, // EvCATDegreeout
- LUMINANCECURVE // EvCATAutoDegreeout
+ LUMINANCECURVE, // EvCATAutoDegreeout
+ LUMINANCECURVE, // EvCATtempsc
+ LUMINANCECURVE // EvCATgreensc
};
diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc
index c01b7458f..983ea7552 100644
--- a/rtgui/colorappearance.cc
+++ b/rtgui/colorappearance.cc
@@ -159,10 +159,27 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance"
wbmodel = Gtk::manage (new MyComboBoxText ());
wbmodel->append (M ("TP_COLORAPP_WBRT"));
wbmodel->append (M ("TP_COLORAPP_WBCAM"));
+ wbmodel->append (M ("TP_COLORAPP_FREE"));
+
wbmodel->set_active (0);
wbmHBox->pack_start (*wbmodel);
p1VBox->pack_start (*wbmHBox);
+ Gtk::Image* itempL = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
+ Gtk::Image* itempR = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
+ Gtk::Image* igreenL = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
+ Gtk::Image* igreenR = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
+
+
+ tempsc = Gtk::manage (new Adjuster (M ("TP_WBALANCE_TEMPERATURE"), MINTEMP0, MAXTEMP0, 5, CENTERTEMP0, itempR, itempL, &wbSlider2Temp, &wbTemp2Slider));
+ greensc = Gtk::manage (new Adjuster (M ("TP_WBALANCE_GREEN"), MINGREEN0, MAXGREEN0, 0.001, 1.0, igreenR, igreenL));
+
+ tempsc->show();
+ greensc->show();
+ p1VBox->pack_start (*tempsc);
+ p1VBox->pack_start (*greensc);
+
+
adapscen = Gtk::manage (new Adjuster (M ("TP_COLORAPP_ADAPTSCENE"), 0.001, 16384., 0.001, 2000.)); // EV -7 ==> EV 17
if (adapscen->delay < options.adjusterMaxDelay) {
@@ -443,10 +460,6 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance"
adaplum->set_tooltip_markup (M ("TP_COLORAPP_ADAPTVIEWING_TOOLTIP"));
p3VBox->pack_start (*adaplum);
- Gtk::Image* itempL = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
- Gtk::Image* itempR = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
- Gtk::Image* igreenL = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
- Gtk::Image* igreenR = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
// Gtk::Image* iblueredL = Gtk::manage (new RTImage ("ajd-wb-bluered1.png"));
// Gtk::Image* iblueredR = Gtk::manage (new RTImage ("ajd-wb-bluered2.png"));
@@ -541,6 +554,8 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance"
tempout->setAdjusterListener (this);
greenout->setAdjusterListener (this);
ybout->setAdjusterListener (this);
+ tempsc->setAdjusterListener (this);
+ greensc->setAdjusterListener (this);
show_all();
@@ -597,6 +612,8 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited)
tempout->setEditedState (pedited->colorappearance.tempout ? Edited : UnEdited);
greenout->setEditedState (pedited->colorappearance.greenout ? Edited : UnEdited);
ybout->setEditedState (pedited->colorappearance.ybout ? Edited : UnEdited);
+ tempsc->setEditedState (pedited->colorappearance.tempsc ? Edited : UnEdited);
+ greensc->setEditedState (pedited->colorappearance.greensc ? Edited : UnEdited);
contrast->setEditedState (pedited->colorappearance.contrast ? Edited : UnEdited);
qcontrast->setEditedState (pedited->colorappearance.qcontrast ? Edited : UnEdited);
colorh->setEditedState (pedited->colorappearance.colorh ? Edited : UnEdited);
@@ -654,11 +671,13 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited)
wbmodelconn.block (true);
if (pedited && !pedited->colorappearance.wbmodel) {
- wbmodel->set_active (2);
+ wbmodel->set_active (3);
} else if (pp->colorappearance.wbmodel == "RawT") {
wbmodel->set_active (0);
} else if (pp->colorappearance.wbmodel == "RawTCAT02") {
wbmodel->set_active (1);
+ } else if (pp->colorappearance.wbmodel == "free") {
+ wbmodel->set_active (2);
}
wbmodelconn.block (false);
@@ -734,6 +753,8 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited)
tempout->setValue (pp->colorappearance.tempout);
greenout->setValue (pp->colorappearance.greenout);
ybout->setValue (pp->colorappearance.ybout);
+ tempsc->setValue (pp->colorappearance.tempsc);
+ greensc->setValue (pp->colorappearance.greensc);
tcmode3conn.block (false);
tcmode2conn.block (false);
@@ -782,6 +803,8 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited)
pp->colorappearance.tempout = tempout->getValue ();
pp->colorappearance.greenout = greenout->getValue ();
pp->colorappearance.ybout = ybout->getValue ();
+ pp->colorappearance.tempsc = tempsc->getValue ();
+ pp->colorappearance.greensc = greensc->getValue ();
int tcMode = toneCurveMode->get_active_row_number();
@@ -846,6 +869,8 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited)
pedited->colorappearance.tempout = tempout->getEditedState ();
pedited->colorappearance.greenout = greenout->getEditedState ();
pedited->colorappearance.ybout = ybout->getEditedState ();
+ pedited->colorappearance.tempsc = tempsc->getEditedState ();
+ pedited->colorappearance.greensc = greensc->getEditedState ();
}
@@ -863,6 +888,9 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited)
pp->colorappearance.wbmodel = "RawT";
} else if (wbmodel->get_active_row_number() == 1) {
pp->colorappearance.wbmodel = "RawTCAT02";
+ } else if (wbmodel->get_active_row_number() == 2) {
+ pp->colorappearance.wbmodel = "free";
+
}
if (algo->get_active_row_number() == 0) {
@@ -1121,6 +1149,8 @@ void ColorAppearance::setDefaults (const ProcParams* defParams, const ParamsEdit
tempout->setDefault (defParams->colorappearance.tempout);
greenout->setDefault (defParams->colorappearance.greenout);
ybout->setDefault (defParams->colorappearance.ybout);
+ tempsc->setDefault (defParams->colorappearance.tempsc);
+ greensc->setDefault (defParams->colorappearance.greensc);
if (pedited) {
degree->setDefaultEditedState (pedited->colorappearance.degree ? Edited : UnEdited);
@@ -1140,6 +1170,8 @@ void ColorAppearance::setDefaults (const ProcParams* defParams, const ParamsEdit
tempout->setDefaultEditedState (pedited->colorappearance.tempout ? Edited : UnEdited);
greenout->setDefaultEditedState (pedited->colorappearance.greenout ? Edited : UnEdited);
ybout->setDefaultEditedState (pedited->colorappearance.ybout ? Edited : UnEdited);
+ tempsc->setDefaultEditedState (pedited->colorappearance.tempsc ? Edited : UnEdited);
+ greensc->setDefaultEditedState (pedited->colorappearance.greensc ? Edited : UnEdited);
} else {
degree->setDefaultEditedState (Irrelevant);
@@ -1159,6 +1191,8 @@ void ColorAppearance::setDefaults (const ProcParams* defParams, const ParamsEdit
tempout->setDefaultEditedState (Irrelevant);
greenout->setDefaultEditedState (Irrelevant);
ybout->setDefaultEditedState (Irrelevant);
+ tempsc->setDefaultEditedState (Irrelevant);
+ greensc->setDefaultEditedState (Irrelevant);
}
}
@@ -1272,6 +1306,10 @@ void ColorAppearance::adjusterChanged (Adjuster* a, double newval)
listener->panelChanged (EvCATgreenout, a->getTextValue());
} else if (a == ybout) {
listener->panelChanged (EvCATybout, a->getTextValue());
+ } else if (a == tempsc) {
+ listener->panelChanged (EvCATtempsc, a->getTextValue());
+ } else if (a == greensc) {
+ listener->panelChanged (EvCATgreensc, a->getTextValue());
}
@@ -1373,6 +1411,14 @@ void ColorAppearance::surroundChanged ()
void ColorAppearance::wbmodelChanged ()
{
+ if (wbmodel->get_active_row_number() == 0 || wbmodel->get_active_row_number() == 1) {
+ tempsc->hide();
+ greensc->hide();
+ }
+ if (wbmodel->get_active_row_number() == 2){
+ tempsc->show();
+ greensc->show();
+ }
if (listener && (multiImage || getEnabled()) ) {
listener->panelChanged (EvCATMethodWB, wbmodel->get_active_text ());
@@ -1474,6 +1520,8 @@ void ColorAppearance::setBatchMode (bool batchMode)
tempout->showEditedCB ();
greenout->showEditedCB ();
ybout->showEditedCB ();
+ tempsc->showEditedCB ();
+ greensc->showEditedCB ();
surround->append (M ("GENERAL_UNCHANGED"));
wbmodel->append (M ("GENERAL_UNCHANGED"));
@@ -1534,5 +1582,7 @@ void ColorAppearance::trimValues (rtengine::procparams::ProcParams* pp)
tempout->trimValue (pp->colorappearance.tempout);
greenout->trimValue (pp->colorappearance.greenout);
ybout->trimValue (pp->colorappearance.ybout);
+ tempsc->trimValue (pp->colorappearance.tempsc);
+ greensc->trimValue (pp->colorappearance.greensc);
}
diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h
index 261d8f9bd..f5102be95 100644
--- a/rtgui/colorappearance.h
+++ b/rtgui/colorappearance.h
@@ -105,6 +105,8 @@ private:
Adjuster* tempout;
Adjuster* greenout;
Adjuster* ybout;
+ Adjuster* tempsc;
+ Adjuster* greensc;
MyComboBoxText* toneCurveMode;
MyComboBoxText* toneCurveMode2;
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index 7b7942203..d3e17b810 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -209,6 +209,8 @@ void ParamsEdited::set (bool v)
colorappearance.tempout = v;
colorappearance.greenout = v;
colorappearance.ybout = v;
+ colorappearance.tempsc = v;
+ colorappearance.greensc = v;
//colorBoost.amount = v;
//colorBoost.avoidclip = v;
@@ -734,6 +736,8 @@ void ParamsEdited::initFrom (const std::vector
colorappearance.tempout = colorappearance.tempout && p.colorappearance.tempout == other.colorappearance.tempout;
colorappearance.greenout = colorappearance.greenout && p.colorappearance.greenout == other.colorappearance.greenout;
colorappearance.ybout = colorappearance.ybout && p.colorappearance.ybout == other.colorappearance.ybout;
+ colorappearance.tempsc = colorappearance.tempsc && p.colorappearance.tempsc == other.colorappearance.tempsc;
+ colorappearance.greensc = colorappearance.greensc && p.colorappearance.greensc == other.colorappearance.greensc;
//colorBoost.amount = colorBoost.amount && p.colorBoost.amount == other.colorBoost.amount;
//colorBoost.avoidclip = colorBoost.avoidclip && p.colorBoost.avoidclip == other.colorBoost.avoidclip;
@@ -1759,6 +1763,14 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
toEdit.colorappearance.greenout = mods.colorappearance.greenout;
}
+ if (colorappearance.tempsc) {
+ toEdit.colorappearance.tempsc = mods.colorappearance.tempsc;
+ }
+
+ if (colorappearance.greensc) {
+ toEdit.colorappearance.greensc = mods.colorappearance.greensc;
+ }
+
if (colorappearance.ybout) {
toEdit.colorappearance.ybout = mods.colorappearance.ybout;
}
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 7d0ce7fde..4c0bcd38e 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -316,6 +316,8 @@ public:
bool tempout;
bool greenout;
bool ybout;
+ bool tempsc;
+ bool greensc;
};