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 = robust_relative_extent (b, 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 ("bound-padding"), 0);
75 span_points[LEFT] = padding
76 + robust_relative_extent (textbit, common, X_AXIS)[RIGHT];
80 if (!span_points.is_empty () &&
81 span_points.length () > 0.001)
83 m = Tuplet_bracket::make_bracket (me, Y_AXIS,
84 Offset (span_points.length (), 0),
89 m.translate_axis (span_points[LEFT]
90 - me->relative_coordinate (common, X_AXIS), X_AXIS);
91 return m.smobbed_copy ();
96 ADD_INTERFACE (Piano_pedal_bracket,"piano-pedal-bracket-interface",
97 "The bracket of the piano pedal. It can be tuned through the regular "
98 "bracket properties.",
99 "bound-padding edge-height shorten-pair bracket-flare pedal-text");