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 |