/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM
Align_interface::align_to_minimum_distances (SCM smob)
{
- Grob *me = unsmob_grob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
SCM
Align_interface::align_to_ideal_distances (SCM smob)
{
- Grob *me = unsmob_grob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
if (!pure)
{
- Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+ Skyline_pair *skys = unsmob<Skyline_pair> (g->get_property (a == Y_AXIS
? "vertical-skylines"
: "horizontal-skylines"));
if (skys)
else
{
assert (a == Y_AXIS);
- Interval extent = g->pure_height (g, start, end);
+ Interval extent = g->pure_y_extent (g, start, end);
// This is a hack to get better accuracy on the pure-height of VerticalAlignment.
// It's quite common for a treble clef to be the highest element of one system
// of the system. This way, the tall treble clefs are only compared with the treble
// clefs of the other staff and they will be ignored if the staff above is, for example,
// lyrics.
- if (Axis_group_interface::has_interface (g))
+ if (has_interface<Axis_group_interface> (g))
{
extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
SCM fv = ly_assoc_get (scm_cons (scm_from_int (start), scm_from_int (end)),
me->get_property ("minimum-translations-alist"),
SCM_EOL);
- if (fv != SCM_EOL)
+ if (!scm_is_null (fv))
return ly_scm2floatvector (fv);
}
Skyline_pair skyline = get_skylines (elems[j], a, other_common, pure, start, end);
if (skyline.is_empty ())
- dy = 0.0;
- else if (!last_nonempty_element)
- dy = skyline[-stacking_dir].max_height () + padding;
+ {
+ translates.push_back (where);
+ continue;
+ }
+
+ if (!last_nonempty_element)
+ {
+ dy = skyline[-stacking_dir].max_height () + padding;
+ for (vsize k = j; k-- > 0;)
+ translates[k] = stacking_dir * dy;
+ }
else
{
SCM spec = Page_layout_problem::get_spacing_spec (last_nonempty_element, elems[j], pure, start, end);
last_spaceable_element_pos = where;
last_spaceable_skyline = down_skyline;
}
- if (!skyline.is_empty ())
- last_nonempty_element = elems[j];
+ last_nonempty_element = elems[j];
}
if (pure)
Align_interface::set_ordered (Grob *me)
{
SCM ga_scm = me->get_object ("elements");
- Grob_array *ga = unsmob_grob_array (ga_scm);
+ Grob_array *ga = unsmob<Grob_array> (ga_scm);
if (!ga)
{
ga_scm = Grob_array::make_array ();
- ga = unsmob_grob_array (ga_scm);
+ ga = unsmob<Grob_array> (ga_scm);
me->set_object ("elements", ga_scm);
}
ADD_INTERFACE (Align_interface,
"Order grobs from top to bottom, left to right, right to left"
" or bottom to top. For vertical alignments of staves, the"
- " @code{break-system-details} of the left"
+ " @code{line-break-system-details} of the left"
" @rinternals{NonMusicalPaperColumn} may be set to tune"
" vertical spacing.",