OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2006 Apple Computer, 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 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 16 matching lines...) Expand all Loading... |
27 */ | 27 */ |
28 | 28 |
29 #include "config.h" | 29 #include "config.h" |
30 #include "platform/fonts/FontFallbackList.h" | 30 #include "platform/fonts/FontFallbackList.h" |
31 | 31 |
32 #include "platform/FontFamilyNames.h" | 32 #include "platform/FontFamilyNames.h" |
33 #include "platform/fonts/FontCache.h" | 33 #include "platform/fonts/FontCache.h" |
34 #include "platform/fonts/FontDescription.h" | 34 #include "platform/fonts/FontDescription.h" |
35 #include "platform/fonts/FontFamily.h" | 35 #include "platform/fonts/FontFamily.h" |
36 #include "platform/fonts/SegmentedFontData.h" | 36 #include "platform/fonts/SegmentedFontData.h" |
| 37 #include "wtf/unicode/CharacterNames.h" |
37 | 38 |
38 namespace blink { | 39 namespace blink { |
39 | 40 |
40 FontFallbackList::FontFallbackList() | 41 FontFallbackList::FontFallbackList() |
41 : m_pageZero(0) | 42 : m_pageZero(0) |
42 , m_cachedPrimarySimpleFontData(0) | 43 , m_cachedPrimarySimpleFontData(0) |
43 , m_fontSelector(nullptr) | 44 , m_fontSelector(nullptr) |
44 , m_fontSelectorVersion(0) | 45 , m_fontSelectorVersion(0) |
45 , m_familyIndex(0) | 46 , m_familyIndex(0) |
46 , m_generation(FontCache::fontCache()->generation()) | 47 , m_generation(FontCache::fontCache()->generation()) |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 const SimpleFontData* FontFallbackList::determinePrimarySimpleFontData(const Fon
tDescription& fontDescription) const | 134 const SimpleFontData* FontFallbackList::determinePrimarySimpleFontData(const Fon
tDescription& fontDescription) const |
134 { | 135 { |
135 bool shouldLoadCustomFont = true; | 136 bool shouldLoadCustomFont = true; |
136 | 137 |
137 for (unsigned fontIndex = 0; ; ++fontIndex) { | 138 for (unsigned fontIndex = 0; ; ++fontIndex) { |
138 const FontData* fontData = fontDataAt(fontDescription, fontIndex); | 139 const FontData* fontData = fontDataAt(fontDescription, fontIndex); |
139 if (!fontData) { | 140 if (!fontData) { |
140 // All fonts are custom fonts and are loading. Return the first Font
Data. | 141 // All fonts are custom fonts and are loading. Return the first Font
Data. |
141 fontData = fontDataAt(fontDescription, 0); | 142 fontData = fontDataAt(fontDescription, 0); |
142 if (fontData) | 143 if (fontData) |
143 return fontData->fontDataForCharacter(' '); | 144 return fontData->fontDataForCharacter(space); |
144 | 145 |
145 SimpleFontData* lastResortFallback = FontCache::fontCache()->getLast
ResortFallbackFont(fontDescription).get(); | 146 SimpleFontData* lastResortFallback = FontCache::fontCache()->getLast
ResortFallbackFont(fontDescription).get(); |
146 ASSERT(lastResortFallback); | 147 ASSERT(lastResortFallback); |
147 return lastResortFallback; | 148 return lastResortFallback; |
148 } | 149 } |
149 | 150 |
150 if (fontData->isSegmented() && !toSegmentedFontData(fontData)->containsC
haracter(' ')) | 151 if (fontData->isSegmented() && !toSegmentedFontData(fontData)->containsC
haracter(space)) |
151 continue; | 152 continue; |
152 | 153 |
153 const SimpleFontData* fontDataForSpace = fontData->fontDataForCharacter(
' '); | 154 const SimpleFontData* fontDataForSpace = fontData->fontDataForCharacter(
space); |
154 ASSERT(fontDataForSpace); | 155 ASSERT(fontDataForSpace); |
155 | 156 |
156 // When a custom font is loading, we should use the correct fallback fon
t to layout the text. | 157 // When a custom font is loading, we should use the correct fallback fon
t to layout the text. |
157 // Here skip the temporary font for the loading custom font which may no
t act as the correct fallback font. | 158 // Here skip the temporary font for the loading custom font which may no
t act as the correct fallback font. |
158 if (!fontDataForSpace->isLoadingFallback()) | 159 if (!fontDataForSpace->isLoadingFallback()) |
159 return fontDataForSpace; | 160 return fontDataForSpace; |
160 | 161 |
161 if (fontData->isSegmented()) { | 162 if (fontData->isSegmented()) { |
162 const SegmentedFontData* segmented = toSegmentedFontData(fontData); | 163 const SegmentedFontData* segmented = toSegmentedFontData(fontData); |
163 for (unsigned i = 0; i < segmented->numRanges(); i++) { | 164 for (unsigned i = 0; i < segmented->numRanges(); i++) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 RefPtr<FontData> result = getFontData(fontDescription, m_familyIndex); | 238 RefPtr<FontData> result = getFontData(fontDescription, m_familyIndex); |
238 if (result) { | 239 if (result) { |
239 m_fontList.append(result); | 240 m_fontList.append(result); |
240 if (result->isLoadingFallback()) | 241 if (result->isLoadingFallback()) |
241 m_hasLoadingFallback = true; | 242 m_hasLoadingFallback = true; |
242 } | 243 } |
243 return result.get(); | 244 return result.get(); |
244 } | 245 } |
245 | 246 |
246 } // namespace blink | 247 } // namespace blink |
OLD | NEW |