X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Foutput-lib.scm;h=89d20b95509febf0f89ce443f0bd26282f9d5c29;hb=e8a9ef10aa3bfc2db7689aa58631aabb4095cd16;hp=23ff2640bb4f3efce22411efd1b6fbb907999a15;hpb=bd751630011a6fbfcf069ec1fc41a8eaed8a6b87;p=lilypond.git diff --git a/scm/output-lib.scm b/scm/output-lib.scm index 23ff2640bb..89d20b9550 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -620,8 +620,8 @@ and duration-log @var{log}." (define-public (color? x) (and (list? x) (= 3 (length x)) - (apply eq? #t (map number? x)) - (apply eq? #t (map (lambda (y) (<= 0 y 1)) x)))) + (every number? x) + (every (lambda (y) (<= 0 y 1)) x))) (define-public (rgb-color r g b) (list r g b)) @@ -673,6 +673,20 @@ and duration-log @var{log}." (prepend (+ x 7) (cons x l)))) (prepend first-position '()))))) +(define-public (key-signature-interface::alteration-position + step alter c0-position) +;; Deprecated. Not a documented interface, and no longer used in LilyPond, +;; but needed for a popular file, LilyJAZZ.ily for version 2.16 + (if (pair? step) + (+ (cdr step) (* (car step) 7) c0-position) + (let* ((c-pos (modulo c0-position 7)) + (hi (list-ref + (if (< alter 0) + '(2 3 4 2 1 2 1) ; position of highest flat + '(4 5 4 2 3 2 3)); position of highest sharp + c-pos))) + (- hi (modulo (- hi (+ c-pos step)) 7))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; annotations @@ -854,6 +868,11 @@ and duration-log @var{log}." the previous calculated offset value." prev-offset) +(define-public (scale-by-font-size x) + (ly:make-unpure-pure-container + (lambda (grob) + (* x (magstep (ly:grob-property grob 'font-size 0)))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; @@ -893,8 +912,8 @@ and duration-log @var{log}." (left-x (+ padding (max - (interval-end (ly:grob-robust-relative-extent - left-span common X)) + (interval-end (ly:generic-bound-extent + left-span common)) (if (and dots (close @@ -904,7 +923,7 @@ and duration-log @var{log}." (ly:grob-robust-relative-extent dots common X)) (- INFINITY-INT))))) (right-x (max (- (interval-start - (ly:grob-robust-relative-extent right-span common X)) + (ly:generic-bound-extent right-span common)) padding) (+ left-x minimum-length))) (self-x (ly:grob-relative-coordinate spanner common X)) @@ -1241,6 +1260,31 @@ parent or the parent has no setting." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ambitus +;; Calculate the gaps between ambitus heads and ends of ambitus line. +;; Start by determining desired length of the ambitus line (based on +;; length-fraction property), calc gap from that and make sure that +;; it doesn't exceed maximum allowed value. + +(define-public (ambitus-line::calc-gap grob) + (let ((heads (ly:grob-object grob 'note-heads))) + + (if (and (ly:grob-array? heads) + (= (ly:grob-array-length heads) 2)) + (let* ((common (ly:grob-common-refpoint-of-array grob heads Y)) + (head-down (ly:grob-array-ref heads 0)) + (head-up (ly:grob-array-ref heads 1)) + (fraction (ly:grob-property grob 'length-fraction 0.7)) + (max-gap (ly:grob-property grob 'maximum-gap 0.45)) + ;; distance between noteheads: + (distance (- (interval-start (ly:grob-extent head-up common Y)) + (interval-end (ly:grob-extent head-down common Y)))) + (gap (* 0.5 distance (- 1 fraction)))) + + (min gap max-gap)) + 0))) + +;; Print a line connecting ambitus heads: + (define-public (ambitus::print grob) (let ((heads (ly:grob-object grob 'note-heads))) @@ -1249,13 +1293,15 @@ parent or the parent has no setting." (let* ((common (ly:grob-common-refpoint-of-array grob heads Y)) (head-down (ly:grob-array-ref heads 0)) (head-up (ly:grob-array-ref heads 1)) - (gap (ly:grob-property grob 'gap 0.35)) + ;; The value used when 'gap' property cannot be read is small + ;; to make sure that ambitus of a fifth will have a visible line. + (gap (ly:grob-property grob 'gap 0.25)) (point-min (+ (interval-end (ly:grob-extent head-down common Y)) gap)) (point-max (- (interval-start (ly:grob-extent head-up common Y)) gap))) - (if (< point-min point-max) + (if (< (+ point-min 0.1) point-max) ; don't print lines shorter than 0.1ss (let* ((layout (ly:grob-layout grob)) (line-thick (ly:output-def-lookup layout 'line-thickness)) (blot (ly:output-def-lookup layout 'blot-diameter))