X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-symbol.cc;h=527a5c7baf726b2a0d04d7e4e1c841777ea9fa0f;hb=cce6142535a66c88811f7f9f28eba89b8fc3b9a3;hp=e9ad096326465b9fb514eb67ce80feea972b7d17;hpb=f127e14af04f474d20406ca0e0f76f05061ee103;p=lilypond.git diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc index e9ad096326..527a5c7baf 100644 --- a/lily/staff-symbol.cc +++ b/lily/staff-symbol.cc @@ -28,8 +28,6 @@ #include "staff-symbol-referencer.hh" #include "spanner.hh" -using std::vector; - MAKE_SCHEME_CALLBACK (Staff_symbol, print, 1); SCM @@ -137,8 +135,16 @@ Staff_symbol::line_positions (Grob *me) } vector -Staff_symbol::ledger_positions (Grob *me, int pos) +Staff_symbol::ledger_positions (Grob *me, int pos, Item const *head) { + // allow the option to override ledger positions via note head grob + if (head) + { + SCM posns = head->get_property ("ledger-positions"); + if (scm_is_pair (posns)) + return ly_scm2floatvector (posns); + } + SCM ledger_positions = me->get_property ("ledger-positions"); Real ledger_extra = robust_scm2double (me->get_property ("ledger-extra"), 0); vector line_positions = Staff_symbol::line_positions (me); @@ -249,7 +255,20 @@ Staff_symbol::ledger_positions (Grob *me, int pos) values[i] = nearest_line + dir * (ledger_count - i) * 2; } } - return values; + // remove any ledger lines that would fall on staff lines, + // which can happen when ledger-extra > 0 + vector final_values; + for (vector::const_iterator i = values.begin (), + e = values.end (); + i != e; + ++i) + { + if (find (line_positions.begin (), line_positions.end (), *i) == line_positions.end ()) + { + final_values.push_back (*i); + } + } + return final_values; } int