From 53ef525059b674cb00be84ccbcf99f17d727e0cb Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 23 Jul 2004 15:33:04 +0000 Subject: [PATCH] (create_ambitus): change name to AmbitusLine. Create AmbitusAccidental and AmbitusNoteHead for other ambitus parts. (create_ambitus): group grobs in Ambitus grouping object. --- ChangeLog | 1 + Documentation/topdocs/NEWS.texi | 7 ++++++ Documentation/user/notation.itely | 4 +++- lily/ambitus-engraver.cc | 22 +++++++++++++---- lily/ambitus.cc | 10 ++++---- scm/define-grobs.scm | 39 ++++++++++++++++++------------- 6 files changed, 57 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 46c7840459..9f8d288cb0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ * 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. diff --git a/Documentation/topdocs/NEWS.texi b/Documentation/topdocs/NEWS.texi index 218a487421..580d94c99d 100644 --- a/Documentation/topdocs/NEWS.texi +++ b/Documentation/topdocs/NEWS.texi @@ -8,6 +8,13 @@ @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 diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely index ebd2d1fdd3..87ebcc272e 100644 --- a/Documentation/user/notation.itely +++ b/Documentation/user/notation.itely @@ -3720,7 +3720,9 @@ example is in @inputfileref{input/test,ambitus-mixed.ly}. @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}. diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc index 71f00f7aa8..c9d6b570ab 100644 --- a/lily/ambitus-engraver.cc +++ b/lily/ambitus-engraver.cc @@ -12,14 +12,14 @@ #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: @@ -32,6 +32,7 @@ TRANSLATOR_DECLARATIONS (Ambitus_engraver); private: void create_ambitus (); Item *ambitus_; + Item *group_; Drul_array heads_; Drul_array accidentals_; Pitch_interval pitch_interval_; @@ -44,16 +45,22 @@ void 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; } @@ -61,6 +68,9 @@ Ambitus_engraver::create_ambitus () Ambitus_engraver::Ambitus_engraver () { ambitus_ = 0; + heads_[LEFT] = heads_[RIGHT] = 0; + accidentals_[LEFT] = accidentals_[RIGHT] = 0; + group_ = 0; is_typeset_ = false; } @@ -133,7 +143,11 @@ Ambitus_engraver::finalize () 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(); @@ -165,7 +179,7 @@ Ambitus_engraver::finalize () ENTER_DESCRIPTION (Ambitus_engraver, /* descr */ "", -/* creats*/ "Ambitus", +/* creats*/ "Ambitus AmbitusLine AmbitusNoteHead AmbitusAccidental", /* accepts */ "", /* acks */ "note-head-interface", /* reads */ "", diff --git a/lily/ambitus.cc b/lily/ambitus.cc index bfcc7fd5c6..cb46229ec0 100644 --- a/lily/ambitus.cc +++ b/lily/ambitus.cc @@ -44,15 +44,15 @@ Ambitus::print (SCM smob) } 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); diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index bdec00c635..0a47d53427 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -32,41 +32,48 @@ (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) -- 2.39.2