X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fkey-item.cc;h=a3b646b0e5048710f68dbc36cd83ef394d3a86b9;hb=1b071315c1d318e46035ec8bc0b73da55a025ae8;hp=58a91cac61d2245c34b2f627fcf34ce757d611f3;hpb=fd67592c6acb9b8e9ac10135d688b3f4938ac0b1;p=lilypond.git diff --git a/lily/key-item.cc b/lily/key-item.cc index 58a91cac61..a3b646b0e5 100644 --- a/lily/key-item.cc +++ b/lily/key-item.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1996, 1997--1998 Han-Wen Nienhuys + (c) 1996, 1997--1999 Han-Wen Nienhuys keyplacement by Mats Bengtsson */ @@ -14,126 +14,97 @@ #include "molecule.hh" #include "paper-def.hh" #include "lookup.hh" - -#include "key-engraver.hh" +#include "musical-pitch.hh" const int FLAT_TOP_PITCH=2; /* fes,ges,as and bes typeset in lower octave */ const int SHARP_TOP_PITCH=4; /* ais and bis typeset in lower octave */ Key_item::Key_item () { - breakable_b_ =true; - default_b_ = false; + multi_octave_b_ = false; + set_elt_property (breakable_scm_sym, SCM_BOOL_T); set_c_position (0); } -void -Key_item::read (Key_engraver const & key_grav_r) -{ - multi_octave_b_ = key_grav_r.key_.multi_octave_b_; - const Array &idx_arr = key_grav_r.accidental_idx_arr_; - for (int i = 0; i < idx_arr.size(); i++) - { - Musical_pitch m_l =idx_arr[i]; - if (multi_octave_b_) - add (m_l); - else - add (m_l.notename_i_, m_l.accidental_i_); - } - const Array &old_idx_arr = key_grav_r.old_accidental_idx_arr_; - for (int i = 0 ; i< old_idx_arr.size(); i++) - { - Musical_pitch m_l =old_idx_arr[i]; - if (multi_octave_b_) - add_old (m_l); - else - add_old (m_l.notename_i_, m_l.accidental_i_); - } -} - -void -Key_item::set_c_position (int c0) +int +Key_item::get_c_position () const { - c0_position = c0; // Find the c in the range -4 through 2 - int from_bottom_pos = c0 + 4; + int from_bottom_pos = c0_position_ + 4; from_bottom_pos = from_bottom_pos%7; from_bottom_pos = (from_bottom_pos + 7)%7; // Precaution to get positive. - c_position = from_bottom_pos - 4; + return from_bottom_pos - 4; } -void -Key_item::add (int p, int a) +void +Key_item::set_c_position (int c0) { - pitch.push (p); - acc.push (a); + c0_position_ = c0; } + void -Key_item::add (const Musical_pitch& pitch_r) +Key_item::add (int p, int a) { - pitch.push (pitch_r.steps()); - acc.push (pitch_r.accidental_i_); + pitch_arr_.push (p); + acc_arr_.push (a); } void Key_item::add_old (int p, int a) { - old_pitch.push (p); - old_acc.push (a); + old_pitch_arr_.push (p); + old_acc_arr_.push (a); } -void -Key_item::add_old (const Musical_pitch& pitch_r) -{ - old_pitch.push (pitch_r.steps()); - old_acc.push (pitch_r.accidental_i_); -} int Key_item::calculate_position(int p, int a) const { if (multi_octave_b_) { - return p + c0_position; + return p + c0_position_; } else { - if ((a<0 && ((p>FLAT_TOP_PITCH) || (p+c_position>4)) && (p+c_position>1)) + if ((a<0 && ((p>FLAT_TOP_PITCH) || (p+get_c_position ()>4)) && (p+get_c_position ()>1)) || - (a>0 && ((p>SHARP_TOP_PITCH) || (p+c_position>5)) && (p+c_position>2))) + (a>0 && ((p>SHARP_TOP_PITCH) || (p+get_c_position ()>5)) && (p+get_c_position ()>2))) { p -= 7; /* Typeset below c_position */ } - return p + c_position; + return p + get_c_position (); } } /* - TODO space the `natural' signs wider + TODO + - space the `natural' signs wider + - dehair this */ Molecule* -Key_item::brew_molecule_p() const +Key_item::do_brew_molecule_p() const { Molecule*output = new Molecule; - Real inter = paper()->internote_f (); + Real inter = staff_line_leading_f ()/2.0; int j; - if ((break_status_dir_ == LEFT || break_status_dir_ == CENTER) - || old_pitch.size ()) + if ((break_status_dir () == LEFT || break_status_dir () == CENTER) + || old_pitch_arr_.size ()) { - for (int i =0; i < old_pitch.size(); i++) + for (int i =0; i < old_pitch_arr_.size(); i++) { - for (j =0; (j < pitch.size()) && (old_pitch[i] != pitch[j]); j++) + for (j =0; (j < pitch_arr_.size()) + && (old_pitch_arr_[i] != pitch_arr_[j]); j++) ; - if (j == pitch.size() - || (old_pitch[i] == pitch[j] && old_acc[i] != acc[j])) + if (j == pitch_arr_.size() + || (old_pitch_arr_[i] == pitch_arr_[j] + && old_acc_arr_[i] != acc_arr_[j])) { - Atom a =lookup_l ()->accidental (0); - a.translate_axis (calculate_position(old_pitch[i], old_acc[i]) * inter, Y_AXIS); - Molecule m (a); - output->add_at_edge (X_AXIS, RIGHT, m); + Molecule m =lookup_l ()->accidental (0,false); + m.translate_axis (calculate_position(old_pitch_arr_[i], old_acc_arr_[i]) * inter, Y_AXIS); + output->add_at_edge (X_AXIS, RIGHT, m,0); } } @@ -145,35 +116,26 @@ Key_item::brew_molecule_p() const Interval x(0, inter); Interval y(0,0); - output->add_at_edge (X_AXIS, RIGHT, lookup_l()->fill (Box(x,y))); + output->add_at_edge (X_AXIS, RIGHT, lookup_l()->fill (Box(x,y)),0); } - for (int i =0; i < pitch.size(); i++) + for (int i =0; i < pitch_arr_.size(); i++) { - Atom a =lookup_l ()->accidental (acc[i]); - a.translate_axis (calculate_position(pitch[i], acc[i]) * inter, Y_AXIS); - Molecule m (a); - output->add_at_edge (X_AXIS, RIGHT, m); + Molecule m =lookup_l ()->accidental (acc_arr_[i],false); + m.translate_axis (calculate_position(pitch_arr_[i], acc_arr_[i]) * inter, Y_AXIS); + output->add_at_edge (X_AXIS, RIGHT, m, 0); } - if (pitch.size()) + + if (pitch_arr_.size()) { Molecule m (lookup_l ()->fill (Box ( - Interval (0, paper()->note_width ()), + Interval (0, paper_l ()->note_width ()), Interval (0,0)))); - output->add_at_edge (X_AXIS, RIGHT, m); + output->add_at_edge (X_AXIS, RIGHT, m,0 ); } return output; } -IMPLEMENT_IS_TYPE_B1(Key_item,Item); -void -Key_item::do_pre_processing() -{ - if (default_b_) - { - transparent_b_ = (break_status_dir() != RIGHT); - set_empty (transparent_b_); - } -} +