Set up new watermark config.
authorCarl Hetherington <cth@carlh.net>
Thu, 27 Sep 2018 16:04:56 +0000 (17:04 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 27 Sep 2018 16:04:56 +0000 (17:04 +0100)
src/lib/config.cc
src/lib/config.h
src/wx/film_viewer.cc
src/wx/film_viewer.h
src/wx/player_config_dialog.cc

index fbf0e3b632a7f303a4aed17ec20e0b62b8d7f59f..6e06f78e4b85e42d6f8c146aa89fa6a3629a7e3a 100644 (file)
@@ -172,7 +172,9 @@ Config::set_defaults ()
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        _player_background_image = boost::none;
        _kdm_server_url = "http://localhost:8000/{CPL}";
-       _player_watermark = boost::none;
+       _player_watermark_theatre = "";
+       _player_watermark_period = 1;
+       _player_watermark_duration = 50;
 #endif
 
        _allowed_dcp_frame_rates.clear ();
@@ -517,7 +519,9 @@ try
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        _player_background_image = f.optional_string_child("PlayerBackgroundImage");
        _kdm_server_url = f.optional_string_child("KDMServerURL").get_value_or("http://localhost:8000/{CPL}");
-       _player_watermark = f.optional_string_child("PlayerWatermark");
+       _player_watermark_theatre = f.optional_string_child("PlayerWatermarkTheatre").get_value_or("");
+       _player_watermark_period = f.optional_number_child<int>("PlayerWatermarkPeriod").get_value_or(1);
+       _player_watermark_duration = f.optional_number_child<int>("PlayerWatermarkDuration").get_value_or(150);
 #endif
 
        /* Replace any cinemas from config.xml with those from the configured file */
@@ -921,9 +925,9 @@ Config::write_config () const
                root->add_child("PlayerBackgroundImage")->add_child_text(_player_background_image->string());
        }
        root->add_child("KDMServerURL")->add_child_text(_kdm_server_url);
-       if (_player_watermark) {
-               root->add_child("PlayerWatermark")->add_child_text(_player_watermark->string());
-       }
+       root->add_child("PlayerWatermarkTheatre")->add_child_text(_player_watermark_theatre);
+       root->add_child("PlayerWatermarkPeriod")->add_child_text(raw_convert<string>(_player_watermark_period));
+       root->add_child("PlayerWatermarkDuration")->add_child_text(raw_convert<string>(_player_watermark_duration));
 #endif
 
        try {
index 80bb48d32cfb3a15d68acfb786721fca71ba7143..8ddc0367de9b9a0290b09b3058b60e8c8ec2a8ca 100644 (file)
@@ -79,7 +79,6 @@ public:
                PLAYER_DCP_DIRECTORY,
 #ifdef DCPOMATIC_VARIANT_SWAROOP
                PLAYER_BACKGROUND_IMAGE,
-               PLAYER_WATERMARK,
 #endif
                OTHER
        };
@@ -503,8 +502,16 @@ public:
                return _kdm_server_url;
        }
 
-       boost::optional<boost::filesystem::path> player_watermark () const {
-               return _player_watermark;
+       std::string player_watermark_theatre () const {
+               return _player_watermark_theatre;
+       }
+
+       int player_watermark_period () const {
+               return _player_watermark_period;
+       }
+
+       int player_watermark_duration () const {
+               return _player_watermark_duration;
        }
 #endif
 
@@ -971,16 +978,16 @@ public:
                maybe_set (_kdm_server_url, s);
        }
 
-       void set_player_watermark (boost::filesystem::path p) {
-               maybe_set (_player_watermark, p, PLAYER_WATERMARK);
+       void set_player_watermark_theatre (std::string p) {
+               maybe_set (_player_watermark_theatre, p);
        }
 
-       void unset_player_watermark () {
-               if (!_player_watermark) {
-                       return;
-               }
-               _player_watermark = boost::none;
-               changed (PLAYER_WATERMARK);
+       void set_player_watermark_period (int minutes) {
+               maybe_set (_player_watermark_period, minutes);
+       }
+
+       void set_player_watermark_duration (int milliseconds) {
+               maybe_set (_player_watermark_duration, milliseconds);
        }
 #endif
 
@@ -1180,7 +1187,9 @@ private:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        boost::optional<boost::filesystem::path> _player_background_image;
        std::string _kdm_server_url;
-       boost::optional<boost::filesystem::path> _player_watermark;
+       std::string _player_watermark_theatre;
+       int _player_watermark_period;
+       int _player_watermark_duration;
 #endif
 
        static int const _current_version;
index b116c02454167964b091cc74876c47c3a8b9d726..0f18f2e722433d382513764362356aa971803c7c 100644 (file)
@@ -101,7 +101,6 @@ FilmViewer::FilmViewer (wxWindow* p)
 
        _config_changed_connection = Config::instance()->Changed.connect (bind (&FilmViewer::config_changed, this, _1));
        config_changed (Config::SOUND_OUTPUT);
-       config_changed (Config::PLAYER_WATERMARK);
 }
 
 FilmViewer::~FilmViewer ()
@@ -329,11 +328,7 @@ FilmViewer::paint_panel ()
        dc.DrawBitmap (frame_bitmap, 0, max(0, (_panel_size.height - _out_size.height) / 2));
 
 #ifdef DCPOMATIC_VARIANT_SWAROOP
-       if (_watermark && (_video_position.get() % 960000) == 0) {
-               int x = rand() % (_panel_size.width - _watermark->GetWidth());
-               int y = rand() % (_panel_size.height - _watermark->GetHeight());
-               dc.DrawBitmap (*_watermark, x, y);
-       }
+       /* XXX: watermark */
 #endif
 
        if (_out_size.width < _panel_size.width) {
@@ -580,16 +575,6 @@ void
 FilmViewer::config_changed (Config::Property p)
 {
 #ifdef DCPOMATIC_VARIANT_SWAROOP
-       if (p == Config::PLAYER_WATERMARK) {
-               optional<boost::filesystem::path> f = Config::instance()->player_watermark();
-               if (f) {
-                       _watermark = wxBitmap(wxImage(std_to_wx(f->string())));
-               } else {
-                       _watermark = boost::none;
-               }
-               return;
-       }
-
        if (p == Config::PLAYER_BACKGROUND_IMAGE) {
                refresh_panel ();
                return;
index db23182a67e0e46ec87e83bb92c56e6347a35846..94690daea296f5b82f6e590c5db2b2f5b56553f5 100644 (file)
@@ -154,9 +154,5 @@ private:
        bool _outline_content;
        Eyes _eyes;
 
-#ifdef DCPOMATIC_VARIANT_SWAROOP
-       boost::optional<wxBitmap> _watermark;
-#endif
-
        boost::signals2::scoped_connection _config_changed_connection;
 };
index 3697c3ce3413d0682e321816268a463871d08d67..006318b6bab8bda18aa019c29a89ef5059e24e96 100644 (file)
@@ -126,11 +126,6 @@ private:
                table->Add (_background_image, wxGBPosition (r, 1));
                ++r;
 
-               add_label_to_sizer (table, _panel, _("Watermark image"), true, wxGBPosition (r, 0));
-               _watermark = new FilePickerCtrl (_panel, _("Select image file"), "*.png;*.jpg;*.jpeg;*.tif;*.tiff", true);
-               table->Add (_watermark, wxGBPosition (r, 1));
-               ++r;
-
                add_label_to_sizer (table, _panel, _("KDM server URL"), true, wxGBPosition(r, 0));
                _kdm_server_url = new wxTextCtrl (_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(400, -1));
                table->Add (_kdm_server_url, wxGBPosition (r, 1));
@@ -146,7 +141,6 @@ private:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
                _background_image->Bind (wxEVT_FILEPICKER_CHANGED, bind(&PlayerGeneralPage::background_image_changed, this));
                _kdm_server_url->Bind (wxEVT_TEXT, bind(&PlayerGeneralPage::kdm_server_url_changed, this));
-               _watermark->Bind (wxEVT_TEXT, bind(&PlayerGeneralPage::watermark_changed, this));
 #endif
        }
 
@@ -184,9 +178,6 @@ private:
                        checked_set (_background_image, *config->player_background_image());
                }
                checked_set (_kdm_server_url, config->kdm_server_url());
-               if (config->player_watermark()) {
-                       checked_set (_watermark, *config->player_watermark());
-               }
 #endif
        }
 
@@ -241,11 +232,6 @@ private:
        {
                Config::instance()->set_kdm_server_url(wx_to_std(_kdm_server_url->GetValue()));
        }
-
-       void watermark_changed ()
-       {
-               Config::instance()->set_player_watermark(wx_to_std(_watermark->GetPath()));
-       }
 #endif
 
        wxChoice* _player_mode;
@@ -257,10 +243,83 @@ private:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        FilePickerCtrl* _background_image;
        wxTextCtrl* _kdm_server_url;
-       FilePickerCtrl* _watermark;
 #endif
 };
 
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+class WatermarkPage : public StandardPage
+{
+public:
+       WatermarkPage (wxSize panel_size, int border)
+               : StandardPage (panel_size, border)
+       {}
+
+       wxString GetName () const
+       {
+               return _("Watermark");
+       }
+
+private:
+       void setup ()
+       {
+               wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+               _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border);
+
+               int r = 0;
+
+               add_label_to_sizer (table, _panel, _("Theatre name"), true, wxGBPosition(r, 0));
+               _theatre = new wxTextCtrl (_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(300, -1));
+               table->Add (_theatre, wxGBPosition(r, 1), wxGBSpan(1, 2));
+               ++r;
+
+               add_label_to_sizer (table, _panel, _("Period"), true, wxGBPosition(r, 0));
+               _period = new wxSpinCtrl (_panel, wxID_ANY);
+               _period->SetRange (1, 60);
+               table->Add (_period, wxGBPosition(r, 1));
+               add_label_to_sizer (table, _panel, _("minutes"), false, wxGBPosition(r, 2));
+               ++r;
+
+               add_label_to_sizer (table, _panel, _("Duration"), true, wxGBPosition(r, 0));
+               _duration = new wxSpinCtrl (_panel, wxID_ANY);
+               _duration->SetRange (1, 200);
+               table->Add (_duration, wxGBPosition(r, 1));
+               add_label_to_sizer (table, _panel, _("milliseconds"), false, wxGBPosition(r, 2));
+               ++r;
+
+               _theatre->Bind (wxEVT_TEXT, bind(&WatermarkPage::theatre_changed, this));
+               _duration->Bind (wxEVT_SPINCTRL, bind(&WatermarkPage::duration_changed, this));
+               _period->Bind (wxEVT_SPINCTRL, bind(&WatermarkPage::period_changed, this));
+       }
+
+       void config_changed ()
+       {
+               Config* config = Config::instance ();
+               checked_set (_theatre, config->player_watermark_theatre());
+               checked_set (_duration, config->player_watermark_duration());
+               checked_set (_period, config->player_watermark_period());
+       }
+
+       void theatre_changed ()
+       {
+               Config::instance()->set_player_watermark_theatre(wx_to_std(_theatre->GetValue()));
+       }
+
+       void period_changed ()
+       {
+               Config::instance()->set_player_watermark_period(_period->GetValue());
+       }
+
+       void duration_changed ()
+       {
+               Config::instance()->set_player_watermark_duration(_duration->GetValue());
+       }
+
+       wxTextCtrl* _theatre;
+       wxSpinCtrl* _period;
+       wxSpinCtrl* _duration;
+};
+#endif
+
 wxPreferencesEditor*
 create_player_config_dialog ()
 {
@@ -280,5 +339,8 @@ create_player_config_dialog ()
 
        e->AddPage (new PlayerGeneralPage (ps, border));
        e->AddPage (new KeysPage (ps, border));
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       e->AddPage (new WatermarkPage (ps, border));
+#endif
        return e;
 }