X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcolour_conversion_editor.cc;h=01b1ca056c1ed4739229f52c97fad917314bfd31;hb=3828baf56467224f5d44049bf1e7a7ed11f43a05;hp=1d164cb334e4ada2029af231d7511cdb08cb72dd;hpb=1858190cff2f960f3d1f0a5cc02c69da86088f5b;p=dcpomatic.git diff --git a/src/wx/colour_conversion_editor.cc b/src/wx/colour_conversion_editor.cc index 1d164cb33..01b1ca056 100644 --- a/src/wx/colour_conversion_editor.cc +++ b/src/wx/colour_conversion_editor.cc @@ -1,19 +1,20 @@ /* Copyright (C) 2013-2015 Carl Hetherington - 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 . */ @@ -26,17 +27,16 @@ #include #include #include -#include #include using std::string; using std::cout; using boost::shared_ptr; using boost::dynamic_pointer_cast; -using boost::lexical_cast; -ColourConversionEditor::ColourConversionEditor (wxWindow* parent) +ColourConversionEditor::ColourConversionEditor (wxWindow* parent, bool yuv) : wxPanel (parent, wxID_ANY) + , _ignore_chromaticity_changed (false) { wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); SetSizer (overall_sizer); @@ -52,12 +52,12 @@ ColourConversionEditor::ColourConversionEditor (wxWindow* parent) table->Add (_input_gamma_linearised, wxGBPosition (r, 0), wxGBSpan (1, 2)); ++r; - add_label_to_grid_bag_sizer (table, this, _("Input gamma"), true, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, _("Input gamma"), true, wxGBPosition (r, 0)); _input_gamma = new wxSpinCtrlDouble (this); table->Add (_input_gamma, wxGBPosition (r, 1)); ++r; - add_label_to_grid_bag_sizer (table, this, _("Input power"), true, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, _("Input power"), true, wxGBPosition (r, 0)); { wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); _input_power = new wxSpinCtrlDouble (this); @@ -92,46 +92,52 @@ ColourConversionEditor::ColourConversionEditor (wxWindow* parent) /* YUV to RGB conversion */ - subhead (table, this, _("YUV to RGB conversion"), r); + wxStaticText* yuv_heading = subhead (table, this, _("YUV to RGB conversion"), r); - add_label_to_grid_bag_sizer (table, this, _("YUV to RGB matrix"), true, wxGBPosition (r, 0)); + wxStaticText* yuv_label = add_label_to_sizer (table, this, _("YUV to RGB matrix"), true, wxGBPosition (r, 0)); _yuv_to_rgb = new wxChoice (this, wxID_ANY); _yuv_to_rgb->Append (_("Rec. 601")); _yuv_to_rgb->Append (_("Rec. 709")); table->Add (_yuv_to_rgb, wxGBPosition (r, 1)); ++r; + if (!yuv) { + yuv_heading->Enable (false); + yuv_label->Enable (false); + _yuv_to_rgb->Enable (false); + } + /* RGB to XYZ conversion */ subhead (table, this, _("RGB to XYZ conversion"), r); - add_label_to_grid_bag_sizer (table, this, _("x"), false, wxGBPosition (r, 1)); - add_label_to_grid_bag_sizer (table, this, _("y"), false, wxGBPosition (r, 2)); - add_label_to_grid_bag_sizer (table, this, _("Matrix"), false, wxGBPosition (r, 3)); + add_label_to_sizer (table, this, _("x"), false, wxGBPosition (r, 1)); + add_label_to_sizer (table, this, _("y"), false, wxGBPosition (r, 2)); + add_label_to_sizer (table, this, _("Matrix"), false, wxGBPosition (r, 3)); ++r; - add_label_to_grid_bag_sizer (table, this, _("Red chromaticity"), true, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, _("Red chromaticity"), true, wxGBPosition (r, 0)); _red_x = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_red_x, wxGBPosition (r, 1)); _red_y = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_red_y, wxGBPosition (r, 2)); ++r; - add_label_to_grid_bag_sizer (table, this, _("Green chromaticity"), true, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, _("Green chromaticity"), true, wxGBPosition (r, 0)); _green_x = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_green_x, wxGBPosition (r, 1)); _green_y = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_green_y, wxGBPosition (r, 2)); ++r; - add_label_to_grid_bag_sizer (table, this, _("Blue chromaticity"), true, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, _("Blue chromaticity"), true, wxGBPosition (r, 0)); _blue_x = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_blue_x, wxGBPosition (r, 1)); _blue_y = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_blue_y, wxGBPosition (r, 2)); ++r; - add_label_to_grid_bag_sizer (table, this, _("White point"), true, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, _("White point"), true, wxGBPosition (r, 0)); _white_x = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); table->Add (_white_x, wxGBPosition (r, 1)); _white_y = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, size, 0, validator); @@ -165,7 +171,7 @@ ColourConversionEditor::ColourConversionEditor (wxWindow* parent) table->Add (_adjusted_white_y, wxGBPosition (r, 2)); ++r; - add_label_to_grid_bag_sizer (table, this, wxT (""), false, wxGBPosition (r, 0)); + add_label_to_sizer (table, this, wxT (""), false, wxGBPosition (r, 0)); ++r; size = dc.GetTextExtent (wxT ("0.12345678")); @@ -207,13 +213,16 @@ ColourConversionEditor::ColourConversionEditor (wxWindow* parent) _yuv_to_rgb->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&ColourConversionEditor::changed, this)); } -void +wxStaticText * ColourConversionEditor::subhead (wxGridBagSizer* sizer, wxWindow* parent, wxString text, int& row) const { - wxStaticText* m = new wxStaticText (parent, wxID_ANY, wxT ("")); - m->SetLabelMarkup ("" + text + ""); + 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; } void @@ -236,6 +245,8 @@ ColourConversionEditor::set (ColourConversion conversion) _yuv_to_rgb->SetSelection (conversion.yuv_to_rgb ()); + _ignore_chromaticity_changed = true; + SafeStringStream s; s.setf (std::ios::fixed, std::ios::floatfield); s.precision (6); @@ -271,6 +282,8 @@ ColourConversionEditor::set (ColourConversion conversion) 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 (""); @@ -285,6 +298,7 @@ ColourConversionEditor::set (ColourConversion conversion) update_rgb_to_xyz (); update_bradford (); + changed (); } ColourConversion @@ -356,6 +370,10 @@ ColourConversionEditor::changed () void ColourConversionEditor::chromaticity_changed () { + if (_ignore_chromaticity_changed) { + return; + } + update_rgb_to_xyz (); changed (); }