lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Can you determine why a grob is being typeset in scheme?


From: Steven Weber
Subject: RE: Can you determine why a grob is being typeset in scheme?
Date: Tue, 21 Apr 2015 10:41:15 -0700

You guys are awesome!  Took me a little bit to piece everything together, but 
here's what I wound up with.  It's almost exactly what I want - I still need to 
figure out how to highlight clef changes in the first bar without highlighting 
the initial clef indicator, and how to deal with clef modifiers.

clef-highlight-engraver =
#(lambda (context)
        (let ((clef-props '()))

                `((acknowledgers
                                (clef-interface
                                        . ,(lambda (engraver grob 
source-engraver)

                                                ;; Only change items that are 
non-default
                                                (if (boolean? (ly:grob-property 
grob 'non-default))
                                                        (begin

                                                                ;; Grab all of 
the data necessary
                                                                (let* ((clef 
(ly:clef::print grob))                     ;; The existing print object
                                                                           
(X-ext (ly:stencil-extent clef X))   ;; The X extent of the grob
                                                                           
(Y-ext (ly:stencil-extent clef Y)))  ;; The Y extent of the grob
                                                                
                                                                        ;; Pad 
the X extent just a bit to make it look more like a highlighter
                                                                        (set! 
X-ext (cons (- (car X-ext) 0.25) (+ (cdr X-ext) 0.25)))
                                                                        
                                                                        ;; If 
the clef is a bass clef, then we need to add just a smidge extra to the Y extent
                                                                        ;; This 
is purely an aesthetic choice on my part, because I think the Y extent of the
                                                                        ;; bass 
clef is a little off.
                                                                        (if 
(equal? (ly:context-property context 'clefGlyph) "clefs.F")
                                                                                
(set! Y-ext (cons (car Y-ext) (+ (cdr Y-ext) 0.15))))

                                                                        ;; 
Don't do this for the initial clef
                                                                        ;; 
NOTE:  If you have a clef change in the first bar, it won't be highlighted.
                                                                        ;;      
          Is there a better way to determine the first (and only the first) 
clef change?
                                                                        (if 
(not (equal? (ly:context-property context 'currentBarNumber) 1))
                                                                                
(begin
                                                                                
        (set! (ly:grob-property grob 'layer) -10)
                                                                                
        (set! (ly:grob-property grob 'stencil)
                                                                                
                (ly:stencil-add
                                                                                
                        (ly:make-stencil (list 'color (x11-color 'yellow)
                                                                                
                                (ly:stencil-expr (ly:round-filled-box X-ext 
Y-ext 0)) X-ext Y-ext)) clef)))))))))))))

Thanks again for your help!

--Steven



reply via email to

[Prev in Thread] Current Thread [Next in Thread]