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"
12 #include "axis-group-interface.hh"
15 Paper_column::add_rod (Paper_column * p, Real d)
17 Direction dir = Direction (sign (p->rank_i () - rank_i ()));
21 programming_error ("Must set minimum distance between differing columns.");
25 for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
27 Column_rod &rod = minimal_dists_arr_drul_[dir][i];
28 if (rod.other_l_ == p)
30 rod.distance_f_ = rod.distance_f_ >? d;
39 minimal_dists_arr_drul_[dir].push (cr);
43 Paper_column::add_spring (Paper_column * p, Real d, Real s)
45 Direction dir = Direction (sign (p->rank_i () - rank_i ()));
49 warning (_ ("Must set spring between differing columns"));
53 for (int i=0; i < spring_arr_drul_[dir].size (); i++)
55 Column_spring &spring = spring_arr_drul_[dir][i];
56 if (spring.other_l_ == p)
58 spring.distance_f_ = spring.distance_f_ >? d;
68 spring_arr_drul_[dir].push (cr);
72 Paper_column::rank_i() const
78 Paper_column::set_rank (int i)
84 Paper_column::do_print() const
87 DEBUG_OUT << "rank: " << rank_i_ << '\n';
91 for (int i=0; i < minimal_dists_arr_drul_[d].size (); i++)
93 minimal_dists_arr_drul_[d][i].print ();
95 for (int i=0; i < spring_arr_drul_[d].size (); i++)
97 spring_arr_drul_[d][i].print ();
101 while ((flip (&d))!=LEFT);
107 Paper_column::line_l() const
113 Paper_column::column_l () const
115 return (Paper_column*)(this);
118 Paper_column::Paper_column (Moment w)
120 SCM when = (new Moment (w))->smobify_self ();
121 scm_unprotect_object (when);
122 set_elt_property ("when", when);
124 Axis_group_interface (this).set_interface ();
125 Axis_group_interface (this).set_axes (X_AXIS, X_AXIS);
132 Paper_column::when_mom () const
134 SCM m = get_elt_property ("when");
136 if (SMOB_IS_TYPE_B(Moment, m))
138 s = *SMOB_TO_TYPE (Moment,m);
144 Paper_column::musical_b () const
146 SCM m = get_elt_property ("shortest-starter-duration");
148 if (SMOB_IS_TYPE_B(Moment, m))
150 s = *SMOB_TO_TYPE (Moment,m);
152 return s != Moment(0);