X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsubrip_content.cc;h=a6eb0762927cd908eeb728a167d4d0a546345c0d;hb=3b932abd0c7634483911e1d5361e12b2d094ae6f;hp=1a7efc117a345e6c6a836713eac731de9c4290f0;hpb=7ddba2932f3e577ecde3324a2094037252bdde18;p=dcpomatic.git diff --git a/src/lib/subrip_content.cc b/src/lib/subrip_content.cc index 1a7efc117..a6eb07629 100644 --- a/src/lib/subrip_content.cc +++ b/src/lib/subrip_content.cc @@ -35,9 +35,16 @@ using boost::lexical_cast; std::string const SubRipContent::font_id = "font"; +int const SubRipContentProperty::SUBTITLE_COLOUR = 300; +int const SubRipContentProperty::SUBTITLE_OUTLINE = 301; +int const SubRipContentProperty::SUBTITLE_OUTLINE_COLOUR = 302; + SubRipContent::SubRipContent (shared_ptr film, boost::filesystem::path path) : Content (film, path) , SubtitleContent (film, path) + , _colour (255, 255, 255) + , _outline (false) + , _outline_colour (0, 0, 0) { } @@ -47,6 +54,17 @@ SubRipContent::SubRipContent (shared_ptr film, cxml::ConstNodePtr no , SubtitleContent (film, node, version) , _length (node->number_child ("Length")) , _frame_rate (node->optional_number_child("SubtitleFrameRate")) + , _colour ( + node->optional_number_child("Red").get_value_or(255), + node->optional_number_child("Green").get_value_or(255), + node->optional_number_child("Blue").get_value_or(255) + ) + , _outline (node->optional_bool_child("Outline").get_value_or(false)) + , _outline_colour ( + node->optional_number_child("OutlineRed").get_value_or(255), + node->optional_number_child("OutlineGreen").get_value_or(255), + node->optional_number_child("OutlineBlue").get_value_or(255) + ) { } @@ -84,6 +102,13 @@ SubRipContent::as_xml (xmlpp::Node* node) const Content::as_xml (node); SubtitleContent::as_xml (node); node->add_child("Length")->add_child_text (raw_convert (_length.get ())); + node->add_child("Red")->add_child_text (raw_convert (_colour.r)); + node->add_child("Green")->add_child_text (raw_convert (_colour.g)); + node->add_child("Blue")->add_child_text (raw_convert (_colour.b)); + node->add_child("Outline")->add_child_text (raw_convert (_outline)); + node->add_child("OutlineRed")->add_child_text (raw_convert (_outline_colour.r)); + node->add_child("OutlineGreen")->add_child_text (raw_convert (_outline_colour.g)); + node->add_child("OutlineBlue")->add_child_text (raw_convert (_outline_colour.b)); } DCPTime @@ -119,3 +144,48 @@ SubRipContent::subtitle_video_frame_rate () const */ return film()->active_frame_rate_change(position()).source; } + +void +SubRipContent::set_colour (dcp::Colour colour) +{ + { + boost::mutex::scoped_lock lm (_mutex); + if (_colour == colour) { + return; + } + + _colour = colour; + } + + signal_changed (SubRipContentProperty::SUBTITLE_COLOUR); +} + +void +SubRipContent::set_outline (bool o) +{ + { + boost::mutex::scoped_lock lm (_mutex); + if (_outline == o) { + return; + } + + _outline = o; + } + + signal_changed (SubRipContentProperty::SUBTITLE_OUTLINE); +} + +void +SubRipContent::set_outline_colour (dcp::Colour colour) +{ + { + boost::mutex::scoped_lock lm (_mutex); + if (_outline_colour == colour) { + return; + } + + _outline_colour = colour; + } + + signal_changed (SubRipContentProperty::SUBTITLE_OUTLINE_COLOUR); +}