summaryrefslogtreecommitdiff
path: root/src/lib/render_text.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-01-20 23:53:45 +0100
committerCarl Hetherington <cth@carlh.net>2023-02-18 00:41:34 +0100
commit16abbf1cc73fd81cc3118117e1f9119836f998a1 (patch)
tree8e9a6db565fe321d972ec734c674524d65ce3c3e /src/lib/render_text.cc
parentc19495855857d72aaf251878269d4eb6678358c9 (diff)
Add bounding_box().
Diffstat (limited to 'src/lib/render_text.cc')
-rw-r--r--src/lib/render_text.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/render_text.cc b/src/lib/render_text.cc
index 0b6a30e80..0e2b024d6 100644
--- a/src/lib/render_text.cc
+++ b/src/lib/render_text.cc
@@ -427,6 +427,36 @@ render_text (list<StringText> subtitles, dcp::Size target, DCPTime time, int fra
}
+list<dcpomatic::Rect<int>>
+bounding_box(list<StringText> subtitles, dcp::Size target)
+{
+ list<StringText> pending;
+ list<dcpomatic::Rect<int>> rects;
+
+ auto use_pending = [&pending, &rects, target]() {
+ /* We can provide dummy values for time and frame rate here as they are only used to calculate fades */
+ auto layout = setup_layout(pending, target, DCPTime(), 24);
+ int const x = x_position(pending.front(), target.width, layout.size.width);
+ int const y = y_position(pending.front(), target.height, layout.position.y, layout.size.height);
+ rects.push_back({Position<int>(x, y), layout.size.width, layout.size.height});
+ };
+
+ 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)) {
+ use_pending();
+ pending.clear();
+ }
+ pending.push_back(i);
+ }
+
+ if (!pending.empty()) {
+ use_pending();
+ }
+
+ return rects;
+}
+
+
float
FontMetrics::height(StringText const& subtitle)
{