X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=0f18f2e722433d382513764362356aa971803c7c;hb=2538ac5a15b56880438018c8ab17d8571fe76812;hp=85b0effbee8c223483f9d6bfbcc84ae1552b755a;hpb=195eb8204245c7b7765831d1cc1de295b63eb8a2;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 85b0effbe..0f18f2e72 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -91,10 +91,11 @@ FilmViewer::FilmViewer (wxWindow* p) #endif _panel->SetBackgroundStyle (wxBG_STYLE_PAINT); + _panel->SetBackgroundColour (*wxBLACK); - _panel->Bind (wxEVT_PAINT, boost::bind (&FilmViewer::paint_panel, this)); - _panel->Bind (wxEVT_SIZE, boost::bind (&FilmViewer::panel_sized, this, _1)); - _timer.Bind (wxEVT_TIMER, boost::bind (&FilmViewer::timer, this)); + _panel->Bind (wxEVT_PAINT, boost::bind (&FilmViewer::paint_panel, this)); + _panel->Bind (wxEVT_SIZE, boost::bind (&FilmViewer::panel_sized, this, _1)); + _timer.Bind (wxEVT_TIMER, boost::bind (&FilmViewer::timer, this)); set_film (shared_ptr ()); @@ -116,6 +117,8 @@ FilmViewer::set_film (shared_ptr film) _film = film; + FilmChanged (); + _frame.reset (); _closed_captions_dialog->clear (); @@ -309,12 +312,24 @@ FilmViewer::paint_panel () if (!_frame || !_film || !_out_size.width || !_out_size.height || _out_size != _frame->size()) { dc.Clear (); +#ifdef DCPOMATIC_VARIANT_SWAROOP + optional 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; } wxImage frame (_out_size.width, _out_size.height, _frame->data()[0], true); wxBitmap frame_bitmap (frame); - dc.DrawBitmap (frame_bitmap, 0, 0); + dc.DrawBitmap (frame_bitmap, 0, max(0, (_panel_size.height - _out_size.height) / 2)); + +#ifdef DCPOMATIC_VARIANT_SWAROOP + /* XXX: watermark */ +#endif if (_out_size.width < _panel_size.width) { wxPen p (_panel->GetParent()->GetBackgroundColour()); @@ -329,7 +344,9 @@ FilmViewer::paint_panel () wxBrush b (_panel->GetParent()->GetBackgroundColour()); dc.SetPen (p); dc.SetBrush (b); - dc.DrawRectangle (0, _out_size.height, _panel_size.width, _panel_size.height - _out_size.height); + 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); } if (_outline_content) { @@ -403,6 +420,12 @@ FilmViewer::start () return; } + optional v = PlaybackPermitted (); + if (v && !*v) { + /* Computer says no */ + return; + } + if (_audio.isStreamOpen()) { _audio.setStreamTime (_video_position.seconds()); _audio.startStream (); @@ -411,7 +434,7 @@ FilmViewer::start () _playing = true; _dropped = 0; timer (); - Started (); + Started (position()); } bool @@ -427,25 +450,10 @@ FilmViewer::stop () } _playing = false; - Stopped (); + Stopped (position()); return true; } -void -FilmViewer::go_to (DCPTime t) -{ - if (t < DCPTime ()) { - t = DCPTime (); - } - - if (t >= _film->length ()) { - t = _film->length (); - } - - seek (t, true); - PositionChanged (); -} - void FilmViewer::player_change (ChangeType type, int property, bool frequent) { @@ -513,19 +521,11 @@ FilmViewer::quick_refresh () } void -FilmViewer::set_position (DCPTime p) -{ - _video_position = p; - seek (p, true); - PositionChanged (); -} - -void -FilmViewer::set_position (shared_ptr content, ContentTime t) +FilmViewer::seek (shared_ptr content, ContentTime t, bool accurate) { optional dt = _player->content_time_to_dcp (content, t); if (dt) { - set_position (*dt); + seek (*dt, accurate); } } @@ -549,6 +549,14 @@ FilmViewer::seek (DCPTime t, bool accurate) return; } + if (t < DCPTime ()) { + t = DCPTime (); + } + + if (t >= _film->length ()) { + t = _film->length (); + } + bool const was_running = stop (); _closed_captions_dialog->clear (); @@ -558,11 +566,21 @@ FilmViewer::seek (DCPTime t, bool accurate) if (was_running) { start (); } + + PositionChanged (); + Seeked (position()); } void FilmViewer::config_changed (Config::Property p) { +#ifdef DCPOMATIC_VARIANT_SWAROOP + if (p == Config::PLAYER_BACKGROUND_IMAGE) { + refresh_panel (); + return; + } +#endif + if (p != Config::SOUND && p != Config::SOUND_OUTPUT) { return; } @@ -694,6 +712,7 @@ FilmViewer::one_video_frame () const return DCPTime::from_frames (1, _film->video_frame_rate()); } +/** Open a dialog box showing our film's closed captions */ void FilmViewer::show_closed_captions () { @@ -701,11 +720,7 @@ FilmViewer::show_closed_captions () } void -FilmViewer::move (DCPTime by) +FilmViewer::seek_by (DCPTime by, bool accurate) { - if (!_film) { - return; - } - - go_to (_video_position + by); + seek (_video_position + by, accurate); }