_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) {
_matrix[i][j]->SetValue (std_to_wx (s.str ()));
}
}
- _output_gamma->SetValue (conversion.output_gamma);
+ set_spin_ctrl (_output_gamma, conversion.output_gamma);
}
ColourConversion
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);
+}
+
#include <wx/statline.h>
#include "lib/colour_conversion.h"
#include "lib/config.h"
+#include "lib/util.h"
#include "wx_util.h"
#include "content_colour_conversion_dialog.h"
#include "colour_conversion_editor.h"
_setting = true;
_editor->set (c);
_setting = false;
-
+
check_for_preset ();
}
_preset_check->SetValue (preset);
_preset_choice->Enable (preset);
- _preset_choice->SetSelection (preset.get_value_or (-1));
+ if (preset) {
+ _preset_choice->SetSelection (preset.get ());
+ } else {
+ _preset_choice->SetSelection (-1);
+ }
}
void
ContentColourConversionDialog::preset_choice_changed ()
{
vector<PresetColourConversion> presets = Config::instance()->colour_conversions ();
- int const s = _preset_choice->GetSelection();
+ int const s = _preset_choice->GetCurrentSelection();
if (s != -1) {
set (presets[s].conversion);
}