On 1/2/07, Joe Neeman <[EMAIL PROTECTED]> wrote:

On 1/2/07, Han-Wen Nienhuys <[EMAIL PROTECTED]> wrote:

> Joe Neeman escreveu:
>
>
>
> > diff --git a/lily/grob.cc b/lily/grob.cc
> > index 139a387..91f8ce5 100644
> > --- a/lily/grob.cc
> > +++ b/lily/grob.cc
> > @@ -420,11 +420,21 @@ Grob::extent (Grob *refp, Axis a) const
> >  Interval
> >  Grob::pure_height (Grob *refp, int start, int end)
> >  {
> > -  SCM proc = get_property_data ( ly_symbol2scm ("Y-extent"));
> > -  Interval iv = robust_scm2interval (call_pure_function (proc,
> > -                                                      scm_list_1
> (self_scm ()),
> > -                                                      start, end),
> > -                                  Interval (0, 0));
> > +  SCM proc = get_property_data (ly_symbol2scm ("Y-extent"));
> > +  SCM pure_proc = get_property_data (ly_symbol2scm
> ("pure-Y-extent"));
> > +  SCM iv_scm;
> > +
> > +  if (ly_is_procedure (pure_proc))
> > +    iv_scm = scm_apply_3 (pure_proc,
> > +                       self_scm (),
> > +                       scm_from_int (start),
> > +                       scm_from_int (end), SCM_EOL);
> > +  else
> > +    iv_scm = call_pure_function (proc,
> > +                              scm_list_1 (self_scm ()),
> > +                              start, end);
> > +
> > +  Interval iv = robust_scm2interval (iv_scm, Interval (0, 0));
> >    Real offset = pure_relative_y_coordinate (refp, start, end);
> >
> >    SCM min_ext = get_property ("minimum-Y-extent");
> > @@ -626,6 +636,7 @@ ADD_INTERFACE (Grob,
> >              "outside-staff-horizontal-padding "
> >              "outside-staff-padding "
> >              "outside-staff-priority "
> > +            "pure-Y-extent "
>
> I don't understand why this is necessary. I thought you did all
> the substitutions in Scheme.


I did, but I can't in this case. The previous substitutions are either of
the form

callback "a" -> pure callback "b"
or
callback "a" is pure, just re-use it

But the various accidental grobs use grob::stencil-height for their height
callback. Since this is used in so many other grobs too, I can't set up a
pure equivalent that will affect only accidental grobs.

One other solution would be to handle the accidental case explicitly in
pure-stencil-height but if there are other grobs that require exceptional
handling like this then it will get messy.


Any final word on this?
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to