X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fnote-head-line-engraver.cc;h=1e1dcf5a0486938a5bec24759adf5d6f2baec71e;hb=de658c9789658317b265eb7f3fd34a87c7a8f953;hp=2a6336f89dafb4601d22a9b2a29535fc85db93af;hpb=8f3edf3cc6aab40cd2aedde70c75ad01f6a34d5e;p=lilypond.git diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index 2a6336f89d..1e1dcf5a04 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -3,13 +3,13 @@ source file of the GNU LilyPond music typesetter - (c) 2000 Jan Nieuwenhuizen + (c) 2000--2003 Jan Nieuwenhuizen */ #include "engraver.hh" #include "group-interface.hh" #include "item.hh" -#include "musical-request.hh" +#include "event.hh" #include "spanner.hh" #include "stem.hh" #include "rhythmic-head.hh" @@ -29,19 +29,18 @@ class Note_head_line_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Note_head_line_engraver (); + TRANSLATOR_DECLARATIONS(Note_head_line_engraver); protected: virtual void acknowledge_grob (Grob_info); - virtual void create_grobs (); + virtual void process_acknowledged_grobs (); virtual void stop_translation_timestep (); virtual bool try_music (Music *); private: Spanner* line_; - Request* req_; - Request* last_req_; + Music* req_; + Music* last_req_; Translator* last_staff_; bool follow_; Grob* head_; @@ -64,11 +63,8 @@ Note_head_line_engraver::try_music (Music* m) { if (!req_) { - if (Glissando_req *r = dynamic_cast (m)) - { - req_ = r; - return true; - } + req_ = m; + return true; } return false; } @@ -76,16 +72,16 @@ Note_head_line_engraver::try_music (Music* m) void Note_head_line_engraver::acknowledge_grob (Grob_info info) { - if (Rhythmic_head::has_interface (info.elem_l_)) + if (Rhythmic_head::has_interface (info.grob_)) { - head_ = info.elem_l_; - if (to_boolean (get_property ("followThread"))) + head_ = info.grob_; + if (to_boolean (get_property ("followVoice"))) { - Translator_group * tr = daddy_trans_l_; - while (tr && tr->type_str_ != "Staff") - tr = tr->daddy_trans_l_ ; + Translator_group * tr = daddy_trans_; + while (tr && tr->type_string_ != "Staff") + tr = tr->daddy_trans_ ; - if (tr && tr->type_str_ == "Staff" && tr != last_staff_) + if (tr && tr->type_string_ == "Staff" && tr != last_staff_) { if (last_head_) follow_ = true; @@ -97,7 +93,7 @@ Note_head_line_engraver::acknowledge_grob (Grob_info info) void -Note_head_line_engraver::create_grobs () +Note_head_line_engraver::process_acknowledged_grobs () { if (!line_ && (follow_ || last_req_) && last_head_ && head_ && (last_head_ != head_)) @@ -108,7 +104,7 @@ Note_head_line_engraver::create_grobs () Should probably store follow_ in line_, and suicide at some later point */ if (follow_) - line_ = new Spanner (get_property ("FollowThread")); + line_ = new Spanner (get_property ("VoiceFollower")); else line_ = new Spanner (get_property ("Glissando")); @@ -118,10 +114,11 @@ Note_head_line_engraver::create_grobs () /* Note, mustn't set y-parent of breakable symbol to simple item: one of the two broken parts won't have an y-parent! */ /* X parent is set by set_bound */ - line_->set_parent (Staff_symbol_referencer::staff_symbol_l (last_head_), + line_->set_parent (Staff_symbol_referencer::get_staff_symbol (last_head_), Y_AXIS); - announce_grob (line_, last_req_); + SCM c = last_req_? last_req_->self_scm () : SCM_EOL; + announce_grob(line_, c); last_req_ = 0; follow_ = false; @@ -148,5 +145,13 @@ Note_head_line_engraver::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Note_head_line_engraver); + +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 */ "");