source file of the GNU LilyPond music typesetter
- (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
-#include <math.h>
#include "break-align-interface.hh"
-#include "libc-extension.hh" // isinf
#include "pointer-group-interface.hh"
#include "self-alignment-interface.hh"
#include "side-position-interface.hh"
#include "paper-column.hh"
#include "align-interface.hh"
-MAKE_SCHEME_CALLBACK (Break_align_interface, alignment_callback, 2);
-SCM
-Break_align_interface::alignment_callback (SCM element_smob, SCM axis)
-{
- Grob *me = unsmob_grob (element_smob);
- Axis a = (Axis) scm_to_int (axis);
-
- assert (a == X_AXIS);
- Grob *par = me->get_parent (a);
- if (par && !to_boolean (par->get_property ("positioning-done")))
- {
- par->set_property ("positioning-done", SCM_BOOL_T);
- Break_align_interface::do_alignment (par);
- }
-
- return scm_from_double (0);
-}
-MAKE_SCHEME_CALLBACK (Break_align_interface, self_align_callback, 2);
+MAKE_SCHEME_CALLBACK (Break_align_interface, self_align_callback, 1);
SCM
-Break_align_interface::self_align_callback (SCM element_smob, SCM axis)
+Break_align_interface::self_align_callback (SCM smob)
{
- Grob *me = unsmob_grob (element_smob);
- (void) axis;
- assert (scm_to_int (axis) == X_AXIS);
+ Grob *me = unsmob_grob (smob);
Item *item = dynamic_cast<Item *> (me);
Direction bsd = item->break_status_dir ();
/*
Force break alignment itself to be done first, in the case
*/
- return Self_alignment_interface::aligned_on_self (element_smob, axis);
+ return Self_alignment_interface::aligned_on_self (me, X_AXIS);
}
/*
void
Break_align_interface::add_element (Grob *me, Grob *toadd)
{
- Axis_group_interface::add_element (me, toadd);
+ Align_interface::add_element (me, toadd);
}
-void
-Break_align_interface::do_alignment (Grob *grob)
+MAKE_SCHEME_CALLBACK(Break_align_interface, calc_positioning_done, 1)
+SCM
+Break_align_interface::calc_positioning_done (SCM smob)
{
+ Grob *grob = unsmob_grob (smob);
Item *me = dynamic_cast<Item *> (grob);
Link_array<Grob> elems = ordered_elements (me);
}
if (total_extent.is_empty ())
- return;
+ return SCM_BOOL_T;
if (me->break_status_dir () == LEFT)
alignment_off = -total_extent[RIGHT] - extra_right_space;
here += offsets[i];
elems[i]->translate_axis (here, X_AXIS);
}
+
+ return SCM_BOOL_T;
}
ADD_INTERFACE (Break_aligned_interface, "break-aligned-interface",
"\n"
"Rules for this spacing are much more complicated than this. \n"
"See [Wanske] page 126 -- 134, [Ross] pg 143 -- 147\n",
- "break-align-symbol space-alist");
+
+ /* properties */
+ "break-align-symbol "
+ "space-alist "
+ );
ADD_INTERFACE (Break_align_interface, "break-alignment-interface",
"The object that performs break aligment. See @ref{break-aligned-interface}.",
- "positioning-done break-align-orders");
+
+ /* properties */
+ "positioning-done "
+ "break-align-orders");