lilypond-devel
[Top][All Lists]
Advanced

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

Re: Set indent based on instrument name (issue 6457049)


From: address@hidden
Subject: Re: Set indent based on instrument name (issue 6457049)
Date: Sat, 4 Aug 2012 17:58:59 +0200

On 4 août 2012, at 09:28, address@hidden wrote:

> On 2012/08/01 06:45:22, MikeSol wrote:
> 
>> Avoid measuring extents when engraving is happening because they could
> be
>> dependent on other callbacks which could trigger many layout decisions
> before
>> engraving is finished.
> 
> 
> This is a case where measuring extents early seems appropriate.
> 
> Phil wants the line-indents, thus line-lengths, thus some very early
> layout decisions, to depend on the extents of the instrument names.
> 
> The dependency is reversed in this case from the more usual situations
> where Mike's suggestion holds, such as the extent of a hairpin, which
> depends on the layout.
> 

I agree that the calculation will happen early (definitely before line 
breaking), but if someone writes an exotic callback for the stencil function of 
instrument name that somehow is linked to other grobs, it should only be called 
after engraving is done.

>> Here, what I would do is use the Pointer_group_interface to add two
> grob arrays
> 
> Running through those arrays and re-checking the lengths of the
> instrument names every time we look up the line-indent, would let the
> line-breaker see if those lengths changed for some reason depending on
> the evolving layout.  I do not expect the line-breaker to behave
> sensibly if the indents change like this.

I didn't express myself clearly.  I meant that there should be a finalize 
method in the engraver that loops through the vectors and adds them to a grob 
array via Pointer_group_interface::add_grob.  finalize is only ever called once 
for a given engraver.

> 
>> Properties, in LilyPond, are the best way to stash
>> information.
> 
> Phil, working with properties, or in this case Scheme variables
> associated with layout, does seems necessary.  See set_variable().
> Old scores where we chose \paper {indent = 2.3\cm } to fit the
> instrument names should continue to work.
> If you can figure out enough Scheme to have LilyPond initialize indent
> so that it evaluates a different Scheme variable (say, default-indent)
> and have the engraver updates that variable, then we can have
> automatically-adapting intends by default, and let users override by
> replacing the link to default-indent with their own choice.
> 
> http://codereview.appspot.com/6457049/

I agree that users should be able to override something, but they should be 
able to override a property of InstrumentName or System (depending on how 
things are implemented).
I'm always wary of Scheme variables because of global scopes and multiple 
scores: that has come to bite me in the past.  I generally steer clear of this 
approach and try to make things grob-centric (or if necessary prob-centric).  
There are some things that fall outside the scope of grob-related issues (like 
the paper bloc) but I think it's best to try to use grobs, callbacks, and 
properties as much as possible.  I'm definitely not saying that your solution 
won't work, but I think that going down the grob road is more architecturally 
sound.  Of course, if Phil has time, he can investigate the plausibility of 
both :-)

Cheers,
MS


reply via email to

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