OLD | NEW |
| (Empty) |
1 | |
2 /* | |
3 * Copyright 2010 Google Inc. | |
4 * | |
5 * Use of this source code is governed by a BSD-style license that can be | |
6 * found in the LICENSE file. | |
7 */ | |
8 | |
9 | |
10 | |
11 #ifndef GrTextStrike_impl_DEFINED | |
12 #define GrTextStrike_impl_DEFINED | |
13 | |
14 void GrFontCache::detachStrikeFromList(GrTextStrike* strike) { | |
15 if (strike->fPrev) { | |
16 SkASSERT(fHead != strike); | |
17 strike->fPrev->fNext = strike->fNext; | |
18 } else { | |
19 SkASSERT(fHead == strike); | |
20 fHead = strike->fNext; | |
21 } | |
22 | |
23 if (strike->fNext) { | |
24 SkASSERT(fTail != strike); | |
25 strike->fNext->fPrev = strike->fPrev; | |
26 } else { | |
27 SkASSERT(fTail == strike); | |
28 fTail = strike->fPrev; | |
29 } | |
30 } | |
31 | |
32 GrTextStrike* GrFontCache::getStrike(GrFontScaler* scaler, bool useDistanceField
) { | |
33 this->validate(); | |
34 | |
35 GrTextStrike* strike = fCache.find(*(scaler->getKey())); | |
36 if (NULL == strike) { | |
37 strike = this->generateStrike(scaler); | |
38 } else if (strike->fPrev) { | |
39 // Need to put the strike at the head of its dllist, since that is how | |
40 // we age the strikes for purging (we purge from the back of the list) | |
41 this->detachStrikeFromList(strike); | |
42 // attach at the head | |
43 fHead->fPrev = strike; | |
44 strike->fNext = fHead; | |
45 strike->fPrev = NULL; | |
46 fHead = strike; | |
47 } | |
48 strike->fUseDistanceField = useDistanceField; | |
49 this->validate(); | |
50 return strike; | |
51 } | |
52 | |
53 /////////////////////////////////////////////////////////////////////////////// | |
54 | |
55 GrGlyph* GrTextStrike::getGlyph(GrGlyph::PackedID packed, | |
56 GrFontScaler* scaler) { | |
57 GrGlyph* glyph = fCache.find(packed); | |
58 if (NULL == glyph) { | |
59 glyph = this->generateGlyph(packed, scaler); | |
60 } | |
61 return glyph; | |
62 } | |
63 | |
64 #endif | |
OLD | NEW |