Bug 1521644 - Create nsDisplayAsyncZoom which creates a ContainerLayer that is marked as an async zoom container. r=mattwoodrow

Differential Revision: https://phabricator.services.mozilla.com/D17175

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Markus Stange 2019-02-01 20:31:13 +00:00
parent 5c1e861efd
commit b97222a5dc
3 changed files with 64 additions and 0 deletions

View File

@ -4,6 +4,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// IWYU pragma: private, include "nsDisplayList.h"
DECLARE_DISPLAY_ITEM_TYPE(ASYNC_ZOOM, TYPE_RENDERS_NO_IMAGES)
DECLARE_DISPLAY_ITEM_TYPE(ALT_FEEDBACK, 0)
DECLARE_DISPLAY_ITEM_TYPE(BACKGROUND, TYPE_IS_CONTENTFUL)
DECLARE_DISPLAY_ITEM_TYPE(THEMED_BACKGROUND, TYPE_RENDERS_NO_IMAGES)

View File

@ -7155,6 +7155,32 @@ bool nsDisplayZoom::ComputeVisibility(nsDisplayListBuilder* aBuilder,
return retval;
}
nsDisplayAsyncZoom::nsDisplayAsyncZoom(
nsDisplayListBuilder* aBuilder, nsIFrame* aFrame, nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot,
mozilla::layers::FrameMetrics::ViewID aViewID)
: nsDisplayOwnLayer(aBuilder, aFrame, aList, aActiveScrolledRoot),
mViewID(aViewID) {
MOZ_COUNT_CTOR(nsDisplayAsyncZoom);
}
#ifdef NS_BUILD_REFCNT_LOGGING
nsDisplayAsyncZoom::~nsDisplayAsyncZoom() {
MOZ_COUNT_DTOR(nsDisplayAsyncZoom);
}
#endif
already_AddRefed<Layer> nsDisplayAsyncZoom::BuildLayer(
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters) {
RefPtr<Layer> layer =
nsDisplayOwnLayer::BuildLayer(aBuilder, aManager, aContainerParameters);
layer->SetIsAsyncZoomContainer(Some(mViewID));
return layer.forget();
}
///////////////////////////////////////////////////
// nsDisplayTransform Implementation
//

View File

@ -6112,6 +6112,43 @@ class nsDisplayZoom : public nsDisplaySubDocument {
int32_t mAPD, mParentAPD;
};
/**
* nsDisplayAsyncZoom is used for APZ zooming. It wraps the contents of the
* root content document's scroll frame, including fixed position content. It
* does not contain the scroll frame's scrollbars. It is clipped to the scroll
* frame's scroll port clip. It is not scrolled; only its non-fixed contents
* are scrolled. This item creates a container layer.
*/
class nsDisplayAsyncZoom : public nsDisplayOwnLayer {
public:
nsDisplayAsyncZoom(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot,
mozilla::layers::FrameMetrics::ViewID aViewID);
nsDisplayAsyncZoom(nsDisplayListBuilder* aBuilder,
const nsDisplayAsyncZoom& aOther)
: nsDisplayOwnLayer(aBuilder, aOther), mViewID(aOther.mViewID) {
MOZ_COUNT_CTOR(nsDisplayAsyncZoom);
}
#ifdef NS_BUILD_REFCNT_LOGGING
virtual ~nsDisplayAsyncZoom();
#endif
virtual already_AddRefed<Layer> BuildLayer(
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters) override;
NS_DISPLAY_DECL_NAME("AsyncZoom", TYPE_ASYNC_ZOOM)
virtual LayerState GetLayerState(
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
const ContainerLayerParameters& aParameters) override {
return mozilla::LAYER_ACTIVE_FORCE;
}
protected:
mozilla::layers::FrameMetrics::ViewID mViewID;
};
/**
* A base class for different effects types.
*/