Issue 2073: white balance fixes

This commit is contained in:
torger
2013-11-22 08:33:09 +01:00
parent 7030715a98
commit 099f7e68d5

View File

@@ -184,6 +184,9 @@ WhiteBalance::WhiteBalance () : Gtk::VBox(), FoldableToolPanel(this), wbp(NULL),
temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, 4750)); temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, 4750));
green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0)); green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0));
equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0)); equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0));
cache_customTemp (0);
cache_customGreen (0);
cache_customEqual (0);
equal->set_tooltip_markup (M("TP_WBALANCE_EQBLUERED_TOOLTIP")); equal->set_tooltip_markup (M("TP_WBALANCE_EQBLUERED_TOOLTIP"));
temp->show (); temp->show ();
green->show (); green->show ();
@@ -313,9 +316,13 @@ void WhiteBalance::optChanged () {
case WBT_CUSTOM: case WBT_CUSTOM:
if (custom_temp>0){ if (custom_temp>0){
temp->setValue (temp->getAddMode() ? 0.0 : custom_temp); temp->setValue (temp->getAddMode() ? 0.0 : custom_temp);
green->setValue (green->getAddMode() ? 0.0 : custom_green);
equal->setValue (equal->getAddMode() ? 0.0 : custom_equal);
} else {
cache_customTemp (temp->getValue());
cache_customGreen (green->getValue());
cache_customEqual (equal->getValue());
} }
green->setValue (green->getAddMode() ? 0.0 : custom_green);
equal->setValue (equal->getAddMode() ? 0.0 : custom_equal);
if (batchMode) { if (batchMode) {
temp->setEditedState (Edited); temp->setEditedState (Edited);
green->setEditedState (Edited); green->setEditedState (Edited);
@@ -389,9 +396,9 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
// temperature is reset to the associated temperature, or 0.0 if addMode is set. // temperature is reset to the associated temperature, or 0.0 if addMode is set.
switch (wbValues->type) { switch (wbValues->type) {
case WBT_CUSTOM: case WBT_CUSTOM:
temp->setValue (pp->wb.temperature); temp->setValue (temp->getAddMode() ? 0.0 : pp->wb.temperature);
green->setValue (pp->wb.green); green->setValue (green->getAddMode() ? 0.0 : pp->wb.green);
equal->setValue (pp->wb.equal); equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
cache_customTemp (pp->wb.temperature); cache_customTemp (pp->wb.temperature);
cache_customGreen (pp->wb.green); cache_customGreen (pp->wb.green);
cache_customEqual (pp->wb.equal); cache_customEqual (pp->wb.equal);
@@ -403,14 +410,20 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
break; break;
case WBT_CAMERA: case WBT_CAMERA:
if (wbp) { if (wbp) {
double ctemp; double cgreen; double ctemp = -1.0; double cgreen = -1.0;
wbp->getCamWB (ctemp, cgreen); wbp->getCamWB (ctemp, cgreen);
// Set the camera's temperature value, or 0.0 if in ADD mode if (ctemp != -1.0) {
temp->setValue (temp->getAddMode() ? 0.0 : ctemp); // Set the camera's temperature value, or 0.0 if in ADD mode
// Set the camera's green value, or 0.0 if in ADD mode temp->setValue (temp->getAddMode() ? 0.0 : ctemp);
green->setValue (green->getAddMode() ? 0.0 : cgreen); // Set the camera's green value, or 0.0 if in ADD mode
equal->setValue (equal->getAddMode() ? 0.0 : 1.); green->setValue (green->getAddMode() ? 0.0 : cgreen);
equal->setValue (equal->getAddMode() ? 0.0 : 1.);
} else {
temp->setValue (temp->getAddMode() ? 0.0 : pp->wb.temperature);
green->setValue (green->getAddMode() ? 0.0 : pp->wb.green);
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
}
} }
break; break;
case WBT_AUTO: case WBT_AUTO:
@@ -497,8 +510,11 @@ void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited*
if (wbp && defParams->wb.method == "Camera") { if (wbp && defParams->wb.method == "Camera") {
double ctemp; double cgreen; double ctemp; double cgreen;
wbp->getCamWB (ctemp, cgreen); wbp->getCamWB (ctemp, cgreen);
temp->setDefault (temp->getAddMode() ? 0 : (int)ctemp); // FIXME: Seems to be always -1.0, called too early? Broken!
green->setDefault (green->getAddMode() ? 0 : cgreen); if (ctemp != -1.0) {
temp->setDefault (temp->getAddMode() ? 0 : (int)ctemp);
green->setDefault (green->getAddMode() ? 0 : cgreen);
}
} }
else if (wbp && defParams->wb.method == "Auto") { else if (wbp && defParams->wb.method == "Auto") {
// this setDefaults method is called too early ; the wbp has been set, // this setDefaults method is called too early ; the wbp has been set,