*/
#include "closed_captions_dialog.h"
-#include "lib/text_caption.h"
+#include "lib/string_text.h"
#include <boost/bind.hpp>
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
)
{
- _lines.resize (_num_lines);
+ _lines.resize (CLOSED_CAPTION_LINES);
Bind (wxEVT_PAINT, boost::bind (&ClosedCaptionsDialog::paint, this));
}
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:
{
shared_ptr<Player> player = _player.lock ();
DCPOMATIC_ASSERT (player);
- list<TextCaption> to_show;
- BOOST_FOREACH (PlayerCaption i, player->closed_captions_for_frame(time)) {
- BOOST_FOREACH (TextCaption j, i.text) {
+ list<StringText> 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<TextCaption>::const_iterator j = to_show.begin();
+ list<StringText>::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;