X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column-engraver.cc;h=6dd29300130878be798fc0bfb9670035874d02a7;hb=b872748c6aa8bb721ced458691b38ac2fac5dfc8;hp=0620bafdbd4385a22e400bdeaf165a6a8e58b368;hpb=0b544cfb7332615ef809b71b57ab656741311ae1;p=lilypond.git diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index 0620bafdbd..6dd2930013 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2014 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -18,7 +18,6 @@ */ #include "paper-column-engraver.hh" -#include "system.hh" #include "international.hh" #include "accidental-placement.hh" #include "accidental-interface.hh" @@ -35,7 +34,8 @@ #include "translator.icc" -Paper_column_engraver::Paper_column_engraver () +Paper_column_engraver::Paper_column_engraver (Context *c) + : Engraver (c) { last_moment_.main_part_ = Rational (-1, 1); command_column_ = 0; @@ -98,7 +98,7 @@ Paper_column_engraver::make_columns () void Paper_column_engraver::initialize () { - system_ = dynamic_cast (unsmob_grob (get_property ("rootSystem"))); + system_ = unsmob (get_property ("rootSystem")); make_columns (); system_->set_bound (LEFT, command_column_); @@ -143,14 +143,12 @@ Paper_column_engraver::set_columns (Paper_column *new_command, system_->add_column (musical_column_); } -IMPLEMENT_TRANSLATOR_LISTENER (Paper_column_engraver, break); void Paper_column_engraver::listen_break (Stream_event *ev) { break_events_.push_back (ev); } -IMPLEMENT_TRANSLATOR_LISTENER (Paper_column_engraver, label); void Paper_column_engraver::listen_label (Stream_event *ev) { @@ -214,7 +212,7 @@ Paper_column_engraver::process_music () if (start_of_measure) { Moment mlen = Moment (measure_length (context ())); - Grob *column = unsmob_grob (get_property ("currentCommandColumn")); + Grob *column = unsmob (get_property ("currentCommandColumn")); if (column) column->set_property ("measure-length", mlen.smobbed_copy ()); else @@ -232,6 +230,18 @@ Paper_column_engraver::stop_translation_timestep () command_column_->set_property ("when", m); musical_column_->set_property ("when", m); + SCM mpos = get_property ("measurePosition"); + SCM barnum = get_property ("internalBarNumber"); + if (unsmob (mpos) + && scm_is_integer (barnum)) + { + SCM where = scm_cons (barnum, + mpos); + + command_column_->set_property ("rhythmic-location", where); + musical_column_->set_property ("rhythmic-location", where); + } + for (vsize i = 0; i < items_.size (); i++) { Item *elem = items_[i]; @@ -239,13 +249,13 @@ Paper_column_engraver::stop_translation_timestep () if (!elem->get_parent (X_AXIS)) elem->set_parent (col, X_AXIS); - if (!unsmob_grob (elem->get_object ("axis-group-parent-X"))) + if (!unsmob (elem->get_object ("axis-group-parent-X"))) elem->set_object ("axis-group-parent-X", col->self_scm ()); - if (Accidental_placement::has_interface (elem) - || Arpeggio::has_interface (elem)) + if (has_interface (elem) + || has_interface (elem)) Separation_item::add_conditional_item (col, elem); - else if (!Accidental_interface::has_interface (elem)) + else if (!has_interface (elem)) Separation_item::add_item (col, elem); } items_.clear (); @@ -259,7 +269,8 @@ Paper_column_engraver::stop_translation_timestep () for (vsize i = 0; i < break_events_.size (); i++) { SCM perm = break_events_[i]->get_property ("break-permission"); - if (perm == ly_symbol2scm ("force") || perm == ly_symbol2scm ("allow")) + if (scm_is_eq (perm, ly_symbol2scm ("force")) + || scm_is_eq (perm, ly_symbol2scm ("allow"))) warning (_ ("forced break was overridden by some other event, " "should you be using bar checks?")); } @@ -276,18 +287,6 @@ Paper_column_engraver::stop_translation_timestep () first_ = false; label_events_.clear (); - - SCM mpos = get_property ("measurePosition"); - SCM barnum = get_property ("internalBarNumber"); - if (unsmob_moment (mpos) - && scm_is_integer (barnum)) - { - SCM where = scm_cons (barnum, - mpos); - - command_column_->set_property ("rhythmic-location", where); - musical_column_->set_property ("rhythmic-location", where); - } } void @@ -301,9 +300,16 @@ Paper_column_engraver::start_translation_timestep () } } -ADD_ACKNOWLEDGER (Paper_column_engraver, item); -ADD_ACKNOWLEDGER (Paper_column_engraver, note_spacing); -ADD_ACKNOWLEDGER (Paper_column_engraver, staff_spacing); + +void +Paper_column_engraver::boot () +{ + ADD_LISTENER (Paper_column_engraver, break); + ADD_LISTENER (Paper_column_engraver, label); + ADD_ACKNOWLEDGER (Paper_column_engraver, item); + ADD_ACKNOWLEDGER (Paper_column_engraver, note_spacing); + ADD_ACKNOWLEDGER (Paper_column_engraver, staff_spacing); +} ADD_TRANSLATOR (Paper_column_engraver, /* doc */