diff options
author | Mike Reed <reed@google.com> | 2017-02-15 15:14:16 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-02-15 20:51:28 +0000 |
commit | 185130c643f0f6b20dcf14c200074748be282a7e (patch) | |
tree | 049a9162c7ed7c298a4966000b9aa805f75282ad /src/core/SkImageGenerator.cpp | |
parent | eb62829a83a0a4f4fdd1230a3c08140e38052602 (diff) |
return and take SkImageGenerator as unique_ptr
BUG=skia:
Change-Id: I4bc11042dd1dbf1eabd40af206027bc65acc3186
Reviewed-on: https://skia-review.googlesource.com/8444
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core/SkImageGenerator.cpp')
-rw-r--r-- | src/core/SkImageGenerator.cpp | 47 |
1 files changed, 40 insertions, 7 deletions
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 |