2 piano-pedal-bracket.cc -- implement Piano_pedal_bracket
4 source file of the GNU LilyPond music typesetter
6 (c) 2003--2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
13 #include "tuplet-bracket.hh"
15 struct Piano_pedal_bracket
17 DECLARE_SCHEME_CALLBACK (print
,(SCM
));
18 static bool has_interface (Grob
*);
22 MAKE_SCHEME_CALLBACK (Piano_pedal_bracket
,print
,1);
24 Piano_pedal_bracket::print (SCM smob
)
26 Spanner
*me
= dynamic_cast<Spanner
*> (unsmob_grob (smob
));
27 Spanner
*orig
= dynamic_cast<Spanner
*> (me
->original_
);
29 Drul_array
<bool> broken (false,false);
30 Drul_array
<Real
> height
= robust_scm2drul
31 (me
->get_property ("edge-height"), Interval (0,0));
32 Drul_array
<Real
> shorten
= robust_scm2drul
33 (me
->get_property ("shorten-pair"), Interval (0,0));
34 Drul_array
<Real
> flare
= robust_scm2drul
35 (me
->get_property ("bracket-flare"), Interval (0,0));
37 Grob
*common
= me
->get_bound (LEFT
)
38 ->common_refpoint (me
->get_bound (RIGHT
), X_AXIS
);
39 Grob
*textbit
= unsmob_grob (me
->get_property ("pedal-text"));
42 common
= common
->common_refpoint (textbit
, X_AXIS
);
44 Interval
span_points (0,0);
48 Item
*b
= me
->get_bound (d
);
49 broken
[d
] = b
->break_status_dir () != CENTER
;
53 && ((d
== RIGHT
&& me
->get_break_index () != orig
->broken_intos_
.size()-1)
54 || (d
== LEFT
&& me
->get_break_index ())))
60 Interval ext
= b
->extent (common
, X_AXIS
);
61 span_points
[d
] = ext
[broken
[d
] ? RIGHT
: LEFT
];
63 while (flip (&d
) != LEFT
);
66 /* For 'Mixed' style pedals, i.e. a bracket preceded by text: Ped._____|
67 need to shorten by the extent of the text grob
73 Real padding
= robust_scm2double (me
->get_property ("if-text-padding"), 0);
75 span_points
[LEFT
] = padding
76 + textbit
->extent (common
, X_AXIS
)[RIGHT
];
81 if (!span_points
.is_empty () &&
82 span_points
.length () > 0.001)
84 m
= Tuplet_bracket::make_bracket (me
, Y_AXIS
,
85 Offset (span_points
.length (), 0),
90 m
.translate_axis (span_points
[LEFT
]
91 - me
->relative_coordinate (common
, X_AXIS
), X_AXIS
);
92 return m
.smobbed_copy ();
97 ADD_INTERFACE (Piano_pedal_bracket
,"piano-pedal-bracket-interface",
98 "The bracket of the piano pedal. It can be tuned through the regular "
99 "bracket properties.",
100 "edge-height shorten-pair bracket-flare pedal-text");