diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-03-22 13:44:30 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-03-22 13:44:30 +0000 |
| commit | a8e30a77bdd434ea2cdd81407f4ea75664fdce93 (patch) | |
| tree | fb088bb1105da6822df8a8e66d4b9b23cbc0cb2c /src/wx/colour_conversion_editor.cc | |
| parent | e885dd4272448b7bf0e54d9b149f54b53bede229 (diff) | |
Another attempt to fix glitches in the colour conversion dialog
on OS X.
Reported-by: Adam Colt
Diffstat (limited to 'src/wx/colour_conversion_editor.cc')
| -rw-r--r-- | src/wx/colour_conversion_editor.cc | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/wx/colour_conversion_editor.cc b/src/wx/colour_conversion_editor.cc index a4ec23411..6617b66d6 100644 --- a/src/wx/colour_conversion_editor.cc +++ b/src/wx/colour_conversion_editor.cc @@ -93,20 +93,20 @@ ColourConversionEditor::ColourConversionEditor (wxWindow* parent) _output_gamma->SetDigits (2); _output_gamma->SetIncrement (0.1); - _input_gamma->Bind (wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, boost::bind (&ColourConversionEditor::changed, this)); + _input_gamma->Bind (wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, boost::bind (&ColourConversionEditor::changed, this, _input_gamma)); _input_gamma_linearised->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ColourConversionEditor::changed, this)); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { _matrix[i][j]->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ColourConversionEditor::changed, this)); } } - _output_gamma->Bind (wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, boost::bind (&ColourConversionEditor::changed, this)); + _output_gamma->Bind (wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, boost::bind (&ColourConversionEditor::changed, this, _output_gamma)); } void ColourConversionEditor::set (ColourConversion conversion) { - _input_gamma->SetValue (conversion.input_gamma); + set_spin_ctrl (_input_gamma, conversion.input_gamma); _input_gamma_linearised->SetValue (conversion.input_gamma_linearised); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { @@ -117,7 +117,7 @@ ColourConversionEditor::set (ColourConversion conversion) _matrix[i][j]->SetValue (std_to_wx (s.str ())); } } - _output_gamma->SetValue (conversion.output_gamma); + set_spin_ctrl (_output_gamma, conversion.output_gamma); } ColourConversion @@ -150,3 +150,24 @@ ColourConversionEditor::changed () Changed (); } +void +ColourConversionEditor::changed (wxSpinCtrlDouble* sc) +{ + /* On OS X, it seems that in some cases when a wxSpinCtrlDouble loses focus + it emits an erroneous changed signal, which messes things up. + Check for that here. + */ + if (fabs (_last_spin_ctrl_value[sc] - sc->GetValue()) < 1e-3) { + return; + } + + Changed (); +} + +void +ColourConversionEditor::set_spin_ctrl (wxSpinCtrlDouble* control, double value) +{ + _last_spin_ctrl_value[control] = value; + control->SetValue (value); +} + |
