It would be incorrect to occlude async scrolled content.
Instead of doing a lot of extra frame tree walking just use the flags on display items to tell if they are in fixed position subtrees.
Also, don't let the fixed position flag on display items get set if we start building display items inside a subdocument. If didn't do this non-fixed content in a subdocument that is in fixed content in the parent document would be marked as in fixed position, and no occlusion would occur at all. This means that the fix applies to slightly less cases which are less important so that a more important case works the same as before.
Wrap the zoom item in the resolution item if we have both because we want the resolution scale applied on top of the app units per dev pixel conversion. Resolution is just a scale transform and app units per dev pixel affect layout, so conceptually the resolution gets applied after.
This means that the layer we create in nsSubDocumentFrame::BuildDisplayList becomes the scrollable layer for the document and we early early from ScrollFrameHelper::BuildDisplayList before it gets to the nsDisplayScrollLayer creation.
This ensures that for all fixed-pos content attached to a viewport with a
displayport, the viewport has a layer and the fixed-pos content's layer will be
a direct child of the viewport's layer.
--HG--
extra : rebase_source : da35bacad5518b94cb0b92a198d4f607cede4ac9
The new nsDisplayResolution layer type is created for any subdocument whose
presShell specifies a non-1.0 resolution. This is specifically needed for
platforms such as Android and Metro, where the presShells corresponding to
the tabs (which have non-1.0 resolutions) are not the root presShell.
This patch does the following:
* Move nsIFrame::IntrinsicSize to mozilla::IntrinsicSize so that it can
be forward-declared.
* Move a number of templated inline nsLayoutUtils methods to nsIFrame.
* Use mozilla::layout::FrameChildListID instead of the
nsIFrame::ChildListID typedef in nsLayoutUtils.h.
* Move nsReflowFrameRunnable to its only user, nsProgressMeterFrame.cpp.
* Make a number of functions requiring nsIFrame.h out-of-line.
* Remove the nsIFrame.h #include from nsLayoutUtils.h and add it to the
places which require it implicitly.
Specifically:
* move all the frame dump methods to nsIFrame. Especially nsFrame::ListTag
was annoying, often requiring a cast to nsFrame*.
* print common values in the same order for all types of frames
* print fluid continuations as "next-in-flow=%p" and non-fluid as
"next-continuation=%p" (as before)
* print the style-context more compactly, e.g.
"[sc=0x7faa6b60e0a0] pst=:first-line" becomes
"[sc=0x7faa6b60e0a0:first-line]"
* suppress printing visual/scroll-overflow rects when they are identical
to mRect and do the same for nsLineBox::List where it was especially
hard to see which lines actually had real overflow
* fix a bug that printed the child list name at the far right when the
principal list was empty (making it hard to see)
* print the address of child lists (other than the principal list) to
help debug frame list property bugs
* s/NS_IMETHODIMP/void/
This patch does several things. Sorry.
In BuildDisplayList implementations, instead of wrapping display items in nsDisplayClip, we
push clip state onto the nsDisplayListBuilder and give the display items an
explicit clip when they're created.
In FrameLayerBuilder, we use the explicit clips we find on display items instead of
computing our own.
We remove nsDisplayClip and everything that depends on it.
We remove ExplodeAnonymousChildLists. With nsDisplayClip gone, and
nsDisplayOptionEventGrabber removed in a previous patch, there are no
anonymous child lists.
nsDisplayItem::TryMerge implementations need to make sure they have the same
clip before being merged.
I ripped out the part of PruneDisplayListForExtraPage that adjusts clip rects.
As far as I can tell, it isn't actually necessary.
--HG--
extra : rebase_source : 6f3988b385d0ac54ab26fad10b12173884441f48