X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fslur.scm;h=5b1e9c102806984a6bb871ee13f76129b6898c84;hb=694a96d90805c2361fe5f8bbb9aba90fd9ed42dd;hp=d632839023a41271bff55706095440cc32aea27e;hpb=764c49729f95f421d9d6cc8eee5386706039a2c7;p=lilypond.git diff --git a/scm/slur.scm b/scm/slur.scm index d632839023..5b1e9c1028 100644 --- a/scm/slur.scm +++ b/scm/slur.scm @@ -3,128 +3,27 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 2000--2001 Jan Nieuwenhuizen +;;;; (c) 2000--2004 Jan Nieuwenhuizen ;;;; - -(define (attached-to-stem slur dir) - (let* ((note-columns (ly-get-grob-property slur 'note-columns)) - (col (if (= dir 1) (car note-columns) (car (reverse note-columns)))) - (stem (ly-get-grob-property col 'stem))) - (and - (eq? col (ly-get-spanner-bound slur dir)) - stem - (ly-get-grob-property stem 'heads)))) - - -;; Slur-extremity-rules is a list of rules. Each rule is a pair -;; (fuction . attachment), where function takes two arguments, -;; the slur and the direction of the attachment. -;; -;; The rules are tried starting from the car of this list. If the -;; function part (car) evaluates to #t, the corresponding -;; attachment (cdr) is used for the slur's dir. Otherwise, the next -;; rule is tried. -;; -;; Currently, we have attachments: -;; -;; 'head 'along-side-stem 'stem 'loose-end -;; - -(define default-slur-extremity-rules - (list - - ;; (cons (lambda (slur dir) (begin (display "before sanity check") (newline))#f) #f) - - ;; urg: don't crash on a slur without note-columns - (cons (lambda (slur dir) - (< (length (ly-get-grob-property slur 'note-columns)) 1)) 'head) - - ;; (cons (lambda (slur dir) (begin (display "before loose-end") (newline))#f) #f) - (cons (lambda (slur dir) (not (attached-to-stem slur dir))) 'loose-end) - - ;; (cons (lambda (slur dir) (begin (display "before head") (newline))#f) #f) - - (cons (lambda (slur dir) - ;; urg, code dup - (let* ((note-columns (ly-get-grob-property slur 'note-columns)) - (col (if (= dir 1) (car note-columns) (car (reverse note-columns)))) - (stem (ly-get-grob-property col 'stem))) - (and stem - (not (= (ly-get-grob-property slur 'direction) - (ly-get-grob-property stem 'direction)))))) 'head) - - ;; (cons (lambda (slur dir) (begin (display "before stem") (newline))#f) #f) - - (cons (lambda (slur dir) - ;; if attached-to-stem - (and (attached-to-stem slur dir) - ;; and got beam - ;; urg, code dup - (let* ((note-columns (ly-get-grob-property slur 'note-columns)) - (col (if (= dir 1) (car note-columns) (car (reverse note-columns)))) - (stem (ly-get-grob-property col 'stem))) - (and stem - (ly-get-grob-property stem 'beam) - ;; and beam on same side as slur - (let ((beaming (ly-get-grob-property stem 'beaming))) - ;; (display "beaming (") (display dir) (display "): ") (write beaming) (newline) - (if (pair? beaming) - (>= (if (= dir -1) (cdr beaming) (car beaming)) - 1) - #f)))))) - 'stem) - - ;; (cons (lambda (slur dir) (begin (display "before loose-end") (newline))#f) #f) - (cons (lambda (slur dir) (not (attached-to-stem slur dir))) 'loose-end) - ;; (cons (lambda (slur dir) (begin (display "after loose-end") (newline))#f) #f) - - ;; default case, attach to head - (cons (lambda (x y) #t) 'head) - )) - - -;; This list defines the offsets for each type of attachment. -;; The format of each element is -;; (attachment stem-dir*dir slur-dir*dir) -;; Different attachments have different default points: -;; -;; head: Default position is centered in X, on outer side of head Y -;; along-side-stem: Default position is on stem X, on outer side of head Y -;; stem: Default position is on stem X, at stem end Y -(define default-slur-extremity-offset-alist - '( - ((head 1 1) . (-0.25 . 0.25)) - ((head 1 -1) . (-0.25 . 0.25)) - ((head -1 1) . (-0.25 . 0.25)) - ((head -1 -1) . (-0.85 . 0.25)) - - ((stem 1 1) . (0 . 0.5)) - ((stem -1 -1) . (0 . 0.5)) - - ((loose-end 1 1) . (-0.4 . 0)) - ((loose-end 1 -1) . (-0.4 . 0)) - ((loose-end -1 -1) . (-4 . 0)) - ((loose-end -1 1) . (-4 . 0)) + ; +; this is put into the slur-details property of Slur and PhrasingSlur +(define default-slur-details + '((region-size . 4) + (head-encompass-penalty . 1000.0) + (stem-encompass-penalty . 30.0) + (closeness-factor . 10) + (edge-attraction-factor . 4) + (same-slope-penalty . 20) + (steeper-slope-factor . 50) + (non-horizontal-penalty . 15) + (max-slope . 1.1) + (max-slope-factor . 10) + (free-head-distance . 0.3) + (free-slur-distance . 0.8) + (extra-object-collision . 50) + (accidental-collision . 3) + (extra-encompass-free-distance . 0.3) + (head-slur-distance-max-ratio . 3) + (head-slur-distance-factor . 10) + (edge-slope-exponent . 2) )) - -;; This is a bit of a hack: slurs and phrasing slurs -;; attaching at the same note must not collide. -;; However, slurs (and phrasing slurs) should look -;; at scripts and eachother. -(define default-phrasing-slur-extremity-offset-alist - '( - ((head 1 1) . (-0.25 . 1.25)) - ((head 1 -1) . (-0.25 . 1.25)) - ((head -1 1) . (-0.25 . 1.25)) - ((head -1 -1) . (-0.85 . 1.25)) - - ((stem 1 1) . (0 . 1.5)) - ((stem -1 -1) . (0 . 1.5)) - - ((loose-end 1 1) . (-0.4 . 0)) - ((loose-end 1 -1) . (-0.4 . 0)) - ((loose-end -1 -1) . (-4 . 0)) - ((loose-end -1 1) . (-4 . 0)) - )) - -