2 stem-info.cc -- implement Stem_info
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
15 #include "paper-def.hh"
17 #include "stem-info.hh"
19 Stem_info::Stem_info ()
23 Stem_info::Stem_info (Stem*s)
26 x_ = stem_l_->hpos_f ();
28 beam_dir_ = stem_l_->beam_dir_;
29 mult_i_ = stem_l_->mult_i_;
31 Paper_def* paper_l = stem_l_->paper ();
32 Real internote_f = paper_l->internote_f ();
33 Real interbeam_f = paper_l->interbeam_f (mult_i_);
34 Real beam_f = paper_l->beam_thickness_f ();
38 DOUT << "******" << i++ << "******\n"
39 << "begin_f: " << stem_l_->stem_begin_f () * dir_
40 << "\nchord_f/i: " << stem_l_->chord_start_f () * dir_ / internote_f << '\n';
43 // strangely enough, dim(chord_start_f) == pt (and not internote!)
44 idealy_f_ = stem_l_->chord_start_f () / internote_f;
46 // calculate using dim(y) == pt
47 idealy_f_ *= internote_f;
49 // for simplicity, we calculate as if dir == UP
50 idealy_f_ *= beam_dir_;
52 int stem_max = (int)rint(paper_l->get_var ("stem_max"));
53 Real min_stem_f = paper_l->get_var (String ("minimum_stem_length")
54 + to_str (mult_i_ <? stem_max));
55 Real stem_f = paper_l->get_var (String ("stem_length")
56 + to_str (mult_i_ <? stem_max));
58 if (!beam_dir_ || (beam_dir_ == dir_))
59 /* normal beamed stem */
64 idealy_f_ += (mult_i_ - 1) * interbeam_f;
70 miny_f_ += min_stem_f;
72 // lowest beam of (UP) beam must never be lower than second staffline
73 miny_f_ = miny_f_ >? (- 2 * internote_f - beam_f
74 + (mult_i_ > 0) * beam_f + interbeam_f * (mult_i_ - 1));
84 maxy_f_ -= min_stem_f;
87 // set dim(y) == internote
88 idealy_f_ /= internote_f;
89 miny_f_ /= internote_f;
90 maxy_f_ /= internote_f;
92 DOUT << "dir_: " << dir_ << '\n';
93 DOUT << "mult_i_: " << mult_i_ << '\n';
94 DOUT << "idealy_f_: " << idealy_f_ << '\n';
95 DOUT << "miny_f_: " << miny_f_ << '\n';
96 DOUT << "maxy_f_: " << maxy_f_ << '\n';
98 idealy_f_ = maxy_f_ <? idealy_f_;
99 idealy_f_ = miny_f_ >? idealy_f_;