| Index: Source/core/paint/DeprecatedPaintLayerClipper.h
|
| diff --git a/Source/core/paint/DeprecatedPaintLayerClipper.h b/Source/core/paint/DeprecatedPaintLayerClipper.h
|
| index a0303716c08c6eb070bd53d13e5d246f8d256bca..4f64cd0ebe2321300bb611e18aeef89f3512f637 100644
|
| --- a/Source/core/paint/DeprecatedPaintLayerClipper.h
|
| +++ b/Source/core/paint/DeprecatedPaintLayerClipper.h
|
| @@ -45,7 +45,6 @@
|
| #ifndef DeprecatedPaintLayerClipper_h
|
| #define DeprecatedPaintLayerClipper_h
|
|
|
| -#include "core/layout/ClipRects.h"
|
| #include "core/layout/ClipRectsCache.h"
|
| #include "core/layout/LayoutBox.h"
|
| #include "wtf/Allocator.h"
|
| @@ -54,25 +53,6 @@ namespace blink {
|
|
|
| class DeprecatedPaintLayer;
|
|
|
| -// This is the state information passed down
|
| -// on the stack for calculating clip rects.
|
| -struct ClipRectComputationState {
|
| - STACK_ALLOCATED();
|
| - ClipRectComputationState()
|
| - {
|
| - currentClipRects.reset(LayoutRect(LayoutRect::infiniteIntRect()));
|
| - stackingContextClipRects.reset(LayoutRect(LayoutRect::infiniteIntRect()));
|
| - }
|
| - // Depending on the value of context.isComputingPaintingRect() can have different meanings
|
| - // In painting, this ClipRects is used for statically positioned elements,
|
| - // outside painting, it is the only ClipRects, and is used for all elements.
|
| - ClipRects currentClipRects;
|
| - // During painting this ClipRects is used for positioned elements. It can have
|
| - // a rootLayer further up the tree than currentClipRects because its root must be
|
| - // beyond the enclosing stacking context. See resetPaintRects.
|
| - ClipRects stackingContextClipRects;
|
| -};
|
| -
|
| enum ShouldRespectOverflowClip {
|
| IgnoreOverflowClip,
|
| RespectOverflowClip
|
| @@ -149,25 +129,33 @@ public:
|
| // Pass offsetFromRoot if known.
|
| void calculateRects(const ClipRectsContext&, const LayoutRect& paintDirtyRect, LayoutRect& layerBounds,
|
| ClipRect& backgroundRect, ClipRect& foregroundRect, ClipRect& outlineRect, const LayoutPoint* offsetFromRoot = 0) const;
|
| - void calculateClipRects(const ClipRectsContext&, ClipRectComputationState&) const;
|
| -
|
| - DeprecatedPaintLayer* clippingRootForPainting() const;
|
| +private:
|
| + void calculateClipRects(const ClipRectsContext&, ClipRects&) const;
|
| + ClipRects* clipRectsIfCached(const ClipRectsContext&) const;
|
| + ClipRects* storeClipRectsInCache(const ClipRectsContext&, ClipRects* parentClipRects, const ClipRects&) const;
|
|
|
| - void precalculateAbsoluteClipRects();
|
| + // cachedClipRects looks buggy: It doesn't check whether context.rootLayer and entry.root match.
|
| + // FIXME: Move callers to clipRectsIfCached, which does the proper checks.
|
| + ClipRects* cachedClipRects(const ClipRectsContext& context) const
|
| + {
|
| + return m_cache ? m_cache->get(context.cacheSlot()).clipRects.get() : 0;
|
| + }
|
| + void getOrCalculateClipRects(const ClipRectsContext&, ClipRects&) const;
|
|
|
| -private:
|
| - void setClipRect(const ClipRectsContext&, const ClipRectComputationState&) const;
|
| - void addClipsFromThisObject(const ClipRectsContext&, ClipRects&) const;
|
| - void updateClipRectBasedOnPosition(ClipRects*) const;
|
| + DeprecatedPaintLayer* clippingRootForPainting() const;
|
|
|
| - ClipRect uncachedBackgroundClipRect(const ClipRectsContext&) const;
|
| - void uncachedCalculateClipRects(const ClipRectsContext&, ClipRects&) const;
|
| + ClipRectsCache& cache() const
|
| + {
|
| + if (!m_cache)
|
| + m_cache = adoptPtr(new ClipRectsCache);
|
| + return *m_cache;
|
| + }
|
|
|
| bool shouldRespectOverflowClip(const ClipRectsContext&) const;
|
|
|
| // FIXME: Could this be a LayoutBox?
|
| LayoutBoxModelObject& m_layoutObject;
|
| - mutable OwnPtr<ClipRect> m_clips[NumberOfClipRectsCacheSlots];
|
| + mutable OwnPtr<ClipRectsCache> m_cache;
|
| };
|
|
|
| } // namespace blink
|
|
|