+ if (to_boolean (me->get_property ("quantize-position")))
+ {
+ Grob *common = me->common_refpoint (staff, Y_AXIS);
+ Real my_off = me->relative_coordinate (common, Y_AXIS);
+ Real staff_off = staff->relative_coordinate (common, Y_AXIS);
+ Real ss = Staff_symbol::staff_space (staff);
+ Real position = 2 * (my_off + o - staff_off) / ss;
+ Real rounded = directed_round (position, dir);
+ Grob *head = me->get_parent (X_AXIS);
+
+ if (rounded <= 2 * Staff_symbol_referencer::staff_radius (me)
+ || (Note_head::has_interface (head)
+ && sign (Staff_symbol_referencer::get_position (head)) == - dir))
+ {
+ o += dir *(rounded - position) * 0.5 * ss;
+ if (Staff_symbol_referencer::on_line (me, int (rounded)))
+ o += dir * 0.5 * ss;
+ }
+ }
+ else if (scm_is_number (me->get_property ("staff-padding")))
+ {
+ Real padding
+ = Staff_symbol_referencer::staff_space (me)
+ * scm_to_double (me->get_property ("staff-padding"));
+
+ Grob *common = me->common_refpoint (staff, Y_AXIS);
+
+ Interval staff_size = staff->extent (common, Y_AXIS);
+ Real diff = dir*staff_size[dir] + padding - dir * (o + iv[-dir]);
+ o += dir * max (diff, 0.0);
+ }