1 #include "idealspacing.hh"
8 #include "scoreline.hh"
15 PScore::get_spacing(PCol*l, PCol*r)
18 for (iter_top(suz,ic); ic.ok(); ic++) {
19 if (ic->left == l && ic->right == r){
24 Idealspacing*ip =new Idealspacing(l,r);
34 for (iter_top(cols,c); c.ok(); )
43 PScore::add(PStaff *s)
45 assert(s->pscore_l_ == this);
46 staffs.bottom().add(s);
51 PScore::do_connect(PCol *c1, PCol *c2, Real d, Real h)
55 Idealspacing*s_l=get_spacing(c1,c2);
64 PScore::connect(PCol* c1, PCol *c2, Real d, Real h)
66 do_connect(c1,c2,d,h);
67 do_connect(c1->postbreak_p_, c2,d,h);
68 do_connect(c1, c2->prebreak_p_,d,h);
69 do_connect(c1->postbreak_p_, c2->prebreak_p_,d,h);
73 PScore::typeset_item(Item *i, PCol *c, PStaff *s, int breakstat)
76 // assert(!breakstat != 4 || c->breakable() );
78 typeset_item(i, c->prebreak_p_, s);
83 typeset_item(i, c->postbreak_p_, s);
92 /* first do this, because i->width() may follow the 0-pointer */
97 PScore::typeset_spanner(Spanner*span_p, PStaff*ps)
99 span_p->pstaff_l_ = ps;
100 spanners.bottom().add(span_p);
101 ps->spans.bottom().add(span_p);
103 // do not init start/stop fields. These are for broken spans only.
104 span_p->add_processing();
113 p->prebreak_p_->pscore_l_ = this;
114 p->postbreak_p_->pscore_l_ = this;
116 cols.bottom().add(p);
119 PScore::PScore( Paperdef*p)
125 PScore::output(Tex_stream &ts)
129 ts << "\n "<< paper_l_->lookup_p_->texsetting << "%(Tex id)\n";
130 for (iter_top(lines,lic); lic.ok(); lic++) {
131 ts << "% line of score no. " << l++ <<"\n";
132 ts << lic->TeXstring();
134 ts << "\\interscoreline\n";
140 PScore::select_items(PStaff*ps, PCol*pc)
144 for (iter_top(pc->its,i); i.ok(); i++){
145 if (i->pstaff_l_ == ps)
146 ret.push((Item*)(const Item*)i);
155 for (iter_top(cols,cc); cc.ok(); cc++)
157 for (iter_top(suz,i); i.ok(); i++)
163 PScore::print() const
168 mtor << "\ncolumns: ";
169 for (iter_top(cols,cc); cc.ok(); cc++)
172 mtor << "\nideals: ";
173 for (iter_top(suz,i); i.ok(); i++)
182 for (iter_top(spanners,i); i.ok(); i++) {
185 for (iter_top(its,i); i.ok(); i++){
191 PScore::postprocess()
193 for (iter_top(broken_spans,i); i.ok(); i++) { // could chase spans as well.
194 i->post_processing();
196 for (iter_top(its,i); i.ok(); i++){
197 i->post_processing();
200 for (iter_top(broken_spans,i); i.ok(); i++) {
201 i->molecule_processing();
203 for (iter_top(its,i); i.ok(); i++){
204 i->molecule_processing();
207 for (iter_top(lines,i); i.ok(); i++)
213 PScore::find_col(const PCol *c)const
217 what = what->daddy_l_;
219 return cols.find((PCol*)what);
223 PScore::add_broken(Spanner*s)
225 assert(s->left->line_l_ == s->right->line_l_);
226 broken_spans.bottom().add(s);
227 s->left->starters.bottom().add (s);
228 s->right->stoppers.bottom().add (s);
232 PScore::set_breaking(Array<Col_configuration> breaking)
234 for (int j=0; j < breaking.size(); j++) {
235 Array<PCol*> &curline(breaking[j].cols);
236 Array<Real> &config(breaking[j].config);
238 Line_of_score *s_p = new Line_of_score(curline,this);
239 lines.bottom().add(s_p);
240 for (int i=0; i < curline.size(); i++){
241 curline[i]->hpos = config[i];
247 PScore::calc_breaking()
250 set_breaking(w.solve());
257 *mlog << "Preprocessing ... ";
259 *mlog << "Calculating ... ";
261 *mlog << "Postprocessing ... ";