Bug 1389139 - Add transforms for reflayer equivalents in the layers-free APZ world. r?jrmuizel
In normal gecko, RefLayer instances also have a transform, which needs
to be propagated to APZ in layers-free mode.
MozReview-Commit-ID: DaEyvpumG9F
--- a/layout/ipc/RenderFrameParent.cpp
+++ b/layout/ipc/RenderFrameParent.cpp
@@ -385,32 +385,35 @@ bool
nsDisplayRemote::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
const StackingContextHelper& aSc,
nsTArray<WebRenderParentCommand>& aParentCommands,
mozilla::layers::WebRenderLayerManager* aManager,
nsDisplayListBuilder* aDisplayListBuilder)
{
MOZ_ASSERT(aManager->IsLayersFreeTransaction());
+ mOffset = mozilla::layout::GetContentRectLayerOffset(mFrame, aDisplayListBuilder);
+
mozilla::LayoutDeviceRect visible = mozilla::LayoutDeviceRect::FromAppUnits(
GetVisibleRect(), mFrame->PresContext()->AppUnitsPerDevPixel());
- visible += mozilla::layout::GetContentRectLayerOffset(mFrame, aDisplayListBuilder);
+ visible += mOffset;
aBuilder.PushIFrame(aSc.ToRelativeLayoutRect(visible),
mozilla::wr::AsPipelineId(GetRemoteLayersId()));
return true;
}
bool
nsDisplayRemote::UpdateScrollData(mozilla::layers::WebRenderScrollData* aData,
mozilla::layers::WebRenderLayerScrollData* aLayerData)
{
if (aLayerData) {
aLayerData->SetReferentId(GetRemoteLayersId());
+ aLayerData->SetTransform(mozilla::gfx::Matrix4x4::Translation(mOffset.x, mOffset.y, 0.0));
}
return true;
}
uint64_t
nsDisplayRemote::GetRemoteLayersId() const
{
return mRemoteFrame->GetLayersId();
--- a/layout/ipc/RenderFrameParent.h
+++ b/layout/ipc/RenderFrameParent.h
@@ -170,13 +170,14 @@ public:
mozilla::layers::WebRenderLayerScrollData* aLayerData) override;
uint64_t GetRemoteLayersId() const;
NS_DISPLAY_DECL_NAME("Remote", TYPE_REMOTE)
private:
RenderFrameParent* mRemoteFrame;
+ mozilla::LayoutDeviceIntPoint mOffset;
mozilla::layers::EventRegionsOverride mEventRegionsOverride;
};
#endif // mozilla_layout_RenderFrameParent_h