TextScript dans une définition markup

classic Classique list Liste threaded Arborescence
12 messages Options
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

TextScript dans une définition markup

martial
Bonjour,

je cherche à inclure dans une  définition de commande markup
un \override TextScript
je tourne en rond depuis 2 jours !


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.21.81"

#(define-markup-command (Stabilo layout props color xdim ydim)
   (color? pair? pair?)
   #{ \override TextScript.layer = #-1 #} ;ne retourne rien
   (interpret-markup layout props
     #{
       \markup {
         \with-dimensions-from \null
         %\override TextScript.layer = #-1 %renvoie une erreur
         \override #'(corner-radius . 3)
         \rounded-box %liseret
         \with-color $color  % mettre couleur
         % la taille -x à x de -y à y et arrondi
         \filled-box #xdim #ydim #1
       }
     #}))

\relative c' {
  % calque sous les lignes
  % cherche solution pour inclure le TextScript. layer dans la commande
Stabilo
  \override TextScript.layer = #-1
  \clef treble
  \key g \major
  <>-\markup \Stabilo  #"pink" #'(-6 . -5) #'(2 . 6)
  c4 d e fis |
  g4 f? e
  -\markup \Stabilo  #yellow #'(-5 . 5) #'(-3 . 6)
  c |
  d4 e4 fis %
  \bar "|."
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Si si il y a toujours une LilyPond solution :-)
Merci d'avance



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

♫artial♪
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

LilyPond French Users mailing list
Peut-être ça ?

%%%%
\version "2.20.0"
#(define-markup-command (Stabilo layout props color xdim ydim)
   (color? pair? pair?)
   (interpret-markup layout props
     #{
       \markup {
         \with-dimensions-from \null
         \override #'(layer . -3)
         \override #'(corner-radius . 3)
         \rounded-box %liseret
         \with-color $color
         \filled-box #xdim #ydim #1
       }
     #}))

\relative c' {
  % calque sous les lignes
  % cherche solution pour inclure le TextScript. layer dans la commande
Stabilo
  \clef treble
  \key g \major
  <>-\markup \Stabilo  #red #'(-6 . -5) #'(2 . 6)
  c4 d e fis |
  g4 f? e
  -\markup \Stabilo  #yellow #'(-5 . 5) #'(-3 . 6)
  c |
  d4 e4 fis %
  \bar "|."
}
%%%%%



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

Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

martial
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

LilyPond French Users mailing list
\version "2.20.0"
#(define-markup-command (Stabilo layout props color xdim ydim)
   (color? pair? pair?)
   (interpret-markup layout props
     #{
       \markup {
         \with-dimensions-from \null        
         \override #'(corner-radius . 3)
         \rounded-box %liseret
         \with-color $color
         \filled-box #xdim #ydim #1
       }
     #}))

\relative c' {
  % calque sous les lignes
  % cherche solution pour inclure le TextScript. layer dans la commande
Stabilo
 
  \override Staff.TextScript.layer = #-1000
  \clef treble
  \key g \major
  <>-\markup \Stabilo  #red #'(-6 . -5) #'(2 . 6)
  c4 d e fis |
  g4 f? e-\markup \Stabilo  #yellow #'(-5 . 5) #'(-3 . 6)
  c  d4 e4 fis r %
  \bar "|."
}



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

Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

Schneidy
-1000, c'est violent...
Pourquoi pas:

\relative c' {
  % calque sous les lignes
  % cherche solution pour inclure le TextScript. layer dans la commande Stabilo
  \clef treble
  \key g \major
  <>-\tweak layer #-1 -\markup \Stabilo  #red #'(-6 . -5) #'(2 . 6)

  c4 d e fis |
  g4 f? e
  -\tweak layer #-1
  -\markup \Stabilo  #yellow #'(-5 . 5) #'(-3 . 6)
  c |
  d4 e4 fis %
  \bar "|."
}

afin que les autres TextScript éventuels ne soient pas  affectés par une malencontreuse mise en couche inférieure.
Cordialement,
Pierre




Le ven. 11 déc. 2020 à 21:40, Gloops via LilyPond French-speaking list <[hidden email]> a écrit :
\version "2.20.0"
#(define-markup-command (Stabilo layout props color xdim ydim)
   (color? pair? pair?)
   (interpret-markup layout props
     #{
       \markup {
         \with-dimensions-from \null         
         \override #'(corner-radius . 3)
         \rounded-box %liseret
         \with-color $color
         \filled-box #xdim #ydim #1
       }
     #}))

\relative c' {
  % calque sous les lignes
  % cherche solution pour inclure le TextScript. layer dans la commande
Stabilo

  \override Staff.TextScript.layer = #-1000
  \clef treble
  \key g \major
  <>-\markup \Stabilo  #red #'(-6 . -5) #'(2 . 6)
  c4 d e fis |
  g4 f? e-\markup \Stabilo  #yellow #'(-5 . 5) #'(-3 . 6)
  c  d4 e4 fis r %
  \bar "|."
}



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

Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

martial
En réponse à ce message posté par LilyPond French Users mailing list
Testé aussi le -1000
ne le fait pas :-(



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

♫artial♪
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

martial
En réponse à ce message posté par Schneidy
Ah, si pas d'autre solution même avec un \once \override  dans le le
#define-markup-command
 -\tweak  \layer -1 fera l'affaire.
mais du coup la commande est moins concentré
-\tweak layer -1 -\markup  \Stabilo couleur  x y
Merci !
 



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

♫artial♪
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

LilyPond French Users mailing list
\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)
               (#:with-color color
                 (#:filled-box  xdim  ydim 1) )))))

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/

Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

LilyPond French Users mailing list
\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/

Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

martial
bonjour,
merci
beau code, un peu ésotérique pour moi.
Ça fonctionne, Cependant je n'arrive pas avec \markup \sticker  
comment on entre l'argument "arg" ?



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

♫artial♪
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

Jean Abou Samra
En réponse à ce message posté par martial
Hello,

Le 11/12/2020 à 19:09, martial a écrit :

> Bonjour,
>
> je cherche à inclure dans une  définition de commande markup
> un \override TextScript
> je tourne en rond depuis 2 jours !
>
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> \version "2.21.81"
>
> #(define-markup-command (Stabilo layout props color xdim ydim)
>     (color? pair? pair?)
>     #{ \override TextScript.layer = #-1 #} ;ne retourne rien

En Scheme, une fonction est une suite d'expressions qui sont évaluées l'une
après l'autre. La valeur de la dernière expression évaluée est renvoyée par
la fonction. Celles qui précèdent ne peuvent servir que si elles ont des
effets de bord (par exemple, dans le contexte de LilyPond, modifier une
propriété). Donc, ce bout de code est évalué, et le résultat… jeté à la
poubelle ! Évidemment, ce n'est pas ce que vous souhaitiez.

Voici une solutionpour factoriser la retouche du layer à l'intérieur
de la commande :

\version "2.21.80"

% Commande de markup auxiliaire, qui lit une propriété et crée
% le coup de stabilo.

#(define-markup-command (Stabilo-markup layout props color xdim ydim)
                         (color? number-pair? number-pair?)
   (interpret-markup layout props
     #{
       \markup
       \with-dimensions-from \null
       \with-color #color
       \filled-box #xdim #ydim #3
     #}))

% On utilise le raccourci pratique et nouveau en 2.20, \etc,
% qui permet de transférer le reste de l'évaluation des arguments
% à l'endroit où l'identifieur est rappelé avec \Stabilo. Ceci évite
% une fonction musicale.

Stabilo = \tweak layer -1 -\markup \Stabilo-markup \etc

% Exemple.

\relative c' {
   \clef treble
   \key g \major
   c4\Stabilo #green #'(-6 . -5) #'(2 . 6)
   d e fis |
   g4 f?
   e\Stabilo  #yellow #'(-5 . 5) #'(-3 . 6)
   c |
   d4
   e4\Stabilo #black #'(-2 . 2) #'(-2 . 2)
   fis
   \bar "|."
}



Cordialement,
Jean


Répondre | Arborescence
Ouvrir ce message en vue arborescente
|

Re: TextScript dans une définition markup

martial
b'soir,
 
Sioux la solution !
et merci pour l'explication

Cordialement



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

♫artial♪