]> git.donarmstrong.com Git - lilypond.git/blob - input/test/boxed-molecule.ly
release: 1.5.9
[lilypond.git] / input / test / boxed-molecule.ly
1 \version "1.3.146"
2 \header {
3
4 texidoc = "overriding the molecule callback can also be used to draw a
5  box around arbitrary grobs.
6
7  TODO: check whether the corners are really correct.
8
9  TODO:  circled molecules.
10   
11  "
12 }
13
14 #(define (box-molecule xext yext)
15   (ly-make-molecule
16       (list 'filledbox (- (car xext)) (cdr xext)
17                        (- (car yext)) (cdr yext))
18       xext yext)                       
19 )
20
21 #(define (widen-interval iv amount)
22    (cons (- (car iv) amount)
23          (+ (cdr iv) amount))
24 )
25
26 #(define (make-molecule-boxer callback)
27   (define (molecule-boxer grob)
28   (let*
29    (
30     (mol    (callback grob))
31     (box-padding 0.1)
32     (x-ext (widen-interval (ly-get-molecule-extent mol 0) box-padding))
33     (y-ext (widen-interval (ly-get-molecule-extent mol 1) box-padding))
34     (rule-thick 0.1)
35     (x-rule (box-molecule (widen-interval x-ext rule-thick)
36                               (cons 0 rule-thick)))
37     (y-rule (box-molecule (cons 0 rule-thick) y-ext))
38     )
39     
40     (set! mol (ly-combine-molecule-at-edge mol 0 1 y-rule (* 0.5 box-padding)))
41     (set! mol (ly-combine-molecule-at-edge mol 0 -1  y-rule (* 0.5 box-padding)))
42     (set! mol (ly-combine-molecule-at-edge mol 1 1  x-rule 0.0))  
43     (set! mol (ly-combine-molecule-at-edge mol 1 -1 x-rule 0.0))
44     
45     mol
46  ))
47  molecule-boxer
48  )
49
50
51  \score { \notes \relative c''  {
52
53  \property Voice.TextScript \override #'molecule-callback =
54    #(make-molecule-boxer Text_item::brew_molecule)
55
56    c'4^"foo"
57
58 \property Voice.Stem \override #'molecule-callback =
59    #(make-molecule-boxer Stem::brew_molecule)
60
61 \property Score.RehearsalMark \override #'molecule-callback =
62    #(make-molecule-boxer Text_item::brew_molecule)
63
64       c8
65 \property Voice.Stem \revert #'molecule-callback
66
67       c4. c4 \mark "F" c1 
68    }}