From: fred Date: Sun, 24 Mar 2002 20:11:34 +0000 (+0000) Subject: lilypond-0.1.62 X-Git-Tag: release/1.5.59~3107 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f2b1ce8d89d5e6388f3b4e53657dcb38db11a7a0;p=lilypond.git lilypond-0.1.62 --- diff --git a/lily/include/multi-measure-rest-engraver.hh b/lily/include/multi-measure-rest-engraver.hh index 2809343982..067ff3eae1 100644 --- a/lily/include/multi-measure-rest-engraver.hh +++ b/lily/include/multi-measure-rest-engraver.hh @@ -22,16 +22,18 @@ public: Multi_measure_rest_engraver (); protected: - virtual void do_removal_processing (); virtual void do_process_requests (); virtual bool do_try_request (Request*); virtual void do_pre_move_processing (); - + virtual void do_post_move_processing (); private: - bool part_b_; - Moment last_mom_; + Moment rest_req_stop_mom_; + Moment rest_item_creation_mom_; + Moment req_start_mom_; + + + int start_measure_i_; Multi_measure_rest_req* multi_measure_req_l_; Multi_measure_rest* mmrest_p_; }; - #endif // MULTI_MEASURE_REST_ENGRAVER_HH diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 2c93ec04c6..56a3b8d93c 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -2,6 +2,7 @@ multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver (c) 1998 Jan Nieuwenhuizen + Han-Wen Nienhuys */ #include "proto.hh" @@ -9,13 +10,15 @@ #include "multi-measure-rest.hh" #include "multi-measure-rest-engraver.hh" #include "score-column.hh" +#include "time-description.hh" IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_engraver, Engraver); ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver); Multi_measure_rest_engraver::Multi_measure_rest_engraver () { - last_mom_ = 0; + start_measure_i_ = 0; + rest_item_creation_mom_ = rest_req_stop_mom_ =0; multi_measure_req_l_ = 0; mmrest_p_ = 0; } @@ -26,59 +29,54 @@ Multi_measure_rest_engraver::do_try_request (Request* req_l) if (!req_l->musical () || !req_l->musical ()->multi_measure ()) return false; + if (multi_measure_req_l_) + if (!multi_measure_req_l_->equal_b (req_l) + || req_start_mom_ != now_moment ()) + return false; + multi_measure_req_l_ = req_l->musical ()->multi_measure (); - last_mom_ = now_moment () + multi_measure_req_l_->duration_.length (); + req_start_mom_ = now_moment (); + + rest_req_stop_mom_ = req_start_mom_ + multi_measure_req_l_->duration_.length (); return true; } void -Multi_measure_rest_engraver::do_removal_processing () +Multi_measure_rest_engraver::do_process_requests () { - if (mmrest_p_) + if (multi_measure_req_l_ && !mmrest_p_) { - typeset_element (mmrest_p_); - mmrest_p_ = 0; + Time_description const *time = get_staff_info().time_C_; + mmrest_p_ = new Multi_measure_rest; + rest_item_creation_mom_ = time->when_mom (); + announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_)); + start_measure_i_ = time->bars_i_; } } void -Multi_measure_rest_engraver::do_process_requests () +Multi_measure_rest_engraver::do_pre_move_processing () { - if (mmrest_p_ || !multi_measure_req_l_) - return; - - mmrest_p_ = new Multi_measure_rest; - - Scalar prop = get_property ("part"); - if (prop.isnum_b ()) - part_b_ = prop.to_bool (); - -// if (!part_b_) -// return; - - int measures_i = (int)multi_measure_req_l_->duration_.plet_.iso_i_; - if (part_b_) - mmrest_p_->measures_i_ = measures_i; - - announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_)); - - multi_measure_req_l_ = 0; + Moment now (now_moment ()); + if (mmrest_p_ && rest_item_creation_mom_ == now) + { + typeset_element (mmrest_p_); + } } void -Multi_measure_rest_engraver::do_pre_move_processing () +Multi_measure_rest_engraver::do_post_move_processing () { - if (!mmrest_p_) - return; - - typeset_element (mmrest_p_); - mmrest_p_ = 0; - - if (part_b_) - return; - - if (last_mom_ <= now_moment ()) + Time_description const *time = get_staff_info().time_C_; + Moment now (now_moment ()); + if (rest_req_stop_mom_ <= now) multi_measure_req_l_ = 0; -} + if (mmrest_p_ && (!time->whole_in_measure_ || !multi_measure_req_l_)) + { + assert (rest_item_creation_mom_ < now); + mmrest_p_->measures_i_ = time->bars_i_ - start_measure_i_; + mmrest_p_ = 0; + } +}