From: Carl Hetherington Date: Thu, 27 Sep 2018 10:25:21 +0000 (+0100) Subject: Untested watermarking. X-Git-Tag: v2.13.57~12 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=f76453d0b78e5b71abbd9b4fcfda9e8eb0b61ad0 Untested watermarking. --- diff --git a/src/lib/config.cc b/src/lib/config.cc index abb775be8..d7fd74449 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -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 { diff --git a/src/lib/config.h b/src/lib/config.h index 378272ff0..bcc46f8fa 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -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 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 _player_background_image; std::string _kdm_server_url; + boost::optional _player_watermark; #endif static int const _current_version; diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 5a3e58724..b116c0245 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -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 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; diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h index 94690daea..db23182a6 100644 --- a/src/wx/film_viewer.h +++ b/src/wx/film_viewer.h @@ -154,5 +154,9 @@ private: bool _outline_content; Eyes _eyes; +#ifdef DCPOMATIC_VARIANT_SWAROOP + boost::optional _watermark; +#endif + boost::signals2::scoped_connection _config_changed_connection; }; diff --git a/src/wx/player_config_dialog.cc b/src/wx/player_config_dialog.cc index 0a6985bd1..3697c3ce3 100644 --- a/src/wx/player_config_dialog.cc +++ b/src/wx/player_config_dialog.cc @@ -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 };