From: Jan Nieuwenhuizen Date: Mon, 27 Apr 1998 06:50:24 +0000 (+0200) Subject: partial: 0.1.59.jcn X-Git-Tag: release/0.1.59~1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=876f24a789b6437f74cab7789d97dcfe4ec3b1ec;p=lilypond.git partial: 0.1.59.jcn --- diff --git a/lily/include/multi-measure-rest-engraver.hh b/lily/include/multi-measure-rest-engraver.hh new file mode 100644 index 0000000000..2809343982 --- /dev/null +++ b/lily/include/multi-measure-rest-engraver.hh @@ -0,0 +1,37 @@ +/* + multi_measure_rest-engraver.hh -- declare Multi_measure_rest_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1998 Jan Nieuwenhuizen +*/ + +#ifndef MULTI_MEASURE_REST_ENGRAVER_HH +#define MULTI_MEASURE_REST_ENGRAVER_HH + +#include "engraver.hh" +#include "moment.hh" + +/** + */ +class Multi_measure_rest_engraver : public Engraver +{ +public: + TRANSLATOR_CLONE(Multi_measure_rest_engraver); + DECLARE_MY_RUNTIME_TYPEINFO; + 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 (); + +private: + bool part_b_; + Moment last_mom_; + Multi_measure_rest_req* multi_measure_req_l_; + Multi_measure_rest* mmrest_p_; +}; + +#endif // MULTI_MEASURE_REST_ENGRAVER_HH diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh new file mode 100644 index 0000000000..afaeaf7770 --- /dev/null +++ b/lily/include/multi-measure-rest.hh @@ -0,0 +1,29 @@ +/* + multi-measure-rest.hh -- declare Multi_measure_rest + + source file of the GNU LilyPond music typesetter + + (c) 1998 Jan Nieuwenhuizen + + */ + +#ifndef MULTI_MEASURE_REST_HH +#define MULTI_MEASURE_REST_HH + +#include "item.hh" + +class Multi_measure_rest : public Item +{ +public: + Multi_measure_rest (); + int measures_i_; + + DECLARE_MY_RUNTIME_TYPEINFO; + +protected: + virtual void do_print () const; + virtual Molecule *brew_molecule_p () const; +}; + +#endif /* MULTI_MEASURE_REST_HH */ + diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc new file mode 100644 index 0000000000..d7e78c400e --- /dev/null +++ b/lily/multi-measure-rest-engraver.cc @@ -0,0 +1,84 @@ +/* + multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver + + (c) 1998 Jan Nieuwenhuizen +*/ + +#include "proto.hh" +#include "musical-request.hh" +#include "multi-measure-rest.hh" +#include "multi-measure-rest-engraver.hh" +#include "score-column.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; + multi_measure_req_l_ = 0; + mmrest_p_ = 0; +} + +bool +Multi_measure_rest_engraver::do_try_request (Request* req_l) +{ + if (!req_l->musical () || !req_l->musical ()->multi_measure ()) + return false; + + multi_measure_req_l_ = req_l->musical ()->multi_measure (); + last_mom_ = now_moment () + multi_measure_req_l_->duration_.length (); + + return true; +} + +void +Multi_measure_rest_engraver::do_removal_processing () +{ + if (mmrest_p_) + { + typeset_element (mmrest_p_); + mmrest_p_ = 0; + } +} + +void +Multi_measure_rest_engraver::do_process_requests () +{ + 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; +} + +void +Multi_measure_rest_engraver::do_pre_move_processing () +{ + if (!mmrest_p_) + return; + + typeset_element (mmrest_p_); + mmrest_p_ = 0; + + if (part_b_) + return; + + if (last_mom_ <= now_moment () + Moment (1)) + multi_measure_req_l_ = 0; +} + diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc new file mode 100644 index 0000000000..a018c53107 --- /dev/null +++ b/lily/multi-measure-rest.cc @@ -0,0 +1,59 @@ +/* + multi-measure-rest.cc -- implement Multi_measure_rest + + source file of the GNU LilyPond music typesetter + + (c) 1998 Jan Nieuwenhuizen + + */ + +#include "multi-measure-rest.hh" +#include "debug.hh" +#include "paper-def.hh" +#include "lookup.hh" +#include "dimen.hh" +#include "rest.hh" +#include "script.hh" +#include "text-def.hh" +#include "molecule.hh" + +IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest, Item); + +Multi_measure_rest::Multi_measure_rest () +{ + measures_i_ = 0; +} + +void +Multi_measure_rest::do_print () const +{ + DOUT << "measures_i_ " << measures_i_; +} + +Molecule* +Multi_measure_rest::brew_molecule_p () const +{ + /* + [TODO] 3 + * make real multi-measure rest symbol: |---| + * make two,four,eight-measure-rest symbols + */ + + Atom s (paper ()->lookup_l ()->rest (0, 0)); + Molecule* mol_p = new Molecule ( Atom (s)); + Real interline_f = paper ()->interline_f (); + mol_p->translate_axis (interline_f, Y_AXIS); + + if (measures_i_) + { + Text_def text; + text.text_str_ = measures_i_; + text.style_str_ = "number"; + Atom s = text.get_atom (paper (), UP); + s.translate_axis (3.0 * interline_f, Y_AXIS); + mol_p->add (s); + } + + return mol_p; +} +