]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/time-signature-engraver.cc
lilypond-manuals.css: edit color scheme and some spacing
[lilypond.git] / lily / time-signature-engraver.cc
index aac2cc231bb545d27de92c98442c1acd776181f3..e4e76e17d685154c2868ab75c2efd8d8feae5dbe 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -43,7 +43,7 @@ protected:
   void process_music ();
 public:
   TRANSLATOR_DECLARATIONS (Time_signature_engraver);
-  DECLARE_TRANSLATOR_LISTENER (time_signature);
+  void listen_time_signature (Stream_event *);
 };
 
 void
@@ -53,14 +53,14 @@ Time_signature_engraver::derived_mark () const
   scm_gc_mark (time_cause_);
 }
 
-Time_signature_engraver::Time_signature_engraver ()
+Time_signature_engraver::Time_signature_engraver (Context *c)
+  : Engraver (c)
 {
   time_signature_ = 0;
   time_cause_ = SCM_EOL;
   last_time_fraction_ = SCM_BOOL_F;
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Time_signature_engraver, time_signature);
 void
 Time_signature_engraver::listen_time_signature (Stream_event *ev)
 {
@@ -74,13 +74,12 @@ Time_signature_engraver::process_music ()
     return;
 
   SCM fr = get_property ("timeSignatureFraction");
-  if (last_time_fraction_ != fr
-      && scm_is_pair (fr))
+  if (!scm_is_eq (last_time_fraction_, fr) && scm_is_pair (fr))
     {
       time_signature_ = make_item ("TimeSignature", time_cause_);
       time_signature_->set_property ("fraction", fr);
 
-      if (last_time_fraction_ == SCM_BOOL_F)
+      if (scm_is_false (last_time_fraction_))
         time_signature_->set_property ("break-visibility",
                                        get_property ("initialTimeSignatureVisibility"));
 
@@ -104,9 +103,9 @@ Time_signature_engraver::process_music ()
 void
 Time_signature_engraver::stop_translation_timestep ()
 {
-  if (time_signature_ && (time_cause_ != SCM_EOL))
+  if (time_signature_ && !scm_is_null (time_cause_))
     {
-      Moment *mp = Moment::unsmob (get_property ("measurePosition"));
+      Moment *mp = unsmob<Moment> (get_property ("measurePosition"));
       if (mp && (mp->main_part_ > Rational (0))
           && !to_boolean (get_property ("partialBusy")))
         time_signature_->warning ("mid-measure time signature without \\partial");
@@ -116,7 +115,11 @@ Time_signature_engraver::stop_translation_timestep ()
   time_cause_ = SCM_EOL;
 }
 
-#include "translator.icc"
+void
+Time_signature_engraver::boot ()
+{
+  ADD_LISTENER (Time_signature_engraver, time_signature);
+}
 
 ADD_TRANSLATOR (Time_signature_engraver,
                 /* doc */