X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=01963372061d8ddef25851b78a375c036b8e2cb3;hb=ed68bfad5c795afb342c5228f3c1dc7770a6d646;hp=0f18f2e722433d382513764362356aa971803c7c;hpb=2538ac5a15b56880438018c8ab17d8571fe76812;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 0f18f2e72..019633720 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -43,6 +43,7 @@ #include "lib/butler.h" #include "lib/log.h" #include "lib/config.h" +#include "lib/compose.hpp" extern "C" { #include } @@ -85,6 +86,10 @@ FilmViewer::FilmViewer (wxWindow* p) , _closed_captions_dialog (new ClosedCaptionsDialog(p)) , _outline_content (false) , _eyes (EYES_LEFT) + , _pad_black (false) +#ifdef DCPOMATIC_VARIANT_SWAROOP + , _in_watermark (false) +#endif { #ifndef __WXOSX__ _panel->SetDoubleBuffered (true); @@ -262,13 +267,12 @@ FilmViewer::display_player_video () * The content's specified colour conversion indicates the colourspace * which the content is in (according to the user). * - * PlayerVideo::image (bound to PlayerVideo::always_rgb) will take the source + * PlayerVideo::image (bound to PlayerVideo::force) will take the source * image and convert it (from whatever the user has said it is) to RGB. */ _frame = _player_video.first->image ( - bind (&Log::dcp_log, _film->log().get(), _1, _2), - bind (&PlayerVideo::always_rgb, _1), + bind (&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true ); @@ -328,32 +332,50 @@ FilmViewer::paint_panel () dc.DrawBitmap (frame_bitmap, 0, max(0, (_panel_size.height - _out_size.height) / 2)); #ifdef DCPOMATIC_VARIANT_SWAROOP - /* XXX: watermark */ + DCPTime const period = DCPTime::from_seconds(Config::instance()->player_watermark_period() * 60); + int64_t n = _video_position.get() / period.get(); + DCPTime from(n * period.get()); + DCPTime to = from + DCPTime::from_seconds(Config::instance()->player_watermark_duration() / 1000.0); + if (from <= _video_position && _video_position <= to) { + if (!_in_watermark) { + _in_watermark = true; + _watermark_x = rand() % _panel_size.width; + _watermark_y = rand() % _panel_size.height; + } + dc.SetTextForeground(*wxWHITE); + string wm = Config::instance()->player_watermark_theatre(); + boost::posix_time::ptime t = boost::posix_time::second_clock::local_time(); + wm += "\n" + boost::posix_time::to_iso_extended_string(t); + dc.DrawText(std_to_wx(wm), _watermark_x, _watermark_y); + } else { + _in_watermark = false; + } #endif if (_out_size.width < _panel_size.width) { - wxPen p (_panel->GetParent()->GetBackgroundColour()); - wxBrush b (_panel->GetParent()->GetBackgroundColour()); + /* XXX: these colours are right for GNOME; may need adjusting for other OS */ + wxPen p (_pad_black ? wxColour(0, 0, 0) : wxColour(240, 240, 240)); + wxBrush b (_pad_black ? wxColour(0, 0, 0) : wxColour(240, 240, 240)); dc.SetPen (p); dc.SetBrush (b); dc.DrawRectangle (_out_size.width, 0, _panel_size.width - _out_size.width, _panel_size.height); } if (_out_size.height < _panel_size.height) { - wxPen p (_panel->GetParent()->GetBackgroundColour()); - wxBrush b (_panel->GetParent()->GetBackgroundColour()); + wxPen p (_pad_black ? wxColour(0, 0, 0) : wxColour(240, 240, 240)); + wxBrush b (_pad_black ? wxColour(0, 0, 0) : wxColour(240, 240, 240)); dc.SetPen (p); dc.SetBrush (b); int const gap = (_panel_size.height - _out_size.height) / 2; dc.DrawRectangle (0, 0, _panel_size.width, gap); - dc.DrawRectangle (0, gap + _out_size.height, _panel_size.width, gap); + dc.DrawRectangle (0, gap + _out_size.height + 1, _panel_size.width, gap); } if (_outline_content) { wxPen p (wxColour (255, 0, 0), 2); dc.SetPen (p); dc.SetBrush (*wxTRANSPARENT_BRUSH); - dc.DrawRectangle (_inter_position.x, _inter_position.y, _inter_size.width, _inter_size.height); + dc.DrawRectangle (_inter_position.x, _inter_position.y + (_panel_size.height - _out_size.height) / 2, _inter_size.width, _inter_size.height); } } @@ -724,3 +746,9 @@ FilmViewer::seek_by (DCPTime by, bool accurate) { seek (_video_position + by, accurate); } + +void +FilmViewer::set_pad_black (bool p) +{ + _pad_black = p; +}