X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftie-engraver.cc;h=dab482036b9b1e94cbc19f922d93e1c31f239a2a;hb=53e2f0457cebe26a53710b50fa0f178aefb90a30;hp=181ede0912fd3c3fe921f5babc1a30e3d5e9d2b6;hpb=a501f5946426488804ca2b03ab986f9c2b94ab99;p=lilypond.git diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 181ede0912..dab482036b 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -7,10 +7,9 @@ */ -#include "event.hh" #include "tie.hh" #include "context.hh" - +#include "protected-scm.hh" #include "spanner.hh" #include "tie-column.hh" #include "engraver.hh" @@ -35,11 +34,13 @@ class Tie_engraver : public Engraver Link_array now_heads_; Link_array heads_to_tie_; Link_array ties_; + SCM tie_start_definition_; Spanner * tie_column_; protected: virtual void stop_translation_timestep (); + virtual void derived_mark () const; virtual void start_translation_timestep (); virtual void acknowledge_grob (Grob_info); virtual bool try_music (Music*); @@ -56,6 +57,13 @@ Tie_engraver::Tie_engraver () event_ = 0; last_event_ = 0; tie_column_ = 0; + tie_start_definition_ = SCM_EOL; +} + +void +Tie_engraver::derived_mark () const +{ + scm_gc_mark (tie_start_definition_); } @@ -74,7 +82,9 @@ void Tie_engraver::process_music () { if (event_) - get_parent_context ()->set_property ("tieMelismaBusy", SCM_BOOL_T); + { + context ()->set_property ("tieMelismaBusy", SCM_BOOL_T); + } } void @@ -94,24 +104,24 @@ Tie_engraver::acknowledge_grob (Grob_info i) maybe should check positions too. */ if (right_mus && left_mus - && is_equal (right_mus->get_property ("pitch"), + && ly_c_equal_p (right_mus->get_property ("pitch"), left_mus->get_property ("pitch"))) { - Grob * p = make_spanner ("Tie"); + Grob * p = new Spanner (tie_start_definition_, context()->get_grob_key ("Tie")); + announce_grob (p, last_event_->self_scm ()); Tie::set_interface (p); // cannot remove yet! Tie::set_head (p, LEFT, th); Tie::set_head (p, RIGHT, h); ties_.push (p); - announce_grob (p, last_event_->self_scm ()); } } if (ties_.size () && ! tie_column_) { - tie_column_ = make_spanner ("TieColumn"); - announce_grob (tie_column_, SCM_EOL); + tie_column_ = make_spanner ("TieColumn", SCM_EOL); + } if (tie_column_) @@ -123,7 +133,7 @@ Tie_engraver::acknowledge_grob (Grob_info i) void Tie_engraver::start_translation_timestep () { - get_parent_context ()->set_property ("tieMelismaBusy", + context ()->set_property ("tieMelismaBusy", ly_bool2scm (heads_to_tie_.size ())); } @@ -134,22 +144,19 @@ Tie_engraver::stop_translation_timestep () if (ties_.size ()) { heads_to_tie_.clear (); - for (int i=0; i< ties_.size (); i++) + for (int i = 0; i< ties_.size (); i++) { typeset_tie (ties_[i]); } ties_.clear (); last_event_ = 0; - if (tie_column_) - { - typeset_grob (tie_column_); - tie_column_ =0; - } + tie_column_ = 0; } if (event_) { + tie_start_definition_ = updated_grob_properties (context (), ly_symbol2scm ("Tie")); heads_to_tie_ = now_heads_; last_event_ = event_; } @@ -175,11 +182,10 @@ Tie_engraver::typeset_tie (Grob *her) index_set_cell (her->get_property ("head-pair"), LEFT, new_head_drul[LEFT]->self_scm ()); index_set_cell (her->get_property ("head-pair"), RIGHT, new_head_drul[RIGHT]->self_scm ()); - typeset_grob (her); } -ENTER_DESCRIPTION (Tie_engraver, +ADD_TRANSLATOR (Tie_engraver, /* descr */ "Generate ties between noteheads of equal pitch.", /* creats*/ "Tie TieColumn", /* accepts */ "tie-event",