X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fslur.cc;h=faa40725ad4644cb9024c70242180f25830b9ef2;hb=969f01691fb3a5a23320f0ae3a0550559aa98c76;hp=a801281cd7e9feaa5fa28274c28216477f6f9e75;hpb=b696bba38675d4b9ba88cc64e3111d3dec0fc506;p=lilypond.git diff --git a/lily/slur.cc b/lily/slur.cc index a801281cd7..faa40725ad 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -130,23 +130,26 @@ Slur::print (SCM smob) line_thick); #if DEBUG_SLUR_SCORING - SCM quant_score = me->get_property ("quant-score"); - - if (to_boolean (me->layout () - ->lookup_variable (ly_symbol2scm ("debug-slur-scoring"))) - && scm_is_string (quant_score)) + SCM annotation = me->get_property ("annotation"); + if (!scm_is_string (annotation)) + { + SCM debug = me->layout ()->lookup_variable (ly_symbol2scm ("debug-slur-scoring")); + if (to_boolean (debug)) + annotation = me->get_property ("quant-score"); + } + + if (scm_is_string (annotation)) { string str; SCM properties = Font_interface::text_font_alist_chain (me); - if (!scm_is_number (me->get_property ("font-size"))) properties = scm_cons (scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-6), SCM_EOL), properties); Stencil tm = *unsmob_stencil (Text_interface::interpret_markup (me->layout ()->self_scm (), properties, - quant_score)); + annotation)); a.add_at_edge (Y_AXIS, get_grob_direction (me), tm, 1.0); } #endif @@ -346,6 +349,7 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info, if (slur) { chain_offset_callback (e, outside_slur_callback_proc, Y_AXIS); + chain_callback (e, outside_slur_cross_staff_proc, ly_symbol2scm("cross-staff")); e->set_object ("slur", slur->self_scm ()); } } @@ -354,6 +358,27 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info, e->name().c_str ())); } +/* + A callback that will be chained together with the original cross-staff + value of a grob that is placed 'outside or 'around a slur. This just says + that any grob becomes cross-staff if it is placed 'outside or 'around a + cross-staff slur. +*/ +MAKE_SCHEME_CALLBACK (Slur, outside_slur_cross_staff, 2) +SCM +Slur::outside_slur_cross_staff (SCM smob, SCM previous) +{ + if (previous == SCM_BOOL_T) + return previous; + + Grob *me = unsmob_grob (smob); + Grob *slur = unsmob_grob (me->get_object ("slur")); + + if (!slur) + return SCM_BOOL_F; + return slur->get_property ("cross-staff"); +} + MAKE_SCHEME_CALLBACK (Slur, calc_cross_staff, 1) SCM Slur::calc_cross_staff (SCM smob) @@ -384,10 +409,10 @@ Slur::calc_cross_staff (SCM smob) } ADD_INTERFACE (Slur, - - "A slur", + "A slur.", /* properties */ + "annotation " "avoid-slur " /* UGH. */ "control-points " "dash-fraction "