+ Real starth = 0;
+ Real endh = 0;
+ if (grow_dir < 0)
+ {
+ starth = height;
+ endh = continued ? height / 2 : 0.0;
+ }
+ else
+ {
+ starth = continued ? height / 2 : 0.0;
+ endh = height;
+ }
+
+ /*
+ should do relative to staff-symbol staff-space?
+ */
+
+ Stencil mol;
+ Real x = 0.0;
+
+ /*
+ Compensate for size of circle
+ */
+ Direction tip_dir = -grow_dir;
+ if (circled_tip && !broken[tip_dir])
+ {
+ if (grow_dir > 0)
+ x = rad * 2.0;
+ else if (grow_dir < 0)
+ width -= rad *2.0;
+ }
+ mol = Line_interface::line (me, Offset (x, starth), Offset (width, endh));
+ mol.add_stencil (Line_interface::line (me,
+ Offset (x, -starth),
+ Offset (width, -endh)));
+
+ /*
+ Support al/del niente notation by putting a circle at the
+ tip of the (de)crescendo.
+ */
+ if (circled_tip)
+ {
+ Box extent (Interval (-rad, rad), Interval (-rad, rad));
+
+ /* Hmmm, perhaps we should have a Lookup::circle () method? */
+ Stencil circle (extent,
+ scm_list_4 (ly_symbol2scm ("circle"),
+ scm_from_double (rad),
+ scm_from_double (thick),
+ SCM_BOOL_F));
+
+ /*
+ don't add another circle the hairpin is broken
+ */
+ if (!broken[tip_dir])
+ mol.add_at_edge (X_AXIS, tip_dir, Stencil (circle), 0);
+ }
+
+ mol.translate_axis (x_points[LEFT]
+ - bounds[LEFT]->relative_coordinate (common, X_AXIS),
+ X_AXIS);