-
- Grob * common = me;
- for (SCM s = me->get_grob_property ("stems"); gh_pair_p (s); s = ly_cdr (s))
- {
- Grob * stem = unsmob_grob (ly_car (s));
- common = common->common_refpoint (Staff_symbol_referencer::get_staff_symbol (stem),
- Y_AXIS);
- }
-
- Interval heads;
- Real my_y = me->relative_coordinate (common, Y_AXIS);
-
- for (SCM s = me->get_grob_property ("stems"); gh_pair_p (s); s = ly_cdr (s))
- {
- Grob * stem = unsmob_grob (ly_car (s));
- Grob * ss = Staff_symbol_referencer::get_staff_symbol (stem);
- Interval iv = Stem::head_positions (stem);
- iv *= Staff_symbol::staff_space (ss)/2.0;
- heads.unite (iv + ss->relative_coordinate (common, Y_AXIS) - my_y);
- }
+ Interval heads = robust_scm2interval (me->get_property ("positions"),
+ Interval())
+ * Staff_symbol_referencer::staff_space (me);