[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: En rouge et noir
From: |
Jean Abou Samra |
Subject: |
Re: En rouge et noir |
Date: |
Sun, 24 Apr 2022 19:39:28 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 |
Bonjour,
Le 24/04/2022 à 19:07, Jean-Marc Legrand - Éditions IN NOMINE a écrit :
Salutations à toute la troupe, de la part d'un lointain revenant !
Sur cette liste, personne n'a peur des revenants :-)
Un petit souci que je ne parviens pas à résoudre.
Voici un exemple de code, avec 2 voix sur une même portée, de 2
couleurs différentes. Vous le verrez de suite, mon souci est que, si
les ledgerlines sont bien rouges sur la voix 1 seule, dès que la voix
2 arrive, elles redeviennent noires. LedgerLineSpanner.color est une
propriété de Staff, ce qui explique cela... Auriez-vous une idée de
sioux pour contourner ceci ?
PS : j'ai écumé les listes, et il y a des réponses approchantes, mais
pas situation identiques (mise en parallèle de 2 voix sur une même
Staff)... L'idée serait peut-être de dire, via une fonction Scheme :
si ce sont des ledger lines supérieures, en rouge, sinon, en noir.
Chapeau bas à la personne qui saurait me faire une petite fonction
comme celle-ci !
Merci d'avance !
JMarc, toujours éditeur, mais surtout libraire désormais... et breton,
qui plus est !
Bon, je propose ma solution :
\version "2.22.2"
\layout {
#(use-modules (ice-9 match))
\context {
\Staff
\override LedgerLineSpanner.stencil =
#(grob-transformer 'stencil
(lambda (grob original)
(match-let*
((expr (ly:stencil-expr original))
(X-ext (ly:stencil-extent original X))
(Y-ext (ly:stencil-extent original Y))
(('translate-stencil global-off ('combine-stencil .
ledgers)) expr)
(new-ledgers
(map
(lambda (ledger)
(match-let
((('translate-stencil (0.0 . ledger-Y-off)
ledger-expr) ledger))
(if (positive? ledger-Y-off)
`(color ,(css-color "red")
,ledger)
ledger)))
ledgers))
(new-expr
`(translate-stencil ,global-off (combine-stencil .
,new-ledgers))))
(ly:make-stencil new-expr X-ext Y-ext))))
}
}
\relative \new Staff << { e''8 g c e g e c g e } \\ { b,8 a g f g a b c
d } >>
Je tiens tout de même à insister sur deux points :
1. Ne dites à personne que je vous ai montré ce genre de truc.
Si Jean Abou Samra apprenait que je poste des hacks pareils,
il m'en voudrait.
2. Veuillez garder en tête que ce code est fortement dépendant
de détails internes, et qu'à ce titre il est possible qu'il
ne fonctionne plus dans une version ultérieure (même si, a
priori, il ne devrait pas être trop difficile de l'adapter).
Cordialement,
Jean
- En rouge et noir, Jean-Marc Legrand - Éditions IN NOMINE, 2022/04/24
- Re: En rouge et noir,
Jean Abou Samra <=