X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbeam-collision-engraver.cc;h=b700dc733d39c1ac25d8905186eb8194582139bb;hb=32a34dcef0c0041c6d62677487a380b5c8b85712;hp=cdb4be6270dad054ee13c8a8d55d88e52ef12285;hpb=f41973ff763d5972a85995b6d40c864281ec6714;p=lilypond.git diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc index cdb4be6270..b700dc733d 100644 --- a/lily/beam-collision-engraver.cc +++ b/lily/beam-collision-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,6 +37,7 @@ protected: DECLARE_ACKNOWLEDGER (key_signature); DECLARE_ACKNOWLEDGER (time_signature); DECLARE_ACKNOWLEDGER (beam); + DECLARE_ACKNOWLEDGER (flag); virtual void finalize (); @@ -77,6 +78,14 @@ Beam_collision_engraver::finalize () { Grob *beam_grob = beams_[i].grob (); + extract_grob_set (beam_grob, "normal-stems", stems); + Interval_t vertical_span; + for (vsize j = 0; j < stems.size (); j++) + { + int vag = Grob::get_vertical_axis_group_index (stems[j]); + if (vag >= 0) + vertical_span.add_point (vag); + } Context *beam_context = beams_[i].context (); Interval_t beam_spanned_rank_ = beam_grob->spanned_rank_interval (); @@ -88,6 +97,9 @@ Beam_collision_engraver::finalize () for (vsize j = start; j < covered_grobs_.size (); j++) { Grob *covered_grob = covered_grobs_[j].grob (); + int vag = Grob::get_vertical_axis_group_index (covered_grob); + if (!vertical_span.contains (vag)) + continue; Context *covered_grob_context = covered_grobs_[j].context (); Interval_t covered_grob_spanned_rank = covered_grob->spanned_rank_interval (); @@ -159,6 +171,12 @@ Beam_collision_engraver::acknowledge_time_signature (Grob_info i) covered_grobs_.push_back (i); } +void +Beam_collision_engraver::acknowledge_flag (Grob_info i) +{ + covered_grobs_.push_back (i); +} + void Beam_collision_engraver::acknowledge_beam (Grob_info i) { @@ -174,18 +192,19 @@ ADD_ACKNOWLEDGER (Beam_collision_engraver, accidental); ADD_ACKNOWLEDGER (Beam_collision_engraver, clef); ADD_ACKNOWLEDGER (Beam_collision_engraver, key_signature); ADD_ACKNOWLEDGER (Beam_collision_engraver, time_signature); +ADD_ACKNOWLEDGER (Beam_collision_engraver, flag); ADD_ACKNOWLEDGER (Beam_collision_engraver, beam); ADD_TRANSLATOR (Beam_collision_engraver, - /* doc */ - "Help beams avoid colliding with notes and clefs in other voices.", + /* doc */ + "Help beams avoid colliding with notes and clefs in other voices.", - /* create */ - "", + /* create */ + "", - /* read */ - "", + /* read */ + "", - /* write */ - "" - ); + /* write */ + "" + );