lilypond-user
[Top][All Lists]
Advanced

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

Re: Accessing a grob from within a music function


From: David Nalesnik
Subject: Re: Accessing a grob from within a music function
Date: Thu, 16 Mar 2017 08:55:07 -0500

Urs,

On Thu, Mar 16, 2017 at 8:47 AM, Urs Liska <address@hidden> wrote:
> Hi David,
>
>
> Am 16.03.2017 um 14:40 schrieb David Nalesnik:
>> Hi Urs,
>>
>> On Thu, Mar 16, 2017 at 8:23 AM, Urs Liska <address@hidden> wrote:
>>> 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)
>>>
>> In the majority of cases you can follow a trail of pointers.  From the
>> NoteColumn, you can get noteheads or AccidentalPlacement, from
>> noteheads you can get to accidentals.
>> \version "2.19.56"
>>
>> {
>>   \override NoteColumn.X-offset =
>>   #(lambda (nc)
>>      (let ((notes (ly:grob-array->list (ly:grob-object nc 'note-heads))))
>>        (pretty-print (grob::all-objects nc))
>>        (pretty-print (grob::all-objects (car notes)))))
>>   <cis'' dis'' fis'' gis''>1
>> }
>>
>> I presume that travelling up the chain of parentage -- to a
>> PaperColumn -- would get you more grobs ('elements object property).
>>
>> -David
>
> Thank you, this will give me all I need.
> But could you please clarify (in more general terms):
>
> Usually (as in my example) I'd override X-offset with a literal number.
> You override it with a function.
> Does that mean that whenever I override a property of a grob with a
> callback function it will be the grob that is passed to that function?

Yes, exactly.

>
> Well, now that I think of it this is what I'm doing with the stencil
> override all along. Where can I read more about this?
>

There isn't much.  This is all I can think of:

http://lilypond.org/doc/v2.19/Documentation/extending/callback-functions

-David



reply via email to

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