aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codec/SkCodecImageGenerator.cpp5
-rw-r--r--src/codec/SkCodecImageGenerator.h5
-rw-r--r--src/core/SkImageCacherator.cpp4
-rw-r--r--src/core/SkImageCacherator.h14
-rw-r--r--src/core/SkImageGenerator.cpp47
-rw-r--r--src/core/SkPictureImageGenerator.cpp28
-rw-r--r--src/core/SkPictureImageGenerator.h15
-rw-r--r--src/core/SkPictureShader.cpp4
-rw-r--r--src/core/SkReadBuffer.cpp3
-rw-r--r--src/image/SkImage.cpp9
-rw-r--r--src/image/SkImage_Generator.cpp13
-rw-r--r--src/ports/SkImageGenerator_none.cpp2
-rw-r--r--src/ports/SkImageGenerator_skia.cpp4
13 files changed, 99 insertions, 54 deletions
diff --git a/src/codec/SkCodecImageGenerator.cpp b/src/codec/SkCodecImageGenerator.cpp
index 447332b2c7..56ca21eb76 100644
--- a/src/codec/SkCodecImageGenerator.cpp
+++ b/src/codec/SkCodecImageGenerator.cpp
@@ -6,14 +6,15 @@
*/
#include "SkCodecImageGenerator.h"
+#include "SkMakeUnique.h"
-SkImageGenerator* SkCodecImageGenerator::NewFromEncodedCodec(sk_sp<SkData> data) {
+std::unique_ptr<SkImageGenerator> SkCodecImageGenerator::MakeFromEncodedCodec(sk_sp<SkData> data) {
SkCodec* codec = SkCodec::NewFromData(data);
if (nullptr == codec) {
return nullptr;
}
- return new SkCodecImageGenerator(codec, data);
+ return std::unique_ptr<SkImageGenerator>(new SkCodecImageGenerator(codec, data));
}
static SkImageInfo make_premul(const SkImageInfo& info) {
diff --git a/src/codec/SkCodecImageGenerator.h b/src/codec/SkCodecImageGenerator.h
index d771f4925d..727a747ec2 100644
--- a/src/codec/SkCodecImageGenerator.h
+++ b/src/codec/SkCodecImageGenerator.h
@@ -18,10 +18,7 @@ public:
* If this data represents an encoded image that we know how to decode,
* return an SkCodecImageGenerator. Otherwise return nullptr.
*/
- static SkImageGenerator* NewFromEncodedCodec(sk_sp<SkData>);
- static SkImageGenerator* NewFromEncodedCodec(SkData* data) {
- return NewFromEncodedCodec(sk_ref_sp(data));
- }
+ static std::unique_ptr<SkImageGenerator> MakeFromEncodedCodec(sk_sp<SkData>);
protected:
SkData* onRefEncodedData(GrContext* ctx) override;
diff --git a/src/core/SkImageCacherator.cpp b/src/core/SkImageCacherator.cpp
index 4534851421..e971883f7c 100644
--- a/src/core/SkImageCacherator.cpp
+++ b/src/core/SkImageCacherator.cpp
@@ -101,9 +101,9 @@ SkImageCacherator::Validator::Validator(sk_sp<SharedGenerator> gen, const SkIRec
}
}
-SkImageCacherator* SkImageCacherator::NewFromGenerator(SkImageGenerator* gen,
+SkImageCacherator* SkImageCacherator::NewFromGenerator(std::unique_ptr<SkImageGenerator> gen,
const SkIRect* subset) {
- Validator validator(SharedGenerator::Make(gen), subset);
+ Validator validator(SharedGenerator::Make(std::move(gen)), subset);
return validator ? new SkImageCacherator(&validator) : nullptr;
}
diff --git a/src/core/SkImageCacherator.h b/src/core/SkImageCacherator.h
index 528dc0ee52..97339360bd 100644
--- a/src/core/SkImageCacherator.h
+++ b/src/core/SkImageCacherator.h
@@ -24,8 +24,8 @@ class SkImage;
*/
class SkImageCacherator {
public:
- // Takes ownership of the generator
- static SkImageCacherator* NewFromGenerator(SkImageGenerator*, const SkIRect* subset = nullptr);
+ static SkImageCacherator* NewFromGenerator(std::unique_ptr<SkImageGenerator>,
+ const SkIRect* subset = nullptr);
~SkImageCacherator();
@@ -90,12 +90,16 @@ private:
// among several cacherators.
class SharedGenerator final : public SkNVRefCnt<SharedGenerator> {
public:
- static sk_sp<SharedGenerator> Make(SkImageGenerator* gen) {
- return gen ? sk_sp<SharedGenerator>(new SharedGenerator(gen)) : nullptr;
+ static sk_sp<SharedGenerator> Make(std::unique_ptr<SkImageGenerator> gen) {
+ return gen ? sk_sp<SharedGenerator>(new SharedGenerator(std::move(gen))) : nullptr;
}
private:
- explicit SharedGenerator(SkImageGenerator* gen) : fGenerator(gen) { SkASSERT(gen); }
+ explicit SharedGenerator(std::unique_ptr<SkImageGenerator> gen)
+ : fGenerator(std::move(gen))
+ {
+ SkASSERT(fGenerator);
+ }
friend class ScopedGenerator;
friend class SkImageCacherator;
diff --git a/src/core/SkImageGenerator.cpp b/src/core/SkImageGenerator.cpp
index b815fbfb77..d4d42bad5f 100644
--- a/src/core/SkImageGenerator.cpp
+++ b/src/core/SkImageGenerator.cpp
@@ -174,24 +174,57 @@ bool SkImageGenerator::tryGenerateBitmap(SkBitmap* bitmap, const SkImageInfo& in
#include "SkGraphics.h"
-static SkGraphics::ImageGeneratorFromEncodedFactory gFactory;
+static SkGraphics::ImageGeneratorFromEncodedDataFactory gFactory;
+SkGraphics::ImageGeneratorFromEncodedDataFactory
+SkGraphics::SetImageGeneratorFromEncodedDataFactory(ImageGeneratorFromEncodedDataFactory factory)
+{
+ ImageGeneratorFromEncodedDataFactory prev = gFactory;
+ gFactory = factory;
+ return prev;
+}
+
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
+static SkGraphics::ImageGeneratorFromEncodedFactory gLegacyFactory;
SkGraphics::ImageGeneratorFromEncodedFactory
SkGraphics::SetImageGeneratorFromEncodedFactory(ImageGeneratorFromEncodedFactory factory)
{
- ImageGeneratorFromEncodedFactory prev = gFactory;
- gFactory = factory;
+ ImageGeneratorFromEncodedFactory prev = gLegacyFactory;
+ gLegacyFactory = factory;
return prev;
}
+#endif
-SkImageGenerator* SkImageGenerator::NewFromEncoded(SkData* data) {
- if (nullptr == data) {
+std::unique_ptr<SkImageGenerator> SkImageGenerator::MakeFromEncoded(sk_sp<SkData> data) {
+ if (!data) {
return nullptr;
}
if (gFactory) {
- if (SkImageGenerator* generator = gFactory(data)) {
+ if (std::unique_ptr<SkImageGenerator> generator = gFactory(data)) {
return generator;
}
}
- return SkImageGenerator::NewFromEncodedImpl(data);
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
+ if (gLegacyFactory) {
+ if (SkImageGenerator* generator = gLegacyFactory(data.get())) {
+ return std::unique_ptr<SkImageGenerator>(generator);
+ }
+ }
+#endif
+ return SkImageGenerator::MakeFromEncodedImpl(std::move(data));
+}
+
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
+#include "SkPicture.h"
+
+SkImageGenerator* SkImageGenerator::NewFromPicture(const SkISize& size, const SkPicture* picture,
+ const SkMatrix* matrix, const SkPaint* paint,
+ SkImage::BitDepth depth,
+ sk_sp<SkColorSpace> cs) {
+ return MakeFromPicture(size, sk_ref_sp(const_cast<SkPicture*>(picture)), matrix, paint,
+ depth, std::move(cs)).release();
+}
+SkImageGenerator* SkImageGenerator::NewFromEncoded(SkData* data) {
+ return MakeFromEncoded(sk_ref_sp(data)).release();
}
+#endif
diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp
index 618312e1cd..44a6b82895 100644
--- a/src/core/SkPictureImageGenerator.cpp
+++ b/src/core/SkPictureImageGenerator.cpp
@@ -7,16 +7,17 @@
#include "SkImage_Base.h"
#include "SkCanvas.h"
+#include "SkMakeUnique.h"
#include "SkMatrix.h"
#include "SkPaint.h"
#include "SkPicture.h"
#include "SkPictureImageGenerator.h"
#include "SkSurface.h"
-SkImageGenerator* SkPictureImageGenerator::Create(const SkISize& size, const SkPicture* picture,
- const SkMatrix* matrix, const SkPaint* paint,
- SkImage::BitDepth bitDepth,
- sk_sp<SkColorSpace> colorSpace) {
+std::unique_ptr<SkImageGenerator>
+SkPictureImageGenerator::Make(const SkISize& size, sk_sp<SkPicture> picture, const SkMatrix* matrix,
+ const SkPaint* paint, SkImage::BitDepth bitDepth,
+ sk_sp<SkColorSpace> colorSpace) {
if (!picture || size.isEmpty()) {
return nullptr;
}
@@ -36,13 +37,14 @@ SkImageGenerator* SkPictureImageGenerator::Create(const SkISize& size, const SkP
SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), colorType,
kPremul_SkAlphaType, std::move(colorSpace));
- return new SkPictureImageGenerator(info, picture, matrix, paint);
+ return std::unique_ptr<SkImageGenerator>(
+ new SkPictureImageGenerator(info, std::move(picture), matrix, paint));
}
-SkPictureImageGenerator::SkPictureImageGenerator(const SkImageInfo& info, const SkPicture* picture,
+SkPictureImageGenerator::SkPictureImageGenerator(const SkImageInfo& info, sk_sp<SkPicture> picture,
const SkMatrix* matrix, const SkPaint* paint)
: INHERITED(info)
- , fPicture(SkRef(picture)) {
+ , fPicture(std::move(picture)) {
if (matrix) {
fMatrix = *matrix;
@@ -75,18 +77,18 @@ bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels,
///////////////////////////////////////////////////////////////////////////////////////////////////
-SkImageGenerator* SkImageGenerator::NewFromPicture(const SkISize& size, const SkPicture* picture,
- const SkMatrix* matrix, const SkPaint* paint,
- SkImage::BitDepth bitDepth,
- sk_sp<SkColorSpace> colorSpace) {
+std::unique_ptr<SkImageGenerator>
+SkImageGenerator::MakeFromPicture(const SkISize& size, sk_sp<SkPicture> picture,
+ 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));
+ return SkPictureImageGenerator::Make(size, std::move(picture), matrix, paint, bitDepth,
+ std::move(colorSpace));
}
///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkPictureImageGenerator.h b/src/core/SkPictureImageGenerator.h
index 4728d21a44..ec63e30fe3 100644
--- a/src/core/SkPictureImageGenerator.h
+++ b/src/core/SkPictureImageGenerator.h
@@ -10,10 +10,11 @@
#include "SkImageGenerator.h"
#include "SkTLazy.h"
-class SkPictureImageGenerator : SkImageGenerator {
+class SkPictureImageGenerator : public SkImageGenerator {
public:
- static SkImageGenerator* Create(const SkISize&, const SkPicture*, const SkMatrix*,
- const SkPaint*, SkImage::BitDepth, sk_sp<SkColorSpace>);
+ static std::unique_ptr<SkImageGenerator> Make(const SkISize&, sk_sp<SkPicture>, const SkMatrix*,
+ const SkPaint*, SkImage::BitDepth,
+ sk_sp<SkColorSpace>);
protected:
bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[],
@@ -24,12 +25,12 @@ protected:
#endif
private:
- SkPictureImageGenerator(const SkImageInfo& info, const SkPicture*, const SkMatrix*,
+ SkPictureImageGenerator(const SkImageInfo& info, sk_sp<SkPicture>, const SkMatrix*,
const SkPaint*);
- sk_sp<const SkPicture> fPicture;
- SkMatrix fMatrix;
- SkTLazy<SkPaint> fPaint;
+ sk_sp<SkPicture> fPicture;
+ SkMatrix fMatrix;
+ SkTLazy<SkPaint> fPaint;
typedef SkImageGenerator INHERITED;
};
diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp
index a9576138d0..69f92ecee9 100644
--- a/src/core/SkPictureShader.cpp
+++ b/src/core/SkPictureShader.cpp
@@ -228,8 +228,8 @@ sk_sp<SkShader> SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, con
SkMatrix::kFill_ScaleToFit);
sk_sp<SkImage> tileImage = SkImage::MakeFromGenerator(
- SkPictureImageGenerator::Create(tileSize, fPicture.get(), &tileMatrix, nullptr,
- SkImage::BitDepth::kU8, sk_ref_sp(dstColorSpace)));
+ SkPictureImageGenerator::Make(tileSize, fPicture, &tileMatrix, nullptr,
+ SkImage::BitDepth::kU8, sk_ref_sp(dstColorSpace)));
if (!tileImage) {
return nullptr;
}
diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
index b4fc168853..33e1d025dd 100644
--- a/src/core/SkReadBuffer.cpp
+++ b/src/core/SkReadBuffer.cpp
@@ -10,6 +10,7 @@
#include "SkImage.h"
#include "SkImageDeserializer.h"
#include "SkImageGenerator.h"
+#include "SkMakeUnique.h"
#include "SkReadBuffer.h"
#include "SkStream.h"
#include "SkTypeface.h"
@@ -28,7 +29,7 @@ namespace {
static sk_sp<SkImage> MakeEmptyImage(int width, int height) {
return SkImage::MakeFromGenerator(
- new EmptyImageGenerator(SkImageInfo::MakeN32Premul(width, height)));
+ skstd::make_unique<EmptyImageGenerator>(SkImageInfo::MakeN32Premul(width, height)));
}
} // anonymous namespace
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 7619acd78c..2ae01b8510 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -129,8 +129,7 @@ sk_sp<SkImage> SkImage::MakeFromEncoded(sk_sp<SkData> encoded, const SkIRect* su
if (nullptr == encoded || 0 == encoded->size()) {
return nullptr;
}
- SkImageGenerator* generator = SkImageGenerator::NewFromEncoded(encoded.get());
- return SkImage::MakeFromGenerator(generator, subset);
+ return SkImage::MakeFromGenerator(SkImageGenerator::MakeFromEncoded(encoded), subset);
}
const char* SkImage::toString(SkString* str) const {
@@ -263,9 +262,9 @@ 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,
BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace) {
- return MakeFromGenerator(SkImageGenerator::NewFromPicture(dimensions, picture.get(), matrix,
- paint, bitDepth,
- std::move(colorSpace)));
+ return MakeFromGenerator(SkImageGenerator::MakeFromPicture(dimensions, std::move(picture),
+ matrix, paint, bitDepth,
+ std::move(colorSpace)));
}
sk_sp<SkImage> SkImage::makeWithFilter(const SkImageFilter* filter, const SkIRect& subset,
const SkIRect& clipBounds, SkIRect* outSubset,
diff --git a/src/image/SkImage_Generator.cpp b/src/image/SkImage_Generator.cpp
index da9d61a8f0..7e47523c7c 100644
--- a/src/image/SkImage_Generator.cpp
+++ b/src/image/SkImage_Generator.cpp
@@ -93,9 +93,16 @@ sk_sp<SkImage> SkImage_Generator::onMakeSubset(const SkIRect& subset) const {
return validator ? sk_sp<SkImage>(new SkImage_Generator(&validator)) : nullptr;
}
-sk_sp<SkImage> SkImage::MakeFromGenerator(SkImageGenerator* generator, const SkIRect* subset) {
- SkImageCacherator::Validator validator(SkImageCacherator::SharedGenerator::Make(generator),
- subset);
+sk_sp<SkImage> SkImage::MakeFromGenerator(std::unique_ptr<SkImageGenerator> generator,
+ const SkIRect* subset) {
+ SkImageCacherator::Validator validator(
+ SkImageCacherator::SharedGenerator::Make(std::move(generator)), subset);
return validator ? sk_make_sp<SkImage_Generator>(&validator) : nullptr;
}
+
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
+sk_sp<SkImage> SkImage::MakeFromGenerator(SkImageGenerator* gen, const SkIRect* subset) {
+ return MakeFromGenerator(std::unique_ptr<SkImageGenerator>(gen), subset);
+}
+#endif
diff --git a/src/ports/SkImageGenerator_none.cpp b/src/ports/SkImageGenerator_none.cpp
index 2dce1c2dc4..5aeb5cb64a 100644
--- a/src/ports/SkImageGenerator_none.cpp
+++ b/src/ports/SkImageGenerator_none.cpp
@@ -7,6 +7,6 @@
#include "SkImageGenerator.h"
-SkImageGenerator* SkImageGenerator::NewFromEncodedImpl(SkData*) {
+std::unique_ptr<SkImageGenerator> SkImageGenerator::MakeFromEncodedImpl(sk_sp<SkData>) {
return nullptr;
}
diff --git a/src/ports/SkImageGenerator_skia.cpp b/src/ports/SkImageGenerator_skia.cpp
index b6ddee935a..e310b7fe23 100644
--- a/src/ports/SkImageGenerator_skia.cpp
+++ b/src/ports/SkImageGenerator_skia.cpp
@@ -8,6 +8,6 @@
#include "SkData.h"
#include "SkCodecImageGenerator.h"
-SkImageGenerator* SkImageGenerator::NewFromEncodedImpl(SkData* data) {
- return SkCodecImageGenerator::NewFromEncodedCodec(data);
+std::unique_ptr<SkImageGenerator> SkImageGenerator::MakeFromEncodedImpl(sk_sp<SkData> data) {
+ return SkCodecImageGenerator::MakeFromEncodedCodec(std::move(data));
}