X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fstencil.scm;h=047c0d0bb9622a2d514da8360bcca871e14f636b;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=e698fa8896e50abe74abb2ceb4cf9cdc076c0d28;hpb=c3f02f0948bbb78495ae3651fd42eea58319c40c;p=lilypond.git diff --git a/scm/stencil.scm b/scm/stencil.scm index e698fa8896..047c0d0bb9 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -2,7 +2,7 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 2003--2007 Han-Wen Nienhuys +;;;; (c) 2003--2008 Han-Wen Nienhuys (define-public (stack-stencils axis dir padding stils) "Stack stencils STILS in direction AXIS, DIR, using PADDING." @@ -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,6 +168,24 @@ encloses the contents. (interval-center x-ext) (interval-center y-ext)))))) +(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."