]> git.donarmstrong.com Git - lilypond.git/blob - lily/font-interface.cc
release: 1.3.101
[lilypond.git] / lily / font-interface.cc
1 /*   
2   font-interface.cc --  implement Font_interface
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "all-font-metrics.hh"
11 #include "font-metric.hh"
12 #include "font-interface.hh"
13 #include "score-element.hh"
14 #include "paper-def.hh"
15
16
17 SCM
18 Font_interface::font_alist_chain (Score_element *me)
19 {
20   SCM defaults = gh_cdr (scm_assoc (ly_symbol2scm ("font-defaults"),
21                                     me->paper_l ()->style_sheet_ ));
22
23   SCM ch = gh_list (me->mutable_property_alist_,
24                     me->immutable_property_alist_,
25                     defaults,
26                     SCM_UNDEFINED);
27
28   return ch;
29 }
30
31 /*
32   todo: split up this func, reuse in text_item? 
33  */
34 Font_metric *
35 Font_interface::get_default_font (Score_element*me)
36 {
37   Font_metric * fm =  unsmob_metrics (me->get_elt_property ("font"));
38   if (fm)
39     return fm;
40
41   SCM ss = me->paper_l ()->style_sheet_;
42
43   SCM proc = gh_cdr (scm_assoc (ly_symbol2scm ("properties-to-font"),
44                                 ss));
45
46   SCM fonts = gh_cdr (scm_assoc (ly_symbol2scm ("fonts"), ss));
47   SCM defaults = gh_cdr (scm_assoc (ly_symbol2scm ("font-defaults"),
48                                     ss));
49
50   assert (gh_procedure_p (proc));
51   SCM font_name = gh_call2 (proc, fonts, font_alist_chain (me));
52
53   fm = me->paper_l ()->find_font (font_name, 1.0);
54   me->set_elt_property ("font", fm->self_scm ());
55   return fm;
56 }