| Index: Source/platform/graphics/paint/ClipDisplayItem.cpp
|
| diff --git a/Source/platform/graphics/paint/ClipDisplayItem.cpp b/Source/platform/graphics/paint/ClipDisplayItem.cpp
|
| index 26eb7900ec54c0b23c77b90f5e579c9607c4df57..75f8c200746c5eb5b9bc942db1bab759247690c3 100644
|
| --- a/Source/platform/graphics/paint/ClipDisplayItem.cpp
|
| +++ b/Source/platform/graphics/paint/ClipDisplayItem.cpp
|
| @@ -7,6 +7,7 @@
|
|
|
| #include "platform/geometry/FloatRoundedRect.h"
|
| #include "platform/graphics/GraphicsContext.h"
|
| +#include "platform/graphics/paint/DisplayItems.h"
|
| #include "public/platform/WebDisplayItemList.h"
|
| #include "third_party/skia/include/core/SkScalar.h"
|
|
|
| @@ -15,16 +16,25 @@ namespace blink {
|
| void ClipDisplayItem::replay(GraphicsContext& context)
|
| {
|
| context.save();
|
| - context.clipRect(m_clipRect, NotAntiAliased, m_operation);
|
| - for (FloatRoundedRect roundedRect : m_roundedRectClips)
|
| - context.clipRoundedRect(roundedRect, m_operation);
|
| + context.clipRect(m_clipRect, NotAntiAliased, SkRegion::kIntersect_Op);
|
| + if (m_roundedRectClips) {
|
| + for (const auto& roundedRect : *m_roundedRectClips)
|
| + context.clipRoundedRect(roundedRect, SkRegion::kIntersect_Op);
|
| + }
|
| }
|
|
|
| void ClipDisplayItem::appendToWebDisplayItemList(WebDisplayItemList* list) const
|
| {
|
| - WebVector<SkRRect> webRoundedRects(m_roundedRectClips.size());
|
| - for (size_t i = 0; i < m_roundedRectClips.size(); ++i) {
|
| - FloatRoundedRect::Radii rectRadii = m_roundedRectClips[i].radii();
|
| + if (!m_roundedRectClips) {
|
| + WebVector<SkRRect> webRoundedRects;
|
| + list->appendClipItem(m_clipRect, webRoundedRects);
|
| + return;
|
| + }
|
| +
|
| + Vector<FloatRoundedRect>& roundedRects = *m_roundedRectClips;
|
| + WebVector<SkRRect> webRoundedRects(roundedRects.size());
|
| + for (size_t i = 0; i < m_roundedRectClips->size(); ++i) {
|
| + FloatRoundedRect::Radii rectRadii = roundedRects[i].radii();
|
| SkVector skRadii[4];
|
| skRadii[SkRRect::kUpperLeft_Corner].set(SkIntToScalar(rectRadii.topLeft().width()),
|
| SkIntToScalar(rectRadii.topLeft().height()));
|
| @@ -35,13 +45,22 @@ void ClipDisplayItem::appendToWebDisplayItemList(WebDisplayItemList* list) const
|
| skRadii[SkRRect::kLowerLeft_Corner].set(SkIntToScalar(rectRadii.bottomLeft().width()),
|
| SkIntToScalar(rectRadii.bottomLeft().height()));
|
| SkRRect skRoundedRect;
|
| - skRoundedRect.setRectRadii(m_roundedRectClips[i].rect(), skRadii);
|
| + skRoundedRect.setRectRadii(roundedRects[i].rect(), skRadii);
|
| webRoundedRects[i] = skRoundedRect;
|
| }
|
| // FIXME: needs to include the SkRegion::Op
|
| list->appendClipItem(m_clipRect, webRoundedRects);
|
| }
|
|
|
| +void ClipDisplayItem::appendByMoving(DisplayItems& destination)
|
| +{
|
| + destination.emplaceBack<ClipDisplayItem>(
|
| + DisplayItemClientWrapperHelper(*this),
|
| + type(),
|
| + m_clipRect,
|
| + m_roundedRectClips.release());
|
| +}
|
| +
|
| void EndClipDisplayItem::replay(GraphicsContext& context)
|
| {
|
| context.restore();
|
| @@ -52,6 +71,12 @@ void EndClipDisplayItem::appendToWebDisplayItemList(WebDisplayItemList* list) co
|
| list->appendEndClipItem();
|
| }
|
|
|
| +void EndClipDisplayItem::appendByMoving(DisplayItems& destination)
|
| +{
|
| + destination.emplaceBack<EndClipDisplayItem>(
|
| + DisplayItemClientWrapperHelper(*this), type());
|
| +}
|
| +
|
| #ifndef NDEBUG
|
| void ClipDisplayItem::dumpPropertiesAsDebugString(WTF::StringBuilder& stringBuilder) const
|
| {
|
|
|