#include "safe_stringstream.h"
#include "font.h"
#include "raw_convert.h"
+#include "content.h"
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
#include <boost/foreach.hpp>
int const SubtitleContentProperty::SUBTITLE_LANGUAGE = 506;
int const SubtitleContentProperty::FONTS = 507;
int const SubtitleContentProperty::SUBTITLE_VIDEO_FRAME_RATE = 508;
+int const SubtitleContentProperty::SUBTITLE_COLOUR = 509;
+int const SubtitleContentProperty::SUBTITLE_OUTLINE = 510;
+int const SubtitleContentProperty::SUBTITLE_OUTLINE_COLOUR = 511;
SubtitleContent::SubtitleContent (Content* parent, shared_ptr<const Film> film)
: ContentPart (parent, film)
, _subtitle_y_offset (0)
, _subtitle_x_scale (1)
, _subtitle_y_scale (1)
+ , _colour (255, 255, 255)
+ , _outline (false)
+ , _outline_colour (0, 0, 0)
{
}
SubtitleContent::SubtitleContent (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
- : ContentParet (parent, film)
+ : ContentPart (parent, film)
, _use_subtitles (false)
, _burn_subtitles (false)
, _subtitle_x_offset (0)
, _subtitle_y_offset (0)
, _subtitle_x_scale (1)
, _subtitle_y_scale (1)
+ , _colour (
+ node->optional_number_child<int>("Red").get_value_or(255),
+ node->optional_number_child<int>("Green").get_value_or(255),
+ node->optional_number_child<int>("Blue").get_value_or(255)
+ )
+ , _outline (node->optional_bool_child("Outline").get_value_or(false))
+ , _outline_colour (
+ node->optional_number_child<int>("OutlineRed").get_value_or(255),
+ node->optional_number_child<int>("OutlineGreen").get_value_or(255),
+ node->optional_number_child<int>("OutlineBlue").get_value_or(255)
+ )
{
if (version >= 32) {
_use_subtitles = node->bool_child ("UseSubtitles");
root->add_child("SubtitleXScale")->add_child_text (raw_convert<string> (_subtitle_x_scale));
root->add_child("SubtitleYScale")->add_child_text (raw_convert<string> (_subtitle_y_scale));
root->add_child("SubtitleLanguage")->add_child_text (_subtitle_language);
+ root->add_child("Red")->add_child_text (raw_convert<string> (_colour.r));
+ root->add_child("Green")->add_child_text (raw_convert<string> (_colour.g));
+ root->add_child("Blue")->add_child_text (raw_convert<string> (_colour.b));
+ root->add_child("Outline")->add_child_text (raw_convert<string> (_outline));
+ root->add_child("OutlineRed")->add_child_text (raw_convert<string> (_outline_colour.r));
+ root->add_child("OutlineGreen")->add_child_text (raw_convert<string> (_outline_colour.g));
+ root->add_child("OutlineBlue")->add_child_text (raw_convert<string> (_outline_colour.b));
for (list<shared_ptr<Font> >::const_iterator i = _fonts.begin(); i != _fonts.end(); ++i) {
(*i)->as_xml (root->add_child("Font"));
boost::mutex::scoped_lock lm (_mutex);
_use_subtitles = u;
}
- signal_changed (SubtitleContentProperty::USE_SUBTITLES);
+ _parent->signal_changed (SubtitleContentProperty::USE_SUBTITLES);
}
void
boost::mutex::scoped_lock lm (_mutex);
_burn_subtitles = b;
}
- signal_changed (SubtitleContentProperty::BURN_SUBTITLES);
+ _parent->signal_changed (SubtitleContentProperty::BURN_SUBTITLES);
}
void
boost::mutex::scoped_lock lm (_mutex);
_subtitle_x_offset = o;
}
- signal_changed (SubtitleContentProperty::SUBTITLE_X_OFFSET);
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_X_OFFSET);
}
void
boost::mutex::scoped_lock lm (_mutex);
_subtitle_y_offset = o;
}
- signal_changed (SubtitleContentProperty::SUBTITLE_Y_OFFSET);
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_Y_OFFSET);
}
void
boost::mutex::scoped_lock lm (_mutex);
_subtitle_x_scale = s;
}
- signal_changed (SubtitleContentProperty::SUBTITLE_X_SCALE);
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_X_SCALE);
}
void
boost::mutex::scoped_lock lm (_mutex);
_subtitle_y_scale = s;
}
- signal_changed (SubtitleContentProperty::SUBTITLE_Y_SCALE);
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_Y_SCALE);
}
void
boost::mutex::scoped_lock lm (_mutex);
_subtitle_language = language;
}
- signal_changed (SubtitleContentProperty::SUBTITLE_LANGUAGE);
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_LANGUAGE);
}
string
SubtitleContent::identifier () const
{
SafeStringStream s;
- s << Content::identifier()
- << "_" << raw_convert<string> (subtitle_x_scale())
+ s << raw_convert<string> (subtitle_x_scale())
<< "_" << raw_convert<string> (subtitle_y_scale())
<< "_" << raw_convert<string> (subtitle_x_offset())
<< "_" << raw_convert<string> (subtitle_y_offset());
void
SubtitleContent::font_changed ()
{
- signal_changed (SubtitleContentProperty::FONTS);
+ _parent->signal_changed (SubtitleContentProperty::FONTS);
+}
+
+void
+SubtitleContent::set_colour (dcp::Colour colour)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_colour == colour) {
+ return;
+ }
+
+ _colour = colour;
+ }
+
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_COLOUR);
+}
+
+void
+SubtitleContent::set_outline (bool o)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_outline == o) {
+ return;
+ }
+
+ _outline = o;
+ }
+
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_OUTLINE);
}
-bool
-SubtitleContent::has_subtitles () const
+void
+SubtitleContent::set_outline_colour (dcp::Colour colour)
{
- return has_text_subtitles() || has_image_subtitles();
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_outline_colour == colour) {
+ return;
+ }
+
+ _outline_colour = colour;
+ }
+
+ _parent->signal_changed (SubtitleContentProperty::SUBTITLE_OUTLINE_COLOUR);
}