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 21 matching lines...) Expand all Loading... |
32 | 32 |
33 #include "bindings/core/v8/ExceptionState.h" | 33 #include "bindings/core/v8/ExceptionState.h" |
34 #include "bindings/core/v8/ScriptState.h" | 34 #include "bindings/core/v8/ScriptState.h" |
35 #include "bindings/core/v8/StringOrArrayBufferOrArrayBufferView.h" | 35 #include "bindings/core/v8/StringOrArrayBufferOrArrayBufferView.h" |
36 #include "core/CSSValueKeywords.h" | 36 #include "core/CSSValueKeywords.h" |
37 #include "core/css/BinaryDataFontFaceSource.h" | 37 #include "core/css/BinaryDataFontFaceSource.h" |
38 #include "core/css/CSSFontFace.h" | 38 #include "core/css/CSSFontFace.h" |
39 #include "core/css/CSSFontFaceSrcValue.h" | 39 #include "core/css/CSSFontFaceSrcValue.h" |
40 #include "core/css/CSSFontFamilyValue.h" | 40 #include "core/css/CSSFontFamilyValue.h" |
41 #include "core/css/CSSFontSelector.h" | 41 #include "core/css/CSSFontSelector.h" |
42 #include "core/css/CSSPrimitiveValue.h" | 42 #include "core/css/CSSIdentifierValue.h" |
43 #include "core/css/CSSUnicodeRangeValue.h" | 43 #include "core/css/CSSUnicodeRangeValue.h" |
44 #include "core/css/CSSValueList.h" | 44 #include "core/css/CSSValueList.h" |
45 #include "core/css/FontFaceDescriptors.h" | 45 #include "core/css/FontFaceDescriptors.h" |
46 #include "core/css/LocalFontFaceSource.h" | 46 #include "core/css/LocalFontFaceSource.h" |
47 #include "core/css/RemoteFontFaceSource.h" | 47 #include "core/css/RemoteFontFaceSource.h" |
48 #include "core/css/StylePropertySet.h" | 48 #include "core/css/StylePropertySet.h" |
49 #include "core/css/StyleRule.h" | 49 #include "core/css/StyleRule.h" |
50 #include "core/css/parser/CSSParser.h" | 50 #include "core/css/parser/CSSParser.h" |
51 #include "core/dom/DOMArrayBuffer.h" | 51 #include "core/dom/DOMArrayBuffer.h" |
52 #include "core/dom/DOMArrayBufferView.h" | 52 #include "core/dom/DOMArrayBufferView.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->baseAddr
ess()), source->byteLength()); | 106 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->baseAddr
ess()), source->byteLength()); |
107 return fontFace; | 107 return fontFace; |
108 } | 108 } |
109 | 109 |
110 FontFace* FontFace::create(Document* document, const StyleRuleFontFace* fontFace
Rule) | 110 FontFace* FontFace::create(Document* document, const StyleRuleFontFace* fontFace
Rule) |
111 { | 111 { |
112 const StylePropertySet& properties = fontFaceRule->properties(); | 112 const StylePropertySet& properties = fontFaceRule->properties(); |
113 | 113 |
114 // Obtain the font-family property and the src property. Both must be define
d. | 114 // Obtain the font-family property and the src property. Both must be define
d. |
115 const CSSValue* family = properties.getPropertyCSSValue(CSSPropertyFontFamil
y); | 115 const CSSValue* family = properties.getPropertyCSSValue(CSSPropertyFontFamil
y); |
116 if (!family || (!family->isFontFamilyValue() && !family->isPrimitiveValue())
) | 116 if (!family || (!family->isFontFamilyValue() && !family->isIdentifierValue()
)) |
117 return nullptr; | 117 return nullptr; |
118 const CSSValue* src = properties.getPropertyCSSValue(CSSPropertySrc); | 118 const CSSValue* src = properties.getPropertyCSSValue(CSSPropertySrc); |
119 if (!src || !src->isValueList()) | 119 if (!src || !src->isValueList()) |
120 return nullptr; | 120 return nullptr; |
121 | 121 |
122 FontFace* fontFace = new FontFace(document); | 122 FontFace* fontFace = new FontFace(document); |
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) |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 return false; | 275 return false; |
276 } | 276 } |
277 return true; | 277 return true; |
278 } | 278 } |
279 | 279 |
280 bool FontFace::setFamilyValue(const CSSValue& familyValue) | 280 bool FontFace::setFamilyValue(const CSSValue& familyValue) |
281 { | 281 { |
282 AtomicString family; | 282 AtomicString family; |
283 if (familyValue.isFontFamilyValue()) { | 283 if (familyValue.isFontFamilyValue()) { |
284 family = AtomicString(toCSSFontFamilyValue(familyValue).value()); | 284 family = AtomicString(toCSSFontFamilyValue(familyValue).value()); |
285 } else if (toCSSPrimitiveValue(familyValue).isValueID()) { | 285 } else if (familyValue.isIdentifierValue()) { |
286 // We need to use the raw text for all the generic family types, since @
font-face is a way of actually | 286 // We need to use the raw text for all the generic family types, since @
font-face is a way of actually |
287 // defining what font to use for those types. | 287 // defining what font to use for those types. |
288 switch (toCSSPrimitiveValue(familyValue).getValueID()) { | 288 switch (toCSSIdentifierValue(familyValue).getValueID()) { |
289 case CSSValueSerif: | 289 case CSSValueSerif: |
290 family = FontFamilyNames::webkit_serif; | 290 family = FontFamilyNames::webkit_serif; |
291 break; | 291 break; |
292 case CSSValueSansSerif: | 292 case CSSValueSansSerif: |
293 family = FontFamilyNames::webkit_sans_serif; | 293 family = FontFamilyNames::webkit_sans_serif; |
294 break; | 294 break; |
295 case CSSValueCursive: | 295 case CSSValueCursive: |
296 family = FontFamilyNames::webkit_cursive; | 296 family = FontFamilyNames::webkit_cursive; |
297 break; | 297 break; |
298 case CSSValueFantasy: | 298 case CSSValueFantasy: |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 if (m_status != Unloaded) | 394 if (m_status != Unloaded) |
395 return; | 395 return; |
396 | 396 |
397 m_cssFontFace->load(); | 397 m_cssFontFace->load(); |
398 } | 398 } |
399 | 399 |
400 FontTraits FontFace::traits() const | 400 FontTraits FontFace::traits() const |
401 { | 401 { |
402 FontStretch stretch = FontStretchNormal; | 402 FontStretch stretch = FontStretchNormal; |
403 if (m_stretch) { | 403 if (m_stretch) { |
404 if (!m_stretch->isPrimitiveValue()) | 404 if (!m_stretch->isIdentifierValue()) |
405 return 0; | 405 return 0; |
406 | 406 |
407 switch (toCSSPrimitiveValue(m_stretch.get())->getValueID()) { | 407 switch (toCSSIdentifierValue(m_stretch.get())->getValueID()) { |
408 case CSSValueUltraCondensed: | 408 case CSSValueUltraCondensed: |
409 stretch = FontStretchUltraCondensed; | 409 stretch = FontStretchUltraCondensed; |
410 break; | 410 break; |
411 case CSSValueExtraCondensed: | 411 case CSSValueExtraCondensed: |
412 stretch = FontStretchExtraCondensed; | 412 stretch = FontStretchExtraCondensed; |
413 break; | 413 break; |
414 case CSSValueCondensed: | 414 case CSSValueCondensed: |
415 stretch = FontStretchCondensed; | 415 stretch = FontStretchCondensed; |
416 break; | 416 break; |
417 case CSSValueSemiCondensed: | 417 case CSSValueSemiCondensed: |
(...skipping 11 matching lines...) Expand all Loading... |
429 case CSSValueUltraExpanded: | 429 case CSSValueUltraExpanded: |
430 stretch = FontStretchUltraExpanded; | 430 stretch = FontStretchUltraExpanded; |
431 break; | 431 break; |
432 default: | 432 default: |
433 break; | 433 break; |
434 } | 434 } |
435 } | 435 } |
436 | 436 |
437 FontStyle style = FontStyleNormal; | 437 FontStyle style = FontStyleNormal; |
438 if (m_style) { | 438 if (m_style) { |
439 if (!m_style->isPrimitiveValue()) | 439 if (!m_style->isIdentifierValue()) |
440 return 0; | 440 return 0; |
441 | 441 |
442 switch (toCSSPrimitiveValue(m_style.get())->getValueID()) { | 442 switch (toCSSIdentifierValue(m_style.get())->getValueID()) { |
443 case CSSValueNormal: | 443 case CSSValueNormal: |
444 style = FontStyleNormal; | 444 style = FontStyleNormal; |
445 break; | 445 break; |
446 case CSSValueOblique: | 446 case CSSValueOblique: |
447 style = FontStyleOblique; | 447 style = FontStyleOblique; |
448 break; | 448 break; |
449 case CSSValueItalic: | 449 case CSSValueItalic: |
450 style = FontStyleItalic; | 450 style = FontStyleItalic; |
451 break; | 451 break; |
452 default: | 452 default: |
453 break; | 453 break; |
454 } | 454 } |
455 } | 455 } |
456 | 456 |
457 FontWeight weight = FontWeight400; | 457 FontWeight weight = FontWeight400; |
458 if (m_weight) { | 458 if (m_weight) { |
459 if (!m_weight->isPrimitiveValue()) | 459 if (!m_weight->isIdentifierValue()) |
460 return 0; | 460 return 0; |
461 | 461 |
462 switch (toCSSPrimitiveValue(m_weight.get())->getValueID()) { | 462 switch (toCSSIdentifierValue(m_weight.get())->getValueID()) { |
463 case CSSValueBold: | 463 case CSSValueBold: |
464 case CSSValue700: | 464 case CSSValue700: |
465 weight = FontWeight700; | 465 weight = FontWeight700; |
466 break; | 466 break; |
467 case CSSValueNormal: | 467 case CSSValueNormal: |
468 case CSSValue400: | 468 case CSSValue400: |
469 weight = FontWeight400; | 469 weight = FontWeight400; |
470 break; | 470 break; |
471 case CSSValue900: | 471 case CSSValue900: |
472 weight = FontWeight900; | 472 weight = FontWeight900; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 | 505 |
506 size_t FontFace::approximateBlankCharacterCount() const | 506 size_t FontFace::approximateBlankCharacterCount() const |
507 { | 507 { |
508 if (m_status == Loading) | 508 if (m_status == Loading) |
509 return m_cssFontFace->approximateBlankCharacterCount(); | 509 return m_cssFontFace->approximateBlankCharacterCount(); |
510 return 0; | 510 return 0; |
511 } | 511 } |
512 | 512 |
513 static FontDisplay CSSValueToFontDisplay(const CSSValue* value) | 513 static FontDisplay CSSValueToFontDisplay(const CSSValue* value) |
514 { | 514 { |
515 if (value && value->isPrimitiveValue()) { | 515 if (value && value->isIdentifierValue()) { |
516 switch (toCSSPrimitiveValue(value)->getValueID()) { | 516 switch (toCSSIdentifierValue(value)->getValueID()) { |
517 case CSSValueAuto: | 517 case CSSValueAuto: |
518 return FontDisplayAuto; | 518 return FontDisplayAuto; |
519 case CSSValueBlock: | 519 case CSSValueBlock: |
520 return FontDisplayBlock; | 520 return FontDisplayBlock; |
521 case CSSValueSwap: | 521 case CSSValueSwap: |
522 return FontDisplaySwap; | 522 return FontDisplaySwap; |
523 case CSSValueFallback: | 523 case CSSValueFallback: |
524 return FontDisplayFallback; | 524 return FontDisplayFallback; |
525 case CSSValueOptional: | 525 case CSSValueOptional: |
526 return FontDisplayOptional; | 526 return FontDisplayOptional; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 { | 621 { |
622 return m_cssFontFace->hadBlankText(); | 622 return m_cssFontFace->hadBlankText(); |
623 } | 623 } |
624 | 624 |
625 bool FontFace::hasPendingActivity() const | 625 bool FontFace::hasPendingActivity() const |
626 { | 626 { |
627 return m_status == Loading && getExecutionContext() && !getExecutionContext(
)->activeDOMObjectsAreStopped(); | 627 return m_status == Loading && getExecutionContext() && !getExecutionContext(
)->activeDOMObjectsAreStopped(); |
628 } | 628 } |
629 | 629 |
630 } // namespace blink | 630 } // namespace blink |
OLD | NEW |