X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsubtitle_content.cc;h=37d431e1aa1701234cc0827c206ca559de0900e1;hb=eb135e8dcdf36ae82420bcd18e954ad593b3e9a5;hp=21bfd8a2d5fbe18ee7ab0f83c66c3d9ef368cb20;hpb=b81241ce69a689629307832f802ac4faa6ed885f;p=dcpomatic.git diff --git a/src/lib/subtitle_content.cc b/src/lib/subtitle_content.cc index 21bfd8a2d..37d431e1a 100644 --- a/src/lib/subtitle_content.cc +++ b/src/lib/subtitle_content.cc @@ -52,6 +52,9 @@ int const SubtitleContentProperty::OUTLINE = 509; int const SubtitleContentProperty::SHADOW = 510; int const SubtitleContentProperty::EFFECT_COLOUR = 511; int const SubtitleContentProperty::LINE_SPACING = 512; +int const SubtitleContentProperty::FADE_IN = 513; +int const SubtitleContentProperty::FADE_OUT = 514; +int const SubtitleContentProperty::OUTLINE_WIDTH = 515; SubtitleContent::SubtitleContent (Content* parent) : ContentPart (parent) @@ -66,6 +69,7 @@ SubtitleContent::SubtitleContent (Content* parent) , _shadow (false) , _effect_colour (0, 0, 0) , _line_spacing (1) + , _outline_width (2) { } @@ -107,6 +111,9 @@ SubtitleContent::SubtitleContent (Content* parent, cxml::ConstNodePtr node, int , _outline (node->optional_bool_child("Outline").get_value_or(false)) , _shadow (node->optional_bool_child("Shadow").get_value_or(false)) , _line_spacing (node->optional_number_child("LineSpacing").get_value_or (1)) + , _fade_in (node->optional_number_child("SubtitleFadeIn").get_value_or (0)) + , _fade_out (node->optional_number_child("SubtitleFadeOut").get_value_or (0)) + , _outline_width (node->optional_number_child("OutlineWidth").get_value_or (2)) { if (version >= 32) { _use = node->bool_child ("UseSubtitles"); @@ -188,6 +195,14 @@ SubtitleContent::SubtitleContent (Content* parent, vector > throw JoinError (_("Content to be joined must have the same subtitle line spacing.")); } + if ((c[i]->subtitle->fade_in() != ref->fade_in()) || (c[i]->subtitle->fade_out() != ref->fade_out())) { + throw JoinError (_("Content to be joined must have the same subtitle fades.")); + } + + if ((c[i]->subtitle->outline_width() != ref->outline_width())) { + throw JoinError (_("Content to be joined must have the same outline width.")); + } + list > fonts = c[i]->subtitle->fonts (); if (fonts.size() != ref_fonts.size()) { throw JoinError (_("Content to be joined must use the same fonts.")); @@ -214,6 +229,9 @@ SubtitleContent::SubtitleContent (Content* parent, vector > _language = ref->language (); _fonts = ref_fonts; _line_spacing = ref->line_spacing (); + _fade_in = ref->fade_in (); + _fade_out = ref->fade_out (); + _outline_width = ref->outline_width (); connect_to_fonts (); } @@ -240,6 +258,9 @@ SubtitleContent::as_xml (xmlpp::Node* root) const root->add_child("EffectGreen")->add_child_text (raw_convert (_effect_colour.g)); root->add_child("EffectBlue")->add_child_text (raw_convert (_effect_colour.b)); root->add_child("LineSpacing")->add_child_text (raw_convert (_line_spacing)); + root->add_child("SubtitleFadeIn")->add_child_text (raw_convert (_fade_in.get())); + root->add_child("SubtitleFadeOut")->add_child_text (raw_convert (_fade_out.get())); + root->add_child("OutlineWidth")->add_child_text (raw_convert (_outline_width)); for (list >::const_iterator i = _fonts.begin(); i != _fonts.end(); ++i) { (*i)->as_xml (root->add_child("Font")); @@ -253,7 +274,10 @@ SubtitleContent::identifier () const + "_" + raw_convert (y_scale()) + "_" + raw_convert (x_offset()) + "_" + raw_convert (y_offset()) - + "_" + raw_convert (line_spacing()); + + "_" + raw_convert (line_spacing()) + + "_" + raw_convert (fade_in().get()) + + "_" + raw_convert (fade_out().get()) + + "_" + raw_convert (outline_width()); /* XXX: I suppose really _fonts shouldn't be in here, since not all types of subtitle content involve fonts. @@ -369,3 +393,41 @@ SubtitleContent::set_line_spacing (double s) { maybe_set (_line_spacing, s, SubtitleContentProperty::LINE_SPACING); } + +void +SubtitleContent::set_fade_in (ContentTime t) +{ + maybe_set (_fade_in, t, SubtitleContentProperty::FADE_IN); +} + +void +SubtitleContent::set_fade_out (ContentTime t) +{ + maybe_set (_fade_out, t, SubtitleContentProperty::FADE_OUT); +} + +void +SubtitleContent::set_outline_width (int w) +{ + maybe_set (_outline_width, w, SubtitleContentProperty::OUTLINE_WIDTH); +} + +void +SubtitleContent::use_template (shared_ptr c) +{ + _use = c->_use; + _burn = c->_burn; + _x_offset = c->_x_offset; + _y_offset = c->_y_offset; + _x_scale = c->_x_scale; + _y_scale = c->_y_scale; + _fonts = c->_fonts; + _colour = c->_colour; + _outline = c->_outline; + _shadow = c->_shadow; + _effect_colour = c->_effect_colour; + _line_spacing = c->_line_spacing; + _fade_in = c->_fade_in; + _fade_out = c->_fade_out; + _outline_width = c->_outline_width; +}