X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frest.cc;h=ffc32784b59b2034c1b25227c87daed2a3222abe;hb=fe1eb832e9e1e92e2bf98c33011465658192f033;hp=210e756814bbf7c9cdf8c215ac8142db71d60563;hpb=05fabaaf86fd44f9bd903f282bb98d343a991e40;p=lilypond.git diff --git a/lily/rest.cc b/lily/rest.cc index 210e756814..ffc32784b5 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -6,13 +6,14 @@ (c) 1997--2004 Han-Wen Nienhuys */ -#include "molecule.hh" +#include "stencil.hh" #include "paper-def.hh" #include "font-interface.hh" #include "rest.hh" #include "dots.hh" #include "paper-score.hh" #include "staff-symbol-referencer.hh" +#include "directional-element-interface.hh" // -> offset callback MAKE_SCHEME_CALLBACK (Rest,after_line_breaking,1); @@ -114,13 +115,13 @@ Rest::glyph_name (Grob *me, int balltype, String style) MAKE_SCHEME_CALLBACK (Rest,print,1); SCM -Rest::brew_internal_molecule (SCM smob) +Rest::brew_internal_stencil (SCM smob) { Grob* me = unsmob_grob (smob); SCM balltype_scm = me->get_grob_property ("duration-log"); if (!gh_number_p (balltype_scm)) - return Molecule ().smobbed_copy (); + return Stencil ().smobbed_copy (); int balltype = gh_scm2int (balltype_scm); @@ -133,7 +134,7 @@ Rest::brew_internal_molecule (SCM smob) Font_metric *fm = Font_interface::get_default_font (me); String font_char = glyph_name (me, balltype, style); - Molecule out = fm->find_by_name (font_char); + Stencil out = fm->find_by_name (font_char); if (out.is_empty ()) { me->warning (_f ("rest `%s' not found, ", font_char.to_str0 ())); @@ -145,21 +146,31 @@ Rest::brew_internal_molecule (SCM smob) SCM Rest::print (SCM smob) { - return brew_internal_molecule (smob); + return brew_internal_stencil (smob); } MAKE_SCHEME_CALLBACK (Rest,extent_callback,2); /* - We need the callback. The real molecule has ledgers depending on + We need the callback. The real stencil has ledgers depending on Y-position. The Y-position is known only after line breaking. */ SCM Rest::extent_callback (SCM smob, SCM ax) { Axis a = (Axis) gh_scm2int (ax); - SCM m = brew_internal_molecule (smob); - return ly_interval2scm (unsmob_molecule (m)->extent (a)); + SCM m = brew_internal_stencil (smob); + return ly_interval2scm (unsmob_stencil (m)->extent (a)); } - +MAKE_SCHEME_CALLBACK (Rest,polyphonic_offset_callback,2); +SCM +Rest::polyphonic_offset_callback (SCM smob, SCM) +{ + Grob* me = unsmob_grob (smob); + Direction d = get_grob_direction (me); + Real off = 2* d ; + if(off) + off *= Staff_symbol_referencer::staff_space (me); + return gh_double2scm (off); +} ADD_INTERFACE (Rest,"rest-interface", "a rest",