X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftime-scaled-music-iterator.cc;h=db4c616274da4b09ec97e13ccfe5094d93a00c2c;hb=c83f8abe0c27faabcad658ff3a9691158c62c3a3;hp=fc48ff2cd662b3dffc1f23fa768c582d758517dc;hpb=339ea28cd7e4f8a1c1ca7c1d4dfe803a3f4c03e6;p=lilypond.git diff --git a/lily/time-scaled-music-iterator.cc b/lily/time-scaled-music-iterator.cc index fc48ff2cd6..db4c616274 100644 --- a/lily/time-scaled-music-iterator.cc +++ b/lily/time-scaled-music-iterator.cc @@ -1,29 +1,62 @@ -/* +/* time-scaled-music-iterator.cc -- implement Time_scaled_music_iterator - + source file of the GNU LilyPond music typesetter - - (c) 1998--1999 Han-Wen Nienhuys - - */ + + (c) 1998--2006 Han-Wen Nienhuys , + Erik Sandberg +*/ #include "time-scaled-music-iterator.hh" -#include "time-scaled-music.hh" -#include "musical-request.hh" -#include "translator-group.hh" -#include "command-request.hh" + +#include "context.hh" +#include "input.hh" +#include "international.hh" +#include "music.hh" + +Time_scaled_music_iterator::Time_scaled_music_iterator () +{ + child_list_ = SCM_EOL; +} + +void +Time_scaled_music_iterator::construct_children () +{ + Music *mus = get_music (); + Input *origin = mus->origin (); + Music *child = unsmob_music (mus->get_property ("element")); + + /* Create tuplet start/stop span events before/after the music */ + SCM tuplet_symbol = ly_symbol2scm ("TupletEvent"); + SCM start_event = scm_call_2 (ly_lily_module_constant ("make-span-event"), tuplet_symbol, scm_from_int (START)); + Music *start = unsmob_music (start_event); + start->set_spot (*origin); + start->set_property ("numerator", mus->get_property ("numerator")); + start->set_property ("denominator", mus->get_property ("denominator")); + start_event = scm_call_1 (ly_lily_module_constant ("make-event-chord"), scm_list_1 (start_event)); + unsmob_music (start_event)->set_spot (*origin); + + SCM stop_event = scm_call_2 (ly_lily_module_constant ("make-span-event"), tuplet_symbol, scm_from_int (STOP)); + unsmob_music (stop_event)->set_spot (*origin); + stop_event = scm_call_1 (ly_lily_module_constant ("make-event-chord"), scm_list_1 (stop_event)); + unsmob_music (stop_event)->set_spot (*origin); + + child_list_ = scm_list_3 (start_event, child->self_scm (), stop_event); + + Sequential_iterator::construct_children (); +} + +SCM +Time_scaled_music_iterator::get_music_list () const +{ + return child_list_; +} void -Time_scaled_music_iterator::do_process_and_next (Moment m) +Time_scaled_music_iterator::derived_mark () const { - if (!m) - { - Music_iterator *yeah = try_music (music_l_); - if (yeah) - set_translator (yeah->report_to_l ()); - else - music_l_->warning ( _("No one to print a tuplet start bracket")); - } - - Music_wrapper_iterator::do_process_and_next (m); + scm_gc_mark (child_list_); + Sequential_iterator::derived_mark (); } + +IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator);