X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftie-specification.cc;h=f404ad597c4b9514885b3d1e7aa2aed5cddbec18;hb=b872748c6aa8bb721ced458691b38ac2fac5dfc8;hp=3a7ce345cb425ec45d8fc5a326b3f6366d3e6525;hpb=16cb456cabf477f6d398ff731aa0f10b60913394;p=lilypond.git diff --git a/lily/tie-specification.cc b/lily/tie-specification.cc index 3a7ce345cb..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" @@ -13,28 +16,38 @@ Tie_specification::Tie_specification () position_ = 0; manual_position_ = 0; manual_dir_ = CENTER; - note_head_drul_[LEFT] = - note_head_drul_[RIGHT] = 0; - column_ranks_[RIGHT] = - column_ranks_[LEFT] = 0; + note_head_drul_[LEFT] + = note_head_drul_[RIGHT] = 0; + column_ranks_[RIGHT] + = column_ranks_[LEFT] = 0; } - 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"))) { manual_dir_ = to_dir (tie->get_property ("direction")); 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; }