]> git.donarmstrong.com Git - lilypond.git/blob - lily/time-scaled-music-iterator.cc
* lily/percent-repeat-engraver.cc, lily/parser.yy,
[lilypond.git] / lily / time-scaled-music-iterator.cc
1 /*
2   time-scaled-music-iterator.cc -- implement Time_scaled_music_iterator
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
7                  Erik Sandberg <mandolaerik@gmail.com>
8 */
9
10 #include "time-scaled-music-iterator.hh"
11
12 #include "context.hh"
13 #include "input.hh"
14 #include "international.hh"
15 #include "music.hh"
16
17 Time_scaled_music_iterator::Time_scaled_music_iterator ()
18 {
19   child_list_ = SCM_EOL;
20 }
21
22 void
23 Time_scaled_music_iterator::construct_children ()
24 {
25   Music *mus = get_music ();
26   Input *origin = mus->origin ();
27   Music *child = unsmob_music (mus->get_property ("element"));
28
29   /* Create tuplet start/stop span events before/after the music */
30   SCM tuplet_symbol = ly_symbol2scm ("TupletEvent");
31   SCM start_event = scm_call_2 (ly_lily_module_constant ("make-span-event"), tuplet_symbol, scm_from_int (START));
32   Music *start = unsmob_music (start_event);
33   start->set_spot (*origin);
34   start->set_property ("numerator", mus->get_property ("numerator"));
35   start->set_property ("denominator", mus->get_property ("denominator"));
36   start_event = scm_call_1 (ly_lily_module_constant ("make-event-chord"), scm_list_1 (start_event));
37   unsmob_music (start_event)->set_spot (*origin);
38
39   SCM stop_event = scm_call_2 (ly_lily_module_constant ("make-span-event"), tuplet_symbol, scm_from_int (STOP));
40   unsmob_music (stop_event)->set_spot (*origin);
41   stop_event = scm_call_1 (ly_lily_module_constant ("make-event-chord"), scm_list_1 (stop_event));
42   unsmob_music (stop_event)->set_spot (*origin);
43
44   child_list_ = scm_list_3 (start_event, child->self_scm (), stop_event);
45
46   Sequential_iterator::construct_children ();
47 }
48
49 SCM
50 Time_scaled_music_iterator::get_music_list () const
51 {
52   return child_list_;
53 }
54
55 void
56 Time_scaled_music_iterator::derived_mark () const
57 {
58   scm_gc_mark (child_list_);
59   Sequential_iterator::derived_mark ();
60 }
61
62 IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator);