Marc Hohl <[email protected]> writes:
>> You are only overriding line-positions. While the bar line printer will
>> see that this now contains a value and heeds it, this does not magically
>> affect the (now ignored) line-count property.
> Ah, I see, thanks for the explanation.
> But why are the dots placed as if there were only four lines?
> If the line number is still 5 and the routine in lily/bar-line.cc
> works as expected, why are the dots placed correctly?
Huh? Because there is a lot of code for doing that?
{
std::vector<Real> linepos = Staff_symbol::line_positions (staff);
if (!linepos.empty ())
{
centre = Staff_symbol::line_span (staff).center ();
/*
fold the staff into two at centre and find the first gap
big enough to hold a dot and some space below and above
*/
[lots and lots]
And you'll see that Staff_symbol::line_positions consults both in order:
vector<Real>
Staff_symbol::line_positions (Grob *me)
{
SCM line_positions = me->get_property ("line-positions");
if (scm_is_pair (line_positions))
{
int line_count = scm_ilength (line_positions);
vector<Real> values (line_count);
int i = 0;
for (SCM s = line_positions; scm_is_pair (s);
s = scm_cdr (s))
{
values[i++] = scm_to_double (scm_car (s));
}
return values;
}
else
{
int line_count = Staff_symbol::line_count (me);
Real height = line_count - 1;
vector<Real> values (line_count);
for (int i = 0; i < line_count; i++)
{
values[i] = height - i * 2;
}
return values;
}
}
--
David Kastrup
_______________________________________________
lilypond-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-devel