]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.32
authorfred <fred>
Sat, 15 Feb 1997 12:58:12 +0000 (12:58 +0000)
committerfred <fred>
Sat, 15 Feb 1997 12:58:12 +0000 (12:58 +0000)
hdr/clefreg.hh [new file with mode: 0644]
src/clefreg.cc [new file with mode: 0644]

diff --git a/hdr/clefreg.hh b/hdr/clefreg.hh
new file mode 100644 (file)
index 0000000..ff9e590
--- /dev/null
@@ -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 (file)
index 0000000..81c87e9
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+  clef.cc -- implement  Clef_register
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
+  Mats Bengtsson <matsb@s3.kth.se>
+*/
+
+#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;
+}
+