]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/time-scaled-music-iterator.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / time-scaled-music-iterator.cc
index df703cbb33b9cca4fa4254b9069aba2400637e1e..7406d884697f6508e9e09a231dbfea7b50917e35 100644 (file)
@@ -1,30 +1,46 @@
-/*   
+/*
   time-scaled-music-iterator.cc -- implement Time_scaled_music_iterator
-  
+
   source file of the GNU LilyPond music typesetter
-  
-  (c) 1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
+
+  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+                 Erik Sandberg <mandolaerik@gmail.com>
+*/
 
 #include "time-scaled-music-iterator.hh"
-#include "time-scaled-music.hh"
-#include "event.hh"
+
 #include "context.hh"
+#include "input.hh"
+#include "international.hh"
+#include "music.hh"
+
+Time_scaled_music_iterator::Time_scaled_music_iterator ()
+{
+}
 
-void
-Time_scaled_music_iterator::process (Moment m)
+SCM
+Time_scaled_music_iterator::get_music_list () const
 {
-  if (!m.to_bool ())
-    {
-      Music_iterator *yeah = try_music (get_music ());
-      if (yeah)
-       set_translator (yeah->get_outlet ());
-      else
-       get_music ()->origin ()->warning (_ ("no one to print a tuplet start bracket"));
-    }
-
-  Music_wrapper_iterator::process (m);
+  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);
+
+  return scm_list_3 (start_event, child->self_scm (), stop_event);
 }
+
 IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator);