diff options
-rw-r--r-- | gm/readpixels.cpp | 12 | ||||
-rw-r--r-- | include/core/SkImage.h | 8 | ||||
-rw-r--r-- | src/core/SkPictureImageGenerator.cpp | 35 | ||||
-rw-r--r-- | src/core/SkPictureImageGenerator.h | 35 | ||||
-rw-r--r-- | src/core/SkPictureShader.cpp | 7 | ||||
-rw-r--r-- | src/image/SkImage.cpp | 6 |
6 files changed, 48 insertions, 55 deletions
diff --git a/gm/readpixels.cpp b/gm/readpixels.cpp index ad9bf8d4f4..f481e268d2 100644 --- a/gm/readpixels.cpp +++ b/gm/readpixels.cpp @@ -80,7 +80,7 @@ static void draw_contents(SkCanvas* canvas) { canvas->drawCircle(60, 60, 35, paint); } -static sk_sp<SkImage> make_tagged_picture_image() { +static sk_sp<SkImage> make_picture_image() { SkPictureRecorder recorder; draw_contents(recorder.beginRecording(SkRect::MakeIWH(kWidth, kHeight))); return SkImage::MakeFromPicture(recorder.finishRecordingAsPicture(), @@ -89,13 +89,6 @@ static sk_sp<SkImage> make_tagged_picture_image() { SkColorSpace::MakeSRGB()); } -static sk_sp<SkImage> make_untagged_picture_image() { - SkPictureRecorder recorder; - draw_contents(recorder.beginRecording(SkRect::MakeIWH(kWidth, kHeight))); - return SkImage::MakeFromPicture(recorder.finishRecordingAsPicture(), - SkISize::Make(kWidth, kHeight), nullptr, nullptr); -} - static sk_sp<SkColorSpace> make_srgb_transfer_fn(const SkColorSpacePrimaries& primaries) { SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); SkAssertResult(primaries.toXYZD50(&toXYZD50)); @@ -290,8 +283,7 @@ protected: } const sk_sp<SkImage> images[] = { - make_tagged_picture_image(), - make_untagged_picture_image(), + make_picture_image(), }; const SkAlphaType alphaTypes[] = { kUnpremul_SkAlphaType, diff --git a/include/core/SkImage.h b/include/core/SkImage.h index cb025468f0..aaafb44c42 100644 --- a/include/core/SkImage.h +++ b/include/core/SkImage.h @@ -161,14 +161,6 @@ public: /** * Create a new image from the specified picture. - * This SkImage has no defined BitDepth or SkColorSpace, it is a flexible container for - * draw commands. - */ - static sk_sp<SkImage> MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, - const SkMatrix* matrix, const SkPaint* paint); - - /** - * Create a new image from the specified picture. * On creation of the SkImage, snap the SkPicture to a particular BitDepth and SkColorSpace. */ static sk_sp<SkImage> MakeFromPicture(sk_sp<SkPicture>, const SkISize& dimensions, diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp index 762654af70..5f69db647b 100644 --- a/src/core/SkPictureImageGenerator.cpp +++ b/src/core/SkPictureImageGenerator.cpp @@ -6,39 +6,12 @@ */ #include "SkImage_Base.h" -#include "SkImageGenerator.h" #include "SkCanvas.h" #include "SkMatrix.h" #include "SkPaint.h" #include "SkPicture.h" +#include "SkPictureImageGenerator.h" #include "SkSurface.h" -#include "SkTLazy.h" - -class SkPictureImageGenerator : SkImageGenerator { -public: - static SkImageGenerator* Create(const SkISize&, const SkPicture*, const SkMatrix*, - const SkPaint*, SkImage::BitDepth, sk_sp<SkColorSpace>); - -protected: - bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], - int* ctableCount) override; - bool onComputeScaledDimensions(SkScalar scale, SupportedSizes*) override; - bool onGenerateScaledPixels(const SkPixmap&) override; - -#if SK_SUPPORT_GPU - GrTexture* onGenerateTexture(GrContext*, const SkImageInfo&, const SkIPoint&) override; -#endif - -private: - SkPictureImageGenerator(const SkImageInfo& info, const SkPicture*, const SkMatrix*, - const SkPaint*); - - sk_sp<const SkPicture> fPicture; - SkMatrix fMatrix; - SkTLazy<SkPaint> fPaint; - - typedef SkImageGenerator INHERITED; -}; SkImageGenerator* SkPictureImageGenerator::Create(const SkISize& size, const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint, @@ -141,6 +114,12 @@ SkImageGenerator* SkImageGenerator::NewFromPicture(const SkISize& size, const Sk const SkMatrix* matrix, const SkPaint* paint, SkImage::BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace) { + // Check this here (rather than in SkPictureImageGenerator::Create) so SkPictureShader + // has a private entry point to create legacy picture backed images. + if (!colorSpace) { + return nullptr; + } + return SkPictureImageGenerator::Create(size, picture, matrix, paint, bitDepth, std::move(colorSpace)); } diff --git a/src/core/SkPictureImageGenerator.h b/src/core/SkPictureImageGenerator.h new file mode 100644 index 0000000000..cfb36a3601 --- /dev/null +++ b/src/core/SkPictureImageGenerator.h @@ -0,0 +1,35 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkImageGenerator.h" +#include "SkTLazy.h" + +class SkPictureImageGenerator : SkImageGenerator { +public: + static SkImageGenerator* Create(const SkISize&, const SkPicture*, const SkMatrix*, + const SkPaint*, SkImage::BitDepth, sk_sp<SkColorSpace>); + +protected: + bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], + int* ctableCount) override; + bool onComputeScaledDimensions(SkScalar scale, SupportedSizes*) override; + bool onGenerateScaledPixels(const SkPixmap&) override; + +#if SK_SUPPORT_GPU + GrTexture* onGenerateTexture(GrContext*, const SkImageInfo&, const SkIPoint&) override; +#endif + +private: + SkPictureImageGenerator(const SkImageInfo& info, const SkPicture*, const SkMatrix*, + const SkPaint*); + + sk_sp<const SkPicture> fPicture; + SkMatrix fMatrix; + SkTLazy<SkPaint> fPaint; + + typedef SkImageGenerator INHERITED; +}; diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp index 71026824cd..a9576138d0 100644 --- a/src/core/SkPictureShader.cpp +++ b/src/core/SkPictureShader.cpp @@ -15,6 +15,7 @@ #include "SkImageShader.h" #include "SkMatrixUtils.h" #include "SkPicture.h" +#include "SkPictureImageGenerator.h" #include "SkReadBuffer.h" #include "SkResourceCache.h" @@ -226,9 +227,9 @@ sk_sp<SkShader> SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, con tileMatrix.setRectToRect(fTile, SkRect::MakeIWH(tileSize.width(), tileSize.height()), SkMatrix::kFill_ScaleToFit); - sk_sp<SkImage> tileImage( - SkImage::MakeFromPicture(fPicture, tileSize, &tileMatrix, nullptr, - SkImage::BitDepth::kU8, sk_ref_sp(dstColorSpace))); + sk_sp<SkImage> tileImage = SkImage::MakeFromGenerator( + SkPictureImageGenerator::Create(tileSize, fPicture.get(), &tileMatrix, nullptr, + SkImage::BitDepth::kU8, sk_ref_sp(dstColorSpace))); if (!tileImage) { return nullptr; } diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 67c96d7ed2..7619acd78c 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -261,12 +261,6 @@ bool SkImage_Base::onAsLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) con } sk_sp<SkImage> SkImage::MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, - const SkMatrix* matrix, const SkPaint* paint) { - return SkImage::MakeFromPicture(std::move(picture), dimensions, matrix, paint, BitDepth::kU8, - nullptr); -} - -sk_sp<SkImage> SkImage::MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, const SkMatrix* matrix, const SkPaint* paint, BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace) { return MakeFromGenerator(SkImageGenerator::NewFromPicture(dimensions, picture.get(), matrix, |