]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/stencil.scm
*** empty log message ***
[lilypond.git] / scm / stencil.scm
index 2b1720f131a8e41db971735870aec7b0252270ef..b15731feb536570ec4fbda8b7d650f254197e256 100644 (file)
@@ -1,22 +1,22 @@
-;;;; stenicil.scm -- 
+;;;; stencil.scm -- 
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;; 
-;;;; (c)  2003--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; (c) 2003--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 (define-public (stack-stencils axis dir padding stils)
-  "Stack stencils STILS in direction AXIS,DIR, using PADDING."
-  (if (null? stils)
-      '()
-      (if (pair? stils)
-         (ly:stencil-combine-at-edge
-          (car stils) axis dir (stack-stencils axis dir padding (cdr stils))
-          padding))))
+  "Stack stencils STILS in direction AXIS, DIR, using PADDING."
+  (cond
+   ((null? stils) empty-stencil)
+   ((null? (cdr stils)) (car stils))
+   (else (ly:stencil-combine-at-edge
+         (car stils) axis dir (stack-stencils axis dir padding (cdr stils))
+         padding))))
 
 (define-public (stack-lines dir padding baseline stils)
   "Stack vertically with a baseline-skip."
   (if (null? stils)
-      '()
+      empty-stencil
       (if (null? (cdr stils))
          (car stils)
          (ly:stencil-combine-at-edge
@@ -44,7 +44,6 @@
                        (- (car yext)) (cdr yext))
       xext yext))
 
-
 (define-public (box-grob-stencil grob)
   "Make a box of exactly the extents of the grob.  The box precisely
 encloses the contents.
@@ -52,7 +51,7 @@ encloses the contents.
   (let* ((xext (ly:grob-extent grob grob 0))
         (yext (ly:grob-extent grob grob 1))
         (thick 0.1))
-
+    
     (ly:stencil-add
      (make-filled-box-stencil xext (cons (- (car yext) thick) (car yext)))
      (make-filled-box-stencil xext (cons  (cdr yext) (+ (cdr yext) thick)))
@@ -74,3 +73,17 @@ encloses the contents.
     (set! stil (ly:stencil-combine-at-edge stil Y -1 x-rule 0.0))
     
     stil))
+
+(define-public (fontify-text font-metric text)
+  "Set TEXT with font FONT-METRIC, returning a stencil."
+  (let* ((b (ly:text-dimension font-metric text)))
+    (ly:make-stencil
+     `(text ,font-metric ,text) (car b) (cdr b))))
+     
+(define-public (fontify-text-white scale font-metric text)
+  "Set TEXT with scale factor s"
+  (let* ((b (ly:text-dimension font-metric text))
+        ;;urg -- workaround for using ps font
+         (c `(white-text ,(* 2 scale) ,text)))
+    ;;urg -- extent is not from ps font, but we hope it's close
+    (ly:make-stencil c (car b) (cdr b))))