lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

two-pass layout: space left (patch)


From: Nicolas Sceaux
Subject: two-pass layout: space left (patch)
Date: Sun, 26 Feb 2006 13:54:04 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (darwin)

Hi,

Here is a patch that fixes the space-left page property computing, for
use in two-pass vertical spacing. The footer height is taken into
account.

Also, when computing system stretching, it's nice to know how much space
other music systems take, in order to determine what part of the left
space this system can consume. The patch adds a music-system-heights
property to the page layout output.

Then, a simple implementation of spacingTweaks could be:

spacingTweaks = 
#(define-music-function (parser location props) (list?)
   (let* ((space-left (cdr (assoc 'page-space-left props)))
          (music-size (apply + (cdr (assoc 'music-system-heights props))))
          (system-size (* -1 (cadr (assoc 'system-Y-extent props))))
          (extra-space (/ (* system-size space-left) music-size)))
     #{
       \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details
        #$(list (cons 'alignment-extra-space extra-space))
     #}))

nicolas

Index: ChangeLog
===================================================================
RCS file: /cvsroot/lilypond/lilypond/ChangeLog,v
retrieving revision 1.4693
diff -u -r1.4693 ChangeLog
--- ChangeLog   26 Feb 2006 11:03:52 -0000      1.4693
+++ ChangeLog   26 Feb 2006 12:51:00 -0000
@@ -1,5 +1,13 @@
 2006-02-26  Nicolas Sceaux  <address@hidden>
 
+       * scm/layout-page-layout.scm (write-page-breaks): add a
+       music-system-heights property to the page layout output.
+
+       * scm/page.scm (make-page-stencil): take footer into account when
+       computing the 'space-left page property
+       (annotate-space-left): take footer into account when annonating
+       space left.
+
        * scm/framework-ps.scm:         
        * scm/lily-library.scm (nan?, inf?): Move guile 1.6 compatibility
        layer for inf? and nan? from framework-ps to lily-library.
Index: scm/layout-page-layout.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/layout-page-layout.scm,v
retrieving revision 1.15
diff -u -r1.15 layout-page-layout.scm
--- scm/layout-page-layout.scm  16 Feb 2006 02:17:51 -0000      1.15
+++ scm/layout-page-layout.scm  26 Feb 2006 12:51:02 -0000
@@ -106,6 +106,12 @@
 
   (define (handle-page page)
     (define index 0)
+    (define music-system-heights
+      (map-in-order (lambda (sys)
+                     (* -1 (car (paper-system-extent sys Y))))
+                   (remove (lambda (sys)
+                             (ly:prob-property? sys 'is-title))
+                           (page-lines page))))
     (define (handle-system sys)
       (let*
          ((props `((line-break . #t)
@@ -113,6 +119,7 @@
                     . ((system-Y-extent . ,(paper-system-extent sys Y))
                        (system-refpoint-Y-extent . 
,(paper-system-staff-extents sys))
                        (system-index . ,index)
+                       (music-system-heights . ,music-system-heights)
                        (page-system-count . ,(length (page-lines page)))
                        (page-printable-height . ,(page-printable-height page)) 
                        (page-space-left . ,(page-property page 'space-left))))
Index: scm/page.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/page.scm,v
retrieving revision 1.9
diff -u -r1.9 page.scm
--- scm/page.scm        19 Feb 2006 12:38:02 -0000      1.9
+++ scm/page.scm        26 Feb 2006 12:51:02 -0000
@@ -124,7 +124,13 @@
        (layout (ly:paper-book-paper p-book))
        (arrow (annotate-y-interval layout
                                   "space left"
-                                  (cons (- (page-property page 'bottom-edge))
+                                  (cons (- 0.0
+                                           (page-property page 'bottom-edge)
+                                           (let ((foot (page-property page 
'foot-stencil)))
+                                             (if (and (ly:stencil? foot)
+                                                      (not (ly:stencil-empty? 
foot)))
+                                                 (car (ly:stencil-extent foot 
Y))
+                                                 0.0)))
                                         (page-property page  
'bottom-system-edge))
                                   #t)))
 
@@ -336,7 +342,12 @@
     (ly:prob-set-property! page 'bottom-system-edge
                           (car (ly:stencil-extent page-stencil Y)))
     (ly:prob-set-property! page 'space-left
-                          (car (ly:stencil-extent page-stencil Y)))
+                          (+ (prop 'bottom-edge)
+                             (prop 'bottom-system-edge)
+                             (if (and (ly:stencil? foot)
+                                      (not (ly:stencil-empty? foot)))
+                                 (car (ly:stencil-extent foot Y))
+                                 0.0)))
 
     (if (annotate? layout)
        (set! page-stencil

reply via email to

[Prev in Thread] Current Thread [Next in Thread]