diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/codec/SkCodecImageGenerator.cpp | 5 | ||||
-rw-r--r-- | src/codec/SkCodecImageGenerator.h | 5 | ||||
-rw-r--r-- | src/core/SkImageCacherator.cpp | 4 | ||||
-rw-r--r-- | src/core/SkImageCacherator.h | 14 | ||||
-rw-r--r-- | src/core/SkImageGenerator.cpp | 47 | ||||
-rw-r--r-- | src/core/SkPictureImageGenerator.cpp | 28 | ||||
-rw-r--r-- | src/core/SkPictureImageGenerator.h | 15 | ||||
-rw-r--r-- | src/core/SkPictureShader.cpp | 4 | ||||
-rw-r--r-- | src/core/SkReadBuffer.cpp | 3 | ||||
-rw-r--r-- | src/image/SkImage.cpp | 9 | ||||
-rw-r--r-- | src/image/SkImage_Generator.cpp | 13 | ||||
-rw-r--r-- | src/ports/SkImageGenerator_none.cpp | 2 | ||||
-rw-r--r-- | src/ports/SkImageGenerator_skia.cpp | 4 |
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)); } |