From: Carl Hetherington Date: Sun, 3 Jul 2016 20:44:50 +0000 (+0100) Subject: Adjust line spacing even with subs with specified proportional position. X-Git-Tag: v2.8.17~5 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=1dddcfdd50b38c239b93227c77c84337759de4c8;p=dcpomatic.git Adjust line spacing even with subs with specified proportional position. --- diff --git a/ChangeLog b/ChangeLog index cb3cc77c1..9f92134ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2016-07-03 Carl Hetherington + * Fix line spacing adjustment of SSA/ASS. + * Updated nl_NL translation from Rob van Nieuwkerk. 2016-07-02 Carl Hetherington diff --git a/src/lib/subtitle_decoder.cc b/src/lib/subtitle_decoder.cc index 72c6883fb..09f7a6700 100644 --- a/src/lib/subtitle_decoder.cc +++ b/src/lib/subtitle_decoder.cc @@ -29,6 +29,7 @@ using std::list; using std::cout; using std::string; +using std::min; using boost::shared_ptr; using boost::optional; using boost::function; @@ -158,6 +159,18 @@ SubtitleDecoder::give_text (ContentTimePeriod period, sub::Subtitle const & subt } } + /* Find the lowest proportional postion */ + optional lowest_proportional; + BOOST_FOREACH (sub::Line i, subtitle.lines) { + if (i.vertical_position.proportional) { + if (!lowest_proportional) { + lowest_proportional = i.vertical_position.proportional; + } else { + lowest_proportional = min (lowest_proportional.get(), i.vertical_position.proportional.get()); + } + } + } + list out; BOOST_FOREACH (sub::Line i, subtitle.lines) { BOOST_FOREACH (sub::Block j, i.blocks) { @@ -183,6 +196,12 @@ SubtitleDecoder::give_text (ContentTimePeriod period, sub::Subtitle const & subt DCPOMATIC_ASSERT (i.vertical_position.proportional); DCPOMATIC_ASSERT (i.vertical_position.reference); v_position = i.vertical_position.proportional.get(); + + if (lowest_proportional) { + /* Adjust line spacing */ + v_position = ((v_position - lowest_proportional.get()) * content()->line_spacing()) + lowest_proportional.get(); + } + switch (i.vertical_position.reference.get()) { case sub::TOP_OF_SCREEN: v_align = dcp::VALIGN_TOP;