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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 121 |
122 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(docu
ment)); | 122 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(docu
ment)); |
123 | 123 |
124 if (fontFace->setFamilyValue(*family) | 124 if (fontFace->setFamilyValue(*family) |
125 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStyle) | 125 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStyle) |
126 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontWeight) | 126 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontWeight) |
127 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStretch) | 127 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStretch) |
128 && fontFace->setPropertyFromStyle(properties, CSSPropertyUnicodeRange) | 128 && fontFace->setPropertyFromStyle(properties, CSSPropertyUnicodeRange) |
129 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontVariant) | 129 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontVariant) |
130 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontFeatureSett
ings) | 130 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontFeatureSett
ings) |
| 131 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontDisplay) |
131 && !fontFace->family().isEmpty() | 132 && !fontFace->family().isEmpty() |
132 && fontFace->traits().bitfield()) { | 133 && fontFace->traits().bitfield()) { |
133 fontFace->initCSSFontFace(document, src); | 134 fontFace->initCSSFontFace(document, src); |
134 return fontFace.release(); | 135 return fontFace.release(); |
135 } | 136 } |
136 return nullptr; | 137 return nullptr; |
137 } | 138 } |
138 | 139 |
139 FontFace::FontFace(ExecutionContext* context) | 140 FontFace::FontFace(ExecutionContext* context) |
140 : ActiveDOMObject(context) | 141 : ActiveDOMObject(context) |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 if (value && !value->isValueList()) | 258 if (value && !value->isValueList()) |
258 return false; | 259 return false; |
259 m_unicodeRange = value; | 260 m_unicodeRange = value; |
260 break; | 261 break; |
261 case CSSPropertyFontVariant: | 262 case CSSPropertyFontVariant: |
262 m_variant = value; | 263 m_variant = value; |
263 break; | 264 break; |
264 case CSSPropertyFontFeatureSettings: | 265 case CSSPropertyFontFeatureSettings: |
265 m_featureSettings = value; | 266 m_featureSettings = value; |
266 break; | 267 break; |
| 268 case CSSPropertyFontDisplay: |
| 269 m_display = value; |
| 270 break; |
267 default: | 271 default: |
268 ASSERT_NOT_REACHED(); | 272 ASSERT_NOT_REACHED(); |
269 return false; | 273 return false; |
270 } | 274 } |
271 return true; | 275 return true; |
272 } | 276 } |
273 | 277 |
274 bool FontFace::setFamilyValue(const CSSValue& familyValue) | 278 bool FontFace::setFamilyValue(const CSSValue& familyValue) |
275 { | 279 { |
276 AtomicString family; | 280 AtomicString family; |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 break; | 525 break; |
522 default: | 526 default: |
523 break; | 527 break; |
524 } | 528 } |
525 } | 529 } |
526 } | 530 } |
527 | 531 |
528 return FontTraits(style, variant, weight, stretch); | 532 return FontTraits(style, variant, weight, stretch); |
529 } | 533 } |
530 | 534 |
| 535 static FontDisplay CSSValueToFontDisplay(CSSValue* value) |
| 536 { |
| 537 if (value && value->isPrimitiveValue()) { |
| 538 switch (toCSSPrimitiveValue(value)->getValueID()) { |
| 539 case CSSValueAuto: |
| 540 return FontDisplayAuto; |
| 541 case CSSValueBlock: |
| 542 return FontDisplayBlock; |
| 543 case CSSValueSwap: |
| 544 return FontDisplaySwap; |
| 545 case CSSValueFallback: |
| 546 return FontDisplayFallback; |
| 547 case CSSValueOptional: |
| 548 return FontDisplayOptional; |
| 549 default: |
| 550 break; |
| 551 } |
| 552 } |
| 553 return FontDisplayAuto; |
| 554 } |
| 555 |
531 static PassOwnPtrWillBeRawPtr<CSSFontFace> createCSSFontFace(FontFace* fontFace,
CSSValue* unicodeRange) | 556 static PassOwnPtrWillBeRawPtr<CSSFontFace> createCSSFontFace(FontFace* fontFace,
CSSValue* unicodeRange) |
532 { | 557 { |
533 Vector<CSSFontFace::UnicodeRange> ranges; | 558 Vector<CSSFontFace::UnicodeRange> ranges; |
534 if (CSSValueList* rangeList = toCSSValueList(unicodeRange)) { | 559 if (CSSValueList* rangeList = toCSSValueList(unicodeRange)) { |
535 unsigned numRanges = rangeList->length(); | 560 unsigned numRanges = rangeList->length(); |
536 for (unsigned i = 0; i < numRanges; i++) { | 561 for (unsigned i = 0; i < numRanges; i++) { |
537 CSSUnicodeRangeValue* range = toCSSUnicodeRangeValue(rangeList->item
(i)); | 562 CSSUnicodeRangeValue* range = toCSSUnicodeRangeValue(rangeList->item
(i)); |
538 ranges.append(CSSFontFace::UnicodeRange(range->from(), range->to()))
; | 563 ranges.append(CSSFontFace::UnicodeRange(range->from(), range->to()))
; |
539 } | 564 } |
540 } | 565 } |
(...skipping 18 matching lines...) Expand all Loading... |
559 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i)); | 584 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i)); |
560 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr; | 585 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr; |
561 | 586 |
562 if (!item->isLocal()) { | 587 if (!item->isLocal()) { |
563 const Settings* settings = document ? document->settings() : nullptr
; | 588 const Settings* settings = document ? document->settings() : nullptr
; |
564 bool allowDownloading = settings && settings->downloadableBinaryFont
sEnabled(); | 589 bool allowDownloading = settings && settings->downloadableBinaryFont
sEnabled(); |
565 if (allowDownloading && item->isSupportedFormat() && document) { | 590 if (allowDownloading && item->isSupportedFormat() && document) { |
566 FontResource* fetched = item->fetch(document); | 591 FontResource* fetched = item->fetch(document); |
567 if (fetched) { | 592 if (fetched) { |
568 FontLoader* fontLoader = document->styleEngine().fontSelecto
r()->fontLoader(); | 593 FontLoader* fontLoader = document->styleEngine().fontSelecto
r()->fontLoader(); |
569 source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched
, fontLoader)); | 594 source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched
, fontLoader, CSSValueToFontDisplay(m_display.get()))); |
570 } | 595 } |
571 } | 596 } |
572 } else { | 597 } else { |
573 source = adoptPtrWillBeNoop(new LocalFontFaceSource(item->resource()
)); | 598 source = adoptPtrWillBeNoop(new LocalFontFaceSource(item->resource()
)); |
574 } | 599 } |
575 | 600 |
576 if (source) | 601 if (source) |
577 m_cssFontFace->addSource(source.release()); | 602 m_cssFontFace->addSource(source.release()); |
578 } | 603 } |
579 } | 604 } |
(...skipping 14 matching lines...) Expand all Loading... |
594 } | 619 } |
595 | 620 |
596 DEFINE_TRACE(FontFace) | 621 DEFINE_TRACE(FontFace) |
597 { | 622 { |
598 visitor->trace(m_style); | 623 visitor->trace(m_style); |
599 visitor->trace(m_weight); | 624 visitor->trace(m_weight); |
600 visitor->trace(m_stretch); | 625 visitor->trace(m_stretch); |
601 visitor->trace(m_unicodeRange); | 626 visitor->trace(m_unicodeRange); |
602 visitor->trace(m_variant); | 627 visitor->trace(m_variant); |
603 visitor->trace(m_featureSettings); | 628 visitor->trace(m_featureSettings); |
| 629 visitor->trace(m_display); |
604 visitor->trace(m_error); | 630 visitor->trace(m_error); |
605 visitor->trace(m_loadedProperty); | 631 visitor->trace(m_loadedProperty); |
606 visitor->trace(m_cssFontFace); | 632 visitor->trace(m_cssFontFace); |
607 visitor->trace(m_callbacks); | 633 visitor->trace(m_callbacks); |
608 ActiveDOMObject::trace(visitor); | 634 ActiveDOMObject::trace(visitor); |
609 } | 635 } |
610 | 636 |
611 bool FontFace::hadBlankText() const | 637 bool FontFace::hadBlankText() const |
612 { | 638 { |
613 return m_cssFontFace->hadBlankText(); | 639 return m_cssFontFace->hadBlankText(); |
614 } | 640 } |
615 | 641 |
616 bool FontFace::hasPendingActivity() const | 642 bool FontFace::hasPendingActivity() const |
617 { | 643 { |
618 return m_status == Loading && executionContext() && !executionContext()->act
iveDOMObjectsAreStopped(); | 644 return m_status == Loading && executionContext() && !executionContext()->act
iveDOMObjectsAreStopped(); |
619 } | 645 } |
620 | 646 |
621 } // namespace blink | 647 } // namespace blink |
OLD | NEW |