X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frest-collision-engraver.cc;h=70984ae2ad1b9ddbe9516730fb443370c7b1f713;hb=b872748c6aa8bb721ced458691b38ac2fac5dfc8;hp=4720368c909c3fd5da2a5838c2288e0bce675289;hpb=c39943f60cffe2084c2f571fa838f0e34f89419b;p=lilypond.git diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 4720368c90..70984ae2ad 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -1,9 +1,20 @@ /* - rest-collision-engraver.cc -- implement Rest_collision_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2015 Han-Wen Nienhuys - (c) 1997--2009 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include @@ -21,6 +32,8 @@ #include "stream-event.hh" #include "warn.hh" +#include "translator.icc" + class Rest_collision_engraver : public Engraver { protected: @@ -32,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; } @@ -41,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); } } @@ -84,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 */ + "" + );