Bezier b = slur_shape (width, h_inf, r_0);
- Offset leave_dir = b.control_[1] - b.control_[0];
-
- Grob *hed =head (me, headdir);
- Real dx = (hed->extent (hed, X_AXIS).length () + x_gap_f)/2.0;
- Real max_gap = leave_dir[Y_AXIS] * dx / leave_dir[X_AXIS];
-
/*
- for small ties (t small) we want to start in the Y-center (so dy = 0), for
- large ties, the tie should appear to come from the center of the
- head, so dy = max_gap
-
- maybe use a different formula?
+ I think this better, particularly for small ties. It always allows the user to move ties if
+ they seem in the wrong place
TODO: what if 2 heads have different size.
- TODO: for small ties, it is better to start over the heads
- iso. next to the heads.
*/
- Real t = (width / staff_space - 5.0); // ugh.
- Real dy = t > 0 ? max_gap * sqr (t / (1 + t)) : 0.0;
- Real ypos = Tie::position_f (me) * staff_space/2 + dir * dy;
+ Real ypos = Tie::position_f (me) * staff_space/2
+ + dir * gh_scm2double (me->get_grob_property ("y-offset"));;
/*
Make sure we don't start on a dots
(direction . 1)
(breakable . #t)
- (font-family . number)
+ (font-family . roman)
(font-shape . upright)
(font-relative-size . 1)
(visibility-lambda . ,end-of-line-invisible)
(details . ((ratio . 0.333) (height-limit . 1.0)))
(thickness . 1.2)
(x-gap . 0.2)
+ (y-offset . 0.6)
(minimum-length . 2.5)
(meta . ,(grob-description "Tie" tie-interface ))
))
(grob-property-description 'word-space number? "elongate left by this much (FIXME: cumbersome semantics).")
(grob-property-description 'x-gap number? "horizontal gap between notehead and tie.")
(grob-property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems.")
+(grob-property-description 'y-offset number? "extra vertical offset for ties away from the center line.")
(grob-property-description 'y number? "set by beam: position of left edge.")