| Index: include/core/SkImageGenerator.h
|
| diff --git a/include/core/SkImageGenerator.h b/include/core/SkImageGenerator.h
|
| index 3d508ddfb1c7ec7f1ceb34b9a12d3ce3d50f6060..66db5e4884275257947d18a5e2f27b3c17dbd483 100644
|
| --- a/include/core/SkImageGenerator.h
|
| +++ b/include/core/SkImageGenerator.h
|
| @@ -152,6 +152,49 @@ public:
|
| */
|
| GrTexture* generateTexture(GrContext*, const SkIRect* subset = nullptr);
|
|
|
| + struct SupportedSizes {
|
| + SkISize fSizes[2];
|
| + };
|
| +
|
| + /**
|
| + * Some generators can efficiently scale their contents. If this is supported, the generator
|
| + * may only support certain scaled dimensions. Call this with the desired scale factor,
|
| + * and it will return true if scaling is supported, and in supportedSizes[] it will return
|
| + * the nearest supported dimensions.
|
| + *
|
| + * If no native scaling is supported, or scale is invalid (e.g. scale <= 0 || scale > 1)
|
| + * this will return false, and the supportedsizes will be undefined.
|
| + */
|
| + bool computeScaledDimensions(SkScalar scale, SupportedSizes*);
|
| +
|
| + /**
|
| + * Scale the generator's pixels to fit into scaledSize.
|
| + * This routine also support retrieving only a subset of the pixels. That subset is specified
|
| + * by the following rectangle (in the scaled space):
|
| + *
|
| + * subset = SkIRect::MakeXYWH(subsetOrigin.x(), subsetOrigin.y(),
|
| + * subsetPixels.width(), subsetPixels.height())
|
| + *
|
| + * If subset is not contained inside the scaledSize, this returns false.
|
| + *
|
| + * whole = SkIRect::MakeWH(scaledSize.width(), scaledSize.height())
|
| + * if (!whole.contains(subset)) {
|
| + * return false;
|
| + * }
|
| + *
|
| + * If the requested colortype/alphatype in pixels is not supported,
|
| + * or the requested scaledSize is not supported, or the generator encounters an error,
|
| + * this returns false.
|
| + */
|
| + bool generateScaledPixels(const SkISize& scaledSize, const SkIPoint& subsetOrigin,
|
| + const SkPixmap& subsetPixels);
|
| +
|
| + bool generateScaledPixels(const SkPixmap& scaledPixels) {
|
| + return this->generateScaledPixels(SkISize::Make(scaledPixels.width(),
|
| + scaledPixels.height()),
|
| + SkIPoint::Make(0, 0), scaledPixels);
|
| + }
|
| +
|
| /**
|
| * If the default image decoder system can interpret the specified (encoded) data, then
|
| * this returns a new ImageGenerator for it. Otherwise this returns NULL. Either way
|
| @@ -199,6 +242,13 @@ protected:
|
| return nullptr;
|
| }
|
|
|
| + virtual bool onComputeScaledDimensions(SkScalar, SupportedSizes*) {
|
| + return false;
|
| + }
|
| + virtual bool onGenerateScaledPixels(const SkISize&, const SkIPoint&, const SkPixmap&) {
|
| + return false;
|
| + }
|
| +
|
| bool tryGenerateBitmap(SkBitmap* bm, const SkImageInfo* optionalInfo, SkBitmap::Allocator*);
|
|
|
| private:
|
|
|