I've been looking at several unrelated bugs that all boil down to one thing:
bbox() not being set properly for some elements during layout.  In
particular, for Segment elements.

So my first question is this: are segments *supposed* to have a meaningful
bbox()?  They sort of do most of the time - it appears to be wide enough to
contain all elements in the segment, although the height of the bbox only
extends to the first staff.  However, there are cases where the segment bbox
is either not set at all (see http://musescore.org/en/node/35176; the
segment for beat 3 of the first measure in the posted score has zero height
& width) or else it seems to be set incorrectly (see
http://musescore.org/en/node/35496; if you check out the sample score, then
extend the barlines to span both staves, the bbox for the key signature
segment on the second system is only wide enough to contain the key
signature for the first staff).

Assuming segment bboxes *are* supposed to be meaningful, the next question
is, where in the code are these supposed to be set?  It's a little
convoluted (!), but I *think* the place where it is happening is in
Measure::layoutX(), here:

https://github.com/musescore/MuseScore/blob/7ab8acd3a5a80a245f3524a5e6d4c7ac662aa6ef/libmscore/measure.cpp#L3322

The comment on that line  ("??", which goes back to the initial commit)
doesn't give me confidence :-).  But it looks like we are setting the width
of the *previous* segment based on the distance we just determined we need
before *this* segment, which I guess makes sense.

I think the zero width segment on beat three is due to the special handling
of non-initial clef segments at the top of the loop - the fact that we skip
the whole rest of the loop here:

https://github.com/musescore/MuseScore/blob/7ab8acd3a5a80a245f3524a5e6d4c7ac662aa6ef/libmscore/measure.cpp#L3077

But as much as I've fiddled with internal details *within* this loop, I've
never really understood the "big picture" of what goes on here, which is to
say I really have no idea what the special handling of clefs is about or how
to set the previous segment's width here.

The other Segment bbox issues I've seen lately are with Chord elements, very
possibly a result of the all the layout work I did not so long ago in which
I was entirely focused on setting *positions* of objects correctly but I
have no doubt I didn't always get the bbox calculations right.  So here let
me just ask a general question: is the expected behavior that a Chord
element's bbox encompass all the Note, Dot, Stem, and other objects within
it?



--
View this message in context: 
http://dev-list.musescore.org/Segments-and-bbox-tp7579004.html
Sent from the MuseScore Developer mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
Mscore-developer mailing list
Mscore-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mscore-developer

Reply via email to