2 paper-column.cc -- implement Paper_column
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "paper-column.hh"
10 #include "paper-score.hh"
14 Paper_column::add_rod (Paper_column * p, Real d)
16 Direction dir = Direction (sign (p->rank_i () - rank_i ()));
20 programming_error ("Must set minimum distance between differing columns.");
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;
38 minimal_dists_arr_drul_[dir].push (cr);
42 Paper_column::add_spring (Paper_column * p, Real d, Real s)
44 Direction dir = Direction (sign (p->rank_i () - rank_i ()));
48 warning (_ ("Must set spring between differing columns"));
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;
67 spring_arr_drul_[dir].push (cr);
71 Paper_column::rank_i() const
77 Paper_column::set_rank (int i)
83 Paper_column::do_print() const
86 DEBUG_OUT << "rank: " << rank_i_ << '\n';
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);
106 Paper_column::line_l() const
115 Paper_column::column_l () const
117 return (Paper_column*)(this);
123 Paper_column::Paper_column (Moment w)
125 SCM when = (new Moment (w))->smobify_self ();
126 scm_unprotect_object (when);
127 set_elt_property ("when", when);
129 set_axes (X_AXIS, X_AXIS);
136 Paper_column::when_mom () const
138 SCM m = get_elt_property ("when");
140 if (SMOB_IS_TYPE_B(Moment, m))
142 s = *SMOB_TO_TYPE (Moment,m);
148 Paper_column::musical_b () const
150 SCM m = get_elt_property ("shortest-starter-duration");
152 if (SMOB_IS_TYPE_B(Moment, m))
154 s = *SMOB_TO_TYPE (Moment,m);
156 return s != Moment(0);