blob: 1723c8d210e296101aa7bfae2d7d128a88be5831 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CompositingInputsUpdater_h
#define CompositingInputsUpdater_h
#include "core/layout/LayoutGeometryMap.h"
#include "wtf/Allocator.h"
namespace blink {
class PaintLayer;
class CompositingInputsUpdater {
STACK_ALLOCATED();
public:
explicit CompositingInputsUpdater(PaintLayer* rootLayer);
~CompositingInputsUpdater();
void update();
#if ENABLE(ASSERT)
static void assertNeedsCompositingInputsUpdateBitsCleared(PaintLayer*);
#endif
private:
enum UpdateType {
DoNotForceUpdate,
ForceUpdate,
};
struct AncestorInfo {
AncestorInfo()
: ancestorStackingContext(nullptr)
, enclosingCompositedLayer(nullptr)
, lastOverflowClipLayer(nullptr)
, lastScrollingAncestor(nullptr)
, hasAncestorWithClipRelatedProperty(false)
, hasAncestorWithClipPath(false)
{
}
PaintLayer* ancestorStackingContext;
PaintLayer* enclosingCompositedLayer;
PaintLayer* lastOverflowClipLayer;
// Notice that lastScrollingAncestor isn't the same thing as
// ancestorScrollingLayer. The former is just the nearest scrolling
// along the PaintLayer::parent() chain. The latter is the layer that
// actually controls the scrolling of this layer, which we find on the
// containing block chain.
PaintLayer* lastScrollingAncestor;
bool hasAncestorWithClipRelatedProperty;
bool hasAncestorWithClipPath;
};
void updateRecursive(PaintLayer*, UpdateType, AncestorInfo);
LayoutGeometryMap m_geometryMap;
PaintLayer* m_rootLayer;
};
} // namespace blink
#endif // CompositingInputsUpdater_h