X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Frender_text.cc;h=2272d350625109fb66a0a287694324ee9dffeeb1;hb=e7440b69bf0dc486314544b0e1fb5ac2d45a9a8d;hp=f9c04dc4dc09b7678b65596a5a04b473b75f0869;hpb=a839df0d13e463d833f43ed420e8cfd9dda94dff;p=dcpomatic.git diff --git a/src/lib/render_text.cc b/src/lib/render_text.cc index f9c04dc4d..2272d3506 100644 --- a/src/lib/render_text.cc +++ b/src/lib/render_text.cc @@ -36,7 +36,6 @@ DCPOMATIC_ENABLE_WARNINGS #ifndef DCPOMATIC_HAVE_SHOW_IN_CAIRO_CONTEXT #include #endif -#include #include #include @@ -48,7 +47,7 @@ using std::max; using std::pair; using std::cerr; using std::make_pair; -using boost::shared_ptr; +using std::shared_ptr; using boost::optional; using boost::algorithm::replace_all; using namespace dcpomatic; @@ -61,7 +60,7 @@ marked_up (list subtitles, int target_height, float fade_factor) { string out; - BOOST_FOREACH (StringText const & i, subtitles) { + for (auto const& i: subtitles) { out += " > const& fonts) optional font_file = default_font_file (); - BOOST_FOREACH (shared_ptr i, fonts) { + for (auto i: fonts) { if (i->id() == subtitle.font() && i->file()) { font_file = i->file (); } @@ -225,15 +224,15 @@ x_position (StringText const& first, int target_width, int layout_width) { int x = 0; switch (first.h_align ()) { - case dcp::HALIGN_LEFT: + case dcp::HAlign::LEFT: /* h_position is distance between left of frame and left of subtitle */ x = first.h_position() * target_width; break; - case dcp::HALIGN_CENTER: + case dcp::HAlign::CENTER: /* h_position is distance between centre of frame and centre of subtitle */ x = (0.5 + first.h_position()) * target_width - layout_width / 2; break; - case dcp::HALIGN_RIGHT: + case dcp::HAlign::RIGHT: /* h_position is distance between right of frame and right of subtitle */ x = (1.0 - first.h_position()) * target_width - layout_width; break; @@ -249,20 +248,20 @@ y_position (StringText const& first, int target_height, int layout_height) { int y = 0; switch (first.v_align ()) { - case dcp::VALIGN_TOP: + case dcp::VAlign::TOP: /* SMPTE says that v_position is the distance between top of frame and top of subtitle, but this doesn't always seem to be the case in practice; Gunnar Ásgeirsson's Dolby server appears - to put VALIGN_TOP subs with v_position as the distance between top + to put VAlign::TOP subs with v_position as the distance between top of frame and bottom of subtitle. */ y = first.v_position() * target_height - layout_height; break; - case dcp::VALIGN_CENTER: + case dcp::VAlign::CENTER: /* v_position is distance between centre of frame and centre of subtitle */ y = (0.5 + first.v_position()) * target_height - layout_height / 2; break; - case dcp::VALIGN_BOTTOM: + case dcp::VAlign::BOTTOM: /* v_position is distance between bottom of frame and bottom of subtitle */ y = (1.0 - first.v_position()) * target_height - layout_height; break; @@ -289,8 +288,10 @@ static Glib::RefPtr create_layout() { PangoFontMap* c_font_map = pango_cairo_font_map_new (); + DCPOMATIC_ASSERT (c_font_map); Glib::RefPtr font_map = Glib::wrap (c_font_map); PangoContext* c_context = pango_font_map_create_context (c_font_map); + DCPOMATIC_ASSERT (c_context); Glib::RefPtr context = Glib::wrap (c_context); return Pango::Layout::create (context); } @@ -332,7 +333,7 @@ render_line (list subtitles, list > fonts, dcp::Siz } } - float const border_width = dcp::BORDER ? (first.outline_width * target.width / 2048.0) : 0; + float const border_width = first.effect() == dcp::Effect::BORDER ? (first.outline_width * target.width / 2048.0) : 0; size.width += 2 * ceil (border_width); size.height += 2 * ceil (border_width); @@ -355,7 +356,7 @@ render_line (list subtitles, list > fonts, dcp::Siz context->scale (x_scale, y_scale); layout->update_from_cairo_context (context); - if (first.effect() == dcp::SHADOW) { + if (first.effect() == dcp::Effect::SHADOW) { /* Drop-shadow effect */ set_source_rgba (context, first.effect_colour(), fade_factor); context->move_to (x_offset + 4, y_offset + 4); @@ -363,7 +364,7 @@ render_line (list subtitles, list > fonts, dcp::Siz context->fill (); } - if (first.effect() == dcp::BORDER) { + if (first.effect() == dcp::Effect::BORDER) { /* Border effect */ set_source_rgba (context, first.effect_colour(), fade_factor); context->set_line_width (border_width); @@ -402,7 +403,7 @@ render_text (list subtitles, list > fonts, dcp::Siz list pending; list images; - BOOST_FOREACH (StringText const & i, subtitles) { + 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, fonts, target, time, frame_rate)); pending.clear ();