From 1dddcfdd50b38c239b93227c77c84337759de4c8 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 3 Jul 2016 21:44:50 +0100 Subject: Adjust line spacing even with subs with specified proportional position. --- src/lib/subtitle_decoder.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/lib/subtitle_decoder.cc') 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; -- cgit v1.2.3