| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #ifndef SkGlyphCache_DEFINED | 10 #ifndef SkGlyphCache_DEFINED |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 void* fData; | 237 void* fData; |
| 238 }; | 238 }; |
| 239 AuxProcRec* fAuxProcList; | 239 AuxProcRec* fAuxProcList; |
| 240 void invokeAndRemoveAuxProcs(); | 240 void invokeAndRemoveAuxProcs(); |
| 241 | 241 |
| 242 inline static SkGlyphCache* FindTail(SkGlyphCache* head); | 242 inline static SkGlyphCache* FindTail(SkGlyphCache* head); |
| 243 | 243 |
| 244 friend class SkGlyphCache_Globals; | 244 friend class SkGlyphCache_Globals; |
| 245 }; | 245 }; |
| 246 | 246 |
| 247 class SkAutoGlyphCacheBase { | 247 class SkAutoGlyphCache { |
| 248 public: | 248 public: |
| 249 SkAutoGlyphCache(SkGlyphCache* cache) : fCache(cache) {} |
| 250 SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) { |
| 251 fCache = SkGlyphCache::DetachCache(typeface, desc); |
| 252 } |
| 253 SkAutoGlyphCache(const SkPaint& paint, |
| 254 const SkDeviceProperties* deviceProperties, |
| 255 const SkMatrix* matrix) { |
| 256 fCache = paint.detachCache(deviceProperties, matrix); |
| 257 } |
| 258 ~SkAutoGlyphCache() { |
| 259 if (fCache) { |
| 260 SkGlyphCache::AttachCache(fCache); |
| 261 } |
| 262 } |
| 263 |
| 249 SkGlyphCache* getCache() const { return fCache; } | 264 SkGlyphCache* getCache() const { return fCache; } |
| 250 | 265 |
| 251 void release() { | 266 void release() { |
| 252 if (fCache) { | 267 if (fCache) { |
| 253 SkGlyphCache::AttachCache(fCache); | 268 SkGlyphCache::AttachCache(fCache); |
| 254 fCache = NULL; | 269 fCache = NULL; |
| 255 } | 270 } |
| 256 } | 271 } |
| 257 | 272 |
| 258 protected: | 273 private: |
| 259 // Hide the constructors so we can't create one of these directly. | |
| 260 // Create SkAutoGlyphCache or SkAutoGlyphCacheNoCache instead. | |
| 261 SkAutoGlyphCacheBase(SkGlyphCache* cache) : fCache(cache) {} | |
| 262 SkAutoGlyphCacheBase(SkTypeface* typeface, const SkDescriptor* desc) { | |
| 263 fCache = SkGlyphCache::DetachCache(typeface, desc); | |
| 264 } | |
| 265 SkAutoGlyphCacheBase(const SkPaint& paint, | |
| 266 const SkDeviceProperties* deviceProperties, | |
| 267 const SkMatrix* matrix) { | |
| 268 fCache = NULL; | |
| 269 } | |
| 270 SkAutoGlyphCacheBase() {} | |
| 271 | |
| 272 SkGlyphCache* fCache; | 274 SkGlyphCache* fCache; |
| 273 | 275 |
| 274 private: | |
| 275 static bool DetachProc(const SkGlyphCache*, void*); | 276 static bool DetachProc(const SkGlyphCache*, void*); |
| 276 }; | 277 }; |
| 277 | |
| 278 class SkAutoGlyphCache : public SkAutoGlyphCacheBase { | |
| 279 public: | |
| 280 SkAutoGlyphCache(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {} | |
| 281 SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) : | |
| 282 SkAutoGlyphCacheBase(typeface, desc) {} | |
| 283 SkAutoGlyphCache(const SkPaint& paint, | |
| 284 const SkDeviceProperties* deviceProperties, | |
| 285 const SkMatrix* matrix) { | |
| 286 fCache = paint.detachCache(deviceProperties, matrix, false); | |
| 287 } | |
| 288 SkAutoGlyphCache() : SkAutoGlyphCacheBase() { | |
| 289 if (fCache) { | |
| 290 SkGlyphCache::AttachCache(fCache); | |
| 291 } | |
| 292 } | |
| 293 }; | |
| 294 #define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache) | 278 #define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache) |
| 295 | 279 |
| 296 class SkAutoGlyphCacheNoGamma : public SkAutoGlyphCacheBase { | |
| 297 public: | |
| 298 SkAutoGlyphCacheNoGamma(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {
} | |
| 299 SkAutoGlyphCacheNoGamma(SkTypeface* typeface, const SkDescriptor* desc) : | |
| 300 SkAutoGlyphCacheBase(typeface, desc) {} | |
| 301 SkAutoGlyphCacheNoGamma(const SkPaint& paint, | |
| 302 const SkDeviceProperties* deviceProperties, | |
| 303 const SkMatrix* matrix) { | |
| 304 fCache = paint.detachCache(deviceProperties, matrix, true); | |
| 305 } | |
| 306 SkAutoGlyphCacheNoGamma() : SkAutoGlyphCacheBase() { | |
| 307 if (fCache) { | |
| 308 SkGlyphCache::AttachCache(fCache); | |
| 309 } | |
| 310 } | |
| 311 }; | |
| 312 #define SkAutoGlyphCacheNoGamma(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCacheNoGamm
a) | |
| 313 | |
| 314 | |
| 315 #endif | 280 #endif |
| OLD | NEW |