[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Accessing a grob from within a music function
From: |
Thomas Morley |
Subject: |
Re: Accessing a grob from within a music function |
Date: |
Fri, 17 Mar 2017 00:34:08 +0100 |
2017-03-16 22:51 GMT+01:00 Thomas Morley <address@hidden>:
> 2017-03-16 14:23 GMT+01:00 Urs Liska <address@hidden>:
>> Hi,
>>
>> I'm trying to write a function to push a note column like this:
>>
>> pushLeftBroken =
>> #(define-music-function ()()
>> #{
>> \once \override NoteColumn.X-offset = 3
>> #})
>>
>> But I need to make that "3" depend on some characteristics of the actual
>> note column. Basically I need the width of the note column, including
>> attached accidentals.
>>
>> I know how to get to the accidental(s) within a note column, but if I'm
>> not mistaken there's no actual grob inside that.
>>
>> Probably music-function isn't the right approach?
>>
>> What I need is a way to say something like
>>
>> \once \override NoteColumn.X-offset = #(+ 3
>> extent-of-all-accidentals-in-the-note-column)
>>
>> Any ideas?
>> TIA
>> Urs
>
>
>
> Hi Urs,
>
> here my thoughts about the topic so far.
> Although I'm afraid it will not help, because it has to be done
> before-line-breaking.
>
> wanted-value = 20
>
> {
> c'1( \break
> \override NoteColumn.before-line-breaking =
> #(lambda (nc)
> ;; TODOs
> ;; add fall-backs if certain grobs are not present, i.e
> ;; (DotColumn, Arpeggio, AccidentalPlacement)
> (let* ((dot-col (ly:note-column-dot-column nc))
> (acc-placement (ly:note-column-accidentals nc))
> (common-ref
> (ly:grob-common-refpoint nc acc-placement X))
> (x-length-of-accs
> (interval-length
> (ly:relative-group-extent
> (map last (ly:grob-object acc-placement 'accidental-grobs))
> common-ref
> X))))
>
> (for-each
> (lambda (el)
> (ly:grob-translate-axis!
> el
> (+ x-length-of-accs wanted-value)
> X))
> (filter
> (lambda (g) (ly:grob? g))
> (list
> acc-placement
> dot-col
> nc)))))
>
>
> <cis'' dis'' fis'' gis''-1\2>2)\arpeggio ^"foo"
> }
>
> Cheers,
> Harm
Probably:
{
c'1( \break
\override NoteColumn.after-line-breaking =
#(lambda (nc)
(ly:grob-translate-axis! (ly:grob-parent nc X) 5 X)
;; uncomment for viewing
;(ly:grob-set-property!
; (ly:grob-parent nc X)
; 'stencil
; ly:paper-column::print)
)
<cis'' dis'' fis'' gis''-1\2>2)\arpeggio ^"foo"
}
Not tested beyond the above example, though.
Cheers,
Harm
Re: Accessing a grob from within a music function, Thomas Morley, 2017/03/16
- Re: Accessing a grob from within a music function,
Thomas Morley <=