2 scoreline.cc -- implement Line_of_score
4 source file of the GNU LilyPond music typesetter
6 (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 #include "scoreline.hh"
13 #include "paper-def.hh"
18 Line_of_score::Line_of_score()
24 IMPLEMENT_IS_TYPE_B1(Line_of_score
,Spanner
);
27 Line_of_score::add (Score_elem
*e
)
29 // avoid excess dependencies.
30 if (!(e
->axis_group_l_a_
[0] || e
->axis_group_l_a_
[1]))
35 Line_of_score::contains_b (Paper_column
const* c
) const
37 return cols
.find_l ((Paper_column
*)c
);
41 Line_of_score::set_breaking (Array
<Col_hpositions
> const &breaking
)
43 for (int j
=0; j
< breaking
.size(); j
++)
45 const Array
<Paper_column
*> &curline (breaking
[j
].cols
);
46 const Array
<Paper_column
*> &errors (breaking
[j
].error_col_l_arr_
);
47 const Array
<Real
> &config (breaking
[j
].config
);
49 for (int i
=0; i
< errors
.size(); i
++)
50 errors
[i
]->error_mark_b_
= true;
52 Line_of_score
*line_l
=0;
53 Line_of_score
*line_p
=0;
55 if (breaking
.size() >1)
57 line_p
= (Line_of_score
*)clone()->spanner ();
63 ((Array
<Paper_column
*> &)line_l
->cols
) = curline
;
64 line_l
->set_bounds(LEFT
,curline
[0]);
66 line_l
->set_bounds(RIGHT
,curline
.top());
70 pscore_l_
->typeset_broken_spanner (line_p
);
71 broken_into_l_arr_
.push (line_p
);
74 for (int i
=0; i
< curline
.size(); i
++)
76 curline
[i
]->translate_axis (config
[i
],X_AXIS
);
77 curline
[i
]->line_l_
= (Line_of_score
*)line_l
;
84 Line_of_score::break_into_pieces (bool)
89 Link_array
<Line_of_score
>
90 Line_of_score::get_lines() const
92 Link_array
<Line_of_score
> ret
;
94 if (broken_into_l_arr_
.size())
95 for (int i
=0; i
< broken_into_l_arr_
.size(); i
++)
97 ret
.push ((Line_of_score
*)broken_into_l_arr_
[i
]);
100 ret
.push ((Line_of_score
*)this); // ugh
106 Line_of_score::do_print() const
112 Line_of_score::do_width() const
114 return Spanner::do_width();
117 Link_array
<Score_elem
>
118 Line_of_score::get_extra_dependencies () const
120 Link_array
<Score_elem
> r
;
121 for (int i
=0; i
< cols
.size (); i
++)
127 Line_of_score::do_unlink ()
129 Spanner::do_unlink ();
130 for (int i
=0; i
< cols
.size (); i
++)
137 Line_of_score::do_junk_links ()