Index: third_party/WebKit/Source/core/paint/BoxPainter.cpp |
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.cpp b/third_party/WebKit/Source/core/paint/BoxPainter.cpp |
index 711f1e5f7403385502016512576bfcf127a872b8..291369eb20b21d3718be9ec23b9316851ca118cb 100644 |
--- a/third_party/WebKit/Source/core/paint/BoxPainter.cpp |
+++ b/third_party/WebKit/Source/core/paint/BoxPainter.cpp |
@@ -81,12 +81,12 @@ void BoxPainter::paintBoxDecorationBackgroundWithRect(const PaintInfo& paintInfo |
// and miss paint invalidation on buffered range change. crbug.com/484288. |
Optional<DisplayItemCacheSkipper> cacheSkipper; |
if (style.appearance() == MediaSliderPart) |
- cacheSkipper.emplace(*paintInfo.context); |
+ cacheSkipper.emplace(paintInfo.context); |
- if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(*paintInfo.context, m_layoutBox, DisplayItem::BoxDecorationBackground, paintOffset)) |
+ if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(paintInfo.context, m_layoutBox, DisplayItem::BoxDecorationBackground, paintOffset)) |
return; |
- LayoutObjectDrawingRecorder recorder(*paintInfo.context, m_layoutBox, DisplayItem::BoxDecorationBackground, boundsForDrawingRecorder(paintOffset), paintOffset); |
+ LayoutObjectDrawingRecorder recorder(paintInfo.context, m_layoutBox, DisplayItem::BoxDecorationBackground, boundsForDrawingRecorder(paintOffset), paintOffset); |
BoxDecorationData boxDecorationData(m_layoutBox); |
@@ -95,15 +95,15 @@ void BoxPainter::paintBoxDecorationBackgroundWithRect(const PaintInfo& paintInfo |
if (!m_layoutBox.boxShadowShouldBeAppliedToBackground(boxDecorationData.bleedAvoidance)) |
paintBoxShadow(paintInfo, paintRect, style, Normal); |
- GraphicsContextStateSaver stateSaver(*paintInfo.context, false); |
+ GraphicsContextStateSaver stateSaver(paintInfo.context, false); |
if (bleedAvoidanceIsClipping(boxDecorationData.bleedAvoidance)) { |
stateSaver.save(); |
FloatRoundedRect border = style.getRoundedBorderFor(paintRect); |
- paintInfo.context->clipRoundedRect(border); |
+ paintInfo.context.clipRoundedRect(border); |
if (boxDecorationData.bleedAvoidance == BackgroundBleedClipLayer) |
- paintInfo.context->beginLayer(); |
+ paintInfo.context.beginLayer(); |
} |
// If we have a native theme appearance, paint that before painting our background. |
@@ -126,7 +126,7 @@ void BoxPainter::paintBoxDecorationBackgroundWithRect(const PaintInfo& paintInfo |
paintBorder(m_layoutBox, paintInfo, paintRect, style, boxDecorationData.bleedAvoidance); |
if (boxDecorationData.bleedAvoidance == BackgroundBleedClipLayer) |
- paintInfo.context->endLayer(); |
+ paintInfo.context.endLayer(); |
} |
void BoxPainter::paintBackground(const PaintInfo& paintInfo, const LayoutRect& paintRect, const Color& backgroundColor, BackgroundBleedAvoidance bleedAvoidance) |
@@ -199,18 +199,16 @@ void BoxPainter::paintFillLayers(const PaintInfo& paintInfo, const Color& c, con |
// TODO(trchen): We can optimize out isolation group if we have a non-transparent |
// background color and the bottom layer encloses all other layers. |
- GraphicsContext* context = paintInfo.context; |
- if (!context) |
- shouldDrawBackgroundInSeparateBuffer = false; |
+ GraphicsContext& context = paintInfo.context; |
if (shouldDrawBackgroundInSeparateBuffer) |
- context->beginLayer(); |
+ context.beginLayer(); |
for (auto it = reversedPaintList.rbegin(); it != reversedPaintList.rend(); ++it) |
paintFillLayer(paintInfo, c, **it, rect, bleedAvoidance, op, backgroundObject); |
if (shouldDrawBackgroundInSeparateBuffer) |
- context->endLayer(); |
+ context.endLayer(); |
} |
void BoxPainter::paintFillLayer(const PaintInfo& paintInfo, const Color& c, const FillLayer& fillLayer, const LayoutRect& rect, |
@@ -219,7 +217,7 @@ void BoxPainter::paintFillLayer(const PaintInfo& paintInfo, const Color& c, cons |
BoxPainter::paintFillLayerExtended(m_layoutBox, paintInfo, c, fillLayer, rect, bleedAvoidance, 0, LayoutSize(), op, backgroundObject); |
} |
-void BoxPainter::applyBoxShadowForBackground(GraphicsContext* context, const LayoutObject& obj) |
+void BoxPainter::applyBoxShadowForBackground(GraphicsContext& context, const LayoutObject& obj) |
{ |
const ShadowList* shadowList = obj.style()->boxShadow(); |
ASSERT(shadowList); |
@@ -228,7 +226,7 @@ void BoxPainter::applyBoxShadowForBackground(GraphicsContext* context, const Lay |
if (boxShadow.style() != Normal) |
continue; |
FloatSize shadowOffset(boxShadow.x(), boxShadow.y()); |
- context->setShadow(shadowOffset, boxShadow.blur(), |
+ context.setShadow(shadowOffset, boxShadow.blur(), |
boxShadow.color().resolve(obj.resolveColor(CSSPropertyColor)), |
DrawLooperBuilder::ShadowRespectsTransforms, DrawLooperBuilder::ShadowIgnoresAlpha); |
return; |
@@ -290,7 +288,7 @@ FloatRoundedRect BoxPainter::backgroundRoundedRectAdjustedForBleedAvoidance(cons |
void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const PaintInfo& paintInfo, const Color& color, const FillLayer& bgLayer, const LayoutRect& rect, BackgroundBleedAvoidance bleedAvoidance, const InlineFlowBox* box, const LayoutSize& boxSize, SkXfermode::Mode op, const LayoutObject* backgroundObject) |
{ |
- GraphicsContext* context = paintInfo.context; |
+ GraphicsContext& context = paintInfo.context; |
if (rect.isEmpty()) |
return; |
@@ -329,7 +327,7 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
return; |
bool boxShadowShouldBeAppliedToBackground = obj.boxShadowShouldBeAppliedToBackground(bleedAvoidance, box); |
- GraphicsContextStateSaver shadowStateSaver(*context, boxShadowShouldBeAppliedToBackground); |
+ GraphicsContextStateSaver shadowStateSaver(context, boxShadowShouldBeAppliedToBackground); |
if (boxShadowShouldBeAppliedToBackground) |
BoxPainter::applyBoxShadowForBackground(context, obj); |
@@ -338,13 +336,13 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
bleedAvoidance, box, boxSize, includeLeftEdge, includeRightEdge); |
if (border.isRenderable()) { |
- context->fillRoundedRect(border, bgColor); |
+ context.fillRoundedRect(border, bgColor); |
} else { |
RoundedInnerRectClipper clipper(obj, paintInfo, rect, border, ApplyToContext); |
- context->fillRect(border.rect(), bgColor); |
+ context.fillRect(border.rect(), bgColor); |
} |
} else { |
- context->fillRect(pixelSnappedIntRect(rect), bgColor); |
+ context.fillRect(pixelSnappedIntRect(rect), bgColor); |
} |
return; |
@@ -379,13 +377,13 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
LayoutUnit pLeft = includeLeftEdge ? obj.paddingLeft() : LayoutUnit(); |
LayoutUnit pRight = includeRightEdge ? obj.paddingRight() : LayoutUnit(); |
- GraphicsContextStateSaver clipWithScrollingStateSaver(*context, clippedWithLocalScrolling); |
+ GraphicsContextStateSaver clipWithScrollingStateSaver(context, clippedWithLocalScrolling); |
LayoutRect scrolledPaintRect = rect; |
if (clippedWithLocalScrolling) { |
// Clip to the overflow area. |
const LayoutBox& thisBox = toLayoutBox(obj); |
// TODO(chrishtr): this should be pixel-snapped. |
- context->clip(FloatRect(thisBox.overflowClipRect(rect.location()))); |
+ context.clip(FloatRect(thisBox.overflowClipRect(rect.location()))); |
// Adjust the paint rect to reflect a scrolled content box with borders at the ends. |
IntSize offset = thisBox.scrolledContentOffset(); |
@@ -394,7 +392,7 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
scrolledPaintRect.setHeight(thisBox.borderTop() + thisBox.scrollHeight() + thisBox.borderBottom()); |
} |
- GraphicsContextStateSaver backgroundClipStateSaver(*context, false); |
+ GraphicsContextStateSaver backgroundClipStateSaver(context, false); |
IntRect maskRect; |
switch (bgLayer.clip()) { |
@@ -411,7 +409,7 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
scrolledPaintRect.height() - obj.borderTop() - obj.borderBottom() - (includePadding ? obj.paddingTop() + obj.paddingBottom() : LayoutUnit())); |
backgroundClipStateSaver.save(); |
// TODO(chrishtr): this should be pixel-snapped. |
- context->clip(FloatRect(clipRect)); |
+ context.clip(FloatRect(clipRect)); |
break; |
} |
@@ -423,8 +421,8 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
// We draw the background into a separate layer, to be later masked with yet another layer |
// holding the text content. |
backgroundClipStateSaver.save(); |
- context->clip(maskRect); |
- context->beginLayer(); |
+ context.clip(maskRect); |
+ context.beginLayer(); |
break; |
} |
@@ -448,12 +446,12 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
bool boxShadowShouldBeAppliedToBackground = obj.boxShadowShouldBeAppliedToBackground(bleedAvoidance, box); |
bool backgroundImageOccludesBackgroundColor = shouldPaintBackgroundImage && isFillLayerOpaque(bgLayer, obj); |
if (boxShadowShouldBeAppliedToBackground || !backgroundImageOccludesBackgroundColor) { |
- GraphicsContextStateSaver shadowStateSaver(*context, boxShadowShouldBeAppliedToBackground); |
+ GraphicsContextStateSaver shadowStateSaver(context, boxShadowShouldBeAppliedToBackground); |
if (boxShadowShouldBeAppliedToBackground) |
BoxPainter::applyBoxShadowForBackground(context, obj); |
if (bgColor.alpha()) |
- context->fillRect(backgroundRect, bgColor); |
+ context.fillRect(backgroundRect, bgColor); |
} |
} |
@@ -465,21 +463,21 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
SkXfermode::Mode compositeOp = op == SkXfermode::kSrcOver_Mode ? bgOp : op; |
const LayoutObject* clientForBackgroundImage = backgroundObject ? backgroundObject : &obj; |
RefPtr<Image> image = bgImage->image(clientForBackgroundImage, flooredIntSize(geometry.imageContainerSize()), obj.style()->effectiveZoom()); |
- InterpolationQuality interpolationQuality = chooseInterpolationQuality(*clientForBackgroundImage, context, image.get(), &bgLayer, LayoutSize(geometry.tileSize())); |
+ InterpolationQuality interpolationQuality = chooseInterpolationQuality(*clientForBackgroundImage, image.get(), &bgLayer, LayoutSize(geometry.tileSize())); |
if (bgLayer.maskSourceType() == MaskLuminance) |
- context->setColorFilter(ColorFilterLuminanceToAlpha); |
- InterpolationQuality previousInterpolationQuality = context->imageInterpolationQuality(); |
- context->setImageInterpolationQuality(interpolationQuality); |
+ context.setColorFilter(ColorFilterLuminanceToAlpha); |
+ InterpolationQuality previousInterpolationQuality = context.imageInterpolationQuality(); |
+ context.setImageInterpolationQuality(interpolationQuality); |
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", "data", InspectorPaintImageEvent::data(obj, *bgImage)); |
- context->drawTiledImage(image.get(), FloatRect(geometry.destRect()), FloatPoint(geometry.phase()), FloatSize(geometry.tileSize()), |
+ context.drawTiledImage(image.get(), FloatRect(geometry.destRect()), FloatPoint(geometry.phase()), FloatSize(geometry.tileSize()), |
compositeOp, FloatSize(geometry.spaceSize())); |
- context->setImageInterpolationQuality(previousInterpolationQuality); |
+ context.setImageInterpolationQuality(previousInterpolationQuality); |
} |
} |
if (bgLayer.clip() == TextFillBox) { |
// Create the text mask layer. |
- context->beginLayer(1, SkXfermode::kDstIn_Mode); |
+ context.beginLayer(1, SkXfermode::kDstIn_Mode); |
// Now draw the text into the mask. We do this by painting using a special paint phase that signals to |
// InlineTextBoxes that they should just add their contents to the clip. |
@@ -493,8 +491,8 @@ void BoxPainter::paintFillLayerExtended(const LayoutBoxModelObject& obj, const P |
obj.paint(info, scrolledPaintRect.location() - localOffset); |
} |
- context->endLayer(); |
- context->endLayer(); |
+ context.endLayer(); |
+ context.endLayer(); |
} |
} |
@@ -503,13 +501,13 @@ void BoxPainter::paintMask(const PaintInfo& paintInfo, const LayoutPoint& paintO |
if (!paintInfo.shouldPaintWithinRoot(&m_layoutBox) || m_layoutBox.style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseMask) |
return; |
- if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(*paintInfo.context, m_layoutBox, paintInfo.phase, paintOffset)) |
+ if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(paintInfo.context, m_layoutBox, paintInfo.phase, paintOffset)) |
return; |
LayoutRect visualOverflowRect(m_layoutBox.visualOverflowRect()); |
visualOverflowRect.moveBy(paintOffset); |
- LayoutObjectDrawingRecorder recorder(*paintInfo.context, m_layoutBox, paintInfo.phase, visualOverflowRect, paintOffset); |
+ LayoutObjectDrawingRecorder recorder(paintInfo.context, m_layoutBox, paintInfo.phase, visualOverflowRect, paintOffset); |
LayoutRect paintRect = LayoutRect(paintOffset, m_layoutBox.size()); |
paintMaskImages(paintInfo, paintRect); |
} |
@@ -534,7 +532,7 @@ void BoxPainter::paintMaskImages(const PaintInfo& paintInfo, const LayoutRect& p |
allMaskImagesLoaded &= maskLayers.imagesAreLoaded(); |
- paintInfo.context->beginLayer(1, SkXfermode::kDstIn_Mode); |
+ paintInfo.context.beginLayer(1, SkXfermode::kDstIn_Mode); |
} |
if (allMaskImagesLoaded) { |
@@ -543,7 +541,7 @@ void BoxPainter::paintMaskImages(const PaintInfo& paintInfo, const LayoutRect& p |
} |
if (pushTransparencyLayer) |
- paintInfo.context->endLayer(); |
+ paintInfo.context.endLayer(); |
} |
void BoxPainter::paintClippingMask(const PaintInfo& paintInfo, const LayoutPoint& paintOffset) |
@@ -556,20 +554,20 @@ void BoxPainter::paintClippingMask(const PaintInfo& paintInfo, const LayoutPoint |
if (!m_layoutBox.layer() || m_layoutBox.layer()->compositingState() != PaintsIntoOwnBacking) |
return; |
- if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(*paintInfo.context, m_layoutBox, paintInfo.phase, paintOffset)) |
+ if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(paintInfo.context, m_layoutBox, paintInfo.phase, paintOffset)) |
return; |
IntRect paintRect = pixelSnappedIntRect(LayoutRect(paintOffset, m_layoutBox.size())); |
- LayoutObjectDrawingRecorder drawingRecorder(*paintInfo.context, m_layoutBox, paintInfo.phase, paintRect, paintOffset); |
- paintInfo.context->fillRect(paintRect, Color::black); |
+ LayoutObjectDrawingRecorder drawingRecorder(paintInfo.context, m_layoutBox, paintInfo.phase, paintRect, paintOffset); |
+ paintInfo.context.fillRect(paintRect, Color::black); |
} |
-InterpolationQuality BoxPainter::chooseInterpolationQuality(const LayoutObject& obj, GraphicsContext* context, Image* image, const void* layer, const LayoutSize& size) |
+InterpolationQuality BoxPainter::chooseInterpolationQuality(const LayoutObject& obj, Image* image, const void* layer, const LayoutSize& size) |
{ |
- return ImageQualityController::imageQualityController()->chooseInterpolationQuality(context, &obj, image, layer, size); |
+ return ImageQualityController::imageQualityController()->chooseInterpolationQuality(obj, image, layer, size); |
} |
-bool BoxPainter::paintNinePieceImage(const LayoutBoxModelObject& obj, GraphicsContext* graphicsContext, const LayoutRect& rect, const ComputedStyle& style, const NinePieceImage& ninePieceImage, SkXfermode::Mode op) |
+bool BoxPainter::paintNinePieceImage(const LayoutBoxModelObject& obj, GraphicsContext& graphicsContext, const LayoutRect& rect, const ComputedStyle& style, const NinePieceImage& ninePieceImage, SkXfermode::Mode op) |
{ |
NinePieceImagePainter ninePieceImagePainter(obj); |
return ninePieceImagePainter.paint(graphicsContext, rect, style, ninePieceImage, op); |
@@ -591,7 +589,7 @@ void BoxPainter::paintBorder(const LayoutBoxModelObject& obj, const PaintInfo& i |
void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRect, const ComputedStyle& style, ShadowStyle shadowStyle, bool includeLogicalLeftEdge, bool includeLogicalRightEdge) |
{ |
// FIXME: Deal with border-image. Would be great to use border-image as a mask. |
- GraphicsContext* context = info.context; |
+ GraphicsContext& context = info.context; |
if (!style.boxShadow()) |
return; |
FloatRoundedRect border = (shadowStyle == Inset) ? style.getRoundedInnerBorderFor(paintRect, includeLogicalLeftEdge, includeLogicalRightEdge) |
@@ -601,7 +599,7 @@ void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe |
bool isHorizontal = style.isHorizontalWritingMode(); |
bool hasOpaqueBackground = style.visitedDependentColor(CSSPropertyBackgroundColor).alpha() == 255; |
- GraphicsContextStateSaver stateSaver(*context, false); |
+ GraphicsContextStateSaver stateSaver(context, false); |
const ShadowList* shadowList = style.boxShadow(); |
for (size_t i = shadowList->shadows().size(); i--; ) { |
@@ -642,7 +640,7 @@ void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe |
rectToClipOut.inflateWithRadii(-1); |
if (!rectToClipOut.isEmpty()) |
- context->clipOutRoundedRect(rectToClipOut); |
+ context.clipOutRoundedRect(rectToClipOut); |
} else { |
// This IntRect is correct even with fractional shadows, because it is used for the rectangle |
// of the box itself, which is always pixel-aligned. |
@@ -656,12 +654,12 @@ void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe |
rectToClipOut.inflate(-1); |
if (!rectToClipOut.isEmpty()) |
- context->clipOut(rectToClipOut); |
+ context.clipOut(rectToClipOut); |
} |
} |
// Draw only the shadow. |
- context->setShadow(shadowOffset, shadowBlur, shadowColor, DrawLooperBuilder::ShadowRespectsTransforms, DrawLooperBuilder::ShadowIgnoresAlpha, DrawShadowOnly); |
+ context.setShadow(shadowOffset, shadowBlur, shadowColor, DrawLooperBuilder::ShadowRespectsTransforms, DrawLooperBuilder::ShadowIgnoresAlpha, DrawShadowOnly); |
if (hasBorderRadius) { |
FloatRoundedRect influenceRect(pixelSnappedIntRect(LayoutRect(shadowRect)), border.radii()); |
@@ -681,9 +679,9 @@ void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe |
if (!roundedFillRect.isRenderable()) |
roundedFillRect.adjustRadii(); |
roundedFillRect.constrainRadii(); |
- context->fillRoundedRect(roundedFillRect, Color::black); |
+ context.fillRoundedRect(roundedFillRect, Color::black); |
} else { |
- context->fillRect(fillRect, Color::black); |
+ context.fillRect(fillRect, Color::black); |
} |
} else { |
// The inset shadow case. |
@@ -700,7 +698,7 @@ void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe |
else |
clippedEdges |= GraphicsContext::BottomEdge; |
} |
- context->drawInnerShadow(border, shadowColor, shadowOffset, shadowBlur, shadowSpread, clippedEdges); |
+ context.drawInnerShadow(border, shadowColor, shadowOffset, shadowBlur, shadowSpread, clippedEdges); |
} |
} |
} |