X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpango-select.cc;h=7ca70983ffea86189b9f429459dadbdd46170d2b;hb=df7667c81afced0f9d6422b5cbaaf49fd5b3ae1f;hp=fabc6f6fcbac77e8f7fcf2f086e4631def1718e4;hpb=a5457b887fc91e5a582e6460c9d557a4bb077054;p=lilypond.git diff --git a/lily/pango-select.cc b/lily/pango-select.cc index fabc6f6fcb..7ca70983ff 100644 --- a/lily/pango-select.cc +++ b/lily/pango-select.cc @@ -1,10 +1,9 @@ /* - pango-select.cc -- implement lily font selection for Pango_fonts. + pango-select.cc -- implement lily font selection for Pango_fonts. source file of the GNU LilyPond music typesetter - (c) 2004 Han-Wen Nienhuys - + (c) 2004--2005 Han-Wen Nienhuys */ #include @@ -13,16 +12,15 @@ #include "output-def.hh" #include "pango-font.hh" - PangoFontDescription * properties_to_pango_description (SCM chain, Real text_size) { - SCM name = ly_chain_assoc (ly_symbol2scm ("font-name"), chain); + SCM name = ly_chain_assoc_get (ly_symbol2scm ("font-name"), chain, SCM_BOOL_F); PangoFontDescription *description = 0; - if (scm_is_pair (name) && scm_is_string (scm_cdr (name))) + if (scm_is_string (name)) { - String name_str = ly_scm2string (scm_cdr (name)); + String name_str = ly_scm2string (name); description = pango_font_description_from_string (name_str.to_str0 ()); } else @@ -31,20 +29,21 @@ properties_to_pango_description (SCM chain, Real text_size) SCM_BOOL_F); SCM variant = ly_chain_assoc_get (ly_symbol2scm ("font-shape"), chain, SCM_BOOL_F); - + SCM style = ly_chain_assoc_get (ly_symbol2scm ("font-shape"), chain, SCM_BOOL_F); SCM weight = ly_chain_assoc_get (ly_symbol2scm ("font-series"), chain, SCM_BOOL_F); - + description = symbols_to_pango_font_description (family, style, variant, weight, SCM_BOOL_F); } - Real step = robust_scm2double (ly_symbol2scm ("font-size"), 0.0); + Real step = robust_scm2double (ly_chain_assoc_get (ly_symbol2scm ("font-size"), chain, SCM_BOOL_F), + 0.0); Real size = text_size * pow (2.0, step / 6.0); - + pango_font_description_set_size (description, gint (size * PANGO_SCALE)); return description; @@ -53,12 +52,16 @@ properties_to_pango_description (SCM chain, Real text_size) Font_metric * select_pango_font (Output_def *layout, SCM chain) { - PangoFontDescription *pfd = properties_to_pango_description (chain, - point_constant * layout->get_dimension (ly_symbol2scm ("text-font-size"))); - - Font_metric * fm = all_fonts_global->find_pango_font (pfd); + PangoFontDescription *pfd + = properties_to_pango_description (chain, + point_constant + * layout->get_dimension (ly_symbol2scm ("text-font-size"))); + + char *str = pango_font_description_to_string (pfd); + SCM scm_str = scm_makfrom0str (str); + g_free (str); - return find_scaled_font (layout, fm, 1.0); + return find_pango_font (layout, scm_str, 1.0); } PangoStyle @@ -70,8 +73,7 @@ symbol_to_pango_style (SCM style) pstyle = PANGO_STYLE_ITALIC; } else if (style == ly_symbol2scm ("oblique") - || style == ly_symbol2scm ("slanted") - ) + || style == ly_symbol2scm ("slanted")) { pstyle = PANGO_STYLE_OBLIQUE; } @@ -90,7 +92,6 @@ symbol_to_pango_variant (SCM variant) return pvariant; } - PangoWeight symbol_to_pango_weight (SCM weight) { @@ -125,31 +126,29 @@ symbol_to_pango_stretch (SCM) // stretch) PangoStretch ps = PANGO_STRETCH_NORMAL; /* - // TODO - + // TODO + PANGO_STRETCH_ULTRA_CONDENSED, PANGO_STRETCH_EXTRA_CONDENSED, PANGO_STRETCH_CONDENSED, PANGO_STRETCH_SEMI_CONDENSED, - + PANGO_STRETCH_SEMI_EXPANDED, PANGO_STRETCH_EXPANDED, PANGO_STRETCH_EXTRA_EXPANDED, PANGO_STRETCH_ULTRA_EXPANDED - */ + */ return ps; } - - -PangoFontDescription* -symbols_to_pango_font_description(SCM family, - SCM style, - SCM variant, - SCM weight, - SCM stretch) +PangoFontDescription * +symbols_to_pango_font_description (SCM family, + SCM style, + SCM variant, + SCM weight, + SCM stretch) { - PangoFontDescription * description = pango_font_description_new (); + PangoFontDescription *description = pango_font_description_new (); String family_str = "roman"; if (scm_is_symbol (family))