X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Ftie-specification.cc;h=f404ad597c4b9514885b3d1e7aa2aed5cddbec18;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=0413495713a8d3637db91da615aa9a855392ab65;hpb=bb8a0a5387af94dd2702877256334b160575a730;p=lilypond.git diff --git a/lily/tie-specification.cc b/lily/tie-specification.cc index 0413495713..f404ad597c 100644 --- a/lily/tie-specification.cc +++ b/lily/tie-specification.cc @@ -1,5 +1,8 @@ #include "tie-formatting-problem.hh" #include "grob.hh" +#include "item.hh" +#include "semi-tie.hh" +#include "spanner.hh" #include "tie.hh" #include "libc-extension.hh" #include "tie-specification.hh" @@ -22,6 +25,8 @@ Tie_specification::Tie_specification () void Tie_specification::from_grob (Grob *tie) { + // In this method, Tie and Semi_tie require the same logic with different + // types. It might be clearer to use a template. tie_grob_ = tie; if (scm_is_number (tie->get_property_data ("direction"))) { @@ -29,11 +34,20 @@ Tie_specification::from_grob (Grob *tie) has_manual_dir_ = true; } - position_ = Tie::get_position (tie); + if (Spanner *spanner = dynamic_cast (tie)) + position_ = Tie::get_position (spanner); + else if (Item *item = dynamic_cast (tie)) + position_ = Semi_tie::get_position (item); + else + { + programming_error ("grob is neither a tie nor a semi-tie"); + position_ = 0; + } + SCM pos_scm = tie->get_property ("staff-position"); if (scm_is_number (pos_scm)) { - has_manual_delta_y_ = (scm_inexact_p (pos_scm) == SCM_BOOL_T); + has_manual_delta_y_ = !ly_is_rational (pos_scm); manual_position_ = scm_to_double (tie->get_property ("staff-position")); has_manual_position_ = true; }