Add override_standard to bounding_box().
authorCarl Hetherington <cth@carlh.net>
Sat, 21 Jan 2023 22:17:51 +0000 (23:17 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 27 Feb 2023 13:47:25 +0000 (14:47 +0100)
src/lib/render_text.cc
src/lib/render_text.h

index b32bed557d9557a07037f7d5de9008cbacbe474e..33e0c6a89d01b5f8e9cfe2c9141015be8b02c335 100644 (file)
@@ -47,6 +47,7 @@ using std::min;
 using std::pair;
 using std::shared_ptr;
 using std::string;
+using boost::optional;
 using namespace dcpomatic;
 
 
@@ -436,17 +437,18 @@ render_text (list<StringText> subtitles, dcp::Size target, DCPTime time, int fra
 
 
 list<dcpomatic::Rect<int>>
-bounding_box(list<StringText> subtitles, dcp::Size target)
+bounding_box(list<StringText> subtitles, dcp::Size target, optional<dcp::SubtitleStandard> override_standard)
 {
        list<StringText> pending;
        list<dcpomatic::Rect<int>> rects;
 
-       auto use_pending = [&pending, &rects, target]() {
+       auto use_pending = [&pending, &rects, target, override_standard]() {
                auto const& subtitle = pending.front();
+               auto standard = override_standard.get_value_or(subtitle.valign_standard);
                /* 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(subtitle.h_align(), subtitle.h_position(), target.width, layout.size.width);
-               int const y = y_position(subtitle.valign_standard, subtitle.v_align(), subtitle.v_position(), target.height, layout.position.y, layout.size.height);
+               int const y = y_position(standard, subtitle.v_align(), subtitle.v_position(), target.height, layout.position.y, layout.size.height);
                rects.push_back({Position<int>(x, y), layout.size.width, layout.size.height});
        };
 
index bceee964e53985dd0f21b6cfea8fb670b72a7dbd..6d20912a278771981dd2f9299b26c4ee354fd096 100644 (file)
@@ -34,7 +34,7 @@ namespace dcpomatic {
 
 std::string marked_up (std::list<StringText> subtitles, int target_height, float fade_factor, std::string font_name);
 std::list<PositionImage> render_text (std::list<StringText>, dcp::Size, dcpomatic::DCPTime, int);
-std::list<dcpomatic::Rect<int>> bounding_box(std::list<StringText> subtitles, dcp::Size target);
+std::list<dcpomatic::Rect<int>> bounding_box(std::list<StringText> subtitles, dcp::Size target, boost::optional<dcp::SubtitleStandard> override_standard = boost::none);
 
 
 class FontMetrics