| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> | 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
| 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
| 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. | 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 ASSERT_ARG(keywordSize, keywordSize); | 397 ASSERT_ARG(keywordSize, keywordSize); |
| 398 ASSERT_ARG(keywordSize, keywordSize <= 8); | 398 ASSERT_ARG(keywordSize, keywordSize <= 8); |
| 399 return static_cast<CSSValueID>(CSSValueXxSmall + keywordSize - 1); | 399 return static_cast<CSSValueID>(CSSValueXxSmall + keywordSize - 1); |
| 400 } | 400 } |
| 401 | 401 |
| 402 inline static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> zoomAdjustedPixelValue(d
ouble value, const ComputedStyle& style) | 402 inline static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> zoomAdjustedPixelValue(d
ouble value, const ComputedStyle& style) |
| 403 { | 403 { |
| 404 return cssValuePool().createValue(adjustFloatForAbsoluteZoom(value, style),
CSSPrimitiveValue::CSS_PX); | 404 return cssValuePool().createValue(adjustFloatForAbsoluteZoom(value, style),
CSSPrimitiveValue::CSS_PX); |
| 405 } | 405 } |
| 406 | 406 |
| 407 PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getFontSizeCSSValu
ePreferringKeyword() const | 407 NullableCSSValue CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeywo
rd() const |
| 408 { | 408 { |
| 409 if (!m_node) | 409 if (!m_node) |
| 410 return nullptr; | 410 return nullptr; |
| 411 | 411 |
| 412 m_node->document().updateLayoutIgnorePendingStylesheets(); | 412 m_node->document().updateLayoutIgnorePendingStylesheets(); |
| 413 | 413 |
| 414 const ComputedStyle* style = m_node->ensureComputedStyle(m_pseudoElementSpec
ifier); | 414 const ComputedStyle* style = m_node->ensureComputedStyle(m_pseudoElementSpec
ifier); |
| 415 if (!style) | 415 if (!style) |
| 416 return nullptr; | 416 return nullptr; |
| 417 | 417 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 { | 514 { |
| 515 if (!m_node) | 515 if (!m_node) |
| 516 return 0; | 516 return 0; |
| 517 if (m_node->isElementNode()) { | 517 if (m_node->isElementNode()) { |
| 518 if (PseudoElement* element = toElement(m_node)->pseudoElement(m_pseudoEl
ementSpecifier)) | 518 if (PseudoElement* element = toElement(m_node)->pseudoElement(m_pseudoEl
ementSpecifier)) |
| 519 return element; | 519 return element; |
| 520 } | 520 } |
| 521 return m_node.get(); | 521 return m_node.get(); |
| 522 } | 522 } |
| 523 | 523 |
| 524 PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValu
e(CSSPropertyID propertyID) const | 524 NullableCSSValue CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropertyID
propertyID) const |
| 525 { | 525 { |
| 526 Node* styledNode = this->styledNode(); | 526 Node* styledNode = this->styledNode(); |
| 527 if (!styledNode) | 527 if (!styledNode) |
| 528 return nullptr; | 528 return nullptr; |
| 529 LayoutObject* layoutObject = styledNode->layoutObject(); | 529 LayoutObject* layoutObject = styledNode->layoutObject(); |
| 530 const ComputedStyle* style; | 530 const ComputedStyle* style; |
| 531 | 531 |
| 532 Document& document = styledNode->document(); | 532 Document& document = styledNode->document(); |
| 533 | 533 |
| 534 // A timing update may be required if a compositor animation is running. | 534 // A timing update may be required if a compositor animation is running. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 550 if (forceFullLayout) { | 550 if (forceFullLayout) { |
| 551 document.updateLayoutIgnorePendingStylesheets(); | 551 document.updateLayoutIgnorePendingStylesheets(); |
| 552 styledNode = this->styledNode(); | 552 styledNode = this->styledNode(); |
| 553 style = computeComputedStyle(); | 553 style = computeComputedStyle(); |
| 554 layoutObject = styledNode->layoutObject(); | 554 layoutObject = styledNode->layoutObject(); |
| 555 } | 555 } |
| 556 | 556 |
| 557 if (!style) | 557 if (!style) |
| 558 return nullptr; | 558 return nullptr; |
| 559 | 559 |
| 560 RefPtrWillBeRawPtr<CSSValue> value = ComputedStyleCSSValueMapping::get(prope
rtyID, *style, layoutObject, styledNode, m_allowVisitedStyle); | 560 NullableCSSValue value = ComputedStyleCSSValueMapping::get(propertyID, *styl
e, layoutObject, styledNode, m_allowVisitedStyle); |
| 561 if (value) | 561 if (value) |
| 562 return value; | 562 return *value; |
| 563 | 563 |
| 564 logUnimplementedPropertyID(propertyID); | 564 logUnimplementedPropertyID(propertyID); |
| 565 return nullptr; | 565 return nullptr; |
| 566 } | 566 } |
| 567 | 567 |
| 568 String CSSComputedStyleDeclaration::getPropertyValue(CSSPropertyID propertyID) c
onst | 568 String CSSComputedStyleDeclaration::getPropertyValue(CSSPropertyID propertyID) c
onst |
| 569 { | 569 { |
| 570 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(propertyID); | 570 NullableCSSValue value = getPropertyCSSValue(propertyID); |
| 571 if (value) | 571 if (value) |
| 572 return value->cssText(); | 572 return value->cssText(); |
| 573 return ""; | 573 return ""; |
| 574 } | 574 } |
| 575 | 575 |
| 576 | 576 |
| 577 unsigned CSSComputedStyleDeclaration::length() const | 577 unsigned CSSComputedStyleDeclaration::length() const |
| 578 { | 578 { |
| 579 if (!m_node || !m_node->inActiveDocument()) | 579 if (!m_node || !m_node->inActiveDocument()) |
| 580 return 0; | 580 return 0; |
| 581 return computableProperties().size(); | 581 return computableProperties().size(); |
| 582 } | 582 } |
| 583 | 583 |
| 584 String CSSComputedStyleDeclaration::item(unsigned i) const | 584 String CSSComputedStyleDeclaration::item(unsigned i) const |
| 585 { | 585 { |
| 586 if (i >= length()) | 586 if (i >= length()) |
| 587 return ""; | 587 return ""; |
| 588 | 588 |
| 589 return getPropertyNameString(computableProperties()[i]); | 589 return getPropertyNameString(computableProperties()[i]); |
| 590 } | 590 } |
| 591 | 591 |
| 592 bool CSSComputedStyleDeclaration::cssPropertyMatches(CSSPropertyID propertyID, c
onst CSSValue* propertyValue) const | 592 bool CSSComputedStyleDeclaration::cssPropertyMatches(CSSPropertyID propertyID, c
onst CSSValue propertyValue) const |
| 593 { | 593 { |
| 594 if (propertyID == CSSPropertyFontSize && propertyValue->isPrimitiveValue() &
& m_node) { | 594 if (propertyID == CSSPropertyFontSize && propertyValue.isPrimitiveValue() &&
m_node) { |
| 595 m_node->document().updateLayoutIgnorePendingStylesheets(); | 595 m_node->document().updateLayoutIgnorePendingStylesheets(); |
| 596 const ComputedStyle* style = m_node->ensureComputedStyle(m_pseudoElement
Specifier); | 596 const ComputedStyle* style = m_node->ensureComputedStyle(m_pseudoElement
Specifier); |
| 597 if (style && style->fontDescription().keywordSize()) { | 597 if (style && style->fontDescription().keywordSize()) { |
| 598 CSSValueID sizeValue = cssIdentifierForFontSizeKeyword(style->fontDe
scription().keywordSize()); | 598 CSSValueID sizeValue = cssIdentifierForFontSizeKeyword(style->fontDe
scription().keywordSize()); |
| 599 const CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(proper
tyValue); | 599 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(proper
tyValue); |
| 600 if (primitiveValue->isValueID() && primitiveValue->getValueID() == s
izeValue) | 600 if (primitiveValue.isValueID() && primitiveValue.getValueID() == siz
eValue) |
| 601 return true; | 601 return true; |
| 602 } | 602 } |
| 603 } | 603 } |
| 604 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(propertyID); | 604 NullableCSSValue value = getPropertyCSSValue(propertyID); |
| 605 return value && propertyValue && value->equals(*propertyValue); | 605 return value && value->equals(propertyValue); |
| 606 } | 606 } |
| 607 | 607 |
| 608 PassRefPtrWillBeRawPtr<MutableStylePropertySet> CSSComputedStyleDeclaration::cop
yProperties() const | 608 PassRefPtrWillBeRawPtr<MutableStylePropertySet> CSSComputedStyleDeclaration::cop
yProperties() const |
| 609 { | 609 { |
| 610 return copyPropertiesInSet(computableProperties()); | 610 return copyPropertiesInSet(computableProperties()); |
| 611 } | 611 } |
| 612 | 612 |
| 613 PassRefPtrWillBeRawPtr<MutableStylePropertySet> CSSComputedStyleDeclaration::cop
yPropertiesInSet(const Vector<CSSPropertyID>& properties) const | 613 PassRefPtrWillBeRawPtr<MutableStylePropertySet> CSSComputedStyleDeclaration::cop
yPropertiesInSet(const Vector<CSSPropertyID>& properties) const |
| 614 { | 614 { |
| 615 WillBeHeapVector<CSSProperty, 256> list; | 615 WillBeHeapVector<CSSProperty, 256> list; |
| 616 list.reserveInitialCapacity(properties.size()); | 616 list.reserveInitialCapacity(properties.size()); |
| 617 for (unsigned i = 0; i < properties.size(); ++i) { | 617 for (unsigned i = 0; i < properties.size(); ++i) { |
| 618 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(properties[i]); | 618 NullableCSSValue value = getPropertyCSSValue(properties[i]); |
| 619 if (value) | 619 if (value) |
| 620 list.append(CSSProperty(properties[i], value.release(), false)); | 620 list.append(CSSProperty(properties[i], *value, false)); |
| 621 } | 621 } |
| 622 return MutableStylePropertySet::create(list.data(), list.size()); | 622 return MutableStylePropertySet::create(list.data(), list.size()); |
| 623 } | 623 } |
| 624 | 624 |
| 625 CSSRule* CSSComputedStyleDeclaration::parentRule() const | 625 CSSRule* CSSComputedStyleDeclaration::parentRule() const |
| 626 { | 626 { |
| 627 return 0; | 627 return 0; |
| 628 } | 628 } |
| 629 | 629 |
| 630 String CSSComputedStyleDeclaration::getPropertyValue(const String& propertyName) | 630 String CSSComputedStyleDeclaration::getPropertyValue(const String& propertyName) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 656 { | 656 { |
| 657 exceptionState.throwDOMException(NoModificationAllowedError, "These styles a
re computed, and therefore the '" + name + "' property is read-only."); | 657 exceptionState.throwDOMException(NoModificationAllowedError, "These styles a
re computed, and therefore the '" + name + "' property is read-only."); |
| 658 } | 658 } |
| 659 | 659 |
| 660 String CSSComputedStyleDeclaration::removeProperty(const String& name, Exception
State& exceptionState) | 660 String CSSComputedStyleDeclaration::removeProperty(const String& name, Exception
State& exceptionState) |
| 661 { | 661 { |
| 662 exceptionState.throwDOMException(NoModificationAllowedError, "These styles a
re computed, and therefore the '" + name + "' property is read-only."); | 662 exceptionState.throwDOMException(NoModificationAllowedError, "These styles a
re computed, and therefore the '" + name + "' property is read-only."); |
| 663 return String(); | 663 return String(); |
| 664 } | 664 } |
| 665 | 665 |
| 666 PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValu
eInternal(CSSPropertyID propertyID) | 666 NullableCSSValue CSSComputedStyleDeclaration::getPropertyCSSValueInternal(CSSPro
pertyID propertyID) |
| 667 { | 667 { |
| 668 return getPropertyCSSValue(propertyID); | 668 return getPropertyCSSValue(propertyID); |
| 669 } | 669 } |
| 670 | 670 |
| 671 String CSSComputedStyleDeclaration::getPropertyValueInternal(CSSPropertyID prope
rtyID) | 671 String CSSComputedStyleDeclaration::getPropertyValueInternal(CSSPropertyID prope
rtyID) |
| 672 { | 672 { |
| 673 return getPropertyValue(propertyID); | 673 return getPropertyValue(propertyID); |
| 674 } | 674 } |
| 675 | 675 |
| 676 void CSSComputedStyleDeclaration::setPropertyInternal(CSSPropertyID id, const St
ring&, bool, ExceptionState& exceptionState) | 676 void CSSComputedStyleDeclaration::setPropertyInternal(CSSPropertyID id, const St
ring&, bool, ExceptionState& exceptionState) |
| 677 { | 677 { |
| 678 exceptionState.throwDOMException(NoModificationAllowedError, "These styles a
re computed, and therefore the '" + getPropertyNameString(id) + "' property is r
ead-only."); | 678 exceptionState.throwDOMException(NoModificationAllowedError, "These styles a
re computed, and therefore the '" + getPropertyNameString(id) + "' property is r
ead-only."); |
| 679 } | 679 } |
| 680 | 680 |
| 681 DEFINE_TRACE(CSSComputedStyleDeclaration) | 681 DEFINE_TRACE(CSSComputedStyleDeclaration) |
| 682 { | 682 { |
| 683 visitor->trace(m_node); | 683 visitor->trace(m_node); |
| 684 CSSStyleDeclaration::trace(visitor); | 684 CSSStyleDeclaration::trace(visitor); |
| 685 } | 685 } |
| 686 | 686 |
| 687 } // namespace blink | 687 } // namespace blink |
| OLD | NEW |