X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fencompass-info.cc;h=69664953434d1a300f465be416e8d36838229e79;hb=3b9a2f280fb4dafdd3dfc69c7c5d6cb7b3818664;hp=6adca21c22cb47bda6251b862338d7b5a76bf787;hpb=e76856c7414b1c150ad749bda48907124e4ea796;p=lilypond.git diff --git a/lily/encompass-info.cc b/lily/encompass-info.cc index 6adca21c22..6966495343 100644 --- a/lily/encompass-info.cc +++ b/lily/encompass-info.cc @@ -14,6 +14,7 @@ #include "encompass-info.hh" #include "slur.hh" #include "staff-sym.hh" +#include "note-head.hh" #include "debug.hh" Encompass_info::Encompass_info () @@ -23,6 +24,8 @@ Encompass_info::Encompass_info () Encompass_info::Encompass_info (Note_column const* note, Direction dir) { + interstaff_f_ = 0; + Paper_def* paper = note->paper (); Real interline = paper->interline_f (); // UGH @@ -57,25 +60,29 @@ Encompass_info::Encompass_info (Note_column const* note, Direction dir) if (stem_l->dir_ != dir) o_.y () += 1.0 * internote * dir; - Slur* slur_l_ = stem_l->slur_l_; - if (slur_l_->encompass_arr_.size () - && stem_l->staff_sym_l_ != slur_l_->encompass_arr_[0]->stem_l_->staff_sym_l_) + Slur* slur_l = stem_l->slur_l_; + if (slur_l->encompass_arr_.size () + && stem_l->staff_sym_l_ != slur_l->encompass_arr_[0]->stem_l_->staff_sym_l_) { if (stem_l->staff_sym_l_->dim_cache_[Y_AXIS].valid_b ()) { interstaff_f_ = stem_l->staff_sym_l_->absolute_coordinate (Y_AXIS) - - slur_l_->encompass_arr_[0]->stem_l_->staff_sym_l_->absolute_coordinate (Y_AXIS); + - slur_l->encompass_arr_[0]->stem_l_->staff_sym_l_->absolute_coordinate (Y_AXIS); } else { warning (_ ("invalid dimension cache: guessing staff position")); - if (slur_l_->vertical_align_drul_[MIN] != - slur_l_->vertical_align_drul_[MAX]) + if (slur_l->vertical_align_drul_[MIN] != + slur_l->vertical_align_drul_[MAX]) warning (_ ("minVerticalAlign != maxVerticalAlign: interstaff slurs may be broken")); - interstaff_f_ = slur_l_->vertical_align_drul_[MIN]; - // urg, guess staff order: - // if our stem ends higher, our staff is probably lower... - if (stem_l->chord_start_f () > slur_l_->encompass_arr_[0]->stem_l_->chord_start_f ()) + interstaff_f_ = slur_l->vertical_align_drul_[MIN]; + /* urg, guess staff order */ + int d = note->head_l_arr_.top ()->steps_i_ + - slur_l->encompass_arr_[0]->head_l_arr_[0]->steps_i_; + if (abs (d > 3)) + interstaff_f_ *= sign (d); + else if (stem_l->chord_start_f () > + slur_l->encompass_arr_[0]->stem_l_->chord_start_f ()) interstaff_f_ *= -1; } o_.y () += interstaff_f_;