From a2507e28a631ee68b0ba898b4fc0c22bbaa2eef2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 26 Aug 2023 19:51:51 +0200 Subject: [PATCH] Fix incorrect horizontal positions when different HPositions are used with one VPosition. 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 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib/render_text.cc b/src/lib/render_text.cc index 84fc8414d..ddfccbde8 100644 --- a/src/lib/render_text.cc +++ b/src/lib/render_text.cc @@ -408,9 +408,15 @@ render_text(vector subtitles, dcp::Size target, DCPTime time, int fr vector 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); } -- 2.30.2