Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 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 * | 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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 216 const SegmentedFontData* segmentedFontData = static_cast<const S egmentedFontData*>(fontData); | 216 const SegmentedFontData* segmentedFontData = static_cast<const S egmentedFontData*>(fontData); |
| 217 for (int i = segmentedFontData->numRanges() - 1; i >= 0; i--) { | 217 for (int i = segmentedFontData->numRanges() - 1; i >= 0; i--) { |
| 218 const FontDataRange& range = segmentedFontData->rangeAt(i); | 218 const FontDataRange& range = segmentedFontData->rangeAt(i); |
| 219 // all this casting is to ensure all the parameters to min a nd max have the same type, | 219 // all this casting is to ensure all the parameters to min a nd max have the same type, |
| 220 // to avoid ambiguous template parameter errors on Windows | 220 // to avoid ambiguous template parameter errors on Windows |
| 221 int from = max(0, static_cast<int>(range.from()) - static_ca st<int>(start)); | 221 int from = max(0, static_cast<int>(range.from()) - static_ca st<int>(start)); |
| 222 int to = 1 + min(static_cast<int>(range.to()) - static_cast< int>(start), static_cast<int>(GlyphPage::size) - 1); | 222 int to = 1 + min(static_cast<int>(range.to()) - static_cast< int>(start), static_cast<int>(GlyphPage::size) - 1); |
| 223 if (from >= static_cast<int>(GlyphPage::size) || to <= 0) | 223 if (from >= static_cast<int>(GlyphPage::size) || to <= 0) |
| 224 continue; | 224 continue; |
| 225 | 225 |
| 226 // If this is a custom font needs to be loaded, kick off | 226 // If this is a custom font needs to be loaded, do not fill |
| 227 // the load here, and do not fill the page so that | 227 // the page so that font fallback is used while loading. |
| 228 // font fallback is used while loading. | |
| 229 RefPtr<CustomFontData> customData = range.fontData()->custom FontData(); | 228 RefPtr<CustomFontData> customData = range.fontData()->custom FontData(); |
| 230 if (customData && customData->isLoadingFallback()) { | 229 if (customData && customData->isLoadingFallback()) { |
| 231 customData->beginLoadIfNeeded(); | 230 for (int j = from; j < to; j++) { |
|
eae
2014/04/23 18:38:39
Here and elsewhere shouldn't j (and from) be unsig
Kunihiko Sakamoto
2014/04/24 01:49:24
I'd prefer to keep them int, as calculation of |fr
| |
| 231 m_page->setCustomFontToLoad(j, customData.get()); | |
| 232 haveGlyphs = true; | |
| 233 } | |
| 232 continue; | 234 continue; |
| 233 } | 235 } |
| 234 | 236 |
| 235 haveGlyphs |= fill(m_page.get(), from, to - from, buffer + f rom * (start < 0x10000 ? 1 : 2), (to - from) * (start < 0x10000 ? 1 : 2), range. fontData().get()); | 237 haveGlyphs |= fill(m_page.get(), from, to - from, buffer + f rom * (start < 0x10000 ? 1 : 2), (to - from) * (start < 0x10000 ? 1 : 2), range. fontData().get()); |
| 236 } | 238 } |
| 237 } | 239 } |
| 238 | 240 |
| 239 if (!haveGlyphs) | 241 if (!haveGlyphs) |
| 240 m_page = nullptr; | 242 m_page = nullptr; |
| 241 } else if (parentPage && parentPage->owner() != m_parent) { | 243 } else if (parentPage && parentPage->owner() != m_parent) { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 265 // parent page. | 267 // parent page. |
| 266 m_page = parentPage; | 268 m_page = parentPage; |
| 267 } else { | 269 } else { |
| 268 // Combine the parent's glyphs and ours to form a new more compl ete page. | 270 // Combine the parent's glyphs and ours to form a new more compl ete page. |
| 269 m_page = GlyphPage::createForMixedFontData(this); | 271 m_page = GlyphPage::createForMixedFontData(this); |
| 270 | 272 |
| 271 // Overlay the parent page on the fallback page. Check if the fa llback font | 273 // Overlay the parent page on the fallback page. Check if the fa llback font |
| 272 // has added anything. | 274 // has added anything. |
| 273 bool newGlyphs = false; | 275 bool newGlyphs = false; |
| 274 for (unsigned i = 0; i < GlyphPage::size; i++) { | 276 for (unsigned i = 0; i < GlyphPage::size; i++) { |
| 275 if (parentPage->glyphAt(i)) | 277 if (parentPage->glyphAt(i)) { |
| 276 m_page->setGlyphDataForIndex(i, parentPage->glyphDataFor Index(i)); | 278 m_page->setGlyphDataForIndex(i, parentPage->glyphDataFor Index(i)); |
| 277 else if (fallbackPage->glyphAt(i)) { | 279 } else if (fallbackPage->glyphAt(i)) { |
| 278 m_page->setGlyphDataForIndex(i, fallbackPage->glyphDataF orIndex(i)); | 280 m_page->setGlyphDataForIndex(i, fallbackPage->glyphDataF orIndex(i)); |
| 279 newGlyphs = true; | 281 newGlyphs = true; |
| 280 } | 282 } |
| 283 | |
| 284 if (parentPage->customFontToLoadAt(i)) { | |
| 285 m_page->setCustomFontToLoad(i, parentPage->customFontToL oadAt(i)); | |
| 286 } else if (fallbackPage->customFontToLoadAt(i) && !parentPag e->glyphAt(i)) { | |
| 287 m_page->setCustomFontToLoad(i, fallbackPage->customFontT oLoadAt(i)); | |
| 288 newGlyphs = true; | |
| 289 } | |
| 281 } | 290 } |
| 282 | 291 |
| 283 if (!newGlyphs) | 292 if (!newGlyphs) |
| 284 // We didn't override anything, so our override is just the parent page. | 293 // We didn't override anything, so our override is just the parent page. |
| 285 m_page = parentPage; | 294 m_page = parentPage; |
| 286 } | 295 } |
| 287 } | 296 } |
| 288 } else { | 297 } else { |
| 289 // System fallback. Initialized with the parent's page here, as individu al | 298 // System fallback. Initialized with the parent's page here, as individu al |
| 290 // entries may use different fonts depending on character. If the Font | 299 // entries may use different fonts depending on character. If the Font |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 printf("\nPage %d:\n", it->key); | 414 printf("\nPage %d:\n", it->key); |
| 406 showGlyphPageTree(it->key); | 415 showGlyphPageTree(it->key); |
| 407 } | 416 } |
| 408 } | 417 } |
| 409 | 418 |
| 410 void showGlyphPageTree(unsigned pageNumber) | 419 void showGlyphPageTree(unsigned pageNumber) |
| 411 { | 420 { |
| 412 WebCore::GlyphPageTreeNode::getRoot(pageNumber)->showSubtree(); | 421 WebCore::GlyphPageTreeNode::getRoot(pageNumber)->showSubtree(); |
| 413 } | 422 } |
| 414 #endif | 423 #endif |
| OLD | NEW |