This is to avoid having to #include FrameLayerBuilder.h in nsLayoutUtils.h in the next patch.
--HG--
extra : rebase_source : 5f3c3ae2785267949766ae094414781133d4ce44
I never liked nsDisplayListBuilder::IsFixedItem anyway, its behavior and
naming was confusing. Also, it assumed there's only one viewport displayport,
on the rootmost document, and that's a bad assumption in general.
We're able to remove calls to ForceVisiblityForFixedItem because FrameLayerBuilder
is now responsible for inflating the visible region of the fixed-pos layers.
--HG--
extra : rebase_source : e93d8e25d2f5c7f3e167e47203d961e6b4293b81
This patch also makes FrameLayerBuilder responsible for setting the visible region
of a fixed-pos layer to the displayport intersected with the draw-region of
the layer. This will let us remove some displaylist code in later patches.
We add special handling to GetAnimatedGeometryRootFor for nsDisplayScrollLayers,
to match what nsDisplayList::IsFixedItem does.
--HG--
extra : rebase_source : f9258243fe666d5dee33c13a88e596bbed8e2c1c
This prevents insanely large fixed-pos elements from getting an over-huge
dirty rect and building an enormous display list.
This is also a step towards getting rid of nsDisplayListBuilder::mHasDisplayPort,
which is good because the new code works on any subdocument that has a displayport.
--HG--
extra : rebase_source : e853022dd2ce85af318f235f8851d9dd8b5001ac
Restyling margin-top and margin-bottom will typically require reflow and cause
sibling elements to be moved and invalidated, so it's not a big win to layerize
such nodes. However, layerizing them should be relatively harmless.
--HG--
extra : rebase_source : 659593b6b6990aa859144641eb23e7ccf384a82a
If a fixed position element has both top and bottom, or both left and right
positioning, set the fixed position anchor to the center of the corresponding
axis. This causes it to remain center-aligned when async zooming.
Previously the code would only set the resolution on the FrameMetrics when
the scroll ID was equal to ROOT_SCROLL_ID. This only happens on the root
scrollable frame for a layer tree. However, with bug 732971 fixed, any presShell
can have a resolution associated with it, so we need to populate the mResolution
for any layer that is the root scrollable layer for a presShell.
On platforms like Fennec and Metro the content presShell is a sub-presShell
of the root presShell. The resolution is set on the content presShell, but would
not get populated on the FrameMetrics correctly because of this condition. The #ifdef
ANDROID hack a few lines below was used to work around this on Fennec but it
was broken on Metro. This change corrects the behaviour on both of these platforms.