| Index: third_party/WebKit/Source/core/paint/PaintLayerClipper.h
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipper.h b/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
|
| index 4c964f5d85b867f45778afe37c714afcddb9ea9f..1194ed72ec18eee1266b256ab0eca0ec9734c0d5 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
|
| @@ -48,6 +48,9 @@
|
| #include "core/CoreExport.h"
|
| #include "core/layout/ClipRectsCache.h"
|
| #include "core/layout/ScrollEnums.h"
|
| +
|
| +#include "platform/graphics/paint/GeometryMapper.h"
|
| +
|
| #include "wtf/Allocator.h"
|
|
|
| namespace blink {
|
| @@ -104,6 +107,25 @@ class ClipRectsContext {
|
| // PaintLayerClipper is responsible for computing and caching clip
|
| // rects.
|
| //
|
| +// These clip rects have two types: background and foreground.
|
| +//
|
| +// The "background rect" for a PaintLayer is almost the same as its visual
|
| +// rect in the space of some ancestor PaintLayer (specified by rootLayer on
|
| +// ClipRectsContext).
|
| +// The only differences are that:
|
| +// * The unclipped rect at the start is LayoutRect::infiniteIntRect,
|
| +// rather than the local overflow bounds of the PaintLayer.
|
| +// * CSS clip, the extent of visualOverflowRect(), and SVG root viewport
|
| +// clipping is applied.
|
| +// Thus, for example if there are no clips then the background rect will be
|
| +// infinite. Also, whether overflow clip of the ancestor should be applied is a
|
| +// parameter.
|
| +//
|
| +// The "foreground rect" for a PaintLayer is its "background rect", intersected
|
| +// with any clip applied by this PaintLayer to its children.
|
| +
|
| +// Motivation for this class:
|
| +//
|
| // The main reason for this cache is that we compute the clip rects during
|
| // a layout tree walk but need them during a paint tree walk (see example
|
| // below for some explanations).
|
| @@ -150,7 +172,7 @@ class CORE_EXPORT PaintLayerClipper {
|
| DISALLOW_NEW();
|
|
|
| public:
|
| - explicit PaintLayerClipper(const PaintLayer& layer) : m_layer(layer) {}
|
| + explicit PaintLayerClipper(const PaintLayer&, bool useGeometryMapper);
|
|
|
| void clearClipRectsIncludingDescendants();
|
| void clearClipRectsIncludingDescendants(ClipRectsCacheSlot);
|
| @@ -159,12 +181,13 @@ class CORE_EXPORT PaintLayerClipper {
|
| // space. Only looks for clips up to the given ancestor.
|
| LayoutRect localClipRect(const PaintLayer* ancestorLayer) const;
|
|
|
| + // Computes the same thing as backgroundRect in calculateRects(), but skips
|
| + // apllying CSS clip and the visualOverflowRect() of |m_layer|.
|
| ClipRect backgroundClipRect(const ClipRectsContext&) const;
|
|
|
| // This method figures out our layerBounds in coordinates relative to
|
| // |rootLayer|. It also computes our background and foreground clip rects
|
| - // for painting/event handling.
|
| - // Pass offsetFromRoot if known.
|
| + // for painting/event handling. Pass offsetFromRoot if known.
|
| void calculateRects(const ClipRectsContext&,
|
| const LayoutRect& paintDirtyRect,
|
| LayoutRect& layerBounds,
|
| @@ -189,7 +212,24 @@ class CORE_EXPORT PaintLayerClipper {
|
|
|
| bool shouldRespectOverflowClip(const ClipRectsContext&) const;
|
|
|
| + ClipRect clipRectWithGeometryMapper(const ClipRectsContext&,
|
| + bool isForeground) const;
|
| + void mapLocalToRootWithGeometryMapper(const ClipRectsContext&,
|
| + LayoutRect& localRect) const;
|
| + void calculateRectsWithGeometryMapper(
|
| + const ClipRectsContext&,
|
| + const LayoutRect& paintDirtyRect,
|
| + LayoutRect& layerBounds,
|
| + ClipRect& backgroundRect,
|
| + ClipRect& foregroundRect,
|
| + const LayoutPoint* offsetFromRoot = 0) const;
|
| +
|
| + ClipRect applyOverflowClipToBackgroundRectWithGeometryMapper(
|
| + const ClipRectsContext&,
|
| + const ClipRect&) const;
|
| +
|
| const PaintLayer& m_layer;
|
| + std::unique_ptr<GeometryMapper> m_geometryMapper;
|
| };
|
|
|
| } // namespace blink
|
|
|