Hi, Here is a patch that fixes the zero spacing issue that can be demonstrated by the following snippet:
\version "2.11.25" #(set-default-paper-size "a6") \paper { between-system-padding = 0 between-title-space = 0 ragged-bottom = ##f ragged-last-bottom = ##f } \markup hello \markup world \markup ! I'm asking for permission because it modifies an interface: ly:solve-spring-rod-problem. nicolas
diff --git a/lily/simple-spacer-scheme.cc b/lily/simple-spacer-scheme.cc index 6f76106..db32670 100644 --- a/lily/simple-spacer-scheme.cc +++ b/lily/simple-spacer-scheme.cc @@ -17,7 +17,7 @@ LY_DEFINE (ly_solve_spring_rod_problem, 4, 1, 0, (SCM springs, SCM rods, SCM length, SCM ragged), "Solve a spring and rod problem for @var{count} objects, that " "are connected by @var{count-1} springs, and an arbitrary number of rods " - "Springs have the format (ideal, hooke) and rods (idx1, idx2, distance) " + "Springs have the format (ideal, inverse_hooke) and rods (idx1, idx2, distance) " "@var{length} is a number, @var{ragged} a boolean " "Return: a list containing the force (positive for stretching, " "negative for compressing and #f for non-satisfied constraints) " @@ -36,9 +36,9 @@ LY_DEFINE (ly_solve_spring_rod_problem, for (SCM s = springs; scm_is_pair (s); s = scm_cdr (s)) { Real ideal = scm_to_double (scm_caar (s)); - Real hooke = scm_to_double (scm_cadar (s)); + Real inv_hooke = scm_to_double (scm_cadar (s)); - spacer.add_spring (ideal, 1 / hooke); + spacer.add_spring (ideal, inv_hooke); } for (SCM s = rods; scm_is_pair (s); s = scm_cdr (s)) diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 3f4e678..04c35dd 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -144,10 +144,13 @@ void Simple_spacer::solve (Real line_len, bool ragged) { Real conf = configuration_length (force_); + double inv_hooke = 0; + for (vsize i=0; i < springs_.size (); i++) + inv_hooke += springs_[i].inverse_hooke_; ragged_ = ragged; line_len_ = line_len; - if (conf < line_len_) + if ((inv_hooke > 0) && (conf < line_len_)) force_ = expand_line (); else if (conf > line_len_) force_ = compress_line (); diff --git a/scm/layout-page-layout.scm b/scm/layout-page-layout.scm index 6c1f605..91742ef 100644 --- a/scm/layout-page-layout.scm +++ b/scm/layout-page-layout.scm @@ -156,16 +156,13 @@ `next-line' can be #f, meaning that `line' is the last line." (let* ((title (paper-system-title? line)) (next-title (and next-line (paper-system-title? next-line)))) - (cond ((and title next-title) - (ly:output-def-lookup layout 'between-title-space)) - (title - (ly:output-def-lookup layout 'after-title-space)) - (next-title - (ly:output-def-lookup layout 'before-title-space)) - (else - (ly:prob-property - line 'next-space - (ly:output-def-lookup layout 'between-system-space)))))) + (ly:prob-property + line 'next-space + (ly:output-def-lookup layout + (cond ((and title next-title) 'between-title-space) + (title 'after-title-space) + (next-title 'before-title-space) + (else 'between-system-space)))))) (define (line-next-padding line next-line layout) "Return padding to use between `line' and `next-line'. @@ -198,10 +195,11 @@ "Ideal distance between `line' reference position and `next-line' reference position. If next-line is #f, return #f." (and next-line - (+ (max 0 (- (+ (interval-end (paper-system-staff-extents next-line)) - (if ignore-padding 0 (line-next-padding line next-line layout))) - (interval-start (paper-system-staff-extents line)))) - (line-next-space line next-line layout)))) + (max (+ (max 0 (- (+ (interval-end (paper-system-staff-extents next-line)) + (if ignore-padding 0 (line-next-padding line next-line layout))) + (interval-start (paper-system-staff-extents line)))) + (line-next-space line next-line layout)) + (line-minimum-distance line next-line layout ignore-padding)))) (define (first-line-position line layout) "Position of the first line on page" @@ -287,7 +285,7 @@ '()))) (springs (map (lambda (prev-line line) (list (line-ideal-distance prev-line line paper ignore-padding) - (/ 1.0 (line-next-space prev-line line paper)))) + (line-next-space prev-line line paper))) lines cdr-lines)) (rods (map (let ((i -1))
_______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel