[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Understanding ly:grob-original and ly:spanner-broken-into
From: |
Urs Liska |
Subject: |
Re: Understanding ly:grob-original and ly:spanner-broken-into |
Date: |
Wed, 8 Mar 2017 12:33:32 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.6.0 |
Am 08.03.2017 um 11:00 schrieb David Kastrup:
> Urs Liska <address@hidden> writes:
>
>> Hi,
>>
>> I have a hard time understanding ly:grob-original and whether I need it.
>> I'm working on a custom slur stencil and now have to support broken slurs.
>>
>> I looked into the implementation of \shape (which is only partially
>> appropriate because it doesn't create a stencil but property overrides)
>> and found that it splits the grob into its siblings using this code:
>>
>> (let* ((orig (ly:grob-original grob))
>> (siblings (if (ly:spanner? grob)
> Looks like (if (ly:spanner? orig) ... would make more sense here.
>> (ly:spanner-broken-into orig) '()))
>> I don't really see why "orig" is created here. What's the difference
>> between the last line of the example and using (ly:spanner-broken into
>> grob) here? As usual the documentation on the Scheme-functions page
>> isn't helpful ...
> Apparently grob is assumed to possibly already be a broken piece of slur
> here. So its unbroken original is looked up, and the pieces are taken
> from there.
I think I begin to understand what happens. Obviously I had created an
extra (code/concept) loop in my attempt.
When I create a callback function to override a stencil the grob that is
passed into it actually *is* the broken part as a single grob. Only with
ly:grob-original I can access the original full grob and through that
its child grobs (from which the "current" grob is one).
I think in my case I won't actually need that at all. I thought the
callback would be called once and it would be my responsibility to
iterate over the child slurs and create a combined stencil for all of
them. But actually I get the broken fragment and have to deal with that
alone.
What I did was pretty embarrasing (and not interesting enough to share)
and I'm happy to see that I can make it much simpler again. I think each
sibling doesn't really have to know about the others because they are
visually completely independent. And it's easy to tell a broken slur/tie
apart from a complete one through the bounds. A complete curve has a
NoteHead or a NoteColumn at both ends while a broken one has a
NonMusicalPaperColumn on one or both sides.
> All these are pure read-only functions: nothing is "split" or "broken"
> in these lines themselves.
I know. They return split copies, which is what I thought I'd need.
Urs
--
address@hidden
https://openlilylib.org
http://lilypondblog.org