2 ambitus.cc -- implement Ambitus
4 source file of the GNU LilyPond music typesetter
6 (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
11 #include "staff-symbol-referencer.hh"
13 #include "note-head.hh"
15 #include "font-interface.hh"
16 #include "output-def.hh"
18 #include "pointer-group-interface.hh"
20 MAKE_SCHEME_CALLBACK (Ambitus
, print
, 1);
22 Ambitus::print (SCM smob
)
24 Item
*me
= (Item
*) unsmob_grob (smob
);
27 // FIXME : should be Ambitus_line join heads
28 extract_grob_set (me
, "note-heads", heads
);
29 if (to_boolean (me
->get_property ("join-heads"))
33 = common_refpoint_of_array (vector
<Grob
*> (heads
.begin (),
37 Grob
*minh
= heads
[0];
38 Grob
*maxh
= heads
[1];
40 if (minh
->relative_coordinate (common
, Y_AXIS
)
41 > maxh
->relative_coordinate (common
, Y_AXIS
))
49 Real pmax
= maxh
->extent (common
, Y_AXIS
)[DOWN
] - pad
;
50 Real pmin
= minh
->extent (common
, Y_AXIS
)[UP
] + pad
;
54 Real linethickness
= me
->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
55 * robust_scm2double (me
->get_property ("thickness"), 1.0);
56 Real blotdiameter
= me
->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
57 Interval x_extent
= 0.5 * linethickness
* Interval (-1, 1);
58 Interval y_extent
= Interval (pmin
, pmax
);
59 Box
line_box (x_extent
, y_extent
);
61 Stencil line
= Lookup::round_filled_box (line_box
, blotdiameter
);
62 line
.translate_axis (- me
->relative_coordinate (common
, Y_AXIS
),
64 return line
.smobbed_copy ();
71 ADD_INTERFACE (Ambitus
,
72 "The line between note heads for a pitch range.",