blob: b8e3aca3abc84f52a5b7ad1f2b4daa84cbbc2d14 [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 LayerClipRecorder_h
#define LayerClipRecorder_h
#include "core/CoreExport.h"
#include "core/paint/PaintLayerPaintingInfo.h"
#include "core/paint/PaintPhase.h"
#include "platform/graphics/paint/ClipDisplayItem.h"
#include "platform/graphics/paint/DisplayItem.h"
#include "wtf/Vector.h"
namespace blink {
class ClipRect;
class GraphicsContext;
class LayoutBoxModelObject;
class CORE_EXPORT LayerClipRecorder {
USING_FAST_MALLOC(LayerClipRecorder);
public:
enum BorderRadiusClippingRule {
IncludeSelfForBorderRadius,
DoNotIncludeSelfForBorderRadius
};
// Set rounded clip rectangles defined by border radii all the way from the
// PaintLayerPaintingInfo "root" layer down to the specified layer (or the
// parent of said layer, in case BorderRadiusClippingRule says to skip self).
// fragmentOffset is used for multicol, to specify the translation required to
// get from flow thread coordinates to visual coordinates for a certain
// column.
// FIXME: The BorderRadiusClippingRule parameter is really useless now. If we
// want to skip self,
// why not just supply the parent layer as the first parameter instead?
// FIXME: The ClipRect passed is in visual coordinates (not flow thread
// coordinates), but at the same time we pass a fragmentOffset, so that we can
// translate from flow thread coordinates to visual coordinates. This may look
// rather confusing/redundant, but it is needed for rounded border clipping.
// Would be nice to clean up this.
explicit LayerClipRecorder(
GraphicsContext&,
const LayoutBoxModelObject&,
DisplayItem::Type,
const ClipRect&,
const PaintLayerPaintingInfo* localPaintingInfo,
const LayoutPoint& fragmentOffset,
PaintLayerFlags,
BorderRadiusClippingRule = IncludeSelfForBorderRadius);
~LayerClipRecorder();
private:
void collectRoundedRectClips(PaintLayer&,
const PaintLayerPaintingInfo& localPaintingInfo,
GraphicsContext&,
const LayoutPoint& fragmentOffset,
PaintLayerFlags,
BorderRadiusClippingRule,
Vector<FloatRoundedRect>& roundedRectClips);
GraphicsContext& m_graphicsContext;
const LayoutBoxModelObject& m_layoutObject;
DisplayItem::Type m_clipType;
};
} // namespace blink
#endif // LayerClipRecorder_h