13 Stem::Stem(int c) //, Moment len)
18 minnote = 1000; // invalid values
30 Stem::do_print() const
33 mtor << "flag "<< flag << " print_flag " << print_flag
34 << "min,max [" << minnote << ", " << maxnote << "]";
38 Stem::set_stemend(Real se)
42 if (! ((dir > 0 && se >= maxnote) || (se <= minnote && dir <0)) )
43 WARN << "Weird stem size; check for narrow beams.\n";
45 top = (dir < 0) ? maxnote : se;
46 bot = (dir < 0) ? se : minnote;
51 Stem::add(Notehead *n)
53 assert(status < PRECALCED);
63 n->dependencies.push(this);
68 Stem::get_default_dir()
72 Real mean = (minnote+maxnote)/2;
73 return (mean > staff_center) ? -1: 1;
76 Stem::set_default_dir()
78 dir = get_default_dir();
81 Stem::set_default_stemlen()
86 int stafftop = 2*staff_center;
87 stemlen = STEMLEN + (maxnote - minnote);
89 // uhh... how about non 5-line staffs?
90 if (maxnote < -2 && dir == 1){
91 int t = staff_center - staff_center/2;
92 stemlen = t - minnote +2;
93 } else if (minnote > stafftop + 2 && dir == -1) {
94 int t = staff_center + staff_center/2;
95 stemlen = maxnote -t +2;
103 Stem::set_default_extents()
105 assert(minnote<=maxnote);
108 set_default_stemlen();
110 set_stemend((dir< 0) ? maxnote-stemlen: minnote +stemlen);
112 stem_xoffset = paper()->note_width();
118 Stem::set_noteheads()
120 heads.sort(Notehead::compare);
121 heads[0]->extremal = -1;
122 heads.last()->extremal = 1;
124 int lastpos = heads[0]->position;
125 for (int i=1; i < heads.size(); i ++) {
126 int dy =abs(lastpos- heads[i]->position);
130 heads[i]->x_dir = (stem_xoffset>0) ? 1:-1;
134 lastpos = heads[i]->position;
139 Stem::do_pre_processing()
142 set_default_extents();
150 if (!print_flag || abs(flag) <= 4)
151 return Interval(0,0); // TODO!
153 Interval r(p->lookup_p_->flag(flag).dim.x);
159 Stem::brew_molecule_p()const return out;
164 Paperdef *p =paper();
166 Real dy = p->internote();
167 Symbol ss =p->lookup_p_->stem(bot*dy,top*dy);
170 out = new Molecule(Atom(ss));
172 if (print_flag&&abs(flag) > 4){
173 Symbol fl = p->lookup_p_->flag(flag);
177 } else if (flag > 4) {
183 out->translate(Offset(stem_xoffset,0));
189 return pcol_l_->hpos + stem_xoffset;