#include "spanner.hh"
#include "item.hh"
#include "axis-group-interface.hh"
+#include "pointer-group-interface.hh"
#include "hara-kiri-group-spanner.hh"
+#include "grob-array.hh"
MAKE_SCHEME_CALLBACK (Align_interface, alignment_callback, 2);
SCM
Axis ax = (Axis)scm_to_int (axis);
Grob *par = me->get_parent (ax);
if (par && !to_boolean (par->get_property ("positioning-done")))
- {
- Align_interface::align_elements_to_extents (par, ax);
- }
- return scm_make_real (0.0);
+ Align_interface::align_elements_to_extents (par, ax);
+ return scm_from_double (0.0);
}
MAKE_SCHEME_CALLBACK (Align_interface, fixed_distance_alignment_callback, 2);
Axis ax = (Axis)scm_to_int (axis);
Grob *par = me->get_parent (ax);
if (par && !to_boolean (par->get_property ("positioning-done")))
- {
- Align_interface::align_to_fixed_distance (par, ax);
- }
- return scm_make_real (0.0);
+ Align_interface::align_to_fixed_distance (par, ax);
+ return scm_from_double (0.0);
}
/*
Real dy = robust_scm2double (me->get_property ("forced-distance"), 0.0);
- Link_array<Grob> elems
- = extract_grob_array (me, ly_symbol2scm ("elements"));
+ extract_grob_set (me, "elements", elem_source);
+
+ Link_array<Grob> elems (elem_source); // writable..
Real where_f = 0;
TODO: support self-alignment-{Y, X}
*/
for (int i = 0; i < translates.size (); i++)
- {
- elems[i]->translate_axis (translates[i] - v.center (), a);
- }
+ elems[i]->translate_axis (translates[i] - v.center (), a);
}
/*
if (a == Y_AXIS
&& me_spanner
&& me_spanner->get_bound (LEFT)->break_status_dir () == CENTER)
- {
- me_spanner->warning (_("vertical alignment called before line-breaking. Only do cross-staff spanners with PianoStaff."));
- }
-
+ me_spanner->warning (_ ("vertical alignment called before line-breaking. Only do cross-staff spanners with PianoStaff."));
+
me->set_property ("positioning-done", SCM_BOOL_T);
SCM d = me->get_property ("stacking-dir");
Array<Interval> dims;
Link_array<Grob> elems;
- Link_array<Grob> all_grobs
- = extract_grob_array (me, ly_symbol2scm ("elements"));
+
+ extract_grob_set (me, "elements", all_grobs);
for (int i = 0; i < all_grobs.size (); i++)
{
Interval y = all_grobs[i]->extent (me, a);
while (j < all_grobs.size ())
{
if (i < elems.size () && all_grobs[j] == elems[i])
- {
- w = translates[i++];
- }
+ w = translates[i++];
all_translates.push (w);
j++;
}
Align_interface::set_axis (Grob *me, Axis a)
{
Axis_group_interface::set_axes (me, a, a);
+ SCM ga_scm = me->get_object ("elements");
+ Grob_array *ga = unsmob_grob_array (ga_scm);
+ if (!ga)
+ {
+ ga_scm = Grob_array::make_array ();
+ ga = unsmob_grob_array (ga_scm);
+ me->set_object ("elements", ga_scm);
+ }
+
+ ga->set_ordered (true);
}
/*
"Order grobs from top to bottom, left to right, right to left or bottom"
"to top.",
"forced-distance stacking-dir align-dir threshold positioning-done "
- "center-element elements axes");
+ "elements axes");
struct Foobar
{