1 #include "side-position-interface.hh"
5 Position centered on parent.
7 MAKE_SCHEME_CALLBACK (Self_alignment_interface,centered_on_parent,2);
9 Self_alignment_interface::centered_on_parent (SCM element_smob, SCM axis)
11 Grob *me = unsmob_grob (element_smob);
12 Axis a = (Axis) gh_scm2int (axis);
13 Grob *him = me->get_parent (a);
14 Interval he = him->extent (him,a);
16 return gh_double2scm (he.empty_b () ? 0.0 : he.center ());
23 callback that centers the element on itself
25 Requires that self-alignment-{X,Y} be set.
27 MAKE_SCHEME_CALLBACK (Self_alignment_interface,aligned_on_self,2);
29 Self_alignment_interface::aligned_on_self (SCM element_smob, SCM axis)
31 Grob *me = unsmob_grob (element_smob);
32 Axis a = (Axis) gh_scm2int (axis);
33 static SCM prop_syms[2];
37 prop_syms[X_AXIS] = ly_symbol2scm ("self-alignment-X");
38 prop_syms[Y_AXIS] = ly_symbol2scm ("self-alignment-Y");
41 SCM align (me->internal_get_grob_property (prop_syms[a]));
42 if (gh_number_p (align))
44 Interval ext (me->extent (me,a));
48 programming_error ("I'm empty. Can't align on self");
49 return gh_double2scm (0.0);
53 return gh_double2scm (- ext.linear_combination (gh_scm2double (align)));
56 else if (unsmob_grob (align))
58 return gh_double2scm (- unsmob_grob (align)->relative_coordinate (me, a));
60 return gh_double2scm (0.0);
64 ADD_INTERFACE (Self_alignment_interface, "self-alignment-interface",
65 "Position self using some alignment",
66 "self-alignment-X self-alignment-Y");