| Index: src/core/SkPictureImageGenerator.cpp
|
| diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0dea60dfd9afb004f8e3e269666c0050554c6232
|
| --- /dev/null
|
| +++ b/src/core/SkPictureImageGenerator.cpp
|
| @@ -0,0 +1,80 @@
|
| +/*
|
| + * 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 "SkCanvas.h"
|
| +#include "SkMatrix.h"
|
| +#include "SkPaint.h"
|
| +#include "SkPicture.h"
|
| +
|
| +class SkPictureImageGenerator : SkImageGenerator {
|
| +public:
|
| + static SkImageGenerator* Create(const SkISize&, const SkPicture*, const SkMatrix*,
|
| + const SkPaint*);
|
| +
|
| +protected:
|
| + bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[],
|
| + int* ctableCount) override;
|
| +
|
| +private:
|
| + SkPictureImageGenerator(const SkISize&, const SkPicture*, const SkMatrix*, const SkPaint*);
|
| +
|
| + SkAutoTUnref<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) {
|
| + if (!picture || size.isEmpty()) {
|
| + return nullptr;
|
| + }
|
| +
|
| + return SkNEW_ARGS(SkPictureImageGenerator, (size, picture, matrix, paint));
|
| +}
|
| +
|
| +SkPictureImageGenerator::SkPictureImageGenerator(const SkISize& size, const SkPicture* picture,
|
| + const SkMatrix* matrix, const SkPaint* paint)
|
| + : INHERITED(SkImageInfo::MakeN32Premul(size))
|
| + , fPicture(SkRef(picture)) {
|
| +
|
| + if (matrix) {
|
| + fMatrix = *matrix;
|
| + } else {
|
| + fMatrix.reset();
|
| + }
|
| +
|
| + if (paint) {
|
| + fPaint.set(*paint);
|
| + }
|
| +}
|
| +
|
| +bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
|
| + SkPMColor ctable[], int* ctableCount) {
|
| + if (info != getInfo() || ctable || ctableCount) {
|
| + return false;
|
| + }
|
| +
|
| + SkBitmap bitmap;
|
| + if (!bitmap.installPixels(info, pixels, rowBytes)) {
|
| + return false;
|
| + }
|
| +
|
| + bitmap.eraseColor(SK_ColorTRANSPARENT);
|
| + SkCanvas canvas(bitmap, SkSurfaceProps(0, kUnknown_SkPixelGeometry));
|
| + canvas.drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull());
|
| +
|
| + return true;
|
| +}
|
| +
|
| +SkImageGenerator* SkImageGenerator::NewFromPicture(const SkISize& size, const SkPicture* picture,
|
| + const SkMatrix* matrix, const SkPaint* paint) {
|
| + return SkPictureImageGenerator::Create(size, picture, matrix, paint);
|
| +}
|
|
|