From 985f0feda71476ac57020f2cf4cb7ed4b8e61d40 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:57:46 +0000 Subject: [PATCH] lilypond-0.1.14 --- lily/stem.cc | 162 +++++++++++++++++++++++++++------------------------ 1 file changed, 86 insertions(+), 76 deletions(-) diff --git a/lily/stem.cc b/lily/stem.cc index 0cd5486d0f..60f7b1bad3 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -4,6 +4,8 @@ source file of the GNU LilyPond music typesetter (c) 1996,1997 Han-Wen Nienhuys + + TODO: This is way too hairy */ #include "stem.hh" @@ -33,11 +35,12 @@ Stem::Stem () beams_right_i_ = 0; stem_bottom_f_ = stem_top_f_ = 0; - flag_i_ = 4; - dir_ =CENTER; + flag_i_ = 2; + dir_ = CENTER; staff_size_i_ = 8; stem_xoffset_f_ =0; + beam_gap_i_ = 0; } int @@ -63,7 +66,9 @@ void Stem::do_print () const { #ifndef NPRINT - DOUT << "flag "<< flag_i_ << " print_flag? " << !(bool)beam_l_ << "abbrev_flag_i_" << abbrev_flag_i_; + DOUT << "flag "<< flag_i_ << "abbrev_flag_i_" << abbrev_flag_i_; + if (beam_l_) + DOUT << "beamed"; #endif } @@ -98,11 +103,17 @@ Stem::set_stemend (Real se) stem_bottom_f_ = (dir_ < 0) ? se : min_head_i (); } +int +Stem::type_i () const +{ + return head_l_arr_[0]->balltype_i_; +} + void Stem::add (Note_head *n) { n->add_dependency (this); - head_l_arr_.push (n); + head_l_arr_.push (n); } void @@ -116,13 +127,12 @@ bool Stem::invisible_b () const { - return !head_l_arr_.size () || - head_l_arr_[0]->balltype_i_ <= 0; + return (!head_l_arr_.size () || + head_l_arr_[0]->balltype_i_ <= 0); } // if dir_ is set we return fake values. - int Stem::get_center_distance_from_top () { @@ -152,7 +162,7 @@ Stem::get_default_dir () if (dir_) return dir_; return (get_center_distance_from_top () >= - get_center_distance_from_bottom ()) ? + get_center_distance_from_bottom ()) ? (Direction)-1 : (Direction)1; } @@ -171,8 +181,8 @@ Stem::set_default_stemlen () // ugh... how about non 5-line staffs? bool on_ledger_line_b = ((max_head_i () < -2 && dir_ == 1) -// || (min_head_i () > staff_size_i_ && dir_ == -1)); - || (min_head_i () > staff_size_i_ + 3 && dir_ == -1)); + // || (min_head_i () > staff_size_i_ && dir_ == -1)); + || (min_head_i () > staff_size_i_ + 3 && dir_ == -1)); if (on_ledger_line_b) { set_stemend (staff_size_i_ / 2 - 1); @@ -196,10 +206,12 @@ Stem::set_default_extents () set_default_stemlen (); set_stemend ((dir_< 0) ? - max_head_i ()-stem_length_f (): min_head_i () +stem_length_f ()); - if (dir_ > 0){ - stem_xoffset_f_ = paper ()->note_width ()-paper ()->rule_thickness (); - } + max_head_i ()-stem_length_f (): min_head_i () + stem_length_f ()); + // ugh, a whole ball is wider + if (head_l_arr_[0]->balltype_i_ <= 0) + stem_xoffset_f_ = paper ()->note_width () / 2; + else if (dir_ > 0) + stem_xoffset_f_ = paper ()->note_width () - paper ()->rule_thickness (); else stem_xoffset_f_ = 0; } @@ -245,74 +257,82 @@ Stem::do_pre_processing () if (stem_bottom_f_== stem_top_f_) set_default_extents (); set_noteheads (); - flag_i_ = dir_ * abs (flag_i_); + flag_i_ = flag_i_; transparent_b_ = invisible_b (); - empty_b_ = invisible_b (); + set_empty (invisible_b ()); } Interval Stem::do_width () const { - if (beam_l_ || abs (flag_i_) <= 4) - return Interval (0,0); // TODO! - Paper_def*p= paper (); - Interval r (p->lookup_l ()->flag (flag_i_).dim.x ()); - r+= stem_xoffset_f_; + Interval r (0, 0); + if (abbrev_flag_i_) + { + r = abbrev_mol ().extent ().x (); + } + else if (beam_l_ || abs (flag_i_) <= 2) + ; // TODO! + else + { + Paper_def*p= paper (); + r = p->lookup_l ()->flag (flag_i_, dir_).dim.x (); + r+= stem_xoffset_f_; + } return r; } - Molecule +Molecule Stem::abbrev_mol () const - { - Real dy = paper ()->interbeam_f (); - Real w = 1.5 * paper ()->lookup_l ()->ball (2).dim.x ().length (); - Real beamdy = paper ()->interline_f () / 2; - - int beams_i = 0; - Real slope = paper ()->internote_f () / 4; - - if (beam_l_) { - // huh? - slope = 2 * beam_l_->slope; - // ugh, rather calc from Abbreviation_req - beams_i = beams_right_i_ >? beams_left_i_; - } - paper ()->lookup_l ()->beam (slope, 20 PT); +{ + Real dy = paper ()->interbeam_f (); + Real w = 1.5 * paper ()->lookup_l ()->ball (2).dim.x ().length (); + Real beamdy = paper ()->interline_f () / 2; - Molecule beams; - Atom a (paper ()->lookup_l ()->beam (slope, w)); - a.translate (Offset(- w / 2, stem_end_f () - (w / 2 * slope))); - // ugh - if (!beams_i) - a.translate (dy + beamdy - dir_ * dy, Y_AXIS); - else - a.translate (2 * beamdy - dir_ * (beamdy - dy), Y_AXIS); - - for (int i = 0; i < abbrev_flag_i_; i++) - { - Atom b (a); - b.translate (-dir_ * dy * (beams_i + i), Y_AXIS); - beams.add (b); - } + int beams_i = 0; + Real slope = paper ()->internote_f () / 4; - return beams; - } + if (beam_l_) { + // huh? + slope = 2 * beam_l_->slope; + // ugh, rather calc from Abbreviation_req + beams_i = beams_right_i_ >? beams_left_i_; + } + paper ()->lookup_l ()->beam (slope, 20 PT); + + Molecule beams; + Atom a (paper ()->lookup_l ()->beam (slope, w)); + a.translate (Offset(- w / 2, stem_end_f () - (w / 2 * slope))); + // ugh + if (!beams_i) + a.translate (dy + beamdy - dir_ * dy, Y_AXIS); + else + a.translate (2 * beamdy - dir_ * (beamdy - dy), Y_AXIS); + + for (int i = 0; i < abbrev_flag_i_; i++) + { + Atom b (a); + b.translate (-dir_ * dy * (beams_i + i), Y_AXIS); + beams.add (b); + } + + return beams; +} Molecule* -Stem::brew_molecule_p () const + Stem::brew_molecule_p () const { Molecule *mol_p =new Molecule; - + Real bot = stem_bottom_f_; Real top = stem_top_f_; assert (bot!=top); - + Paper_def *p =paper (); - + Real dy = p->internote_f (); if (!invisible_b ()) { @@ -320,23 +340,13 @@ Stem::brew_molecule_p () const mol_p->add (Atom (ss)); } - if (!beam_l_ &&abs (flag_i_) > 4) + if (!beam_l_ &&abs (flag_i_) > 2) { - Symbol fl = p->lookup_l ()->flag (flag_i_); - Molecule m (fl); - if (flag_i_ < -4) - { - mol_p->add_at_edge (Y_AXIS, DOWN, m); - } - else if (flag_i_ > 4) - { - mol_p->add_at_edge (Y_AXIS, UP, m); - } - else - assert (false); - assert (!abbrev_flag_i_); - } - + Symbol fl = p->lookup_l ()->flag (flag_i_, dir_); + mol_p->add_at_edge (Y_AXIS, dir_, Molecule (Atom (fl))); + assert (!abbrev_flag_i_); + } + if (abbrev_flag_i_) mol_p->add (abbrev_mol ()); @@ -345,14 +355,14 @@ Stem::brew_molecule_p () const } Real -Stem::hpos_f () const + Stem::hpos_f () const { return Item::hpos_f () + stem_xoffset_f_; } void -Stem::do_substitute_dependency (Score_elem*o,Score_elem*n) + Stem::do_substitute_dependency (Score_elem*o,Score_elem*n) { Item * o_l = o->item (); Item * n_l = n? n->item () : 0; -- 2.39.5