X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fnote-collision.cc;h=31d084b31ffc153bb6607a45b7692e509a59b5ff;hb=98ca84585c45f75503adff82fc0a8cec2a105769;hp=1432c27564c9c7a843ef6f09704d376f766b693e;hpb=304b5f3aa7eee7b0ff8d4ba7526a1410735f6e74;p=lilypond.git diff --git a/lily/note-collision.cc b/lily/note-collision.cc index 1432c27564..31d084b31f 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -13,7 +13,7 @@ #include "note-column.hh" #include "note-head.hh" #include "rhythmic-head.hh" -#include "paper-def.hh" +#include "output-def.hh" #include "axis-group-interface.hh" #include "item.hh" #include "stem.hh" @@ -26,7 +26,7 @@ SCM Note_collision_interface::force_shift_callback (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); - Axis a = (Axis) gh_scm2int (axis); + Axis a = (Axis) ly_scm2int (axis); assert (a == X_AXIS); me = me->get_parent (a); @@ -37,7 +37,7 @@ Note_collision_interface::force_shift_callback (SCM element_smob, SCM axis) do_shifts (me); } - return gh_double2scm (0.0); + return scm_make_real (0.0); } @@ -71,6 +71,13 @@ check_meshing_chords (Grob *me, // FIXME: what's this? bool merge_possible = (ups[0] >= dps[0]) && (ups.top () >= dps.top ()); + + + /* Do not merge notes typeset in different style. */ + if ( !ly_c_equal_p (nu->get_property ("style"), + nd->get_property ("style") ) ) + merge_possible = false; + int upball_type = Note_head::get_balltype (nu); int dnball_type = Note_head::get_balltype (nd); @@ -230,7 +237,7 @@ check_meshing_chords (Grob *me, d->suicide (); } - if (wipe_ball && wipe_ball->live ()) + if (wipe_ball && wipe_ball->is_live ()) { wipe_ball->set_property ("transparent", SCM_BOOL_T); wipe_ball->set_property ("stencil", SCM_EOL); @@ -295,21 +302,37 @@ Note_collision_interface::do_shifts (Grob* me) while (flip (&d) != UP); Link_array done; - for (; gh_pair_p (hand); hand =ly_cdr (hand)) + Real left_most = 1e6; + + Array amounts; + for (; ly_c_pair_p (hand); hand =ly_cdr (hand)) { Grob * s = unsmob_grob (ly_caar (hand)); - Real amount = gh_scm2double (ly_cdar (hand)); - - s->translate_axis (amount *wid, X_AXIS); + Real amount = ly_scm2double (ly_cdar (hand)) * wid; + done.push (s); + amounts.push (amount); + if (amount < left_most) + left_most = amount; + } - for (; gh_pair_p (autos); autos =ly_cdr (autos)) + for (; ly_c_pair_p (autos); autos =ly_cdr (autos)) { Grob * s = unsmob_grob (ly_caar (autos)); - Real amount = gh_scm2double (ly_cdar (autos)); + Real amount = ly_scm2double (ly_cdar (autos)) *wid; if (!done.find (s)) - s->translate_axis (amount * wid, X_AXIS); + { + done.push (s); + amounts.push (amount); + if (amount < left_most) + left_most = amount; + } + } + + for (int i = 0; i < amounts.size(); i++) + { + done[i]->translate_axis (amounts[i] - left_most, X_AXIS); } } @@ -319,7 +342,7 @@ Note_collision_interface::get_clash_groups (Grob *me) Drul_array > clash_groups; SCM s = me->get_property ("elements"); - for (; gh_pair_p (s); s = ly_cdr (s)) + for (; ly_c_pair_p (s); s = ly_cdr (s)) { SCM car = ly_car (s); @@ -364,8 +387,8 @@ Note_collision_interface::automatic_shift (Grob *me, SCM sh = clashes[i]->get_property ("horizontal-shift"); - if (gh_number_p (sh)) - shift.push (gh_scm2int (sh)); + if (ly_c_number_p (sh)) + shift.push (ly_scm2int (sh)); else shift.push (0); } @@ -430,8 +453,8 @@ Note_collision_interface::automatic_shift (Grob *me, do { for (int i=0; i < clash_groups[d].size (); i++) - tups = gh_cons (gh_cons (clash_groups[d][i]->self_scm (), - gh_double2scm (offsets[d][i])), + tups = scm_cons (scm_cons (clash_groups[d][i]->self_scm (), + scm_make_real (offsets[d][i])), tups); } while (flip (&d) != UP); @@ -445,14 +468,14 @@ Note_collision_interface::forced_shift (Grob *me) SCM tups = SCM_EOL; SCM s = me->get_property ("elements"); - for (; gh_pair_p (s); s = ly_cdr (s)) + for (; ly_c_pair_p (s); s = ly_cdr (s)) { Grob * se = unsmob_grob (ly_car (s)); SCM force = se->get_property ("force-hshift"); - if (gh_number_p (force)) + if (ly_c_number_p (force)) { - tups = gh_cons (gh_cons (se->self_scm (), force), + tups = scm_cons (scm_cons (se->self_scm (), force), tups); } }