OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 } | 312 } |
313 return true; | 313 return true; |
314 } | 314 } |
315 | 315 |
316 bool FontFace::setFamilyValue(CSSValueList* familyList) | 316 bool FontFace::setFamilyValue(CSSValueList* familyList) |
317 { | 317 { |
318 // The font-family descriptor has to have exactly one family name. | 318 // The font-family descriptor has to have exactly one family name. |
319 if (familyList->length() != 1) | 319 if (familyList->length() != 1) |
320 return false; | 320 return false; |
321 | 321 |
322 CSSPrimitiveValue* familyValue = toCSSPrimitiveValue(familyList->itemWithout
BoundsCheck(0)); | 322 CSSPrimitiveValue* familyValue = toCSSPrimitiveValue(familyList->item(0)); |
323 AtomicString family; | 323 AtomicString family; |
324 if (familyValue->isString()) { | 324 if (familyValue->isString()) { |
325 family = AtomicString(familyValue->getStringValue()); | 325 family = AtomicString(familyValue->getStringValue()); |
326 } else if (familyValue->isValueID()) { | 326 } else if (familyValue->isValueID()) { |
327 // We need to use the raw text for all the generic family types, since @
font-face is a way of actually | 327 // We need to use the raw text for all the generic family types, since @
font-face is a way of actually |
328 // defining what font to use for those types. | 328 // defining what font to use for those types. |
329 switch (familyValue->getValueID()) { | 329 switch (familyValue->getValueID()) { |
330 case CSSValueSerif: | 330 case CSSValueSerif: |
331 family = FontFamilyNames::webkit_serif; | 331 family = FontFamilyNames::webkit_serif; |
332 break; | 332 break; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 } else if (!fontVariant->isValueList()) { | 508 } else if (!fontVariant->isValueList()) { |
509 return 0; | 509 return 0; |
510 } | 510 } |
511 | 511 |
512 CSSValueList* variantList = toCSSValueList(fontVariant.get()); | 512 CSSValueList* variantList = toCSSValueList(fontVariant.get()); |
513 unsigned numVariants = variantList->length(); | 513 unsigned numVariants = variantList->length(); |
514 if (!numVariants) | 514 if (!numVariants) |
515 return 0; | 515 return 0; |
516 | 516 |
517 for (unsigned i = 0; i < numVariants; ++i) { | 517 for (unsigned i = 0; i < numVariants; ++i) { |
518 switch (toCSSPrimitiveValue(variantList->itemWithoutBoundsCheck(i))-
>getValueID()) { | 518 switch (toCSSPrimitiveValue(variantList->item(i))->getValueID()) { |
519 case CSSValueNormal: | 519 case CSSValueNormal: |
520 variant = FontVariantNormal; | 520 variant = FontVariantNormal; |
521 break; | 521 break; |
522 case CSSValueSmallCaps: | 522 case CSSValueSmallCaps: |
523 variant = FontVariantSmallCaps; | 523 variant = FontVariantSmallCaps; |
524 break; | 524 break; |
525 default: | 525 default: |
526 break; | 526 break; |
527 } | 527 } |
528 } | 528 } |
529 } | 529 } |
530 | 530 |
531 return FontTraits(style, variant, weight, FontStretchNormal); | 531 return FontTraits(style, variant, weight, FontStretchNormal); |
532 } | 532 } |
533 | 533 |
534 static PassOwnPtrWillBeRawPtr<CSSFontFace> createCSSFontFace(FontFace* fontFace,
CSSValue* unicodeRange) | 534 static PassOwnPtrWillBeRawPtr<CSSFontFace> createCSSFontFace(FontFace* fontFace,
CSSValue* unicodeRange) |
535 { | 535 { |
536 Vector<CSSFontFace::UnicodeRange> ranges; | 536 Vector<CSSFontFace::UnicodeRange> ranges; |
537 if (CSSValueList* rangeList = toCSSValueList(unicodeRange)) { | 537 if (CSSValueList* rangeList = toCSSValueList(unicodeRange)) { |
538 unsigned numRanges = rangeList->length(); | 538 unsigned numRanges = rangeList->length(); |
539 for (unsigned i = 0; i < numRanges; i++) { | 539 for (unsigned i = 0; i < numRanges; i++) { |
540 CSSUnicodeRangeValue* range = toCSSUnicodeRangeValue(rangeList->item
WithoutBoundsCheck(i)); | 540 CSSUnicodeRangeValue* range = toCSSUnicodeRangeValue(rangeList->item
(i)); |
541 ranges.append(CSSFontFace::UnicodeRange(range->from(), range->to()))
; | 541 ranges.append(CSSFontFace::UnicodeRange(range->from(), range->to()))
; |
542 } | 542 } |
543 } | 543 } |
544 | 544 |
545 return adoptPtrWillBeNoop(new CSSFontFace(fontFace, ranges)); | 545 return adoptPtrWillBeNoop(new CSSFontFace(fontFace, ranges)); |
546 } | 546 } |
547 | 547 |
548 void FontFace::initCSSFontFace(Document* document, PassRefPtrWillBeRawPtr<CSSVal
ue> src) | 548 void FontFace::initCSSFontFace(Document* document, PassRefPtrWillBeRawPtr<CSSVal
ue> src) |
549 { | 549 { |
550 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get()); | 550 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get()); |
551 | 551 |
552 // Each item in the src property's list is a single CSSFontFaceSource. Put t
hem all into a CSSFontFace. | 552 // Each item in the src property's list is a single CSSFontFaceSource. Put t
hem all into a CSSFontFace. |
553 CSSValueList* srcList = toCSSValueList(src.get()); | 553 CSSValueList* srcList = toCSSValueList(src.get()); |
554 int srcLength = srcList->length(); | 554 int srcLength = srcList->length(); |
555 | 555 |
556 bool foundSVGFont = false; | 556 bool foundSVGFont = false; |
557 | 557 |
558 for (int i = 0; i < srcLength; i++) { | 558 for (int i = 0; i < srcLength; i++) { |
559 // An item in the list either specifies a string (local font name) or a
URL (remote font to download). | 559 // An item in the list either specifies a string (local font name) or a
URL (remote font to download). |
560 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->itemWithoutBo
undsCheck(i)); | 560 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i)); |
561 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr; | 561 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr; |
562 | 562 |
563 #if ENABLE(SVG_FONTS) | 563 #if ENABLE(SVG_FONTS) |
564 foundSVGFont = item->isSVGFontFaceSrc() || item->svgFontFaceElement(); | 564 foundSVGFont = item->isSVGFontFaceSrc() || item->svgFontFaceElement(); |
565 #endif | 565 #endif |
566 if (!item->isLocal()) { | 566 if (!item->isLocal()) { |
567 Settings* settings = document ? document->frame() ? document->frame(
)->settings() : 0 : 0; | 567 Settings* settings = document ? document->frame() ? document->frame(
)->settings() : 0 : 0; |
568 bool allowDownloading = foundSVGFont || (settings && settings->downl
oadableBinaryFontsEnabled()); | 568 bool allowDownloading = foundSVGFont || (settings && settings->downl
oadableBinaryFontsEnabled()); |
569 if (allowDownloading && item->isSupportedFormat() && document) { | 569 if (allowDownloading && item->isSupportedFormat() && document) { |
570 FontResource* fetched = item->fetch(document); | 570 FontResource* fetched = item->fetch(document); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 visitor->trace(m_cssFontFace); | 630 visitor->trace(m_cssFontFace); |
631 visitor->trace(m_callbacks); | 631 visitor->trace(m_callbacks); |
632 } | 632 } |
633 | 633 |
634 bool FontFace::hadBlankText() const | 634 bool FontFace::hadBlankText() const |
635 { | 635 { |
636 return m_cssFontFace->hadBlankText(); | 636 return m_cssFontFace->hadBlankText(); |
637 } | 637 } |
638 | 638 |
639 } // namespace WebCore | 639 } // namespace WebCore |
OLD | NEW |