[gsharp-devel] Re: [gsharp-cvs] CVS update: gsharp/drawing.lisp gsharp/measure.lisp gsharp/packages.lisp
Robert Strandh
strandh at labri.fr
Sat Nov 26 21:47:55 UTC 2005
Christophe Rhodes writes:
> rstrandh at common-lisp.net (Robert Strandh) writes:
>
> > moved the computation of the final accidental (determine whether
> > one should be displayed or not according to the key signature) from
> > drawing.lisp to measure.lisp.
>
> This change causes a problem: compute-staff-group-parameters is only
> called if the element containing the staff group is modified; however,
> the final accidentals need to be recomputed if the staff's key
> signature changes (and also, in my working copy, if a key signature
> has been inserted earlier on the staff...)
I fixed this problem by invalidating layers using the staff that has
it key signature changed.
However, I am no longer sure that my moving the computation cited
above was a good idea. Here is the dilemma:
* in order to produce a good line-breaking result, we need to know
the physical width of elements as accurately as possible. This is
an argument in favor of computing accidentals early.
* however, accidentals depend on key the signature of the staff. So
when the key signature changes, we must invalidate large numbers
of elements, with increased computations as a result.
The question, then, is whether we need the extra accuracy for
line-breaking, or whether we can do an approximate job computing the
widths of some elements and then try to do a better job when rendering
the final page.
I am now leaning towards NOT computing accidentals before estimating
physical dimensions, but I am not going to change the code again at
this point. We'll see when we start having large scores whether this
is a problem. For all I know, recomputing the entire score is a
matter of a few seconds, in which case invalidating lots of elements
is not a problem.
--
Robert Strandh
---------------------------------------------------------------------
Greenspun's Tenth Rule of Programming: any sufficiently complicated C
or Fortran program contains an ad hoc informally-specified bug-ridden
slow implementation of half of Common Lisp.
---------------------------------------------------------------------
More information about the gsharp-devel
mailing list