| Index: Source/platform/graphics/BitmapImage.cpp
|
| diff --git a/Source/platform/graphics/BitmapImage.cpp b/Source/platform/graphics/BitmapImage.cpp
|
| index 8a8c8b7bb8da8fcf8dbe1aff48dfbea6f905c086..df9a7268a58472b8944e95c46421469a49c2c99c 100644
|
| --- a/Source/platform/graphics/BitmapImage.cpp
|
| +++ b/Source/platform/graphics/BitmapImage.cpp
|
| @@ -272,7 +272,23 @@ String BitmapImage::filenameExtension() const
|
| return m_source.filenameExtension();
|
| }
|
|
|
| -void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dstRect, const FloatRect& srcRect, SkXfermode::Mode compositeOp, RespectImageOrientationEnum shouldRespectImageOrientation)
|
| +bool BitmapImage::isLazyDecodedBitmap()
|
| +{
|
| + SkBitmap bitmap;
|
| + if (!bitmapForCurrentFrame(&bitmap))
|
| + return false;
|
| + return DeferredImageDecoder::isLazyDecoded(bitmap);
|
| +}
|
| +
|
| +bool BitmapImage::isImmutableBitmap()
|
| +{
|
| + SkBitmap bitmap;
|
| + if (!bitmapForCurrentFrame(&bitmap))
|
| + return false;
|
| + return bitmap.isImmutable();
|
| +}
|
| +
|
| +void BitmapImage::draw(SkCanvas* canvas, const SkPaint& paint, const FloatRect& dstRect, const FloatRect& srcRect, RespectImageOrientationEnum shouldRespectImageOrientation)
|
| {
|
| TRACE_EVENT0("skia", "BitmapImage::draw");
|
| SkBitmap bitmap;
|
| @@ -290,15 +306,15 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dstRect, const Fl
|
| if (shouldRespectImageOrientation == RespectImageOrientation)
|
| orientation = frameOrientationAtIndex(m_currentFrame);
|
|
|
| - GraphicsContextStateSaver saveContext(*ctxt, false);
|
| + int initialSaveCount = canvas->getSaveCount();
|
| if (orientation != DefaultImageOrientation) {
|
| - saveContext.save();
|
| + canvas->save();
|
|
|
| // ImageOrientation expects the origin to be at (0, 0)
|
| - ctxt->translate(normDstRect.x(), normDstRect.y());
|
| + canvas->translate(normDstRect.x(), normDstRect.y());
|
| normDstRect.setLocation(FloatPoint());
|
|
|
| - ctxt->concatCTM(orientation.transformFromDefault(normDstRect.size()));
|
| + canvas->concat(affineTransformToSkMatrix(orientation.transformFromDefault(normDstRect.size())));
|
|
|
| if (orientation.usesWidthAsHeight()) {
|
| // The destination rect will have it's width and height already reversed for the orientation of
|
| @@ -307,22 +323,11 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dstRect, const Fl
|
| }
|
| }
|
|
|
| - bool isLazyDecoded = DeferredImageDecoder::isLazyDecoded(bitmap);
|
| - bool isOpaque = bitmap.isOpaque();
|
| -
|
| - {
|
| - SkPaint paint;
|
| - SkRect skSrcRect = normSrcRect;
|
| - int initialSaveCount = ctxt->preparePaintForDrawRectToRect(&paint, skSrcRect, normDstRect, compositeOp, !isOpaque, isLazyDecoded, bitmap.isImmutable());
|
| - // We want to filter it if we decided to do interpolation above, or if
|
| - // there is something interesting going on with the matrix (like a rotation).
|
| - // Note: for serialization, we will want to subset the bitmap first so we
|
| - // don't send extra pixels.
|
| - ctxt->drawBitmapRect(bitmap, &skSrcRect, normDstRect, &paint);
|
| - ctxt->canvas()->restoreToCount(initialSaveCount);
|
| - }
|
| + SkRect skSrcRect = normSrcRect;
|
| + canvas->drawBitmapRectToRect(bitmap, &skSrcRect, normDstRect, &paint);
|
| + canvas->restoreToCount(initialSaveCount);
|
|
|
| - if (isLazyDecoded)
|
| + if (DeferredImageDecoder::isLazyDecoded(bitmap))
|
| PlatformInstrumentation::didDrawLazyPixelRef(bitmap.getGenerationID());
|
|
|
| if (ImageObserver* observer = imageObserver())
|
|
|