X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsubtitle_content.cc;h=8f88574e5e7ff53950c903b710c571fe1b151cce;hb=62a1e9d6cda70050b813d4ba0c3e83b7350f360d;hp=6c0d3af86a6687571d74e3bb576add9494c67567;hpb=4c2ae591ee17599b4fbb7ffc24a06f27ed985c05;p=dcpomatic.git diff --git a/src/lib/subtitle_content.cc b/src/lib/subtitle_content.cc index 6c0d3af86..8f88574e5 100644 --- a/src/lib/subtitle_content.cc +++ b/src/lib/subtitle_content.cc @@ -30,25 +30,34 @@ using boost::shared_ptr; using boost::lexical_cast; using boost::dynamic_pointer_cast; -int const SubtitleContentProperty::SUBTITLE_OFFSET = 500; -int const SubtitleContentProperty::SUBTITLE_SCALE = 501; +int const SubtitleContentProperty::SUBTITLE_X_OFFSET = 500; +int const SubtitleContentProperty::SUBTITLE_Y_OFFSET = 501; +int const SubtitleContentProperty::SUBTITLE_SCALE = 502; SubtitleContent::SubtitleContent (shared_ptr f, boost::filesystem::path p) : Content (f, p) - , _subtitle_offset (0) + , _subtitle_x_offset (0) + , _subtitle_y_offset (0) , _subtitle_scale (1) { } -SubtitleContent::SubtitleContent (shared_ptr f, shared_ptr node) +SubtitleContent::SubtitleContent (shared_ptr f, shared_ptr node, int version) : Content (f, node) - , _subtitle_offset (0) + , _subtitle_x_offset (0) + , _subtitle_y_offset (0) , _subtitle_scale (1) { LocaleGuard lg; + + if (version >= 7) { + _subtitle_x_offset = node->number_child ("SubtitleXOffset"); + _subtitle_y_offset = node->number_child ("SubtitleYOffset"); + } else { + _subtitle_y_offset = node->number_child ("SubtitleOffset"); + } - _subtitle_offset = node->number_child ("SubtitleOffset"); _subtitle_scale = node->number_child ("SubtitleScale"); } @@ -61,8 +70,12 @@ SubtitleContent::SubtitleContent (shared_ptr f, vector sc = dynamic_pointer_cast (c[i]); - if (sc->subtitle_offset() != ref->subtitle_offset()) { - throw JoinError (_("Content to be joined must have the same subtitle offset.")); + if (sc->subtitle_x_offset() != ref->subtitle_x_offset()) { + throw JoinError (_("Content to be joined must have the same subtitle X offset.")); + } + + if (sc->subtitle_y_offset() != ref->subtitle_y_offset()) { + throw JoinError (_("Content to be joined must have the same subtitle Y offset.")); } if (sc->subtitle_scale() != ref->subtitle_scale()) { @@ -70,7 +83,8 @@ SubtitleContent::SubtitleContent (shared_ptr f, vectorsubtitle_offset (); + _subtitle_x_offset = ref->subtitle_x_offset (); + _subtitle_y_offset = ref->subtitle_y_offset (); _subtitle_scale = ref->subtitle_scale (); } @@ -79,18 +93,29 @@ SubtitleContent::as_xml (xmlpp::Node* root) const { LocaleGuard lg; - root->add_child("SubtitleOffset")->add_child_text (lexical_cast (_subtitle_offset)); + root->add_child("SubtitleXOffset")->add_child_text (lexical_cast (_subtitle_x_offset)); + root->add_child("SubtitleYOffset")->add_child_text (lexical_cast (_subtitle_y_offset)); root->add_child("SubtitleScale")->add_child_text (lexical_cast (_subtitle_scale)); } void -SubtitleContent::set_subtitle_offset (double o) +SubtitleContent::set_subtitle_x_offset (double o) +{ + { + boost::mutex::scoped_lock lm (_mutex); + _subtitle_x_offset = o; + } + signal_changed (SubtitleContentProperty::SUBTITLE_X_OFFSET); +} + +void +SubtitleContent::set_subtitle_y_offset (double o) { { boost::mutex::scoped_lock lm (_mutex); - _subtitle_offset = o; + _subtitle_y_offset = o; } - signal_changed (SubtitleContentProperty::SUBTITLE_OFFSET); + signal_changed (SubtitleContentProperty::SUBTITLE_Y_OFFSET); } void