denemo-devel
[Top][All Lists]
Advanced

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

Re: [Denemo-devel] Wrong display on pasting into different clef


From: Richard Shann
Subject: Re: [Denemo-devel] Wrong display on pasting into different clef
Date: Sun, 27 Sep 2009 08:44:31 +0100

On Sat, 2009-09-26 at 10:23 +0100, Richard Shann wrote:
> When you paste a note from an area with one clef into an area with
> another the display is wrong. I have (at last) tracked down why.
In fact there is more stuff cached about where to draw stuff for the
chord: 

      * the field y of each note caches the y-position of the notehead,
      * the field highesty of a chord caches the field y of the highest
        pitched note (ditto lowest)
      * the field stemy of a chord holds the y-position of the end of
        any stem the chord might have
      * the field is_stemup of a chord caches which way the stem should
        go (which changes with change of clef)
      * the field is_reversealigned of a chord caches the head
        x-position (left/right) relative to the stem.

As with any caching system it is crucial to know when the caches are
invalidated: things like pasting chords, clef changes, stem directives
as well as changing the initial clef and of course ordinary note entry.
And it would be useful to have a clear way to re-build the caches - the
only secure method that I know of at the moment is to store the file to
disk and reload it!
At the moment I suspect one of the re-caching routines is wrong - if you
put an eighth note c'' into a newly opened Denemo score and change to
Bass clef and put in the note e the display shows the c'' with the stem
up (the tail and the notehead are correct).
So perhaps I should start with that bug.
Richard


> There are fields highesty and lowesty which cache the y-positions of the
> notes in a chord they are calculated thus:
> 
>   if (mid_c_offset > ((chord *) thechord->object)->highestpitch)
>     {
>       ((chord *) thechord->object)->highestpitch = mid_c_offset;
>       ((chord *) thechord->object)->highesty =
>       calculateheight (mid_c_offset, dclef);
>     }
> 
> this calculation however is not repeated on pasting chords, so the draw
> routines draw them in the wrong places.
> I'll look into fixing this
> 
> Richard
> 
> 
> 
> 
> _______________________________________________
> Denemo-devel mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/denemo-devel





reply via email to

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