X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fstencil.scm;h=c0e56cd86e8d4613ab63d34856430aec6307962f;hb=5c14a087ca6cbd665fd631452b7b1283ba0387c3;hp=8ae5ffab066c549774445ff69b1505b9264ce9ae;hpb=cb2a453c1957c882e2941de7eaccc351a8cf6d3b;p=lilypond.git diff --git a/scm/stencil.scm b/scm/stencil.scm index 8ae5ffab06..c0e56cd86e 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -99,6 +99,19 @@ (cons (- out-radius) out-radius) (cons (- out-radius) out-radius)))) +(define-public (make-oval-stencil x-radius y-radius thickness fill) + "Make an oval from two Bezier curves, of x radius @var{x-radius}, + y radius @code{y-radius}, + and thickness @var{thickness} with fill defined by @code{fill}." + (let* + ((x-out-radius (+ x-radius (/ thickness 2.0))) + (y-out-radius (+ y-radius (/ thickness 2.0))) ) + + (ly:make-stencil + (list 'oval x-radius y-radius thickness fill) + (cons (- x-out-radius) x-out-radius) + (cons (- y-out-radius) y-out-radius)))) + (define-public (make-ellipse-stencil x-radius y-radius thickness fill) "Make an ellipse of x radius @var{x-radius}, y radius @code{y-radius}, and thickness @var{thickness} with fill defined by @code{fill}." @@ -155,12 +168,31 @@ encloses the contents. (interval-center x-ext) (interval-center y-ext)))))) -(define-public (ellipse-stencil stencil thickness padding) - "Add an ellipse around STENCIL, producing a new stencil." +(define-public (oval-stencil stencil thickness x-padding y-padding) + "Add an oval around @code{stencil}, padded by the padding pair, + producing a new stencil." + (let* ((x-ext (ly:stencil-extent stencil X)) + (y-ext (ly:stencil-extent stencil Y)) + (x-length (+ (interval-length x-ext) x-padding thickness)) + (y-length (+ (interval-length y-ext) y-padding thickness)) + (x-radius (* 0.707 x-length) ) + (y-radius (* 0.707 y-length) ) + (oval (make-oval-stencil x-radius y-radius thickness #f))) + + (ly:stencil-add + stencil + (ly:stencil-translate oval + (cons + (interval-center x-ext) + (interval-center y-ext)))))) + +(define-public (ellipse-stencil stencil thickness x-padding y-padding) + "Add an ellipse around STENCIL, padded by the padding pair, + producing a new stencil." (let* ((x-ext (ly:stencil-extent stencil X)) (y-ext (ly:stencil-extent stencil Y)) - (x-length (+ (interval-length x-ext) padding thickness)) - (y-length (+ (interval-length y-ext) padding thickness)) + (x-length (+ (interval-length x-ext) x-padding thickness)) + (y-length (+ (interval-length y-ext) y-padding thickness)) ;(aspect-ratio (/ x-length y-length)) (x-radius (* 0.707 x-length) ) (y-radius (* 0.707 y-length) )