X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Faccidental.cc;h=31259da703fdb8f111db59c2572e4724cd3b4241;hb=b7b68363b15a8f723b55338b613de077ce5e1bdd;hp=dd5634d5d9ff28401d3c11dccaa05827516ad5ce;hpb=05fabaaf86fd44f9bd903f282bb98d343a991e40;p=lilypond.git diff --git a/lily/accidental.cc b/lily/accidental.cc index dd5634d5d9..31259da703 100644 --- a/lily/accidental.cc +++ b/lily/accidental.cc @@ -1,14 +1,15 @@ /* accidental.cc -- implement Accidental_interface - (c) 2001--2004 Han-Wen Nienhuys + source file of the GNU LilyPond music typesetter - */ + (c) 2001--2004 Han-Wen Nienhuys +*/ #include "font-interface.hh" #include "item.hh" -#include "molecule.hh" +#include "stencil.hh" #include "accidental-interface.hh" -#include "paper-def.hh" +#include "output-def.hh" #include "pitch.hh" /* @@ -19,15 +20,14 @@ accidental-placement.cc */ - - -Molecule -parenthesize (Grob*me, Molecule m) +Stencil +parenthesize (Grob*me, Stencil m) { - Molecule open = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-leftparen")); - Molecule close = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-rightparen")); - m.add_at_edge (X_AXIS, LEFT, Molecule (open), 0,0); - m.add_at_edge (X_AXIS, RIGHT, Molecule (close), 0,0); + Stencil open = Font_interface::get_default_font (me)->find_by_name ("accidentals.leftparen"); + Stencil close = Font_interface::get_default_font (me)->find_by_name ("accidentals.rightparen"); + + m.add_at_edge (X_AXIS, LEFT, Stencil (open), 0,0); + m.add_at_edge (X_AXIS, RIGHT, Stencil (close), 0,0); return m; } @@ -38,7 +38,7 @@ SCM Accidental_interface::after_line_breaking (SCM smob) { Grob *me = unsmob_grob (smob); - Grob *tie = unsmob_grob (me->get_grob_property ("tie")); + Grob *tie = unsmob_grob (me->get_property ("tie")); if (tie && !tie->original_) { @@ -48,7 +48,7 @@ Accidental_interface::after_line_breaking (SCM smob) } Array -Accidental_interface::accurate_boxes (Grob *a,Grob**common) +Accidental_interface::accurate_boxes (Grob *a, Grob**common) { Box b; b[X_AXIS] = a->extent (a, X_AXIS); @@ -57,20 +57,19 @@ Accidental_interface::accurate_boxes (Grob *a,Grob**common) Array boxes; bool parens = false; - if (to_boolean (a->get_grob_property ("cautionary"))) + if (to_boolean (a->get_property ("cautionary"))) { - SCM cstyle = a->get_grob_property ("cautionary-style"); - parens = gh_equal_p (cstyle, ly_symbol2scm ("parentheses")); - + SCM cstyle = a->get_property ("cautionary-style"); + parens = ly_c_equal_p (cstyle, ly_symbol2scm ("parentheses")); } - SCM accs = a->get_grob_property ("accidentals"); - SCM scm_style = a->get_grob_property ("style"); - if (!gh_symbol_p (scm_style) + SCM accs = a->get_property ("accidentals"); + SCM scm_style = a->get_property ("style"); + if (!scm_is_symbol (scm_style) && !parens && scm_ilength (accs) == 1) { - if (gh_scm2int (gh_car (accs)) == FLAT) + if (scm_to_int (scm_car (accs)) == FLAT) { Box stem = b; Box bulb = b; @@ -80,6 +79,11 @@ Accidental_interface::accurate_boxes (Grob *a,Grob**common) really close. */ stem[X_AXIS][RIGHT] *= .5; + + /* + To prevent vertical alignment for 6ths + */ + stem[Y_AXIS] *= 1.1; bulb[Y_AXIS][UP] *= .35; boxes.push (bulb); @@ -91,14 +95,14 @@ Accidental_interface::accurate_boxes (Grob *a,Grob**common) */ } - if (!boxes.size()) + if (!boxes.size ()) boxes.push (b); Offset o (a->relative_coordinate (common[X_AXIS], X_AXIS), a->relative_coordinate (common[Y_AXIS], Y_AXIS)); - for(int i = boxes.size(); i--;) + for (int i = boxes.size (); i--;) { - boxes[i].translate(o); + boxes[i].translate (o); } return boxes; @@ -151,7 +155,7 @@ Accidental_interface::get_fontcharname (String style, int alteration) case SHARP: return "mensural1"; } - if (style == "neo_mensural") + if (style == "neomensural") style = ""; // currently same as default if (style == "default") style = ""; @@ -166,17 +170,17 @@ Accidental_interface::print (SCM smob) bool smaller = false; bool parens = false; - bool caut = to_boolean (me->get_grob_property ("cautionary")); + bool caut = to_boolean (me->get_property ("cautionary")); if (caut) { - SCM cstyle = me->get_grob_property ("cautionary-style"); - parens = gh_equal_p (cstyle, ly_symbol2scm ("parentheses")); - smaller = gh_equal_p (cstyle, ly_symbol2scm ("smaller")); + SCM cstyle = me->get_property ("cautionary-style"); + parens = ly_c_equal_p (cstyle, ly_symbol2scm ("parentheses")); + smaller = ly_c_equal_p (cstyle, ly_symbol2scm ("smaller")); } - SCM scm_style = me->get_grob_property ("style"); + SCM scm_style = me->get_property ("style"); String style; - if (gh_symbol_p (scm_style)) + if (scm_is_symbol (scm_style)) { style = ly_symbol2string (scm_style); } @@ -191,23 +195,26 @@ Accidental_interface::print (SCM smob) Font_metric *fm = 0; if (smaller) { - SCM ac = Font_interface::font_alist_chain (me); - ac = gh_cons (gh_cons (gh_cons - (ly_symbol2scm ("font-relative-size"), - scm_int2num (-1)), SCM_EOL), - ac); - fm = select_font (me->get_paper (), ac); + SCM ac = Font_interface::music_font_alist_chain (me); + /* + TODO: should calc font-size by adding -2 to current font-size + */ + ac = scm_cons (scm_list_1 (scm_cons + (ly_symbol2scm ("font-size"), + scm_int2num (-2))), + ac); + fm = select_font (me->get_layout (), ac); } else fm = Font_interface::get_default_font (me); - Molecule mol; - for (SCM s = me->get_grob_property ("accidentals"); - gh_pair_p (s); s = gh_cdr (s)) + Stencil mol; + for (SCM s = me->get_property ("accidentals"); + scm_is_pair (s); s = scm_cdr (s)) { - int alteration = gh_scm2int (gh_car (s)); + int alteration = scm_to_int (scm_car (s)); String font_char = get_fontcharname (style, alteration); - Molecule acc (fm->find_by_name ("accidentals-" + font_char)); + Stencil acc (fm->find_by_name ("accidentals." + font_char)); if (acc.is_empty ()) { @@ -222,11 +229,14 @@ Accidental_interface::print (SCM smob) if (parens) mol = parenthesize (me, mol); - return mol.smobbed_copy(); + return mol.smobbed_copy (); } - +/* + TODO: should move inside-slur into item? + + */ ADD_INTERFACE (Accidental_interface, "accidental-interface", "a single accidental", - "cautionary cautionary-style style tie accidentals"); + "inside-slur cautionary cautionary-style style tie accidentals");