| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/fonts/FontFallbackIterator.h" | 5 #include "platform/fonts/FontFallbackIterator.h" |
| 6 | 6 |
| 7 #include "platform/fonts/FontCache.h" | 7 #include "platform/fonts/FontCache.h" |
| 8 #include "platform/fonts/FontDescription.h" | 8 #include "platform/fonts/FontDescription.h" |
| 9 #include "platform/fonts/FontFallbackList.h" | 9 #include "platform/fonts/FontFallbackList.h" |
| 10 #include "platform/fonts/SegmentedFontData.h" | 10 #include "platform/fonts/SegmentedFontData.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 fallback_stage_ = kOutOfLuck; | 116 fallback_stage_ = kOutOfLuck; |
| 117 RefPtr<SimpleFontData> last_resort = | 117 RefPtr<SimpleFontData> last_resort = |
| 118 font_cache->GetLastResortFallbackFont(font_description_).Get(); | 118 font_cache->GetLastResortFallbackFont(font_description_).Get(); |
| 119 if (!last_resort) | 119 if (!last_resort) |
| 120 FontCache::CrashWithFontInfo(&font_description_); | 120 FontCache::CrashWithFontInfo(&font_description_); |
| 121 // Don't skip the LastResort font in uniqueOrNext() since HarfBuzzShaper | 121 // Don't skip the LastResort font in uniqueOrNext() since HarfBuzzShaper |
| 122 // needs to use this one to place missing glyph boxes. | 122 // needs to use this one to place missing glyph boxes. |
| 123 return AdoptRef(new FontDataForRangeSetFromCache(last_resort)); | 123 return AdoptRef(new FontDataForRangeSetFromCache(last_resort)); |
| 124 } | 124 } |
| 125 | 125 |
| 126 ASSERT(fallback_stage_ == kFontGroupFonts || | 126 DCHECK(fallback_stage_ == kFontGroupFonts || |
| 127 fallback_stage_ == kSegmentedFace); | 127 fallback_stage_ == kSegmentedFace); |
| 128 const FontData* font_data = font_fallback_list_->FontDataAt( | 128 const FontData* font_data = font_fallback_list_->FontDataAt( |
| 129 font_description_, current_font_data_index_); | 129 font_description_, current_font_data_index_); |
| 130 | 130 |
| 131 if (!font_data) { | 131 if (!font_data) { |
| 132 // If there is no fontData coming from the fallback list, it means | 132 // If there is no fontData coming from the fallback list, it means |
| 133 // we are now looking at system fonts, either for prioritized symbol | 133 // we are now looking at system fonts, either for prioritized symbol |
| 134 // or emoji fonts or by calling system fallback API. | 134 // or emoji fonts or by calling system fallback API. |
| 135 fallback_stage_ = IsNonTextFallbackPriority(font_fallback_priority_) | 135 fallback_stage_ = IsNonTextFallbackPriority(font_fallback_priority_) |
| 136 ? kFallbackPriorityFonts | 136 ? kFallbackPriorityFonts |
| (...skipping 19 matching lines...) Expand all Loading... |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Iterate over ranges of a segmented font below. | 158 // Iterate over ranges of a segmented font below. |
| 159 | 159 |
| 160 const SegmentedFontData* segmented = ToSegmentedFontData(font_data); | 160 const SegmentedFontData* segmented = ToSegmentedFontData(font_data); |
| 161 if (fallback_stage_ != kSegmentedFace) { | 161 if (fallback_stage_ != kSegmentedFace) { |
| 162 segmented_face_index_ = 0; | 162 segmented_face_index_ = 0; |
| 163 fallback_stage_ = kSegmentedFace; | 163 fallback_stage_ = kSegmentedFace; |
| 164 } | 164 } |
| 165 | 165 |
| 166 ASSERT(segmented_face_index_ < segmented->NumFaces()); | 166 DCHECK_LT(segmented_face_index_, segmented->NumFaces()); |
| 167 RefPtr<FontDataForRangeSet> current_segmented_face = | 167 RefPtr<FontDataForRangeSet> current_segmented_face = |
| 168 segmented->FaceAt(segmented_face_index_); | 168 segmented->FaceAt(segmented_face_index_); |
| 169 segmented_face_index_++; | 169 segmented_face_index_++; |
| 170 | 170 |
| 171 if (segmented_face_index_ == segmented->NumFaces()) { | 171 if (segmented_face_index_ == segmented->NumFaces()) { |
| 172 // Switch from iterating over a segmented face to the next family from | 172 // Switch from iterating over a segmented face to the next family from |
| 173 // the font-family: group of fonts. | 173 // the font-family: group of fonts. |
| 174 fallback_stage_ = kFontGroupFonts; | 174 fallback_stage_ = kFontGroupFonts; |
| 175 current_font_data_index_++; | 175 current_font_data_index_++; |
| 176 } | 176 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 | 236 |
| 237 if (!hint || previously_asked_for_hint_.Contains(hint)) | 237 if (!hint || previously_asked_for_hint_.Contains(hint)) |
| 238 return nullptr; | 238 return nullptr; |
| 239 previously_asked_for_hint_.insert(hint); | 239 previously_asked_for_hint_.insert(hint); |
| 240 return font_cache->FallbackFontForCharacter( | 240 return font_cache->FallbackFontForCharacter( |
| 241 font_description_, hint, | 241 font_description_, hint, |
| 242 font_fallback_list_->PrimarySimpleFontData(font_description_)); | 242 font_fallback_list_->PrimarySimpleFontData(font_description_)); |
| 243 } | 243 } |
| 244 | 244 |
| 245 } // namespace blink | 245 } // namespace blink |
| OLD | NEW |