lilypond-user-fr
[Top][All Lists]
Advanced

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

Re: TextScript dans une définition markup


From: Gloops
Subject: Re: TextScript dans une définition markup
Date: Fri, 11 Dec 2020 18:11:45 -0700 (MST)

\version "2.20.0"

#(define-markup-command (myMarker layout props color xdim ydim) (color?
pair? pair?)   
  (interpret-markup layout props   
    (markup  (#:with-dimensions (cons 0 0)(cons 0 0) 
              #:override '(box-padding . 0)  
              #:override '(corner-radius . 2)  
               #:override '(thickness  . 2)  
              #:rounded-box   
               (#:with-color color
                 (#:filled-box  xdim  ydim 2) )))))

roundedRectangle =
#(define-music-function ( y-lower y-upper frame-color fill-color radius)
   (number? number? scheme? scheme? number?)
   #{
     \once\override HorizontalBracket.stencil =
     $(lambda (grob)
        (let* (
                (area (ly:horizontal-bracket::print grob))
                (thick (ly:grob-property grob 'line-thickness 0.2))
                (pad (ly:grob-property grob 'broken-bound-padding 0))
                (X-ext (ly:stencil-extent area X))
                (X-ext (cons (- (car X-ext) thick) (+ (cdr X-ext)  thick)))
                (open-on-left  (=  1 (ly:item-break-dir (ly:spanner-bound
grob LEFT ))))
                (open-on-right (= -1 (ly:item-break-dir (ly:spanner-bound
grob RIGHT))))
                (X-ext (cons
                        (if open-on-left  (+ (car X-ext) pad) (car X-ext))
                        (if open-on-right (- (cdr X-ext) pad) (cdr X-ext))))
                (Y-ext (cons y-lower y-upper))
                (outer-rect empty-stencil)
                )
          ; calculate outer borders:
          (set! outer-rect
                (if (color? frame-color)
                    (ly:make-stencil (list 'color frame-color
                                       (ly:stencil-expr (ly:round-filled-box
X-ext Y-ext radius))
                                       X-ext Y-ext))
                    empty-stencil)
                )
          ; shrink X-ext for use with inner stuff:
          (set! X-ext (cons (+ (car X-ext) thick) (cdr X-ext)))
          (set! X-ext (cons (car X-ext) (- (cdr X-ext) thick)))
          ; shrink Y-ext for use with inner stuff:
          (set! Y-ext (cons (+ (car Y-ext) thick) (cdr Y-ext)))
          (set! Y-ext (cons (car Y-ext) (- (cdr Y-ext) thick)))
          (ly:grob-set-property! grob 'layer -10)
          (ly:stencil-add
           outer-rect
           ; draw (inner) fill-rectangle
           (if (color? fill-color)
               (ly:make-stencil (list 'color fill-color
                                  (ly:stencil-expr (ly:round-filled-box
X-ext Y-ext (- radius thick)))
                                  X-ext Y-ext))
               empty-stencil)
           )
          ))
     \once\override HorizontalBracket.Y-offset = #0
     \once\override HorizontalBracket.shorten-pair = #'(-2.3 . -0.5)
   #})

#(define-markup-command (sticker layout props frame-color fill-color arg)
(color? color? markup?)
   (let* ((stencil (interpret-markup layout props arg))
          (X-ext (ly:stencil-extent stencil X))
          (Y-ext (ly:stencil-extent stencil Y))
          (cnt 0)
          (step 0)
          (dist-y (- (cdr Y-ext) (car Y-ext))))
     (set! cnt (round (/ dist-y 0.7)))
     (if (> cnt 0)
         (set! step (/ dist-y cnt))
         (set! step 0))
     (ly:stencil-add
      (makeDeltaSpan
       (car Y-ext) (cdr Y-ext) (car Y-ext) (cdr Y-ext) frame-color
fill-color
       step step #f #f 0.1 ; thick
       0 X-ext #f #f 0)
      stencil)))


\layout {
  \context {
    \Voice
    \consists "Horizontal_bracket_engraver"
  }
}

\score {
  \relative c' {
    \clef treble
\key g \major 
<> -\markup\myMarker #red #'(-6 . -5) #'(2 . 6)
  c4  d  e fis |
  g4  \roundedRectangle #-4 #3  #black #yellow #2
  f? \startGroup  e c  \stopGroup  d4 e4 fis r %
  \bar "|."
  
  
  }
}




--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/



reply via email to

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