Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Unified Diff: include/core/SkImageGenerator.h

Issue 1396323007: API to support native scaling by image-generator (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove alternate versions Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/core/SkImageGenerator.h
diff --git a/include/core/SkImageGenerator.h b/include/core/SkImageGenerator.h
index 3d508ddfb1c7ec7f1ceb34b9a12d3ce3d50f6060..c3b6bb1885e161035262ef801b5f0ac5ab175e76 100644
--- a/include/core/SkImageGenerator.h
+++ b/include/core/SkImageGenerator.h
@@ -153,6 +153,45 @@ public:
GrTexture* generateTexture(GrContext*, const SkIRect* subset = nullptr);
/**
+ * 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 two nearest supported dimensions...
+ *
+ * If the requested scale is exactly supported, then both entries
+ * supporedSizes[0] and supportedSizes[1] will hold the same dimensions.
+ *
+ * However, often the requested size may result in a fractional resulting width/height,
+ * and or not be natively supported by the generator. (e.g. the scale is 1/3, but the
+ * generator only performs native scaling on powers-of-2 fractions). In this case...
+ * - if the generator can natively scale at a smaller size (e.g. 1/4), that will be returned
+ * in supportedSizes[0]
+ * - if the generator can natively scale at a larger size (e.g. 1/2), that will be returned
+ * in supportedSizes[1]
+ * - if the generator can only natively scale smaller, or only larger, than the
+ * requested scale, then that 1 native size will returned in both [0] and [1].
scroggo 2015/11/03 16:59:19 will be* returned
reed1 2015/11/30 20:38:01 Done.
+ *
+ * If no native scaling is supported, or scale is invalid (e.g. scale <= 0 || scale > 1)
+ * this will return false, and supportedSizes[] will be undefined.
+ */
+ bool computeScaledDimensions(SkScalar scale, SkISize supportedSizes[2]);
scroggo 2015/11/03 16:59:19 As stated in person, I'd prefer something other th
reed1 2015/11/30 20:38:01 Done.
+
scroggo 2015/11/03 16:59:19 Should computeScaledDimensions be const?
reed1 2015/11/30 20:38:01 None of the other methods are, though *all* are me
+ /**
+ * Request that pixels be scaled to fit into the specified scaledInfo dimensions.
+ * If scaledClip is not null, it specifies the subset of the scaled pixels that should
+ * be returned. It will be in the scaled coordinate system (not the original), and is only
+ * valid if it is entirely contained inside the scaled dimensions...
+ *
+ * SkIRect scaledBounds = SkIRect::MakeWH(0, 0, scaledInfo.width(), scaledInfo.height());
+ * bool valid = scaledBounds.contains(scaledClip);
+ *
+ * If the requested scaledInfo is not supported by the generator, or it encounters an error,
+ * or the scaledClip is invalid, this returns false and the contents of pixels is undefined.
+ */
+ bool generateScaledPixels(const SkImageInfo& scaledInfo, void* pixels, size_t rowBytes,
+ const SkIRect* scaledClip);
+
+ /**
* 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
* the caller is still responsible for managing their ownership of the data.
@@ -199,6 +238,14 @@ protected:
return nullptr;
}
+ virtual bool onComputeScaledDimensions(SkScalar scale, SkISize supportedSizes[2]) {
+ return false;
+ }
+ virtual bool onGenerateScaledPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
+ const SkIRect* subset) {
+ return false;
+ }
+
bool tryGenerateBitmap(SkBitmap* bm, const SkImageInfo* optionalInfo, SkBitmap::Allocator*);
private:
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698