* lily/ambitus-engraver.cc (create_ambitus): change name to
AmbitusLine. Create AmbitusAccidental and AmbitusNoteHead for
other ambitus parts.
+ (create_ambitus): group grobs in Ambitus grouping object.
* lily/include/pitch-interval.hh (Pitch>): new file.
@itemize @bullet
+@item Support ambituses has been rewritten. The Ambitus object is now
+a grouping object, composed of @code{AmbitusLine},
+@code{AmbitusAccidental} and @code{AmbitusNoteHead}. These objects may
+be tuned similar to accidentals and note heads.
+
+@item Ledger lines are now shortened to prevent them from colliding.
+
@item Slur formatting has been rewritten. The new slur code
works similar to the Beam formatter: scores are assigned for all
esthetic components of a slur. A large number of combinations for
@seealso
-Program reference: @internalsref{Ambitus}.
+Program reference: @internalsref{Ambitus},
+@internalsref{AmbitusLine}, @internalsref{AmbitusNoteHead},
+@internalsref{AmbitusAccidental}.
Examples: @inputfileref{input/regression,ambitus.ly},
@inputfileref{input/test,ambitus-mixed.ly}.
#include "engraver.hh"
#include "item.hh"
#include "note-head.hh"
-#include "staff-symbol-referencer.hh"
#include "event.hh"
#include "pitch.hh"
#include "pitch-interval.hh"
#include "protected-scm.hh"
+#include "staff-symbol-referencer.hh"
+#include "axis-group-interface.hh"
#include "side-position-interface.hh"
-
class Ambitus_engraver : public Engraver
{
public:
private:
void create_ambitus ();
Item *ambitus_;
+ Item *group_;
Drul_array<Item *> heads_;
Drul_array<Item *> accidentals_;
Pitch_interval pitch_interval_;
Ambitus_engraver::create_ambitus ()
{
ambitus_ = make_item ("AmbitusLine",SCM_EOL);
+ group_ = make_item ("Ambitus",SCM_EOL);
Direction d = DOWN;
do
{
heads_[d] = make_item ("AmbitusNoteHead", SCM_EOL);
accidentals_[d] = make_item ("AmbitusAccidental", SCM_EOL);
+ accidentals_[d]->set_parent (heads_[d], Y_AXIS);
heads_[d]->set_property ("accidental-grob", accidentals_[d]->self_scm ());
+ Axis_group_interface::add_element (group_, heads_[d]);
+ Axis_group_interface::add_element (group_, accidentals_[d]);
Side_position_interface::add_support (accidentals_[d], heads_[d]);
}
while (flip (&d) != DOWN);
ambitus_->set_parent (heads_[DOWN], X_AXIS);
+ Axis_group_interface::add_element (group_, ambitus_);
+
is_typeset_ = false;
}
Ambitus_engraver::Ambitus_engraver ()
{
ambitus_ = 0;
+ heads_[LEFT] = heads_[RIGHT] = 0;
+ accidentals_[LEFT] = accidentals_[RIGHT] = 0;
+ group_ = 0;
is_typeset_ = false;
}
scm_from_int (p.get_notename ())),
start_key_sig_);
- int sig_alter = (handle != SCM_BOOL_F) ? ly_scm2int (ly_car (handle)) : 0;
+ if (handle == SCM_BOOL_F)
+ handle = scm_assoc (scm_from_int (p.get_notename ()),
+ start_key_sig_);
+
+ int sig_alter = (handle != SCM_BOOL_F) ? ly_scm2int (ly_cdr (handle)) : 0;
if (sig_alter == p.get_alteration ())
{
accidentals_[d]->suicide();
ENTER_DESCRIPTION (Ambitus_engraver,
/* descr */ "",
-/* creats*/ "Ambitus",
+/* creats*/ "Ambitus AmbitusLine AmbitusNoteHead AmbitusAccidental",
/* accepts */ "",
/* acks */ "note-head-interface",
/* reads */ "",
}
Real pad = 0.35;
- Real pmax = maxh->relative_coordinate (common, Y_AXIS) - pad;
- Real pmin = minh->relative_coordinate (common, Y_AXIS) + pad;
+ Real pmax = maxh->extent (common, Y_AXIS)[DOWN] - pad;
+ Real pmin = minh->extent (common, Y_AXIS)[UP] + pad;
if (pmin < pmax)
{
- Real linethickness = me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
+ Real linethickness = me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness")) * robust_scm2double (me->get_property ("thickness"), 1.0);
Real blotdiameter = me->get_paper ()->get_dimension (ly_symbol2scm ("blotdiameter"));
- Interval x_extent = 0.5 * Interval (-linethickness, +linethickness);
- Interval y_extent = 0.5 * Interval (pmin, pmax);
+ Interval x_extent = 0.5 * linethickness *Interval (-1,1);
+ Interval y_extent = Interval (pmin, pmax);
Box line_box (x_extent, y_extent);
Stencil line = Lookup::round_filled_box (line_box, blotdiameter);
(right-padding . 0.15)
(meta . ((interfaces . (item-interface accidental-placement-interface))))
))
+ (Ambitus
+ . (
+ (axes . (0 1))
+ (X-extent-callback . ,Axis_group_interface::group_extent_callback)
+ (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
+ (space-alist . (
+ (clef . (extra-space . 0.5))
+ (key-signature . (extra-space . 0.0))
+ (staff-bar . (extra-space . 0.0))
+ (time-signature . (extra-space . 0.0))
+ (first-note . (fixed-space . 0.0))
+ ))
+ (breakable . #t)
+ (break-align-symbol . ambitus)
+ (break-visibility . ,begin-of-line-visible)
+ (meta . ((interfaces . (axis-group-interface break-aligned-interface ambitus-interface item-interface ))))
+ ))
(AmbitusLine
. (
- (breakable . #t)
- (break-align-symbol . ambitus)
(print-function . ,Ambitus::print)
(join-heads . #t)
- (X-offset-callbacks (,Self_alignment_interface::centered_on_parent))
- (break-visibility . ,begin-of-line-visible)
- (space-alist . (
- (clef . (extra-space . 0.0))
- (key-signature . (extra-space . 0.0))
- (staff-bar . (extra-space . 0.0))
- (time-signature . (extra-space . 0.0))
- (first-note . (fixed-space . 0.0))
- ))
- (meta . ((interfaces . (ambitus-interface staff-symbol-referencer-interface break-aligned-interface item-interface font-interface))))
+ (thickness . 2)
+ (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
+
+ (meta . ((interfaces . (ambitus-interface staff-symbol-referencer-interface item-interface font-interface))))
))
(AmbitusAccidental
. (
(print-function . ,Accidental_interface::print)
(font-family . music)
+ (padding . 0.5)
(X-offset-callbacks . (,Side_position_interface::aligned_side))
(direction . -1)
(cautionary-style . parentheses)
- (after-line-breaking-callback . ,Accidental_interface::after_line_breaking) (meta . ((interfaces . (item-interface accidental-interface font-interface))))
+ (after-line-breaking-callback . ,Accidental_interface::after_line_breaking) (meta . ((interfaces . (item-interface accidental-interface break-aligned-interface side-position-interface font-interface))))
))
(AmbitusNoteHead
. (
(duration-log . 2)
(style . default)
- (breakable . #t)
(print-function . ,Note_head::print)
- (break-align-symbol . ambitus)
- (break-visibility . ,begin-of-line-visible)
(glyph-name-procedure . ,find-notehead-symbol)
(X-extent-callback . ,Note_head::extent)
(Y-extent-callback . ,Note_head::extent)