Fix incorrect horizontal positions when different HPositions are used with one VPosition.
authorCarl Hetherington <cth@carlh.net>
Sat, 26 Aug 2023 17:51:51 +0000 (19:51 +0200)
committerCarl Hetherington <cth@carlh.net>
Tue, 29 Aug 2023 16:29:59 +0000 (18:29 +0200)
Previously if HPosition changed we would still use a single "line" (i.e. Pango layout)
for all the text, meaning that HPosition would not be respected.

src/lib/render_text.cc

index 84fc8414dc6d553aea0cffc89eacd4299aa28888..ddfccbde8c5029f2b6edb5eac6ef5a7b97347076 100644 (file)
@@ -408,9 +408,15 @@ render_text(vector<StringText> subtitles, dcp::Size target, DCPTime time, int fr
        vector<PositionImage> images;
 
        for (auto const& i: subtitles) {
-               if (!pending.empty() && (i.v_align() != pending.back().v_align() || fabs(i.v_position() - pending.back().v_position()) > 1e-4)) {
-                       images.push_back(render_line(pending, target, time, frame_rate));
-                       pending.clear ();
+               if (!pending.empty()) {
+                       auto const last = pending.back();
+                       auto const different_v = i.v_align() != last.v_align() || fabs(i.v_position() - last.v_position()) > 1e-4;
+                       auto const different_h = i.h_align() != last.h_align() || fabs(i.h_position() - pending.back().h_position()) > 1e-4;
+                       if (different_v || different_h) {
+                               /* We need a new line if any new positioning (horizontal or vertical) changes for this section */
+                               images.push_back(render_line(pending, target, time, frame_rate));
+                               pending.clear ();
+                       }
                }
                pending.push_back (i);
        }