From: Keith OHara Date: Thu, 28 Jul 2011 00:32:25 +0000 (-0700) Subject: Avoid redundant space in note spacing; issue 1779 X-Git-Tag: release/2.15.9-1~9^2~28 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=6e39f536c11c8a65d3e99a43cc9dd9593c61fa4f;p=lilypond.git Avoid redundant space in note spacing; issue 1779 ly/staff-spacing.cc: don't increase ideal distance if the ideal distance gives sufficient clearance. ly/spacing-spanner.cc: compute total spring length before checking clearances. --- diff --git a/input/regression/spacing-bar-accidental.ly b/input/regression/spacing-bar-accidental.ly index b3087d4ddd..75db12af26 100644 --- a/input/regression/spacing-bar-accidental.ly +++ b/input/regression/spacing-bar-accidental.ly @@ -1,7 +1,7 @@ \header { texidoc = "An accidental following a bar gets space so - the left edge of the acc is at 0.3 - 0.6 staff space of the bar line" + the left edge of the acc is at 0.3 staff space from the bar line" } diff --git a/lily/include/staff-spacing.hh b/lily/include/staff-spacing.hh index 935bcf5b83..b404e35d5e 100644 --- a/lily/include/staff-spacing.hh +++ b/lily/include/staff-spacing.hh @@ -31,7 +31,7 @@ class Staff_spacing public: DECLARE_GROB_INTERFACE (); - static Spring get_spacing (Grob *, Grob *right_col); + static Spring get_spacing (Grob *, Grob *, Real); static Interval bar_y_positions (Grob *); }; diff --git a/lily/spacing-determine-loose-columns.cc b/lily/spacing-determine-loose-columns.cc index 79551ecac3..99d9e596af 100644 --- a/lily/spacing-determine-loose-columns.cc +++ b/lily/spacing-determine-loose-columns.cc @@ -163,7 +163,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c, } else if (Staff_spacing::has_interface (sp)) { - Spring spring = Staff_spacing::get_spacing (sp, rc); + Spring spring = Staff_spacing::get_spacing (sp, rc, 0.0); dists[d] = max (dists[d], spring.min_distance ()); } diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 75dc166925..b09384f7df 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -495,6 +495,12 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r, vector springs; Spring spring; + Real full_measure_space = 0.0; + if (Paper_column::is_musical (r) + && l->break_status_dir () == CENTER + && fills_measure (me, l, r)) + full_measure_space = robust_scm2double (l->get_property ("full-measure-extra-space"), 1.0); + Moment dt = Paper_column::when_mom (r) - Paper_column::when_mom (l); if (dt == Moment (0, 0)) @@ -514,7 +520,8 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r, */ assert (spacing_grob->get_column () == l); - springs.push_back (Staff_spacing::get_spacing (spacing_grob, r)); + springs.push_back (Staff_spacing::get_spacing (spacing_grob, r, + full_measure_space)); } } @@ -533,15 +540,6 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r, spring *= 0.8; } - if (Paper_column::is_musical (r) - && l->break_status_dir () == CENTER - && fills_measure (me, l, r)) - { - Real full_measure_extra_space = robust_scm2double (l->get_property ("full-measure-extra-space"), 1.0); - spring.set_distance (spring.distance () + full_measure_extra_space); - spring.set_default_compress_strength (); - } - if (options->stretch_uniformly_ && l->break_status_dir () != RIGHT) { spring.set_min_distance (0.0); diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index 58cfa4125b..00c9abd6dc 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -124,7 +124,7 @@ Staff_spacing::next_notes_correction (Grob *me, We arrange things so that the fixed distance will be attained when the line is compressed with a force of 1.0 */ Spring -Staff_spacing::get_spacing (Grob *me, Grob *right_col) +Staff_spacing::get_spacing (Grob *me, Grob *right_col, Real situational_space) { Item *me_item = dynamic_cast (me); Grob *left_col = me_item->get_column (); @@ -195,18 +195,25 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col) ideal = fixed; } + Real stretchability = ideal - fixed; + + /* 'situational_space' passed by the caller + could include full-measure-extra-space */ + ideal += situational_space; + Real optical_correction = next_notes_correction (me, last_grob); + fixed += optical_correction; + ideal += optical_correction; + Real min_dist = Paper_column::minimum_distance (left_col, right_col); /* ensure that the "fixed" distance will leave a gap of at least 0.3 ss. */ Real min_dist_correction = max (0.0, 0.3 + min_dist - fixed); - Real correction = max (optical_correction, min_dist_correction); - - fixed += correction; - ideal += correction; + fixed += min_dist_correction; + ideal = max (ideal, fixed); Spring ret (ideal, min_dist); - ret.set_inverse_stretch_strength (max (0.0, ideal - fixed)); + ret.set_inverse_stretch_strength (max (0.0, stretchability)); return ret; } diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 6a482d102d..680f1598af 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -527,7 +527,7 @@ (key-signature . (minimum-space . 3.5)) (time-signature . (minimum-space . 4.2)) (first-note . (minimum-fixed-space . 5.0)) - (next-note . (extra-space . 0.5)) + (next-note . (extra-space . 1.0)) (right-edge . (extra-space . 0.5)))) (stencil . ,ly:clef::print) (Y-offset . ,ly:staff-symbol-referencer::callback) @@ -593,7 +593,7 @@ (time-signature . (minimum-space . 4.2)) (custos . (minimum-space . 0.0)) (first-note . (minimum-fixed-space . 3.0)) - (next-note . (extra-space . 0.5)) + (next-note . (extra-space . 1.0)) (right-edge . (extra-space . 0.5)))) (stencil . ,ly:clef::print) (Y-offset . ,ly:staff-symbol-referencer::callback) @@ -620,7 +620,7 @@ (key-signature . (minimum-space . 3.5)) (time-signature . (minimum-space . 4.2)) (first-note . (minimum-fixed-space . 5.0)) - (next-note . (extra-space . 0.5)) + (next-note . (extra-space . 1.0)) (right-edge . (extra-space . 0.5)))) (stencil . ,ly:clef::print) (Y-offset . ,ly:staff-symbol-referencer::callback) @@ -919,6 +919,7 @@ (fret-diagram-details . ((finger-code . below-string))) (stencil . ,fret-board::calc-stencil) (extra-spacing-height . (0.2 . -0.2)) + (extra-spacing-width . (-0.5 . 0.5)) (meta . ((class . Item) (interfaces . (chord-name-interface font-interface