]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.49
authorfred <fred>
Sun, 24 Mar 2002 19:38:20 +0000 (19:38 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:38:20 +0000 (19:38 +0000)
lily/command-request.cc
lily/include/key.hh
lily/include/staff-info.hh
lily/key-item.cc
lily/key.cc
lily/local-key-reg.cc

index dfa448f41f494ce8c348c40586e7011e139a02b1..55ccf54c27f25d015a292e71c372e205af8f31a5 100644 (file)
@@ -173,6 +173,13 @@ Key_change_req::transpose(Melodic_req const & d)const
 }
 
 IMPLEMENT_STATIC_NAME(Key_change_req);
+void
+Key_change_req::squash_octaves()
+{
+    for (int i=0; i < melodic_p_arr_.size(); i++) {
+       melodic_p_arr_[i]->octave_i_ = 0;
+    }
+}
 
 void
 Key_change_req::do_print() const
@@ -185,6 +192,7 @@ Key_change_req::do_print() const
 Key_change_req::Key_change_req()
 {
        minor_b_ = false;
+       multi_octave_b_= false;
 }
 
 Key_change_req::Key_change_req(Key_change_req const&c)
@@ -192,6 +200,7 @@ Key_change_req::Key_change_req(Key_change_req const&c)
        for (int i=0; i < c.melodic_p_arr_.size(); i++) 
                melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->melodic() );
        minor_b_ = c.minor_b_;
+       multi_octave_b_ = c.multi_octave_b_;
 }
 
 Key_change_req::~Key_change_req()
@@ -208,7 +217,7 @@ Key_change_req::flats_i()
                Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
                assert( mel_l );
                if ( mel_l->accidental_i_ < 0 )
-                       flats_i++;
+                       flats_i -= mel_l->accidental_i_;
        }
        return flats_i;
 }
@@ -227,7 +236,7 @@ Key_change_req::sharps_i()
                Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
                assert( mel_l );
                if ( mel_l->accidental_i_ > 0 )
-                       sharps_i++;
+                       sharps_i+= mel_l->accidental_i_;
        }
        return sharps_i;
 }
index 3d58629d5d49dd5b9c48e11ac4f16ea2530d3e2d..cbffa1e8f7d33562ab83268c99afff77302cbae2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  key.hh -- declare Key
+  key.hh -- declare Key, Octave_key
 
   (c) 1996,97 Han-Wen Nienhuys
 */
 #include "varray.hh"
 #include "scalar.hh"
 
-/// administration of current key
-class Key {
-    Array<int> accidental_i_arr_;
-
-    /* *************** */
+/// administration of current key in one octave.
+class Octave_key {
 
 public:
+    Array<int> accidental_i_arr_;
  
     Key();
     void set(int i, int acc);
@@ -24,14 +22,19 @@ public:
 };
 
 /// administration of accidentals
-struct Local_key
+class Key
 {
-    void reset(Key);    
-    Key& oct(int);
-    Local_key();
-
-private:
-    Array<Key> octaves;
+    /** for each octave a key. Has to be private since octave 0 isn't member 0.
+     */
+    Array<Octave_key> octaves;
+public:
+    bool multi_octave_b_;
+    
+    Octave_key&oct(int);
+    Octave_key  oct(int) const;
+    void set(int name, int acc);
+    void set(int oct, int name, int acc);
+    Key();
 };
 
 #endif // KEY_HH
index 4873da6b490be60952ce11ad4b66dae3b6707041..2229c99ab0e81f1b88774094bf76b60ee67dc1d2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  staff-info.hh -- declare 
+  staff-info.hh -- declare Staff_info
 
   source file of the LilyPond music typesetter
 
@@ -19,6 +19,8 @@ struct Staff_info {
     /// when is now?
     Time_description const *time_C_;
     Rhythmic_grouping const *rhythmic_C_;
+
+    ///
     bool break_allowed_b_;
 
     Moment when();
index 7cc9fcbfa90cf698213323db867e35ac2a666cd9..1054fc2c739064c2ffd809b2db961dac698e6119 100644 (file)
@@ -20,10 +20,11 @@ Key_item::Key_item(int c)
 void
 Key_item::read(Key_register const & key_reg_r)
 {
+    assert(!key_reg_r.key_.multi_octave_b_);
     const Array<int> &idx_arr =key_reg_r.accidental_idx_arr_; 
     for (int i = 0 ; i< idx_arr.size(); i++) {
        int note = idx_arr[i];
-       int acc = key_reg_r.key_.acc(note);
+       int acc = key_reg_r.key_.oct(0).acc(note);
 
        add(note, acc);
     }
index 7e23464ccfec917464e06d63eeaad6f3219dca28..0f02ef845d0d3b4a9d854233ae2ec726531f1bb9 100644 (file)
@@ -3,36 +3,47 @@
 const int OCTAVES=14;          // ugh..
 const int ZEROOCTAVE=7;
 
-Key::Key()
+Octave_key::Octave_key()
 {
     accidental_i_arr_.set_size(7);
     for (int i= 0; i < 7 ; i++)
        accidental_i_arr_[i] = 0;
 }
 
-Local_key::Local_key()
+Key::Key()
 {
+    multi_octave_b_ = false;
     octaves.set_size(OCTAVES);
 }
 
-Key&
-Local_key::oct(int i)
+Octave_key&
+Key::oct(int i)
+{
+    return octaves[i+ZEROOCTAVE];    
+}
+
+Octave_key
+Key::oct(int i)const
 {
     return octaves[i+ZEROOCTAVE];    
 }
 
 void
-Key::set(int i, int a)
+Octave_key::set(int i, int a)
 {
     assert(a > -3 && a < 3);
     accidental_i_arr_[i]=a;    
 }
 
+void
+Key::set(int o, int n , int a)
+{
+    octaves[o + ZEROOCTAVE].set(n,a);
+}
 
 void
-Local_key::reset(Key k)
+Key::set (int n, int a)
 {
     for (int i= 0; i < OCTAVES ; i++)
-       octaves[i] = k;
+       octaves[i].set(n,a);
 }
-
index 308a7ac432c6d933b54f888adda7baa7bb611705..caf3e524a66e8539a790e0a60a2074526f510caf 100644 (file)
@@ -52,7 +52,7 @@ Local_key_register::acknowledge_element(Staff_elem_info info)
        Key_register * key_reg_l =
            (Key_register*)info.origin_reg_l_arr_[0];
        key_C_ = &key_reg_l->key_;
-       local_key_.reset(*key_C_);
+       local_key_ = *key_C_;
     }  
 }
 
@@ -62,7 +62,7 @@ Local_key_register::process_requests()
     Time_description const * time_C_ = get_staff_info().time_C_;
     if (! time_C_->whole_in_measure_){
        if (key_C_)  
-           local_key_.reset(*key_C_);
+           local_key_= *key_C_;
        else if( time_C_->when_ >Moment(0))
            warning ("Help me! can't figure  current key");
     }