X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fside-position-interface.cc;h=556381419accbfa8ef51fbc7d60c5b970a12106a;hb=664070d837cc4855091455892cb942cdcedeef0c;hp=7dbff769cc455f724540260a1b1e86416a972425;hpb=b1323f33e9aa4b9eea05eefb8755c907d4d762d4;p=lilypond.git diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 7dbff769cc..556381419a 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -8,6 +8,7 @@ */ #include // ceil. +#include "note-head.hh" #include "side-position-interface.hh" #include "warn.hh" #include "warn.hh" @@ -53,7 +54,7 @@ SCM Side_position_interface::aligned_on_support_extents (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); - Axis a = (Axis) gh_scm2int (axis); + Axis a = (Axis) ly_scm2int (axis); return general_side_position (me, a, true); } @@ -72,7 +73,7 @@ Side_position_interface::general_side_position (Grob * me, Axis a, bool use_exte Grob * st = Staff_symbol_referencer::get_staff_symbol (me); bool include_staff = (st && a == Y_AXIS - && gh_number_p (me->get_property ("staff-padding"))); + && ly_c_number_p (me->get_property ("staff-padding"))); Interval dim; if (include_staff) @@ -120,7 +121,7 @@ Side_position_interface::general_side_position (Grob * me, Axis a, bool use_exte - return gh_double2scm (total_off); + return scm_make_real (total_off); } /* @@ -131,7 +132,7 @@ SCM Side_position_interface::aligned_on_support_refpoints (SCM smob, SCM axis) { Grob *me = unsmob_grob (smob); - Axis a = (Axis) gh_scm2int (axis); + Axis a = (Axis) ly_scm2int (axis); return general_side_position (me, a, false); } @@ -170,15 +171,22 @@ Side_position_interface::quantised_position (SCM element_smob, SCM) Real rad = Staff_symbol_referencer::staff_radius (me) *2 ; int ip = int (rp); - if (abs (ip) <= rad && Staff_symbol_referencer::on_staffline (me,ip)) + Grob *head = me->get_parent (X_AXIS); + + if (Staff_symbol_referencer::on_staffline (me,ip) + && ((abs (ip) <= rad) + || (Note_head::has_interface (head) + && sign (Staff_symbol_referencer::get_position (head)) + == -d) + )) { ip += d; rp += d; } - - return gh_double2scm ((rp - p) * Staff_symbol_referencer::staff_space (me) / 2.0); + + return scm_make_real ((rp - p) * Staff_symbol_referencer::staff_space (me) / 2.0); } - return gh_double2scm (0.0); + return scm_make_real (0.0); } /* @@ -189,11 +197,11 @@ SCM Side_position_interface::aligned_side (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); - Axis a = (Axis) gh_scm2int (axis); + Axis a = (Axis) ly_scm2int (axis); Direction d = Side_position_interface::get_direction (me); - Real o = gh_scm2double (aligned_on_support_extents (element_smob,axis)); + Real o = ly_scm2double (aligned_on_support_extents (element_smob,axis)); Interval iv = me->extent (me, a); @@ -214,11 +222,11 @@ Side_position_interface::aligned_side (SCM element_smob, SCM axis) */ Grob * st = Staff_symbol_referencer::get_staff_symbol (me); if (st && a == Y_AXIS - && gh_number_p (me->get_property ("staff-padding"))) + && ly_c_number_p (me->get_property ("staff-padding"))) { Real padding= Staff_symbol_referencer::staff_space (me) - * gh_scm2double (me->get_property ("staff-padding")); + * ly_scm2double (me->get_property ("staff-padding")); Grob *common = me->common_refpoint (st, Y_AXIS); @@ -228,7 +236,7 @@ Side_position_interface::aligned_side (SCM element_smob, SCM axis) o += (d* (diff >? 0)); } - return gh_double2scm (o); + return scm_make_real (o); } @@ -257,7 +265,7 @@ Side_position_interface::get_axis (Grob*me) ADD_INTERFACE (Side_position_interface,"side-position-interface", "Position a victim object (this one) next to other objects (the " - "support). In this case, the property @code{direction} signifies where to put the " + "support). The property @code{direction} signifies where to put the " "victim object relative to the support (left or right, up or down?)\n\n " "The routine also takes the size the staff into account if " "@code{staff-padding} is set. If undefined, the staff symbol is ignored."