SCM
Hairpin::pure_height (SCM smob, SCM, SCM)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real height = robust_scm2double (me->get_property ("height"), 0.0)
* Staff_symbol_referencer::staff_space (me);
SCM
Hairpin::broken_bound_padding (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Item *r_bound = me->get_bound (RIGHT);
if (r_bound->break_status_dir () != -1)
{
if (!scm_is_pair (hsb))
break;
- span_bars[d] = Grob::unsmob ((d == UP ? scm_car : scm_cdr) (hsb));
+ span_bars[d] = unsmob<Grob> ((d == UP ? scm_car : scm_cdr) (hsb));
break;
}
SCM
Hairpin::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
SCM s = me->get_property ("grow-direction");
if (!is_direction (s))
if (circled_tip)
thick = robust_scm2double (me->get_property ("thickness"), 1.0)
* Staff_symbol_referencer::line_thickness (me);
+ Drul_array<Real> shorten = robust_scm2interval (me->get_property ("shorten-pair"),
+ Interval (0, 0));
for (LEFT_and_RIGHT (d))
{
}
else
{
- if (Text_interface::has_interface (b))
+ if (has_interface<Text_interface> (b))
{
if (!e.is_empty ())
x_points[d] = e[-d] - d * padding;
if (neighbor_found)
{
- if (Hairpin::has_interface (adjacent))
+ if (has_interface<Hairpin> (adjacent))
{
/*
Handle back-to-back hairpins with a circle in the middle
*/
if (circled_tip && (grow_dir != d))
- x_points[d] = e.center () + d * (rad - thick / 2.0);
+ {
+ x_points[d] = e.center () + d * (rad - thick / 2.0);
+ shorten[d] = 0.0;
+ }
/*
If we're hung on a paper column, that means we're not
adjacent to a text-dynamic, and we may move closer. We
else
{
if (d == RIGHT // end at the left edge of a rest
- && Note_column::has_interface (b)
+ && has_interface<Note_column> (b)
&& Note_column::has_rests (b))
x_points[d] = e[-d];
else
}
}
}
+
+ x_points[d] -= shorten[d] * d;
}
Real width = x_points[RIGHT] - x_points[LEFT];
"bound-padding "
"grow-direction "
"height "
+ "shorten-pair "
);