blob: 84879df8b85bb15f848aaa49ba0bbb4cb262d67c [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 ClipRectsCache_h
#define ClipRectsCache_h
#include "core/layout/ClipRects.h"
#if DCHECK_IS_ON()
#include "core/layout/ScrollEnums.h" // For OverlayScrollbarClipBehavior.
#endif
namespace blink {
class PaintLayer;
enum ClipRectsCacheSlot {
// Relative to the ancestor treated as the root (e.g. transformed layer).
// Used for hit testing.
RootRelativeClipRects,
RootRelativeClipRectsIgnoringViewportClip,
// Relative to the LayoutView's layer. Used for compositing overlap testing.
AbsoluteClipRects,
// Relative to painting ancestor. Used for painting.
PaintingClipRects,
PaintingClipRectsIgnoringOverflowClip,
NumberOfClipRectsCacheSlots,
UncachedClipRects,
};
class ClipRectsCache {
USING_FAST_MALLOC(ClipRectsCache);
public:
struct Entry {
Entry()
: root(nullptr)
#if DCHECK_IS_ON()
,
overlayScrollbarClipBehavior(IgnoreOverlayScrollbarSize)
#endif
{
}
const PaintLayer* root;
RefPtr<ClipRects> clipRects;
#if DCHECK_IS_ON()
OverlayScrollbarClipBehavior overlayScrollbarClipBehavior;
#endif
};
Entry& get(ClipRectsCacheSlot slot) {
DCHECK(slot < NumberOfClipRectsCacheSlots);
return m_entries[slot];
}
void clear(ClipRectsCacheSlot slot) {
DCHECK(slot < NumberOfClipRectsCacheSlots);
m_entries[slot] = Entry();
}
private:
Entry m_entries[NumberOfClipRectsCacheSlots];
};
} // namespace blink
#endif // ClipRectsCache_h