From 8aa502ebb72da54f1fa65ede4f2c1e981eb5d106 Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Mon, 6 Aug 2007 22:33:42 +1000 Subject: [PATCH] Prevent merge_springs from messing up the compression strength. Fixes problems with knee-spacing-correction when compression is applied. --- lily/note-spacing.cc | 4 +++- lily/spring.cc | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc index e41046bc45..d476f70fa0 100644 --- a/lily/note-spacing.cc +++ b/lily/note-spacing.cc @@ -88,7 +88,7 @@ Note_spacing::get_spacing (Grob *me, Item *right_col, stem_dir_correction (me, right_col, increment, &ideal, &min_desired_space); Spring ret (ideal, min_dist); - ret.set_inverse_compress_strength (max (0.0, ideal - max (min_dist, min_desired_space))); + ret.set_inverse_compress_strength (max (0.0, ideal - min_desired_space)); ret.set_inverse_stretch_strength (max (0.1, base_space - increment)); return ret; } @@ -215,6 +215,8 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, for (vsize i = 0; i < items.size (); i++) { Item *it = dynamic_cast (items[i]); + if (!Note_column::has_interface (it)) + continue; /* don't correct if accidentals are sticking out of the right side. diff --git a/lily/spring.cc b/lily/spring.cc index c9f3afbe42..1f250546db 100644 --- a/lily/spring.cc +++ b/lily/spring.cc @@ -61,20 +61,24 @@ merge_springs (vector const &springs) Real avg_distance = 0; Real min_distance = 0; Real avg_stretch = 0; + Real avg_compress = 0; for (vsize i = 0; i < springs.size (); i++) { avg_distance += springs[i].distance (); avg_stretch += springs[i].inverse_stretch_strength (); + avg_compress += 1 / springs[i].inverse_compress_strength (); min_distance = max (springs[i].min_distance (), min_distance); } avg_stretch /= springs.size (); + avg_compress /= springs.size (); avg_distance /= springs.size (); avg_distance = max (min_distance + 0.3, avg_distance); Spring ret = Spring (avg_distance, min_distance); ret.set_inverse_stretch_strength (avg_stretch); + ret.set_inverse_compress_strength (1 / avg_compress); return ret; } -- 2.39.5