]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/relative-octave-check.cc
* lily/include/transposed-music.hh (class Transposed_music): remove.
[lilypond.git] / lily / relative-octave-check.cc
index 51de14b84955dd53f51b2842ca9a2d521799fecc..9ce7c5d88d8a45a3c3cad523b25edb2590ccf6bb 100644 (file)
@@ -1,22 +1,37 @@
-#include "relative-octave-check.hh"
+/*
+  relative-octave-check.cc --  implement Relative_octave_check
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "music.hh"
 #include "input.hh"
 #include "pitch.hh"
 
-/*
-  yeah, so this should be in a separate file.
-  I'm lazy.
- */
-Pitch
-Relative_octave_check::to_relative_octave (Pitch p)
+class Relative_octave_check
 {
-  Pitch * check_p = unsmob_pitch (get_property ("pitch"));
+public:
+  DECLARE_SCHEME_CALLBACK(relative_callback,(SCM,SCM));
+};
+
 
+MAKE_SCHEME_CALLBACK(Relative_octave_check, relative_callback, 2)
+SCM
+Relative_octave_check::relative_callback (SCM music, SCM last_pitch)
+{
+  Pitch p = *unsmob_pitch (last_pitch);
+  Music *m = unsmob_music (music); 
+  Pitch *check_p = unsmob_pitch (m->get_property ("pitch"));
+  
   int delta_oct = 0;
   if (check_p)
     {
       Pitch no_octave (-1,
                       check_p->get_notename (),
-                      check_p->get_alteration());
+                      check_p->get_alteration ());
 
       Pitch result = no_octave.to_relative_octave (p);
 
@@ -25,14 +40,12 @@ Relative_octave_check::to_relative_octave (Pitch p)
          String s = _("Failed octave check, got: ");
          s += result.to_string ();
          
-         origin ()->warning (s);
+         m->origin ()->warning (s);
          
          delta_oct = check_p->get_octave () - result.get_octave ();
        }
     }
   
-  return  Pitch (p.get_octave () + delta_oct,
-                p.get_notename (), p.get_alteration ());
+  return Pitch (p.get_octave () + delta_oct,
+               p.get_notename (), p.get_alteration ()).smobbed_copy ();
 }
-
-ADD_MUSIC(Relative_octave_check);