Outline applied on a multi-line element should encompass all the line boxes and stay connected (join outlines together)
Categories
(Core :: Layout, defect)
Tracking
()
People
(Reporter: aaronlev, Unassigned)
References
(Blocks 3 open bugs)
Details
(4 keywords, Whiteboard: [layout:backlog:quality])
Attachments
(5 files)
Reporter | ||
Comment 1•20 years ago
|
||
Comment 4•20 years ago
|
||
Comment 6•20 years ago
|
||
Comment 7•19 years ago
|
||
Comment 9•18 years ago
|
||
Comment 10•18 years ago
|
||
Comment 11•18 years ago
|
||
Comment 12•16 years ago
|
||
Comment 14•15 years ago
|
||
Comment 15•15 years ago
|
||
Updated•15 years ago
|
Updated•15 years ago
|
Updated•15 years ago
|
Comment 18•13 years ago
|
||
Comment 19•12 years ago
|
||
Comment 20•12 years ago
|
||
Comment 21•12 years ago
|
||
Comment 23•9 years ago
|
||
Comment 24•8 years ago
|
||
Comment 25•8 years ago
|
||
Comment 26•8 years ago
|
||
Updated•7 years ago
|
Comment 27•7 years ago
|
||
Comment 30•5 years ago
|
||
Carrying on conversation from bug 1624061.
(In reply to Emilio Cobos Álvarez (:emilio) from comment #4)
I was thinking of making an nsDisplayOutline just on the first continuation and make it responsible for drawing all the other outlines, but that seems that it may not play well with invalidation...
Matt, do we have a precedent for something like this?
Indeed invalidation can be quite a pain for cases like this, and we really prefer to have each display item be based on the layout/style data from a single frame for that reason.
There are however indeed a few cases where we deal with this sort of thing.
One is nsDisplayItemBase::GetDependentFrame, which lets you register a second frame from which data is read. The DL invalidation code will handle invalidating the item if either of the frames change. It's possible that we could extend this to support a list of frames, but DL code can be very perf sensitive (due to giant lists), so adding size or indirections can be painful.
Another example is invalidating items for border-collapse tables. For this, the various table component frames override nsIFrame::InvalidateFrame, and propagate the invalidation up to their parent so that it eventually invalidates the root of the table. We could do something similar by adding a check in nsIFrame::MarkNeedsDisplayItemRebuild which checks if we had outlines as last paint (state bit?), and are a continuation, and if so also invalidate the primary frame. The same performance concerns apply.
(In reply to Miko Mynttinen [:miko] from comment #5)
We do display item merging by putting them together in one temporary item[1]. Based on the comment, it seems this was also meant to be used by nsDisplayOutline. Merging happens at the display list iteration level, in FlattenedDisplayListIterator[2].
This code is very messy because it previously required mutating the display items, which we cannot do with retained display lists. There is also a second problem with retained display lists: the display item ordering can change during display list merging, which means that we cannot rely on items staying consecutive (it should still be the common case). As it is, the code only works for container based display items.
If it's not too hard to extend the merging code to support leaf items, then I think it might be worth trying to support merging for outlines, given that we're already paying the complexity cost of supporting merging for other items (and have no real path forward to removing that).
Maybe this "grouping of display items" is better done during display list building or display list merging rather than painting?
As above, created merged items in the retained list means that we need to handle invalidating them correctly when any of the input frames changes, which isn't super fun.
I think it'd also be interesting to look at whether it's possible to merge during the Gecko DL -> WR DL conversion, or on the WR deserialization/scene building side.
Updated•5 years ago
|
Updated•4 years ago
|
Updated•3 years ago
|
Updated•3 years ago
|
Updated•2 years ago
|
Updated•2 years ago
|
Comment 32•2 years ago
|
||
The severity field for this bug is relatively low, S3. However, the bug has 8 duplicates.
:dholbert, could you consider increasing the bug severity?
For more information, please visit auto_nag documentation.
Comment 33•2 years ago
|
||
The last needinfo from me was triggered in error by recent activity on the bug. I'm clearing the needinfo since this is a very old bug and I don't know if it's still relevant.
Comment 34•8 months ago
|
||
Unsetting the webcompat priority as no sites seem negatively affected by this.
Description
•