/*
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 <dcp/raw_convert.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;
+using dcp::raw_convert;
ColourConversionEditor::ColourConversionEditor (wxWindow* parent, bool yuv)
: wxPanel (parent, wxID_ANY)
+ , _ignore_chromaticity_changed (false)
{
wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
SetSizer (overall_sizer);
wxStaticText *
ColourConversionEditor::subhead (wxGridBagSizer* sizer, wxWindow* parent, wxString text, int& row) const
{
- wxStaticText* m = new wxStaticText (parent, wxID_ANY, wxT (""));
- m->SetLabelMarkup ("<b>" + text + "</b>");
+ wxStaticText* m = new wxStaticText (parent, wxID_ANY, text);
+ wxFont font (*wxNORMAL_FONT);
+ font.SetWeight (wxFONTWEIGHT_BOLD);
+ m->SetFont (font);
sizer->Add (m, wxGBPosition (row, 0), wxGBSpan (1, 3), wxALIGN_CENTER_VERTICAL | wxTOP, 12);
++row;
return m;
_yuv_to_rgb->SetSelection (conversion.yuv_to_rgb ());
- SafeStringStream s;
- s.setf (std::ios::fixed, std::ios::floatfield);
- s.precision (6);
-
- s << conversion.red().x;
- _red_x->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.red().y;
- _red_y->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.green().x;
- _green_x->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.green().y;
- _green_y->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.blue().x;
- _blue_x->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.blue().y;
- _blue_y->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.white().x;
- _white_x->SetValue (std_to_wx (s.str ()));
-
- s.str ("");
- s << conversion.white().y;
- _white_y->SetValue (std_to_wx (s.str ()));
+ _ignore_chromaticity_changed = true;
+
+ char buffer[256];
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.red().x);
+ _red_x->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.red().y);
+ _red_y->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.green().x);
+ _green_x->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.green().y);
+ _green_y->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.blue().x);
+ _blue_x->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.blue().y);
+ _blue_y->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.white().x);
+ _white_x->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.white().y);
+ _white_y->SetValue (std_to_wx (buffer));
+
+ _ignore_chromaticity_changed = false;
if (conversion.adjusted_white ()) {
_adjust_white->SetValue (true);
- s.str ("");
- s << conversion.adjusted_white().get().x;
- _adjusted_white_x->SetValue (std_to_wx (s.str ()));
- s.str ("");
- s << conversion.adjusted_white().get().y;
- _adjusted_white_y->SetValue (std_to_wx (s.str ()));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.adjusted_white().get().x);
+ _adjusted_white_x->SetValue (std_to_wx (buffer));
+ snprintf (buffer, sizeof (buffer), "%.6f", conversion.adjusted_white().get().y);
+ _adjusted_white_y->SetValue (std_to_wx (buffer));
} else {
_adjust_white->SetValue (false);
}
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;
- s.setf (std::ios::fixed, std::ios::floatfield);
- s.precision (7);
- s << m (i, j);
- _bradford[i][j]->SetLabel (std_to_wx (s.str ()));
+ char buffer[256];
+ snprintf (buffer, sizeof (buffer), "%.7f", m (i, j));
+ _bradford[i][j]->SetLabel (std_to_wx (buffer));
}
}
}
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;
- s.setf (std::ios::fixed, std::ios::floatfield);
- s.precision (7);
- s << m (i, j);
- _rgb_to_xyz[i][j]->SetLabel (std_to_wx (s.str ()));
+ char buffer[256];
+ snprintf (buffer, sizeof (buffer), "%.7f", m (i, j));
+ _rgb_to_xyz[i][j]->SetLabel (std_to_wx (buffer));
}
}
}
void
ColourConversionEditor::set_text_ctrl (wxTextCtrl* control, double value)
{
- SafeStringStream s;
- s.precision (7);
- s << value;
- control->SetValue (std_to_wx (s.str ()));
+ char buffer[256];
+ snprintf (buffer, sizeof (buffer), "%.7f", value);
+ control->SetValue (std_to_wx (buffer));
}