| Index: Source/core/svg/graphics/SVGImage.cpp
|
| diff --git a/Source/core/svg/graphics/SVGImage.cpp b/Source/core/svg/graphics/SVGImage.cpp
|
| index f95f9db4be9d3a9da5fdde66675e7e2c8e9123c8..513187387043c2a8e312056c4ff0f3d05aba6b3a 100644
|
| --- a/Source/core/svg/graphics/SVGImage.cpp
|
| +++ b/Source/core/svg/graphics/SVGImage.cpp
|
| @@ -192,8 +192,8 @@ IntSize SVGImage::containerSize() const
|
| return IntSize(300, 150);
|
| }
|
|
|
| -void SVGImage::drawForContainer(GraphicsContext* context, const FloatSize containerSize, float zoom, const FloatRect& dstRect,
|
| - const FloatRect& srcRect, SkXfermode::Mode compositeOp)
|
| +void SVGImage::drawForContainer(SkCanvas* canvas, const SkPaint& paint, const FloatSize containerSize, float zoom, const FloatRect& dstRect,
|
| + const FloatRect& srcRect)
|
| {
|
| if (!m_page)
|
| return;
|
| @@ -212,7 +212,7 @@ void SVGImage::drawForContainer(GraphicsContext* context, const FloatSize contai
|
| adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(), roundedContainerSize.height() / containerSize.height());
|
| scaledSrc.setSize(adjustedSrcSize);
|
|
|
| - draw(context, dstRect, scaledSrc, compositeOp, DoNotRespectImageOrientation);
|
| + draw(canvas, paint, dstRect, scaledSrc, DoNotRespectImageOrientation);
|
| }
|
|
|
| bool SVGImage::bitmapForCurrentFrame(SkBitmap* bitmap)
|
| @@ -224,7 +224,8 @@ bool SVGImage::bitmapForCurrentFrame(SkBitmap* bitmap)
|
| if (!buffer)
|
| return false;
|
|
|
| - drawForContainer(buffer->context(), size(), 1, rect(), rect(), SkXfermode::kSrcOver_Mode);
|
| + SkPaint paint;
|
| + drawForContainer(buffer->canvas(), paint, size(), 1, rect(), rect());
|
|
|
| *bitmap = buffer->bitmap();
|
| return true;
|
| @@ -256,7 +257,8 @@ void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
|
| OwnPtr<FloatClipRecorder> clipRecorder;
|
| if (tile != spacedTile)
|
| clipRecorder = adoptPtr(new FloatClipRecorder(recordingContext, *this, PaintPhaseForeground, tile));
|
| - drawForContainer(&recordingContext, containerSize, zoom, tile, srcRect, SkXfermode::kSrcOver_Mode);
|
| + SkPaint paint;
|
| + drawForContainer(recordingContext.canvas(), paint, containerSize, zoom, tile, srcRect);
|
| }
|
|
|
| if (displayItemList)
|
| @@ -277,12 +279,15 @@ void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
|
| context->drawRect(dstRect, paint);
|
| }
|
|
|
| -void SVGImage::draw(GraphicsContext* context, const FloatRect& dstRect, const FloatRect& srcRect, SkXfermode::Mode compositeOp, RespectImageOrientationEnum)
|
| +void SVGImage::draw(SkCanvas* canvas, const SkPaint& paint, const FloatRect& dstRect, const FloatRect& srcRect, RespectImageOrientationEnum)
|
| {
|
| if (!m_page)
|
| return;
|
|
|
| - float opacity = context->getNormalizedAlpha() / 255.f;
|
| + float opacity = paint.getAlpha() / 255.f;
|
| + SkXfermode::Mode compositeOp;
|
| + if (!SkXfermode::AsMode(paint.getXfermode(), &compositeOp))
|
| + compositeOp = SkXfermode::kSrcOver_Mode;
|
|
|
| // TODO(fmalita): this recorder is only needed because CompositingRecorder below appears to be
|
| // dropping the current color filter on the floor. Find a proper fix and get rid of it.
|
| @@ -321,7 +326,7 @@ void SVGImage::draw(GraphicsContext* context, const FloatRect& dstRect, const Fl
|
| ASSERT(!view->needsLayout());
|
| }
|
| RefPtr<const SkPicture> recording = recordingContext->endRecording();
|
| - context->drawPicture(recording.get());
|
| + canvas->drawPicture(recording.get());
|
|
|
| if (imageObserver())
|
| imageObserver()->didDraw(this);
|
|
|