X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Frender_text.cc;h=8b9d93423d390062e53b710fba9feaf06b098a92;hb=447ee98f36b5ae2cd40b98e4316dc4428b374d90;hp=28482f6e14a0e692c00230cd65497016549b155b;hpb=33e4b489cf5077058dc7b679a75df708d444cfd0;p=dcpomatic.git diff --git a/src/lib/render_text.cc b/src/lib/render_text.cc index 28482f6e1..8b9d93423 100644 --- a/src/lib/render_text.cc +++ b/src/lib/render_text.cc @@ -46,9 +46,10 @@ using std::make_pair; using boost::shared_ptr; using boost::optional; using boost::algorithm::replace_all; +using namespace dcpomatic; static FcConfig* fc_config = 0; -static list > fc_config_fonts; +static list > fc_config_fonts; string marked_up (list subtitles, int target_height, float fade_factor) @@ -158,39 +159,31 @@ render_line (list subtitles, list > fonts, dcp::Siz Cairo::RefPtr context = Cairo::Context::create (surface); if (!fc_config) { - fc_config = FcConfigCreate (); + fc_config = FcInitLoadConfig (); } - FontFiles font_files; + optional font_file; try { - font_files.set (FontFiles::NORMAL, shared_path () / "LiberationSans-Regular.ttf"); - font_files.set (FontFiles::ITALIC, shared_path () / "LiberationSans-Italic.ttf"); - font_files.set (FontFiles::BOLD, shared_path () / "LiberationSans-Bold.ttf"); + font_file = shared_path () / "LiberationSans-Regular.ttf"; } catch (boost::filesystem::filesystem_error& e) { } /* Hack: try the debian/ubuntu locations if getting the shared path failed */ - if (!font_files.get(FontFiles::NORMAL) || !boost::filesystem::exists(font_files.get(FontFiles::NORMAL).get())) { - font_files.set (FontFiles::NORMAL, "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf"); - } - if (!font_files.get(FontFiles::ITALIC) || !boost::filesystem::exists(font_files.get(FontFiles::ITALIC).get())) { - font_files.set (FontFiles::ITALIC, "/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf"); - } - if (!font_files.get(FontFiles::BOLD) || !boost::filesystem::exists(font_files.get(FontFiles::BOLD).get())) { - font_files.set (FontFiles::BOLD, "/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf"); + if (!font_file || !boost::filesystem::exists(*font_file)) { + font_file = "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf"; } BOOST_FOREACH (shared_ptr i, fonts) { - if (i->id() == subtitles.front().font() && i->file(FontFiles::NORMAL)) { - font_files = i->files (); + if (i->id() == subtitles.front().font() && i->file()) { + font_file = i->file (); } } - list >::const_iterator existing = fc_config_fonts.begin (); - while (existing != fc_config_fonts.end() && existing->first != font_files) { + list >::const_iterator existing = fc_config_fonts.begin (); + while (existing != fc_config_fonts.end() && existing->first != *font_file) { ++existing; } @@ -199,17 +192,9 @@ render_line (list subtitles, list > fonts, dcp::Siz font_name = existing->second; } else { /* Make this font available to DCP-o-matic */ - for (int i = 0; i < FontFiles::VARIANTS; ++i) { - if (font_files.get(static_cast(i))) { - FcConfigAppFontAddFile ( - fc_config, - reinterpret_cast (font_files.get(static_cast(i)).get().string().c_str()) - ); - } - } - + FcConfigAppFontAddFile (fc_config, reinterpret_cast(font_file->string().c_str())); FcPattern* pattern = FcPatternBuild ( - 0, FC_FILE, FcTypeString, font_files.get(FontFiles::NORMAL).get().string().c_str(), static_cast (0) + 0, FC_FILE, FcTypeString, font_file->string().c_str(), static_cast (0) ); FcObjectSet* object_set = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_LANG, FC_FILE, static_cast (0)); FcFontSet* font_set = FcFontList (fc_config, pattern, object_set); @@ -234,7 +219,7 @@ render_line (list subtitles, list > fonts, dcp::Siz FcObjectSetDestroy (object_set); FcPatternDestroy (pattern); - fc_config_fonts.push_back (make_pair (font_files, font_name)); + fc_config_fonts.push_back (make_pair(*font_file, font_name)); } FcConfigSetCurrent (fc_config); @@ -244,10 +229,6 @@ render_line (list subtitles, list > fonts, dcp::Siz layout->set_alignment (Pango::ALIGN_LEFT); context->set_line_width (1); - Cairo::FontOptions fo; - context->get_font_options (fo); - fo.set_antialias (Cairo::ANTIALIAS_GRAY); - context->set_font_options (fo); /* Compute fade factor */ float fade_factor = 1; @@ -370,7 +351,7 @@ render_text (list subtitles, list > fonts, dcp::Siz list images; BOOST_FOREACH (StringText const & i, subtitles) { - if (!pending.empty() && fabs (i.v_position() - pending.back().v_position()) > 1e-4) { + 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 (); }