| Index: src/core/SkGlyphCache.h
|
| diff --git a/src/core/SkGlyphCache.h b/src/core/SkGlyphCache.h
|
| index 8b404dcc097f627c687a532986f0ff5ed3046325..d18b61a0a9d544bd910ca01c469a87b5f69d3467 100644
|
| --- a/src/core/SkGlyphCache.h
|
| +++ b/src/core/SkGlyphCache.h
|
| @@ -244,37 +244,72 @@ private:
|
| friend class SkGlyphCache_Globals;
|
| };
|
|
|
| -class SkAutoGlyphCache {
|
| +class SkAutoGlyphCacheBase {
|
| public:
|
| - SkAutoGlyphCache(SkGlyphCache* cache) : fCache(cache) {}
|
| - SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) {
|
| + SkGlyphCache* getCache() const { return fCache; }
|
| +
|
| + void release() {
|
| + if (fCache) {
|
| + SkGlyphCache::AttachCache(fCache);
|
| + fCache = NULL;
|
| + }
|
| + }
|
| +
|
| +protected:
|
| + // Hide the constructors so we can't create one of these directly.
|
| + // Create SkAutoGlyphCache or SkAutoGlyphCacheNoCache instead.
|
| + SkAutoGlyphCacheBase(SkGlyphCache* cache) : fCache(cache) {}
|
| + SkAutoGlyphCacheBase(SkTypeface* typeface, const SkDescriptor* desc) {
|
| fCache = SkGlyphCache::DetachCache(typeface, desc);
|
| }
|
| + SkAutoGlyphCacheBase(const SkPaint& paint,
|
| + const SkDeviceProperties* deviceProperties,
|
| + const SkMatrix* matrix) {
|
| + fCache = NULL;
|
| + }
|
| + SkAutoGlyphCacheBase() {}
|
| +
|
| + SkGlyphCache* fCache;
|
| +
|
| +private:
|
| + static bool DetachProc(const SkGlyphCache*, void*);
|
| +};
|
| +
|
| +class SkAutoGlyphCache : public SkAutoGlyphCacheBase {
|
| +public:
|
| + SkAutoGlyphCache(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {}
|
| + SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) :
|
| + SkAutoGlyphCacheBase(typeface, desc) {}
|
| SkAutoGlyphCache(const SkPaint& paint,
|
| const SkDeviceProperties* deviceProperties,
|
| const SkMatrix* matrix) {
|
| - fCache = paint.detachCache(deviceProperties, matrix);
|
| + fCache = paint.detachCache(deviceProperties, matrix, false);
|
| }
|
| - ~SkAutoGlyphCache() {
|
| + SkAutoGlyphCache() : SkAutoGlyphCacheBase() {
|
| if (fCache) {
|
| SkGlyphCache::AttachCache(fCache);
|
| }
|
| }
|
| +};
|
| +#define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache)
|
|
|
| - SkGlyphCache* getCache() const { return fCache; }
|
| -
|
| - void release() {
|
| +class SkAutoGlyphCacheNoGamma : public SkAutoGlyphCacheBase {
|
| +public:
|
| + SkAutoGlyphCacheNoGamma(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {}
|
| + SkAutoGlyphCacheNoGamma(SkTypeface* typeface, const SkDescriptor* desc) :
|
| + SkAutoGlyphCacheBase(typeface, desc) {}
|
| + SkAutoGlyphCacheNoGamma(const SkPaint& paint,
|
| + const SkDeviceProperties* deviceProperties,
|
| + const SkMatrix* matrix) {
|
| + fCache = paint.detachCache(deviceProperties, matrix, true);
|
| + }
|
| + SkAutoGlyphCacheNoGamma() : SkAutoGlyphCacheBase() {
|
| if (fCache) {
|
| SkGlyphCache::AttachCache(fCache);
|
| - fCache = NULL;
|
| }
|
| }
|
| -
|
| -private:
|
| - SkGlyphCache* fCache;
|
| -
|
| - static bool DetachProc(const SkGlyphCache*, void*);
|
| };
|
| -#define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache)
|
| +#define SkAutoGlyphCacheNoGamma(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCacheNoGamma)
|
| +
|
|
|
| #endif
|
|
|