aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/readpixels.cpp12
-rw-r--r--include/core/SkImage.h8
-rw-r--r--src/core/SkPictureImageGenerator.cpp35
-rw-r--r--src/core/SkPictureImageGenerator.h35
-rw-r--r--src/core/SkPictureShader.cpp7
-rw-r--r--src/image/SkImage.cpp6
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,