X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fclosed_captions_dialog.cc;h=a504cade957a3496736b8679dfc9417659e4d4a4;hb=0a5e92450ae992e9ed24026dd60ae351d0a3e60b;hp=0b2e630357e60ed83a26c0a3d0d890687c4b6898;hpb=ded71cffd18962ebb6b9611a5eb6dfafe9e8e4ec;p=dcpomatic.git diff --git a/src/wx/closed_captions_dialog.cc b/src/wx/closed_captions_dialog.cc index 0b2e63035..a504cade9 100644 --- a/src/wx/closed_captions_dialog.cc +++ b/src/wx/closed_captions_dialog.cc @@ -19,18 +19,16 @@ */ #include "closed_captions_dialog.h" -#include "lib/text_caption.h" +#include "lib/string_text.h" #include using std::list; +using std::max; using std::cout; using std::make_pair; using boost::shared_ptr; using boost::weak_ptr; -int const ClosedCaptionsDialog::_num_lines = 3; -int const ClosedCaptionsDialog::_num_chars_per_line = 30; - ClosedCaptionsDialog::ClosedCaptionsDialog (wxWindow* parent) : wxDialog (parent, wxID_ANY, _("Closed captions"), wxDefaultPosition, wxDefaultSize, #ifdef DCPOMATIC_OSX @@ -44,7 +42,7 @@ ClosedCaptionsDialog::ClosedCaptionsDialog (wxWindow* parent) ) { - _lines.resize (_num_lines); + _lines.resize (CLOSED_CAPTION_LINES); Bind (wxEVT_PAINT, boost::bind (&ClosedCaptionsDialog::paint, this)); } @@ -57,26 +55,34 @@ ClosedCaptionsDialog::paint () dc.SetTextForeground (*wxWHITE); /* Choose a font which fits vertically */ - int const line_height = dc.GetSize().GetHeight() / _num_lines; + int const line_height = max (8, dc.GetSize().GetHeight() / CLOSED_CAPTION_LINES); wxFont font (*wxNORMAL_FONT); font.SetPixelSize (wxSize (0, line_height * 0.8)); dc.SetFont (font); - for (int i = 0; i < _num_lines; ++i) { - dc.DrawText (_lines[i], 8, line_height * i); + for (int i = 0; i < CLOSED_CAPTION_LINES; ++i) { + wxString const good = _lines[i].Left (CLOSED_CAPTION_LENGTH); + dc.DrawText (good, 8, line_height * i); + if (_lines[i].Length() > CLOSED_CAPTION_LENGTH) { + wxString const bad = _lines[i].Right (_lines[i].Length() - CLOSED_CAPTION_LENGTH); + wxSize size = dc.GetTextExtent (good); + dc.SetTextForeground (*wxRED); + dc.DrawText (bad, 8 + size.GetWidth(), line_height * i); + dc.SetTextForeground (*wxWHITE); + } } } class ClosedCaptionSorter { public: - bool operator() (TextCaption const & a, TextCaption const & b) + bool operator() (StringText const & a, StringText const & b) { return from_top(a) < from_top(b); } private: - float from_top (TextCaption const & c) const + float from_top (StringText const & c) const { switch (c.v_align()) { case dcp::VALIGN_TOP: @@ -96,22 +102,22 @@ ClosedCaptionsDialog::update (DCPTime time) { shared_ptr player = _player.lock (); DCPOMATIC_ASSERT (player); - list to_show; - BOOST_FOREACH (PlayerCaption i, player->closed_captions_for_frame(time)) { - BOOST_FOREACH (TextCaption j, i.text) { + list to_show; + BOOST_FOREACH (PlayerText i, player->closed_captions_for_frame(time)) { + BOOST_FOREACH (StringText j, i.string) { to_show.push_back (j); } } - for (int j = 0; j < _num_lines; ++j) { + for (int j = 0; j < CLOSED_CAPTION_LINES; ++j) { _lines[j] = ""; } to_show.sort (ClosedCaptionSorter()); - list::const_iterator j = to_show.begin(); + list::const_iterator j = to_show.begin(); int k = 0; - while (j != to_show.end() && k < _num_lines) { + while (j != to_show.end() && k < CLOSED_CAPTION_LINES) { _lines[k] = j->text(); ++j; ++k;