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 SkAutoGlyphCache { | 247 class SkAutoGlyphCacheBase { |
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 | |
264 SkGlyphCache* getCache() const { return fCache; } | 249 SkGlyphCache* getCache() const { return fCache; } |
265 | 250 |
266 void release() { | 251 void release() { |
267 if (fCache) { | 252 if (fCache) { |
268 SkGlyphCache::AttachCache(fCache); | 253 SkGlyphCache::AttachCache(fCache); |
269 fCache = NULL; | 254 fCache = NULL; |
270 } | 255 } |
271 } | 256 } |
272 | 257 |
273 private: | 258 protected: |
| 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 fCache = NULL; |
| 272 } |
| 273 ~SkAutoGlyphCacheBase() { |
| 274 if (fCache) { |
| 275 SkGlyphCache::AttachCache(fCache); |
| 276 } |
| 277 } |
| 278 |
274 SkGlyphCache* fCache; | 279 SkGlyphCache* fCache; |
275 | 280 |
| 281 private: |
276 static bool DetachProc(const SkGlyphCache*, void*); | 282 static bool DetachProc(const SkGlyphCache*, void*); |
277 }; | 283 }; |
| 284 |
| 285 class SkAutoGlyphCache : public SkAutoGlyphCacheBase { |
| 286 public: |
| 287 SkAutoGlyphCache(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {} |
| 288 SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) : |
| 289 SkAutoGlyphCacheBase(typeface, desc) {} |
| 290 SkAutoGlyphCache(const SkPaint& paint, |
| 291 const SkDeviceProperties* deviceProperties, |
| 292 const SkMatrix* matrix) { |
| 293 fCache = paint.detachCache(deviceProperties, matrix, false); |
| 294 } |
| 295 |
| 296 private: |
| 297 SkAutoGlyphCache() : SkAutoGlyphCacheBase() {} |
| 298 }; |
278 #define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache) | 299 #define SkAutoGlyphCache(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCache) |
279 | 300 |
| 301 class SkAutoGlyphCacheNoGamma : public SkAutoGlyphCacheBase { |
| 302 public: |
| 303 SkAutoGlyphCacheNoGamma(SkGlyphCache* cache) : SkAutoGlyphCacheBase(cache) {
} |
| 304 SkAutoGlyphCacheNoGamma(SkTypeface* typeface, const SkDescriptor* desc) : |
| 305 SkAutoGlyphCacheBase(typeface, desc) {} |
| 306 SkAutoGlyphCacheNoGamma(const SkPaint& paint, |
| 307 const SkDeviceProperties* deviceProperties, |
| 308 const SkMatrix* matrix) { |
| 309 fCache = paint.detachCache(deviceProperties, matrix, true); |
| 310 } |
| 311 |
| 312 private: |
| 313 SkAutoGlyphCacheNoGamma() : SkAutoGlyphCacheBase() {} |
| 314 }; |
| 315 #define SkAutoGlyphCacheNoGamma(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCacheNoGamm
a) |
| 316 |
280 #endif | 317 #endif |
OLD | NEW |