From 55f98fdb6ebc7f5e86c1380469e966d508fe2dfa Mon Sep 17 00:00:00 2001 From: Jean Abou Samra Date: Fri, 15 Apr 2022 12:39:29 +0200 Subject: [PATCH] Fix broken details used for line spanner running to end of the piece This is relevant for a line spanner running to the end of the piece if its right bound is a breakable item. It should use bound-details.right, but not bound-details.right-broken, in spite of the right bound being a broken item. --- lily/include/lily-imports.hh | 2 ++ lily/lily-imports.cc | 2 ++ lily/line-spanner.cc | 10 ++++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lily/include/lily-imports.hh b/lily/include/lily-imports.hh index 0f4a777347..dfb0f656ea 100644 --- a/lily/include/lily-imports.hh +++ b/lily/include/lily-imports.hh @@ -149,6 +149,8 @@ extern Variable stencil_whiteout; extern Variable stencil_whiteout_box; extern Variable symbol_list_p; extern Variable type_name; +extern Variable unbroken_or_first_broken_spanner_p; +extern Variable unbroken_or_last_broken_spanner_p; extern Variable volta_bracket_calc_hook_visibility; extern Variable write_performances_midis; extern Variable write_lilypond_book_aux_files; diff --git a/lily/lily-imports.cc b/lily/lily-imports.cc index a6bf048b76..a6ed7bbffc 100644 --- a/lily/lily-imports.cc +++ b/lily/lily-imports.cc @@ -137,6 +137,8 @@ Variable scorify_music ("scorify-music"); Variable stencil_whiteout ("stencil-whiteout"); Variable symbol_list_p ("symbol-list?"); Variable type_name ("type-name"); +Variable unbroken_or_first_broken_spanner_p ("unbroken-or-first-broken-spanner?"); +Variable unbroken_or_last_broken_spanner_p ("unbroken-or-last-broken-spanner?"); Variable volta_bracket_calc_hook_visibility ("volta-bracket::calc-hook-visibility"); Variable write_performances_midis ("write-performances-midis"); Variable write_lilypond_book_aux_files ("write-lilypond-book-aux-files"); diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index 87cd9edb71..8af0197dd0 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -23,6 +23,7 @@ #include "grob.hh" #include "grob-interface.hh" #include "item.hh" +#include "lily-imports.hh" #include "lily-proto.hh" #include "line-interface.hh" #include "note-column.hh" @@ -106,7 +107,7 @@ offsets_maybe (Drul_array grobs, Grob *&common) SCM Line_spanner::calc_bound_info (SCM smob, Direction dir, bool horizontal) { - Spanner *me = unsmob (smob); + Spanner *me = LY_ASSERT_SMOB (Spanner, smob, 0); Item *bound_item = me->get_bound (dir); @@ -116,7 +117,12 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir, bool horizontal) ? ly_symbol2scm ("left") : ly_symbol2scm ("right"), bound_details, SCM_BOOL_F); - if (bound_item->break_status_dir ()) + // Don't use break_status_dir (): a spanner running to the end of the piece + // has a broken right bound, but should not get details from right-broken. + Lily::Variable checker = ((dir == LEFT) + ? Lily::unbroken_or_first_broken_spanner_p + : Lily::unbroken_or_last_broken_spanner_p); + if (!from_scm (checker (smob))) { SCM extra = ly_assoc_get ((dir == LEFT) ? ly_symbol2scm ("left-broken") -- 2.32.0