2 staff-elem.cc -- implement Staff_elem
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 #include "paper-def.hh"
14 #include "molecule.hh"
15 #include "staff-elem.hh"
19 Staff_elem::TeXstring() const
22 m.translate(offset_); // ugh?
26 Staff_elem::Staff_elem(Staff_elem const&s)
27 :dependancy_l_arr_(s.dependancy_l_arr_),
28 dependant_l_arr_(s.dependant_l_arr_)
33 pstaff_l_ = s.pstaff_l_;
34 offset_ = Offset(0,0);
39 If deleted, then remove dependant_l_arr_ depency!
41 Staff_elem::~Staff_elem()
43 assert(status < DELETED);
50 Staff_elem::translate(Offset O)
56 Staff_elem::do_width() const
61 Molecule*m = brew_molecule_p();
65 r = output->extent().x;
70 Staff_elem::width() const
72 Interval r=do_width();
74 if (!r.empty_b()) // float exception on DEC Alpha
80 Staff_elem::do_height() const
84 Molecule*m = brew_molecule_p();
88 r = output->extent().y;
93 Staff_elem::height() const
95 Interval r=do_height();
105 Staff_elem::print()const
108 mtor << name() << "{\n";
119 Staff_elem::Staff_elem()
122 offset_ = Offset(0,0);
129 Staff_elem::paper() const
132 return pstaff_l_->pscore_l_->paper_l_;
136 Staff_elem::add_processing()
138 if (status >= VIRGIN)
145 Staff_elem::pre_processing()
147 if (status >= PRECALCED )
149 assert(status != PRECALCING); // cyclic dependency
152 for (int i=0; i < dependancy_l_arr_.size(); i++)
153 if (dependancy_l_arr_[i])
154 dependancy_l_arr_[i]->pre_processing();
161 Staff_elem::post_processing()
163 if (status >= POSTCALCED)
165 assert(status != POSTCALCING);// cyclic dependency
168 for (int i=0; i < dependancy_l_arr_.size(); i++)
169 if (dependancy_l_arr_[i])
170 dependancy_l_arr_[i]->post_processing();
171 do_post_processing();
176 Staff_elem::molecule_processing()
178 if (status >= OUTPUT)
180 status = OUTPUT; // do it only once.
181 for (int i=0; i < dependancy_l_arr_.size(); i++)
182 if (dependancy_l_arr_[i])
183 dependancy_l_arr_[i]->molecule_processing();
185 output= brew_molecule_p();
189 Staff_elem::do_post_processing()
194 Staff_elem::do_pre_processing()
199 Staff_elem::do_add_processing()
204 Staff_elem::substitute_dependency(Staff_elem * old, Staff_elem * newdep)
207 for (int i=0; i < dependancy_l_arr_.size(); i++) {
208 if (dependancy_l_arr_[i] == old){
209 dependancy_l_arr_[i] = newdep;
211 } else if (dependancy_l_arr_[i] == newdep) {
216 dependancy_l_arr_.push(newdep);
220 Staff_elem::add_dependency(Staff_elem * p)
222 for (int i=0; i < dependancy_l_arr_.size(); i ++)
223 if (dependancy_l_arr_[i] == p)
226 dependancy_l_arr_.push(p);
227 p->dependant_l_arr_.push(p);
229 IMPLEMENT_STATIC_NAME(Staff_elem);
232 Staff_elem::brew_molecule_p()const
234 Atom a(paper()->lookup_l()->fill(Box(Interval(0,0), Interval(0,0))));
235 return new Molecule (a);
238 Staff_elem::offset() const