/*
Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net>
- This program is free software; you can redistribute it and/or modify
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ DCP-o-matic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
#include "lib/colour_conversion.h"
-#include "lib/safe_stringstream.h"
#include "lib/raw_convert.h"
#include "wx_util.h"
#include "colour_conversion_editor.h"
+#include <locked_sstream.h>
#include <dcp/gamma_transfer_function.h>
#include <dcp/modified_gamma_transfer_function.h>
#include <wx/spinctrl.h>
#include <wx/gbsizer.h>
-#include <boost/lexical_cast.hpp>
#include <iostream>
using std::string;
using std::cout;
using boost::shared_ptr;
using boost::dynamic_pointer_cast;
-using boost::lexical_cast;
ColourConversionEditor::ColourConversionEditor (wxWindow* parent, bool yuv)
: wxPanel (parent, wxID_ANY)
+ , _ignore_chromaticity_changed (false)
{
wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
SetSizer (overall_sizer);
_yuv_to_rgb->SetSelection (conversion.yuv_to_rgb ());
- SafeStringStream s;
+ _ignore_chromaticity_changed = true;
+
+ locked_stringstream s;
s.setf (std::ios::fixed, std::ios::floatfield);
s.precision (6);
s << conversion.white().y;
_white_y->SetValue (std_to_wx (s.str ()));
+ _ignore_chromaticity_changed = false;
+
if (conversion.adjusted_white ()) {
_adjust_white->SetValue (true);
s.str ("");
update_rgb_to_xyz ();
update_bradford ();
+ changed ();
}
ColourConversion
void
ColourConversionEditor::chromaticity_changed ()
{
+ if (_ignore_chromaticity_changed) {
+ return;
+ }
+
update_rgb_to_xyz ();
changed ();
}
boost::numeric::ublas::matrix<double> m = get().bradford ();
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
- SafeStringStream s;
+ locked_stringstream s;
s.setf (std::ios::fixed, std::ios::floatfield);
s.precision (7);
s << m (i, j);
boost::numeric::ublas::matrix<double> m = get().rgb_to_xyz ();
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
- SafeStringStream s;
+ locked_stringstream s;
s.setf (std::ios::fixed, std::ios::floatfield);
s.precision (7);
s << m (i, j);
void
ColourConversionEditor::set_text_ctrl (wxTextCtrl* control, double value)
{
- SafeStringStream s;
+ locked_stringstream s;
s.precision (7);
s << value;
control->SetValue (std_to_wx (s.str ()));