X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fstencil.scm;h=8513c6389a3bd95499315bf6ea54e743719e1485;hb=a9d9433bc7b95cb2d4b3d96eefce7a8437c0d44e;hp=e698fa8896e50abe74abb2ceb4cf9cdc076c0d28;hpb=2c960b34456dd700a1120acbe2fdbcfd2828118a;p=lilypond.git diff --git a/scm/stencil.scm b/scm/stencil.scm index e698fa8896..8513c6389a 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -2,7 +2,14 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 2003--2007 Han-Wen Nienhuys +;;;; (c) 2003--2009 Han-Wen Nienhuys + +(define-public (translate-stencil stencil coordinate-pair) + "Translate @code{stencil} by the distances specified in +@code{coordinate-pair}." + (ly:stencil-translate-axis + (ly:stencil-translate-axis stencil (cdr coordinate-pair) Y) + (car coordinate-pair) X)) (define-public (stack-stencils axis dir padding stils) "Stack stencils STILS in direction AXIS, DIR, using PADDING." @@ -81,6 +88,14 @@ (interval-widen xext (/ width 2)) (interval-widen yext (/ width 2))))) +(define-public (make-round-filled-box-stencil xext yext blot-diameter) + "Make a filled rounded box." + + (ly:make-stencil + (list 'round-filled-box (- (car xext)) (cdr xext) + (- (car yext)) (cdr yext) blot-diameter) + xext yext)) + (define-public (make-filled-box-stencil xext yext) "Make a filled box." @@ -99,6 +114,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 +183,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."