From: Mike Solomon Date: Sat, 9 Apr 2011 01:27:11 +0000 (-0400) Subject: Adds stem avoidance to the beam collision engraver. X-Git-Tag: release/2.13.59-1~7 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=3e1a1c11067f26331b1c794e296c65b0984054a9;p=lilypond.git Adds stem avoidance to the beam collision engraver. --- diff --git a/input/regression/beam-collision-grace.ly b/input/regression/beam-collision-grace.ly index 49d0389192..e4a30c5aca 100644 --- a/input/regression/beam-collision-grace.ly +++ b/input/regression/beam-collision-grace.ly @@ -1,6 +1,6 @@ -\version "2.13.49" +\version "2.13.57" \header { texidoc = " The beaming algorithm handles collisions between beams and @@ -11,3 +11,6 @@ grace notes too. e'8[ f e \grace { f,16[ a] } e'8] } +\relative c'{ + d16 e f \grace d'8 g,16 +} \ No newline at end of file diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc index 0f89eac89e..8880e9c6e3 100644 --- a/lily/beam-collision-engraver.cc +++ b/lily/beam-collision-engraver.cc @@ -22,6 +22,7 @@ #include "item.hh" #include "note-head.hh" #include "pointer-group-interface.hh" +#include "stem.hh" class Beam_collision_engraver : public Engraver { @@ -30,6 +31,7 @@ protected: vector covered_grobs_; DECLARE_ACKNOWLEDGER (note_head); + DECLARE_ACKNOWLEDGER (stem); DECLARE_ACKNOWLEDGER (accidental); DECLARE_ACKNOWLEDGER (clef); DECLARE_ACKNOWLEDGER (key_signature); @@ -104,14 +106,16 @@ Beam_collision_engraver::finalize () && (covered_grob_spanned_rank[LEFT] <= beam_spanned_rank_[LEFT]))) { // Do not consider note heads attached to the beam. - bool my_beam = false; + if (Stem::has_interface (covered_grob)) + if (unsmob_grob (covered_grob->get_object ("beam"))) + continue; + if (Grob *stem = unsmob_grob (covered_grob->get_object ("stem"))) if (Grob *beam = unsmob_grob (stem->get_object ("beam"))) if (beam == beam_grob) - my_beam = true; + continue; - if (!my_beam) - Pointer_group_interface::add_grob (beam_grob, ly_symbol2scm ("covered-grobs"), covered_grob); + Pointer_group_interface::add_grob (beam_grob, ly_symbol2scm ("covered-grobs"), covered_grob); } } } @@ -123,6 +127,12 @@ Beam_collision_engraver::acknowledge_note_head (Grob_info i) covered_grobs_.push_back (i); } +void +Beam_collision_engraver::acknowledge_stem (Grob_info i) +{ + covered_grobs_.push_back (i); +} + void Beam_collision_engraver::acknowledge_accidental (Grob_info i) { @@ -158,6 +168,7 @@ Beam_collision_engraver::acknowledge_beam (Grob_info i) #include "translator.icc" ADD_ACKNOWLEDGER (Beam_collision_engraver, note_head); +ADD_ACKNOWLEDGER (Beam_collision_engraver, stem); ADD_ACKNOWLEDGER (Beam_collision_engraver, accidental); ADD_ACKNOWLEDGER (Beam_collision_engraver, clef); ADD_ACKNOWLEDGER (Beam_collision_engraver, key_signature); diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 8333674850..0be8fb44fd 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -354,6 +354,7 @@ inline-accidental-interface key-signature-interface note-head-interface + stem-interface time-signature-interface)) (concaveness . ,ly:beam::calc-concaveness) (cross-staff . ,ly:beam::calc-cross-staff)