Untested watermarking.
authorCarl Hetherington <cth@carlh.net>
Thu, 27 Sep 2018 10:25:21 +0000 (11:25 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 27 Sep 2018 10:25:21 +0000 (11:25 +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 abb775be8ec33e066de2caa0140260d4f2fa2d01..d7fd74449e4ab59430cd68793b832b5f29ddcfd4 100644 (file)
@@ -172,6 +172,7 @@ Config::set_defaults ()
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        _player_background_image = boost::none;
        _kdm_server_url = "http://localhost:8000/{CPL}";
+       _player_watermark = boost::none;
 #endif
 
        _allowed_dcp_frame_rates.clear ();
@@ -508,6 +509,7 @@ 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");
 #endif
 
        /* Replace any cinemas from config.xml with those from the configured file */
@@ -911,6 +913,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());
+       }
 #endif
 
        try {
index 378272ff0a84159cdc524870d6dfb246e0e165ae..bcc46f8fa4535e26e7e84d60d4622d19c99247e9 100644 (file)
@@ -79,6 +79,7 @@ public:
                PLAYER_DCP_DIRECTORY,
 #ifdef DCPOMATIC_VARIANT_SWAROOP
                PLAYER_BACKGROUND_IMAGE,
+               PLAYER_WATERMARK,
 #endif
                OTHER
        };
@@ -501,6 +502,10 @@ public:
        std::string kdm_server_url () const {
                return _kdm_server_url;
        }
+
+       boost::optional<boost::filesystem::path> player_watermark () const {
+               return _player_watermark;
+       }
 #endif
 
        /* SET (mostly) */
@@ -965,6 +970,18 @@ public:
        void set_kdm_server_url (std::string s) {
                maybe_set (_kdm_server_url, s);
        }
+
+       void set_player_watermark (boost::filesystem::path p) {
+               maybe_set (_player_watermark, p, PLAYER_WATERMARK);
+       }
+
+       void unset_player_watermark () {
+               if (!_player_watermark) {
+                       return;
+               }
+               _player_watermark = boost::none;
+               changed (PLAYER_WATERMARK);
+       }
 #endif
 
        void changed (Property p = OTHER);
@@ -1162,6 +1179,7 @@ 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;
 #endif
 
        static int const _current_version;
index 5a3e58724e3c57acda36435db9575be838a6004f..b116c02454167964b091cc74876c47c3a8b9d726 100644 (file)
@@ -101,6 +101,7 @@ 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 ()
@@ -327,6 +328,14 @@ FilmViewer::paint_panel ()
        wxBitmap frame_bitmap (frame);
        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);
+       }
+#endif
+
        if (_out_size.width < _panel_size.width) {
                wxPen p (_panel->GetParent()->GetBackgroundColour());
                wxBrush b (_panel->GetParent()->GetBackgroundColour());
@@ -571,6 +580,16 @@ 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 94690daea296f5b82f6e590c5db2b2f5b56553f5..db23182a67e0e46ec87e83bb92c56e6347a35846 100644 (file)
@@ -154,5 +154,9 @@ private:
        bool _outline_content;
        Eyes _eyes;
 
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       boost::optional<wxBitmap> _watermark;
+#endif
+
        boost::signals2::scoped_connection _config_changed_connection;
 };
index 0a6985bd1d2244dc552126dbc0e629aecaf5b8c9..3697c3ce3413d0682e321816268a463871d08d67 100644 (file)
@@ -126,6 +126,11 @@ 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));
@@ -141,6 +146,7 @@ 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
        }
 
@@ -178,6 +184,9 @@ 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
        }
 
@@ -232,6 +241,11 @@ 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;
@@ -243,6 +257,7 @@ private:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        FilePickerCtrl* _background_image;
        wxTextCtrl* _kdm_server_url;
+       FilePickerCtrl* _watermark;
 #endif
 };