X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frest-collision-engraver.cc;h=70984ae2ad1b9ddbe9516730fb443370c7b1f713;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=d1f1640cf3bcfd926c772411055296733755275f;hpb=55ac733b69643a6bc6a83b706c65cb56efd388ef;p=lilypond.git diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index d1f1640cf3..70984ae2ad 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2011 Han-Wen Nienhuys + Copyright (C) 1997--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,6 +32,8 @@ #include "stream-event.hh" #include "warn.hh" +#include "translator.icc" + class Rest_collision_engraver : public Engraver { protected: @@ -43,7 +45,8 @@ public: TRANSLATOR_DECLARATIONS (Rest_collision_engraver); }; -Rest_collision_engraver::Rest_collision_engraver () +Rest_collision_engraver::Rest_collision_engraver (Context *c) + : Engraver (c) { rest_collision_ = 0; } @@ -52,40 +55,37 @@ void Rest_collision_engraver::process_acknowledged () { vsize rest_count = 0; - set columns; + set columns; Moment now = now_mom (); for (SCM s = get_property ("busyGrobs"); scm_is_pair (s); s = scm_cdr (s)) { - Grob *g = unsmob_grob (scm_cdar (s)); - Moment *m = unsmob_moment (scm_caar (s)); + Grob *g = unsmob (scm_cdar (s)); + Moment *m = unsmob (scm_caar (s)); if (!g || !m) - continue; - - if (Rhythmic_head::has_interface (g) && (*m) > now) - { - Grob *column = g->get_parent (X_AXIS); - if (!column) - { - g->warning (_ ("rhythmic head is not part of a rhythmic column")); - continue; - } - - // Only include rests that start now. Include notes that started any time. - Paper_column *paper_column = dynamic_cast (column)->get_column (); - if (!Rest::has_interface (g) || !paper_column || Paper_column::when_mom (paper_column) == now) - { - columns.insert (column); - rest_count += Note_column::has_rests (column); - } - } + continue; + + if (has_interface (g) && (*m) > now) + { + Grob *column = g->get_parent (X_AXIS); + if (!column) + continue; + + // Only include rests that start now. Include notes that started any time. + Paper_column *paper_column = dynamic_cast (column)->get_column (); + if (!has_interface (g) || !paper_column || Paper_column::when_mom (paper_column) == now) + { + columns.insert (column); + rest_count += Note_column::has_rests (column); + } + } } if (!rest_collision_ && rest_count && columns.size () > 1) { rest_collision_ = make_item ("RestCollision", SCM_EOL); - for (set::iterator i = columns.begin (); i != columns.end (); ++i) - Rest_collision::add_column (rest_collision_, *i); + for (set::iterator i = columns.begin (); i != columns.end (); ++i) + Rest_collision::add_column (rest_collision_, *i); } } @@ -95,18 +95,22 @@ Rest_collision_engraver::stop_translation_timestep () rest_collision_ = 0; } -#include "translator.icc" +void +Rest_collision_engraver::boot () +{ + +} ADD_TRANSLATOR (Rest_collision_engraver, - /* doc */ - "Handle collisions of rests.", + /* doc */ + "Handle collisions of rests.", - /* create */ - "RestCollision ", + /* create */ + "RestCollision ", - /* read */ - "busyGrobs ", + /* read */ + "busyGrobs ", - /* write */ - "" - ); + /* write */ + "" + );