lilypond-1.3.154
[lilypond.git] / lily / p-col.cc
blobf31d29d30e860b32fc591b174a841a78df8fa9fb
1 /*
2 paper-column.cc -- implement Paper_column
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
9 #include "paper-column.hh"
10 #include "paper-score.hh"
11 #include "debug.hh"
13 void
14 Paper_column::add_rod (Paper_column * p, Real d)
16 Direction dir = Direction (sign (p->rank_i () - rank_i ()));
18 if (!dir)
20 programming_error ("Must set minimum distance between differing columns.");
21 return;
24 for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
26 Column_rod &rod = minimal_dists_arr_drul_[dir][i];
27 if (rod.other_l_ == p)
29 rod.distance_f_ = rod.distance_f_ >? d;
30 return ;
34 Column_rod cr;
35 cr.distance_f_ = d;
36 cr.other_l_ = p;
38 minimal_dists_arr_drul_[dir].push (cr);
41 void
42 Paper_column::add_spring (Paper_column * p, Real d, Real s)
44 Direction dir = Direction (sign (p->rank_i () - rank_i ()));
46 if (!dir)
48 warning (_ ("Must set spring between differing columns"));
49 return;
52 for (int i=0; i < spring_arr_drul_[dir].size (); i++)
54 Column_spring &spring = spring_arr_drul_[dir][i];
55 if (spring.other_l_ == p)
57 spring.distance_f_ = spring.distance_f_ >? d;
58 return ;
62 Column_spring cr;
63 cr.distance_f_ = d;
64 cr.strength_f_ = s;
65 cr.other_l_ = p;
67 spring_arr_drul_[dir].push (cr);
70 int
71 Paper_column::rank_i() const
73 return rank_i_;
76 void
77 Paper_column::set_rank (int i)
79 rank_i_ = i;
82 void
83 Paper_column::do_print() const
85 #ifndef NPRINT
86 DOUT << "rank: " << rank_i_ << '\n';
87 Direction d = LEFT;
90 for (int i=0; i < minimal_dists_arr_drul_[d].size (); i++)
92 minimal_dists_arr_drul_[d][i].print ();
94 for (int i=0; i < spring_arr_drul_[d].size (); i++)
96 spring_arr_drul_[d][i].print ();
100 while ((flip (&d))!=LEFT);
101 Item::do_print ();
102 #endif
105 bool
106 Paper_column::breakpoint_b() const
108 return !line_l_;
111 Paper_column::Paper_column()
113 set_axes (X_AXIS, X_AXIS);
115 line_l_=0;
116 rank_i_ = -1;
119 Line_of_score*
120 Paper_column::line_l() const
122 return line_l_;
128 Paper_column*
129 Paper_column::column_l () const
131 return (Paper_column*)(this);
135 ugh.
137 void
138 Paper_column::preprocess ()
140 minimal_dists_arr_drul_[LEFT].sort (Column_rod::compare);
141 minimal_dists_arr_drul_[RIGHT].sort (Column_rod::compare);
142 spring_arr_drul_[LEFT].sort (Column_spring::compare);
143 spring_arr_drul_[RIGHT].sort (Column_spring::compare);