X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fnote-head-line-engraver.cc;h=36af9534d26f65eab698be3e0f4f4ce78c1bec9f;hb=5e24aa455cac67a7e7b42a0539fcbd8c235417bf;hp=12578a2b5cadde600a41bd4f9b18bf4fafb50d23;hpb=366ac5a9c6dfb5a32111c8dd6ba40e49334402c3;p=lilypond.git diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index 12578a2b5c..36af9534d2 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -1,33 +1,29 @@ -/* +/* note-head-line-engraver.cc -- implement Note_head_line_engraver - + source file of the GNU LilyPond music typesetter - - (c) 2000--2003 Jan Nieuwenhuizen - */ + + (c) 2000--2005 Jan Nieuwenhuizen +*/ #include "engraver.hh" #include "group-interface.hh" -#include "item.hh" -#include "event.hh" -#include "spanner.hh" #include "stem.hh" #include "rhythmic-head.hh" #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" -#include "translator-group.hh" +#include "context.hh" /** Create line-spanner grobs for lines that connect note heads. TODO: have the line commit suicide if the notes are connected with either slur or beam. - */ class Note_head_line_engraver : public Engraver { public: - TRANSLATOR_DECLARATIONS(Note_head_line_engraver); + TRANSLATOR_DECLARATIONS (Note_head_line_engraver); protected: virtual void acknowledge_grob (Grob_info); @@ -35,11 +31,11 @@ protected: virtual void stop_translation_timestep (); private: - Spanner* line_; - Translator* last_staff_; + Spanner *line_; + Context *last_staff_; bool follow_; - Grob* head_; - Grob* last_head_; + Grob *head_; + Grob *last_head_; }; Note_head_line_engraver::Note_head_line_engraver () @@ -54,16 +50,17 @@ Note_head_line_engraver::Note_head_line_engraver () void Note_head_line_engraver::acknowledge_grob (Grob_info info) { - if (Rhythmic_head::has_interface (info.grob_)) + if (Rhythmic_head::has_interface (info.grob ())) { - head_ = info.grob_; + head_ = info.grob (); if (to_boolean (get_property ("followVoice"))) { - Translator_group * tr = daddy_trans_; - while (tr && !tr->is_alias (ly_symbol2scm ( "Staff"))) - tr = tr->daddy_trans_ ; + Context *tr = context (); + while (tr && !tr->is_alias (ly_symbol2scm ("Staff"))) + tr = tr->get_parent_context (); - if (tr && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_) + if (tr + && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_) { if (last_head_) follow_ = true; @@ -73,7 +70,6 @@ Note_head_line_engraver::acknowledge_grob (Grob_info info) } } - void Note_head_line_engraver::process_acknowledged_grobs () { @@ -81,16 +77,14 @@ Note_head_line_engraver::process_acknowledged_grobs () { /* TODO: Don't follow if there's a beam. - We can't do beam-stuff here, since beam doesn't exist yet. - Should probably store follow_ in line_, and suicide at some - later point */ + We can't do beam-stuff here, since beam doesn't exist yet. + Should probably store follow_ in line_, and suicide at some + later point */ if (follow_) - line_ = new Spanner (get_property ("VoiceFollower")); - + line_ = make_spanner ("VoiceFollower", head_->self_scm ()); + line_->set_bound (LEFT, last_head_); line_->set_bound (RIGHT, head_); - - announce_grob(line_, head_->self_scm ()); follow_ = false; } @@ -99,24 +93,17 @@ Note_head_line_engraver::process_acknowledged_grobs () void Note_head_line_engraver::stop_translation_timestep () { - if (line_) - { - typeset_grob (line_); - line_ = 0; - } + line_ = 0; if (head_) last_head_ = head_; head_ = 0; } - - - -ENTER_DESCRIPTION(Note_head_line_engraver, -/* descr */ "Engrave a line between two note heads, for example a glissando. If " -" followVoice is set, staff switches also generate a line.", -/* creats*/ "Glissando VoiceFollower", -/* accepts */ "glissando-event", -/* acks */ "rhythmic-head-interface", -/* reads */ "followVoice", -/* write */ ""); +ADD_TRANSLATOR (Note_head_line_engraver, + /* descr */ "Engrave a line between two note heads, for example a glissando. If " + " followVoice is set, staff switches also generate a line.", + /* creats*/ "Glissando VoiceFollower", + /* accepts */ "glissando-event", + /* acks */ "rhythmic-head-interface", + /* reads */ "followVoice", + /* write */ "");