]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/pango-select.cc
Warn about only one slur at once.
[lilypond.git] / lily / pango-select.cc
index 71553a1a9164c70558419722701d5313d4e089a5..dea3b9d40b42e85d708c492d2336cb6c79f72d7a 100644 (file)
@@ -1,19 +1,19 @@
 /*
-  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 <hanwen@xs4all.nl>
-
+  (c) 2004--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #include <math.h>
 
+#include "dimensions.hh"
 #include "all-font-metrics.hh"
 #include "output-def.hh"
 #include "pango-font.hh"
 
-Font_metric *
-select_pango_font (Output_def *layout, SCM chain)
+PangoFontDescription *
+properties_to_pango_description (SCM chain, Real text_size)
 {
   SCM name = ly_chain_assoc (ly_symbol2scm ("font-name"), chain);
 
@@ -22,13 +22,6 @@ select_pango_font (Output_def *layout, SCM chain)
     {
       String name_str = ly_scm2string (scm_cdr (name));
       description = pango_font_description_from_string (name_str.to_str0 ());
-      
-      
-      Real step = robust_scm2double (ly_symbol2scm ("font-size"), 0.0);
-      Real size = layout->get_dimension (ly_symbol2scm ("text-font-size"))
-       * pow (2.0, step / 6.0);
-      pango_font_description_set_size (description,
-                                      gint (size * PANGO_SCALE));
     }
   else
     {
@@ -36,29 +29,37 @@ select_pango_font (Output_def *layout, SCM chain)
                                       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);
-      
-      Real step = robust_scm2double (ly_symbol2scm ("font-size"), 0.0);
-      Real size = layout->get_dimension (ly_symbol2scm ("text-font-size"))
-       * pow (2.0, step / 6.0);
 
       description
        = symbols_to_pango_font_description (family, style, variant, weight,
-                                            SCM_BOOL_F,
-                                            size);
+                                            SCM_BOOL_F);
     }
 
-  Font_metric * fm = all_fonts_global->find_pango_font (description);
+  Real step = robust_scm2double (ly_symbol2scm ("font-size"), 0.0);
+  Real size = text_size * pow (2.0, step / 6.0);
 
-  return find_scaled_font (layout, fm, 1.0,
-                          ly_symbol2scm ("latin1"),
-                          ly_symbol2scm ("latin1")); 
+  pango_font_description_set_size (description,
+                                  gint (size * PANGO_SCALE));
+  return description;
 }
 
+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")));
+
+  char *str = pango_font_description_to_string (pfd);
+  SCM scm_str = scm_makfrom0str (str);
+  g_free (str);
+
+  return find_pango_font (layout, scm_str, 1.0);
+}
 
 PangoStyle
 symbol_to_pango_style (SCM style)
@@ -66,11 +67,10 @@ symbol_to_pango_style (SCM style)
   PangoStyle pstyle = PANGO_STYLE_NORMAL;
   if (style == ly_symbol2scm ("italic"))
     {
-      pstyle = PANGO_STYLE_NORMAL;
+      pstyle = PANGO_STYLE_ITALIC;
     }
   else if (style == ly_symbol2scm ("oblique")
-          || style == ly_symbol2scm ("slanted")
-          )
+          || style == ly_symbol2scm ("slanted"))
     {
       pstyle = PANGO_STYLE_OBLIQUE;
     }
@@ -81,7 +81,7 @@ symbol_to_pango_style (SCM style)
 PangoVariant
 symbol_to_pango_variant (SCM variant)
 {
-  PangoVariant pvariant;
+  PangoVariant pvariant = PANGO_VARIANT_NORMAL;
   if (variant == ly_symbol2scm ("caps"))
     {
       pvariant = PANGO_VARIANT_SMALL_CAPS;
@@ -89,7 +89,6 @@ symbol_to_pango_variant (SCM variant)
   return pvariant;
 }
 
-
 PangoWeight
 symbol_to_pango_weight (SCM weight)
 {
@@ -124,36 +123,36 @@ 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,
-                                 Real size)
+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))
+    family_str = ly_symbol2string (family);
+  else if (scm_is_string (family))
+    family_str = ly_scm2string (family);
 
-  String family_str = scm_is_symbol (family)
-    ? ly_symbol2string (family)
-    : String("roman");
   pango_font_description_set_family (description,
                                     family_str.to_str0 ());
   pango_font_description_set_style (description,
@@ -164,8 +163,6 @@ symbols_to_pango_font_description(SCM family,
                                     symbol_to_pango_weight (weight));
   pango_font_description_set_stretch (description,
                                      symbol_to_pango_stretch (stretch));
-  pango_font_description_set_size (description,
-                                  gint (size * PANGO_SCALE));
 
   return description;
 }