X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpango-font.cc;h=024d7b1d576f94bd731f1186351c26832da2fafe;hb=8cf69a467ad7650f5ca9da6fe2dfd4c7c088b239;hp=b805f34a8541eeb594f51f1aced0633f4c3dcf0e;hpb=de9831ffbac6592724492a21b084726e370bd362;p=lilypond.git diff --git a/lily/pango-font.cc b/lily/pango-font.cc index b805f34a85..024d7b1d57 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -46,14 +46,15 @@ #if HAVE_PANGO_FT2 #include "stencil.hh" +Preinit_Pango_font::Preinit_Pango_font () +{ + physical_font_tab_ = SCM_EOL; +} + Pango_font::Pango_font (PangoFT2FontMap *fontmap, PangoFontDescription const *description, Real output_scale) { - // This line looks stupid, but if we don't initialize physical_font_tab_ before - // we allocate memory in scm_c_make_hash_table, then that could trigger a garbage - // collection. - physical_font_tab_ = SCM_EOL; physical_font_tab_ = scm_c_make_hash_table (11); PangoDirection pango_dir = PANGO_DIRECTION_LTR; context_ = pango_context_new (); @@ -386,7 +387,9 @@ extern bool music_strings_to_paths; Stencil Pango_font::text_stencil (Output_def * /* state */, - const string &str, bool music_string) const + const string &str, + bool music_string, + const string &features_str) const { /* The text assigned to a PangoLayout is automatically divided @@ -394,6 +397,16 @@ Pango_font::text_stencil (Output_def * /* state */, Bidirectional Algorithm, if necessary. */ PangoLayout *layout = pango_layout_new (context_); + + if (!features_str.empty()) + { + PangoAttrList *list = pango_attr_list_new(); + PangoAttribute *features_attr = pango_attr_font_features_new(features_str.c_str()); + pango_attr_list_insert(list, features_attr); + pango_layout_set_attributes(layout, list); + pango_attr_list_unref(list); + } + pango_layout_set_text (layout, str.c_str (), -1); GSList *lines = pango_layout_get_lines (layout);