From: fred Date: Tue, 26 Mar 2002 22:14:35 +0000 (+0000) Subject: lilypond-1.1.52 X-Git-Tag: release/1.5.59~2315 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=38ae55715dfa51bf68386bd30346cf2eae4f713b;p=lilypond.git lilypond-1.1.52 --- diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index cb6ec3ef3c..4e860dcd21 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -138,11 +138,11 @@ Beam_engraver::acknowledge_element (Score_element_info info) if (!stem_l || stem_l->beam_l_) return; - bool self_grace = beam_p_->get_elt_property (grace_scm_sym) != SCM_BOOL_F; + bool stem_grace = stem_l->get_elt_property (grace_scm_sym) != SCM_BOOL_F; - if (!self_grace && stem_grace) - return; + if (get_property ("weAreGraceContext",0).to_bool () != stem_grace) + return; Rhythmic_req *rhythmic_req = dynamic_cast (info.req_l_); if (!rhythmic_req) diff --git a/lily/include/local-key-engraver.hh b/lily/include/local-key-engraver.hh index 8109865d24..bba7b4cadd 100644 --- a/lily/include/local-key-engraver.hh +++ b/lily/include/local-key-engraver.hh @@ -13,7 +13,7 @@ #include "parray.hh" struct Local_key_engraver : Engraver { - Local_key_item *key_item_p_; + Local_key_item *key_item_p_; protected: VIRTUAL_COPY_CONS(Translator); virtual void do_process_requests(); @@ -21,15 +21,17 @@ protected: virtual void do_pre_move_processing(); virtual void do_creation_processing (); virtual void process_acknowledged (); + virtual void do_removal_processing (); public: Key local_key_; - Key const *key_C_; + Key_engraver *key_grav_l_; Array mel_l_arr_; Array support_l_arr_; Link_array forced_l_arr_; Link_array tied_l_arr_; Local_key_engraver(); + bool self_grace_b_; }; diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc index c5230c0905..1307cba000 100644 --- a/lily/local-key-engraver.cc +++ b/lily/local-key-engraver.cc @@ -19,14 +19,15 @@ Local_key_engraver::Local_key_engraver() { - key_C_ = 0; + key_grav_l_ = 0; key_item_p_ =0; + self_grace_b_ = false; } void Local_key_engraver::do_creation_processing () { -/* + /* UGHGUHGUH. Breaks if Key_engraver is removed from under us. @@ -34,15 +35,23 @@ Local_key_engraver::do_creation_processing () Translator * result = daddy_grav_l()->get_simple_translator ("Key_engraver"); - if (!result) + key_grav_l_ = dynamic_cast (result); + + if (!key_grav_l_) { warning (_ ("out of tune") + "! " + _ ("can't find") + " Key_engraver"); } else { - key_C_ = &(dynamic_cast (result))->key_; - local_key_ = *key_C_; + local_key_ = key_grav_l_->key_; } + + self_grace_b_ = get_property ("weAreGraceContext",0 ).to_bool (); + + /* + TODO + (if we are grace) get key info from parent Local_key_engraver + */ } void @@ -84,6 +93,12 @@ Local_key_engraver::process_acknowledged () } } +void +Local_key_engraver::do_removal_processing () +{ + // TODO: signal accidentals to Local_key_engraver the +} + void Local_key_engraver::do_pre_move_processing() { @@ -107,17 +122,17 @@ Local_key_engraver::acknowledge_element (Score_element_info info) { Note_req * note_l = dynamic_cast (info.req_l_); Note_head * note_head = dynamic_cast (info.elem_l_); + + bool gr = (info.elem_l_->get_elt_property (grace_scm_sym)!=SCM_BOOL_F); + if (gr != self_grace_b_) + return; if (note_l && note_head) { mel_l_arr_.push (note_l); support_l_arr_.push (note_head); } - else if (dynamic_cast (info.req_l_)) - { - local_key_ = *key_C_; - } - else if (Tie * tie_l = dynamic_cast (info.elem_l_)) + else if (Tie * tie_l = dynamic_cast (info.elem_l_)) { tied_l_arr_.push (tie_l-> head_l_drul_[RIGHT]); } @@ -130,8 +145,12 @@ Local_key_engraver::do_process_requests() if (time_C_ && !time_C_->whole_in_measure_) { bool no_res = get_property ("noResetKey",0).to_bool (); - if (!no_res && key_C_) - local_key_= *key_C_; + if (!no_res && key_grav_l_) + local_key_= key_grav_l_->key_; + } + else if (key_grav_l_ && key_grav_l_->key_changed_b ()) + { + local_key_ = key_grav_l_->key_; } }