From: Janek WarchoĊ‚ Date: Sun, 17 Aug 2014 14:14:11 +0000 (+0200) Subject: Fix bugs with aligning on main part of the NoteColumn X-Git-Tag: release/2.19.13-1~13 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=2c279ba4a1602f72afa2940b51c5e50d8c5a4b60;p=lilypond.git Fix bugs with aligning on main part of the NoteColumn NoteColumns may contain either noteheads or rests, so the function was changed to handle the case when NoteColumn contains only rest. ly_scm2bool returns true when the argument is unset - that's not what we want: unset properties should evaluate to false. --- diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index 9fdabd2962..6f688c09ff 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -36,7 +36,7 @@ public: static Grob *accidentals (Grob *me); static Slice head_positions_interval (Grob *me); static Grob *first_head (Grob *me); - static Interval calc_main_heads_extent (Grob *me); + static Interval calc_main_extent (Grob *me); static Grob *get_rest (Grob *me); static void set_stem (Grob *me, Grob *); static void add_head (Grob *me, Grob *); diff --git a/lily/note-column.cc b/lily/note-column.cc index c5d06cfb68..760e37dc19 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -158,22 +158,29 @@ Note_column::first_head (Grob *me) /* Return extent of the noteheads in the "main column", - i.e. excluding any suspended noteheads. + (i.e. excluding any suspended noteheads), or extent + of the rest (if there are no heads). */ Interval -Note_column::calc_main_heads_extent (Grob *me) +Note_column::calc_main_extent (Grob *me) { - if (get_stem (me)) - return first_head (me)->extent (me, X_AXIS); - else - { - // no stems => no suspended noteheads. - extract_grob_set (me, "note-heads", heads); - if (heads.size()) - return heads[0]->extent (me, X_AXIS); - else - return Interval (0, 0); - } + Grob *main_head; + if (get_stem (me)) + main_head = first_head (me); + else + { + // no stems => no suspended noteheads. + extract_grob_set (me, "note-heads", heads); + if (heads.size()) + main_head = heads[0]; + } + Grob *main_item = main_head + ? main_head + : Grob::unsmob (me->get_object ("rest")); + + return main_item + ? main_item->extent (me, X_AXIS) + : Interval (0, 0); } /* diff --git a/lily/self-alignment-interface.cc b/lily/self-alignment-interface.cc index 9c73b6c7d8..6b6662641f 100644 --- a/lily/self-alignment-interface.cc +++ b/lily/self-alignment-interface.cc @@ -115,9 +115,9 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a) (him, ly_symbol2scm ("note-column-interface"), a); else { - if (ly_scm2bool(me->internal_get_property (ly_symbol2scm ("X-align-on-main-noteheads"))) + if (to_boolean (me->get_property ("X-align-on-main-noteheads")) && Note_column::has_interface (him)) - he = Note_column::calc_main_heads_extent(him); + he = Note_column::calc_main_extent(him); else he = him->extent (him, a); }