OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 const FontDescription& fontDescription) { | 96 const FontDescription& fontDescription) { |
97 if (!isValid()) | 97 if (!isValid()) |
98 return nullptr; | 98 return nullptr; |
99 | 99 |
100 FontTraits desiredTraits = fontDescription.traits(); | 100 FontTraits desiredTraits = fontDescription.traits(); |
101 FontCacheKey key = | 101 FontCacheKey key = |
102 fontDescription.cacheKey(FontFaceCreationParams(), desiredTraits); | 102 fontDescription.cacheKey(FontFaceCreationParams(), desiredTraits); |
103 | 103 |
104 RefPtr<SegmentedFontData>& fontData = | 104 RefPtr<SegmentedFontData>& fontData = |
105 m_fontDataTable.add(key, nullptr).storedValue->value; | 105 m_fontDataTable.add(key, nullptr).storedValue->value; |
106 if (fontData && fontData->numFaces()) | 106 if (fontData && fontData->numFaces()) { |
107 return fontData; // No release, we have a reference to an object in the cac
he which should retain the ref count it has. | 107 // No release, we have a reference to an object in the cache which should |
| 108 // retain the ref count it has. |
| 109 return fontData; |
| 110 } |
108 | 111 |
109 if (!fontData) | 112 if (!fontData) |
110 fontData = SegmentedFontData::create(); | 113 fontData = SegmentedFontData::create(); |
111 | 114 |
112 FontDescription requestedFontDescription(fontDescription); | 115 FontDescription requestedFontDescription(fontDescription); |
113 requestedFontDescription.setTraits(m_traits); | 116 requestedFontDescription.setTraits(m_traits); |
114 requestedFontDescription.setSyntheticBold(m_traits.weight() < FontWeight600 && | 117 requestedFontDescription.setSyntheticBold(m_traits.weight() < FontWeight600 && |
115 desiredTraits.weight() >= | 118 desiredTraits.weight() >= |
116 FontWeight600); | 119 FontWeight600); |
117 requestedFontDescription.setSyntheticItalic( | 120 requestedFontDescription.setSyntheticItalic( |
118 m_traits.style() == FontStyleNormal && | 121 m_traits.style() == FontStyleNormal && |
119 desiredTraits.style() == FontStyleItalic); | 122 desiredTraits.style() == FontStyleItalic); |
120 | 123 |
121 for (FontFaceList::reverse_iterator it = m_fontFaces.rbegin(); | 124 for (FontFaceList::reverse_iterator it = m_fontFaces.rbegin(); |
122 it != m_fontFaces.rend(); ++it) { | 125 it != m_fontFaces.rend(); ++it) { |
123 if (!(*it)->cssFontFace()->isValid()) | 126 if (!(*it)->cssFontFace()->isValid()) |
124 continue; | 127 continue; |
125 if (RefPtr<SimpleFontData> faceFontData = | 128 if (RefPtr<SimpleFontData> faceFontData = |
126 (*it)->cssFontFace()->getFontData(requestedFontDescription)) { | 129 (*it)->cssFontFace()->getFontData(requestedFontDescription)) { |
127 ASSERT(!faceFontData->isSegmented()); | 130 ASSERT(!faceFontData->isSegmented()); |
128 if (faceFontData->isCustomFont()) | 131 if (faceFontData->isCustomFont()) |
129 fontData->appendFace(adoptRef(new FontDataForRangeSet( | 132 fontData->appendFace(adoptRef(new FontDataForRangeSet( |
130 faceFontData.release(), (*it)->cssFontFace()->ranges()))); | 133 faceFontData.release(), (*it)->cssFontFace()->ranges()))); |
131 else | 134 else |
132 fontData->appendFace(adoptRef(new FontDataForRangeSetFromCache( | 135 fontData->appendFace(adoptRef(new FontDataForRangeSetFromCache( |
133 faceFontData.release(), (*it)->cssFontFace()->ranges()))); | 136 faceFontData.release(), (*it)->cssFontFace()->ranges()))); |
134 } | 137 } |
135 } | 138 } |
136 if (fontData->numFaces()) | 139 if (fontData->numFaces()) { |
137 return fontData; // No release, we have a reference to an object in the cac
he which should retain the ref count it has. | 140 // No release, we have a reference to an object in the cache which should |
| 141 // retain the ref count it has. |
| 142 return fontData; |
| 143 } |
138 | 144 |
139 return nullptr; | 145 return nullptr; |
140 } | 146 } |
141 | 147 |
142 void CSSSegmentedFontFace::willUseFontData( | 148 void CSSSegmentedFontFace::willUseFontData( |
143 const FontDescription& fontDescription, | 149 const FontDescription& fontDescription, |
144 const String& text) { | 150 const String& text) { |
145 m_approximateCharacterCount += text.length(); | 151 m_approximateCharacterCount += text.length(); |
146 for (FontFaceList::reverse_iterator it = m_fontFaces.rbegin(); | 152 for (FontFaceList::reverse_iterator it = m_fontFaces.rbegin(); |
147 it != m_fontFaces.rend(); ++it) { | 153 it != m_fontFaces.rend(); ++it) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 faces.append(fontFace); | 188 faces.append(fontFace); |
183 } | 189 } |
184 } | 190 } |
185 | 191 |
186 DEFINE_TRACE(CSSSegmentedFontFace) { | 192 DEFINE_TRACE(CSSSegmentedFontFace) { |
187 visitor->trace(m_fontSelector); | 193 visitor->trace(m_fontSelector); |
188 visitor->trace(m_fontFaces); | 194 visitor->trace(m_fontFaces); |
189 } | 195 } |
190 | 196 |
191 } // namespace blink | 197 } // namespace blink |
OLD | NEW |