Untested watermarking.
[dcpomatic.git] / src / wx / film_viewer.cc
index a27c0053d8ca6204dfa27c7a4adde1db7b64504c..b116c02454167964b091cc74876c47c3a8b9d726 100644 (file)
@@ -91,7 +91,7 @@ FilmViewer::FilmViewer (wxWindow* p)
 #endif
 
        _panel->SetBackgroundStyle (wxBG_STYLE_PAINT);
-       _panel->SetBackgroundColour (wxNullColour);
+       _panel->SetBackgroundColour (*wxBLACK);
 
        _panel->Bind (wxEVT_PAINT, boost::bind (&FilmViewer::paint_panel, this));
        _panel->Bind (wxEVT_SIZE,  boost::bind (&FilmViewer::panel_sized, this, _1));
@@ -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 ()
@@ -312,6 +313,14 @@ FilmViewer::paint_panel ()
 
        if (!_frame || !_film || !_out_size.width || !_out_size.height || _out_size != _frame->size()) {
                dc.Clear ();
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+               optional<boost::filesystem::path> bg = Config::instance()->player_background_image();
+               if (bg) {
+                       wxImage image (std_to_wx(bg->string()));
+                       wxBitmap bitmap (image);
+                       dc.DrawBitmap (bitmap, max(0, (_panel_size.width - image.GetSize().GetWidth()) / 2), max(0, (_panel_size.height - image.GetSize().GetHeight()) / 2));
+               }
+#endif
                return;
        }
 
@@ -319,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());
@@ -422,7 +439,7 @@ FilmViewer::start ()
        _playing = true;
        _dropped = 0;
        timer ();
-       Started ();
+       Started (position());
 }
 
 bool
@@ -438,7 +455,7 @@ FilmViewer::stop ()
        }
 
        _playing = false;
-       Stopped ();
+       Stopped (position());
        return true;
 }
 
@@ -556,11 +573,29 @@ FilmViewer::seek (DCPTime t, bool accurate)
        }
 
        PositionChanged ();
+       Seeked (position());
 }
 
 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;
+       }
+#endif
+
        if (p != Config::SOUND && p != Config::SOUND_OUTPUT) {
                return;
        }