From: Han-Wen Nienhuys Date: Fri, 10 Sep 2004 21:55:43 +0000 (+0000) Subject: * lily/hairpin.cc: lengthen hairpin if space is available. X-Git-Tag: release/2.3.16~7 X-Git-Url: https://git.donarmstrong.com/?p=lilypond.git;a=commitdiff_plain;h=873c31e41713a3aa7e162268286521e0d582e4f4 * lily/hairpin.cc: lengthen hairpin if space is available. * input/regression/dynamics-hairpin-length.ly (Module): new file. --- diff --git a/ChangeLog b/ChangeLog index 878ef3c9d1..526abf1813 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,18 @@ +2004-09-10 Han-Wen Nienhuys + + * scm/define-grob-properties.scm (all-internal-grob-properties): + add adjacent-hairpins property. + + * lily/hairpin.cc: lengthen hairpin if space is available. + + * input/regression/dynamics-hairpin-length.ly (Module): new file. + 2004-09-10 Graham Percival * Documentation/user/notation.itely: small fixes to docs. 2004-09-10 Han-Wen Nienhuys - + * VERSION (PACKAGE_NAME): release 2.3.15 * make/lilypond.redhat.spec.in (Requires): bump requirement for diff --git a/ROADMAP b/ROADMAP index b2c0bcadb6..ffe13dba44 100644 --- a/ROADMAP +++ b/ROADMAP @@ -27,7 +27,7 @@ source files. input/ Music input examples bugs/ Buggy or problematic notation mutopia/ Real music, more at www.mutopiaproject.org - no-notation/ Examples or bugs that do not produce output + no-notation/ Examples that do not produce output regression/ Testing of [all] features, one test per file templates/ Boilerplates for typical music layouts test/ Tips and tricks diff --git a/input/regression/dynamics-hairpin-length.ly b/input/regression/dynamics-hairpin-length.ly new file mode 100644 index 0000000000..3f3f2d4d64 --- /dev/null +++ b/input/regression/dynamics-hairpin-length.ly @@ -0,0 +1,19 @@ +\header { + + texidoc = "Hairpins extend to the extremes of the bound if there + is no adjacent hairpin of dynamic-text. If there is, the hairpin + extends to the center of the column or the bound of the text + respectively." + +} +\version "2.3.15" + + +\paper { raggedright = ##t } + +\relative c'' { + c4 \< c4 \! + c4 \< c \!\> c\! + c4 \< c c \! \fff\> c c\! + +} diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 7e0557a1e8..71dfcce857 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -226,6 +226,16 @@ Dynamic_engraver::process_music () if (!scm_is_symbol (s) || s == ly_symbol2scm ("hairpin")) { cresc_ = make_spanner ("Hairpin", accepted_spanreqs_drul_[START]->self_scm ()); + if (finished_cresc_) + { + Pointer_group_interface::add_grob (finished_cresc_, + ly_symbol2scm ("adjacent-hairpins"), + cresc_); + + Pointer_group_interface::add_grob (cresc_, + ly_symbol2scm ("adjacent-hairpins"), + finished_cresc_); + } cresc_->set_property ("grow-direction", scm_int2num ((start_type == "crescendo") ? BIGGER : SMALLER)); diff --git a/lily/hairpin.cc b/lily/hairpin.cc index 799616bf14..828bb6ec52 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -63,16 +63,31 @@ Hairpin::print (SCM smob) { if (dynamic_cast (b)) { + bool neighbor_found = false; + for (SCM adj = me->get_property ("adjacent-hairpins"); + ly_c_pair_p (adj); adj = ly_cdr (adj)) + { + /* + FIXME: this will fuck up in case of polyphonic + notes in other voices. Need to look at note-columns + in the current staff/voice. + */ + + Spanner *pin = unsmob_spanner (ly_car (adj)); + if (pin + && (pin->get_bound (LEFT)->get_column() == b + || pin->get_bound (RIGHT)->get_column() == b)) + neighbor_found = true; + } + /* If we're hung on a paper column, that means we're not adjacent to a text-dynamic, and we may move closer. We make the padding a little smaller, here. */ - Interval e = b->extent (common, X_AXIS); - if (e.is_empty ()) - e = Interval (0,0) + b->relative_coordinate (common, X_AXIS); - - x_points[d] = e.center () - d * padding / 3; // ugh. + Interval e = robust_relative_extent (b, common, X_AXIS); + x_points[d] = + neighbor_found ? e.center() - d * padding / 3 : e[d]; } else { @@ -130,5 +145,5 @@ Hairpin::print (SCM smob) ADD_INTERFACE (Hairpin, "hairpin-interface", "A hairpin (de)crescendo.", - "grow-direction height bound-padding"); + "grow-direction height bound-padding adjacent-hairpins");