]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/relative-octave-music.cc
Run `make grand-replace'.
[lilypond.git] / lily / relative-octave-music.cc
index b9aeb445a33a9ba388a52c831812a94d40834865..bf6116ab17036e8b69ab2c263053320662bf121a 100644 (file)
@@ -1,31 +1,49 @@
-/*   
-  relative-music.cc --  implement Relative_octave_music
-  
+/*
+  relative-music.cc -- implement Relative_octave_music
+
   source file of the GNU LilyPond music typesetter
-  
-  (c) 1998--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
 
-#include "relative-music.hh"
-#include "debug.hh"
+  (c) 1998--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
+*/
 
-Pitch
-Relative_octave_music::to_relative_octave (Pitch)
-{
-  return * unsmob_pitch (get_mus_property ("last-pitch"));
-}
+#include "music.hh"
+#include "warn.hh"
+#include "program-option.hh"
 
+class Relative_octave_music
+{
+public:
+  DECLARE_SCHEME_CALLBACK (relative_callback, (SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (no_relative_callback, (SCM, SCM));
+};
 
-Relative_octave_music::Relative_octave_music (SCM l)
-  : Music_wrapper (l)
+MAKE_SCHEME_CALLBACK (Relative_octave_music, no_relative_callback, 2)
+  SCM
+Relative_octave_music::no_relative_callback (SCM music, SCM pitch)
 {
-  set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));  
+  (void)music;
+  return pitch;
 }
 
-Relative_octave_music::Relative_octave_music ()
+MAKE_SCHEME_CALLBACK (Relative_octave_music, relative_callback, 2)
+  SCM
+Relative_octave_music::relative_callback (SCM music, SCM pitch)
 {
-  set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));
+  Music *me = unsmob_music (music);
+  if (lily_1_8_relative)
+    {
+      lily_1_8_compatibility_used = true;
+      /*  last-pitch should be junked some time, when
+         we ditch 1.8 compat too.
+
+         When you do, B should start where A left off.
+
+         \relative { A \relative { ...} B }  */
+      SCM last_pitch = me->get_property ("last-pitch");
+      Pitch *ptr = unsmob_pitch (last_pitch);
+      return (ptr) ? last_pitch : pitch;
+    }
+  else
+    return pitch;
 }
 
-ADD_MUSIC (Relative_octave_music);