From: fred Date: Sat, 15 Feb 1997 12:58:12 +0000 (+0000) Subject: lilypond-0.0.32 X-Git-Tag: release/1.5.59~6334 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=9b12e8b20ac16cc060bd185d014dec49a65b72ea;p=lilypond.git lilypond-0.0.32 --- diff --git a/hdr/clefreg.hh b/hdr/clefreg.hh new file mode 100644 index 0000000000..ff9e5903a7 --- /dev/null +++ b/hdr/clefreg.hh @@ -0,0 +1,29 @@ +/* + clef.hh -- part of LilyPond + + (c) 1996,97 Han-Wen Nienhuys +*/ + +#ifndef CLEF_HH +#define CLEF_HH +#include "scalar.hh" +#include "varray.hh" +#include "register.hh" + +/// where is c-0 in the staff? +class Clef_register : public Request_register { + Clef_item *clef_p_; +public: + int c0_position_i_; + String clef_type_str_; + + /* ************** */ + virtual void process_request(); + virtual void do_pre_move_process(); + virtual bool try_request(Nonmusical_req*); + Clef_register(Complex_walker*); + void read_req(Clef_change_req*); + bool set_type(String); +}; +#endif // CLEF_HH + diff --git a/src/clefreg.cc b/src/clefreg.cc new file mode 100644 index 0000000000..81c87e953a --- /dev/null +++ b/src/clefreg.cc @@ -0,0 +1,95 @@ +/* + clef.cc -- implement Clef_register + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys , + Mats Bengtsson +*/ + +#include "clefreg.hh" +#include "clefitem.hh" +#include "debug.hh" +#include "commandrequest.hh" +#include "timedescription.hh" +#include "complexwalker.hh" +#include "stcol.hh" + +Clef_register::Clef_register(Complex_walker*w) + : Request_register(w) +{ + clef_p_ = 0; + + set_type("violin"); +} +bool +Clef_register::set_type(String s) +{ + clef_type_str_ = s; + if (clef_type_str_ == "violin") { + c0_position_i_= -2; + } else if (clef_type_str_ == "alto") { + c0_position_i_= 4; + } else if (clef_type_str_ == "tenor") { + c0_position_i_= 6; + } else if (clef_type_str_ == "bass") { + c0_position_i_= 10; + }else + return false; + walk_l_->set_c0_position(c0_position_i_); + return true; +} + +void +Clef_register::read_req(Clef_change_req*c_l) +{ + if (!set_type(c_l->clef_str_)) + error("unknown clef type ", c_l->defined_ch_c_l_); +} + +bool +Clef_register::try_request(Nonmusical_req* r_l) +{ + if (!r_l->clefchange()) + return false; + + accepted_req_arr_.push(r_l); + // do it now! Others have to read c0_pos. + read_req(r_l->clefchange()); + return true; +} + +void +Clef_register::process_request() +{ + const Time_description *time_l = &walk_l_->time_; + if (!accepted_req_arr_.size() && + (!time_l->whole_in_measure_|| !time_l->when_)) { + + clef_p_ = new Clef_item; + clef_p_->change = false; + } else if (accepted_req_arr_.size()) { + clef_p_ = new Clef_item; + clef_p_->change = true; + } + if (clef_p_) { + clef_p_->read(*this); +// announce_element(Staff_elem_info(clef_p_, +// accepted_req_arr_[0], this)); + } +} + +void +Clef_register::do_pre_move_process() +{ + if (!clef_p_) + return; + if (clef_p_->change) { + typeset_breakable_item(new Clef_item(*clef_p_), + clef_p_, new Clef_item(*clef_p_) ); + } else { + typeset_breakable_item(0, 0, clef_p_); + } + clef_p_ = 0; +} +