diff options
author | Erlend Aasland <erlenda@gmail.com> | 2006-05-31 01:47:30 +0000 |
---|---|---|
committer | Erlend Aasland <erlenda@gmail.com> | 2006-05-31 01:47:30 +0000 |
commit | 9f3572d98bb948c9689cd1f75401a029451fa001 (patch) | |
tree | e7f7c702c3e2ac9b6da3bd472e22c3f51c8ade7b /lily/chord-name-engraver.cc | |
parent | 04265f11d1f21416ccebd2dcaa1d903dc781b36e (diff) |
Fix some bugs in the dynamic engraver and PostScript backend
Diffstat (limited to 'lily/chord-name-engraver.cc')
-rw-r--r-- | lily/chord-name-engraver.cc | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 20752ae2f7..963c3033f2 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -6,19 +6,17 @@ (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org> */ -#include "chord-name.hh" -#include "context.hh" -#include "dimensions.hh" #include "engraver.hh" +#include "chord-name.hh" +#include "output-def.hh" #include "font-interface.hh" -#include "item.hh" #include "output-def.hh" -#include "pitch.hh" +#include "dimensions.hh" +#include "item.hh" #include "protected-scm.hh" -#include "stream-event.hh" +#include "context.hh" #include "warn.hh" - -#include "translator.icc" +#include "pitch.hh" class Chord_name_engraver : public Engraver { @@ -26,12 +24,14 @@ class Chord_name_engraver : public Engraver protected: void stop_translation_timestep (); void process_music (); + virtual bool try_music (Music *); virtual void finalize (); virtual void derived_mark () const; - DECLARE_TRANSLATOR_LISTENER (note); private: + void add_note (Music *); + Item *chord_name_; - vector<Stream_event*> notes_; + vector<Music*> notes_; SCM last_chord_; }; @@ -54,6 +54,12 @@ Chord_name_engraver::Chord_name_engraver () } void +Chord_name_engraver::add_note (Music *n) +{ + notes_.push_back (n); +} + +void Chord_name_engraver::process_music () { if (!notes_.size ()) @@ -63,10 +69,10 @@ Chord_name_engraver::process_music () SCM inversion = SCM_EOL; SCM pitches = SCM_EOL; - Stream_event *inversion_event = 0; + Music *inversion_event = 0; for (vsize i = 0; i < notes_.size (); i++) { - Stream_event *n = notes_[i]; + Music *n = notes_[i]; SCM p = n->get_property ("pitch"); if (!unsmob_pitch (p)) continue; @@ -119,11 +125,18 @@ Chord_name_engraver::process_music () last_chord_ = chord_as_scm; } -IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note); -void -Chord_name_engraver::listen_note (Stream_event *ev) +bool +Chord_name_engraver::try_music (Music *m) { - notes_.push_back (ev); + /* + hmm. Should check? + */ + if (m->is_mus_type ("note-event")) + { + add_note (m); + return true; + } + return false; } void @@ -137,6 +150,8 @@ Chord_name_engraver::stop_translation_timestep () The READs description is not strictly accurate: which properties are read depend on the chord naming function active. */ +#include "translator.icc" + ADD_TRANSLATOR (Chord_name_engraver, /* doc */ "Catch note-events " "and generate the appropriate chordname.", |