| Index: src/core/SkGlyphCache.h
|
| diff --git a/src/core/SkGlyphCache.h b/src/core/SkGlyphCache.h
|
| index cd0b05c6e960adc862d94946efa95046c8dafb23..2c49530e7c72ab5ac7adaa6a7e1023c4476dda41 100644
|
| --- a/src/core/SkGlyphCache.h
|
| +++ b/src/core/SkGlyphCache.h
|
| @@ -11,12 +11,12 @@
|
| #include "SkChunkAlloc.h"
|
| #include "SkDescriptor.h"
|
| #include "SkGlyph.h"
|
| +#include "SkPaint.h"
|
| #include "SkTHash.h"
|
| #include "SkScalerContext.h"
|
| #include "SkTemplates.h"
|
| #include "SkTDArray.h"
|
|
|
| -class SkPaint;
|
| class SkTraceMemoryDump;
|
|
|
| class SkGlyphCache_Globals;
|
| @@ -137,6 +137,7 @@ public:
|
| the global cache list (after which the caller should not reference it anymore.
|
| */
|
| static void AttachCache(SkGlyphCache*);
|
| + using AttachCacheFunctor = SkFunctionWrapper<void, SkGlyphCache, AttachCache>;
|
|
|
| /** Detach a strike from the global cache matching the specified descriptor. Once detached,
|
| it can be queried/modified by the current thread, and when finished, be reattached to the
|
| @@ -271,74 +272,40 @@ private:
|
| AuxProcRec* fAuxProcList;
|
| };
|
|
|
| -class SkAutoGlyphCacheBase {
|
| +class SkAutoGlyphCache : public skstd::unique_ptr<SkGlyphCache, SkGlyphCache::AttachCacheFunctor> {
|
| public:
|
| - SkGlyphCache* getCache() const { return fCache; }
|
| -
|
| - void release() {
|
| - if (fCache) {
|
| - SkGlyphCache::AttachCache(fCache);
|
| - fCache = nullptr;
|
| - }
|
| - }
|
| -
|
| -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 SkSurfaceProps* /*surfaceProps*/,
|
| - const SkMatrix* /*matrix*/) {
|
| - fCache = nullptr;
|
| - }
|
| - SkAutoGlyphCacheBase() {
|
| - fCache = nullptr;
|
| - }
|
| - ~SkAutoGlyphCacheBase() {
|
| - if (fCache) {
|
| - SkGlyphCache::AttachCache(fCache);
|
| - }
|
| - }
|
| -
|
| - 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) {}
|
| + /** deprecated: use get() */
|
| + SkGlyphCache* getCache() const { return this->get(); }
|
| +
|
| + SkAutoGlyphCache(SkGlyphCache* cache) : INHERITED(cache) {}
|
| + SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc)
|
| + : INHERITED(SkGlyphCache::DetachCache(typeface, desc))
|
| + {}
|
| + /** deprecated: always enables fake gamma */
|
| SkAutoGlyphCache(const SkPaint& paint,
|
| const SkSurfaceProps* surfaceProps,
|
| - const SkMatrix* matrix) {
|
| - fCache = paint.detachCache(surfaceProps, matrix, false);
|
| - }
|
| -
|
| + const SkMatrix* matrix)
|
| + : INHERITED(paint.detachCache(surfaceProps, SkPaint::FakeGamma::On, matrix))
|
| + {}
|
| + SkAutoGlyphCache(const SkPaint& paint,
|
| + const SkSurfaceProps* surfaceProps,
|
| + SkPaint::FakeGamma fakeGamma,
|
| + const SkMatrix* matrix)
|
| + : INHERITED(paint.detachCache(surfaceProps, fakeGamma, matrix))
|
| + {}
|
| private:
|
| - SkAutoGlyphCache() : SkAutoGlyphCacheBase() {}
|
| + using INHERITED = skstd::unique_ptr<SkGlyphCache, SkGlyphCache::AttachCacheFunctor>;
|
| };
|
| -#define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache)
|
|
|
| -class SkAutoGlyphCacheNoGamma : public SkAutoGlyphCacheBase {
|
| +class SkAutoGlyphCacheNoGamma : public SkAutoGlyphCache {
|
| public:
|
| - SkAutoGlyphCacheNoGamma(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {}
|
| - SkAutoGlyphCacheNoGamma(SkTypeface* typeface, const SkDescriptor* desc) :
|
| - SkAutoGlyphCacheBase(typeface, desc) {}
|
| SkAutoGlyphCacheNoGamma(const SkPaint& paint,
|
| const SkSurfaceProps* surfaceProps,
|
| - const SkMatrix* matrix) {
|
| - fCache = paint.detachCache(surfaceProps, matrix, true);
|
| - }
|
| -
|
| -private:
|
| - SkAutoGlyphCacheNoGamma() : SkAutoGlyphCacheBase() {}
|
| + const SkMatrix* matrix)
|
| + : SkAutoGlyphCache(paint, surfaceProps, SkPaint::FakeGamma::Off, matrix)
|
| + {}
|
| };
|
| +#define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache)
|
| #define SkAutoGlyphCacheNoGamma(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCacheNoGamma)
|
|
|
| #endif
|
|
|