2 paper-column.cc -- implement Paper_column
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "paper-column.hh"
11 #include "paper-score.hh"
13 #include "axis-group-interface.hh"
14 #include "spaceable-grob.hh"
15 #include "molecule.hh"
16 #include "text-item.hh"
18 #include "font-interface.hh"
22 Paper_columns form the top-most item parent. (The Paper_columns X
23 parent is Line_of_score, which is a spanner.)
25 Paper_columns form the units for the spacing engine. They are
26 numbered, the first (leftmost) is column 0. Numbering happens before
27 line-breaking, and columns are not renumbered after line breaking.
29 Since many columns go unused, you should only use the rank field to
30 get ordering information. Two adjacent columns may have
36 Paper_column::do_break_processing ()
38 Spaceable_grob::remove_interface (this);
39 Item::do_break_processing ();
43 Paper_column::rank_i (Grob*me)
45 return dynamic_cast<Paper_column*> (me)->rank_i_;
49 Paper_column::line_l () const
55 Paper_column::column_l () const
57 return (Paper_column*) (this);
60 Paper_column::Paper_column (SCM l)
63 Axis_group_interface::set_interface (this);
64 Axis_group_interface::set_axes (this, X_AXIS, X_AXIS);
65 Spaceable_grob::set_interface (this);
72 Paper_column::when_mom (Grob*me)
74 SCM m = me->get_grob_property ("when");
76 if (unsmob_moment (m))
78 return *unsmob_moment (m);
84 Paper_column::musical_b (Grob *me)
86 SCM m = me->get_grob_property ("shortest-starter-duration");
88 if (unsmob_moment (m))
90 s = *unsmob_moment (m);
92 return s != Moment (0);
98 Paper_column::used_b (Grob*me)
100 return gh_pair_p (me->get_grob_property ("elements")) || Item::breakable_b (me)
101 || gh_pair_p (me->get_grob_property ("bounded-by-me"))
106 Print a vertical line and the rank number, to aid debugging.
109 MAKE_SCHEME_CALLBACK(Paper_column,brew_molecule,1);
111 Paper_column::brew_molecule (SCM p)
113 Grob *me = unsmob_grob (p);
115 String r = to_str (Paper_column::rank_i (me));
116 SCM properties = Font_interface::font_alist_chain (me);
118 Molecule t = Text_item::text2molecule (me, ly_str02scm (r.ch_C()),
120 t.align_to (X_AXIS, CENTER);
121 t.align_to (Y_AXIS, DOWN);
123 Molecule l = Lookup::filledbox (Box (Interval (-0.01, 0.01),
127 return t.smobbed_copy ();