OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Peter Kelly (pmk@post.com) | 4 * (C) 2001 Peter Kelly (pmk@post.com) |
5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
6 * (C) 2007 David Smith (catfish.man@gmail.com) | 6 * (C) 2007 David Smith (catfish.man@gmail.com) |
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
All rights reserved. | 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
All rights reserved. |
8 * (C) 2007 Eric Seidel (eric@webkit.org) | 8 * (C) 2007 Eric Seidel (eric@webkit.org) |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 1605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1616 } | 1616 } |
1617 | 1617 |
1618 document().styleEngine().styleInvalidator().clearInvalidation(*this); | 1618 document().styleEngine().styleInvalidator().clearInvalidation(*this); |
1619 | 1619 |
1620 if (svgFilterNeedsLayerUpdate()) | 1620 if (svgFilterNeedsLayerUpdate()) |
1621 document().unscheduleSVGFilterLayerUpdateHack(*this); | 1621 document().unscheduleSVGFilterLayerUpdateHack(*this); |
1622 | 1622 |
1623 ASSERT(needsAttach()); | 1623 ASSERT(needsAttach()); |
1624 } | 1624 } |
1625 | 1625 |
1626 bool Element::pseudoStyleCacheIsInvalid(const ComputedStyle* currentStyle, Compu
tedStyle* newStyle) | 1626 bool Element::updatePseudoStyleCache(const ComputedStyle* currentStyle, Computed
Style* newStyle) |
1627 { | 1627 { |
1628 ASSERT(currentStyle == computedStyle()); | 1628 ASSERT(currentStyle == computedStyle()); |
1629 ASSERT(layoutObject()); | 1629 ASSERT(layoutObject()); |
1630 | 1630 |
1631 if (!currentStyle) | 1631 if (!currentStyle) |
1632 return false; | 1632 return false; |
1633 | 1633 |
1634 const PseudoStyleCache* pseudoStyleCache = currentStyle->cachedPseudoStyles(
); | 1634 const PseudoStyleCache* pseudoStyleCache = currentStyle->cachedPseudoStyles(
); |
1635 if (!pseudoStyleCache) | 1635 if (!pseudoStyleCache) |
1636 return false; | 1636 return false; |
1637 | 1637 |
1638 size_t cacheSize = pseudoStyleCache->size(); | 1638 size_t cacheSize = pseudoStyleCache->size(); |
| 1639 bool result = false; |
1639 for (size_t i = 0; i < cacheSize; ++i) { | 1640 for (size_t i = 0; i < cacheSize; ++i) { |
1640 RefPtr<ComputedStyle> newPseudoStyle; | 1641 RefPtr<ComputedStyle> newPseudoStyle; |
1641 RefPtr<ComputedStyle> oldPseudoStyle = pseudoStyleCache->at(i); | 1642 RefPtr<ComputedStyle> oldPseudoStyle = pseudoStyleCache->at(i); |
1642 PseudoId pseudoId = oldPseudoStyle->styleType(); | 1643 PseudoId pseudoId = oldPseudoStyle->styleType(); |
1643 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) | 1644 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) |
1644 newPseudoStyle = layoutObject()->uncachedFirstLineStyle(newStyle); | 1645 newPseudoStyle = layoutObject()->uncachedFirstLineStyle(newStyle); |
1645 else | 1646 else |
1646 newPseudoStyle = layoutObject()->getUncachedPseudoStyle(PseudoStyleR
equest(pseudoId), newStyle, newStyle); | 1647 newPseudoStyle = layoutObject()->getUncachedPseudoStyle(PseudoStyleR
equest(pseudoId), newStyle, newStyle); |
1647 if (!newPseudoStyle) | 1648 if (!newPseudoStyle) { |
1648 return true; | 1649 result = true; |
| 1650 continue; |
| 1651 } |
1649 if (*oldPseudoStyle != *newPseudoStyle || oldPseudoStyle->font().loading
CustomFonts() != newPseudoStyle->font().loadingCustomFonts()) { | 1652 if (*oldPseudoStyle != *newPseudoStyle || oldPseudoStyle->font().loading
CustomFonts() != newPseudoStyle->font().loadingCustomFonts()) { |
1650 if (pseudoId < FIRST_INTERNAL_PSEUDOID) | 1653 if (pseudoId < FIRST_INTERNAL_PSEUDOID) |
1651 newStyle->setHasPseudoStyle(pseudoId); | 1654 newStyle->setHasPseudoStyle(pseudoId); |
1652 newStyle->addCachedPseudoStyle(newPseudoStyle); | 1655 newStyle->addCachedPseudoStyle(newPseudoStyle); |
1653 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) | 1656 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) |
1654 layoutObject()->firstLineStyleDidChange(*oldPseudoStyle, *newPse
udoStyle); | 1657 layoutObject()->firstLineStyleDidChange(*oldPseudoStyle, *newPse
udoStyle); |
1655 return true; | 1658 result = true; |
1656 } | 1659 } |
1657 } | 1660 } |
1658 return false; | 1661 return false; |
1659 } | 1662 } |
1660 | 1663 |
1661 PassRefPtr<ComputedStyle> Element::styleForLayoutObject() | 1664 PassRefPtr<ComputedStyle> Element::styleForLayoutObject() |
1662 { | 1665 { |
1663 ASSERT(document().inStyleRecalc()); | 1666 ASSERT(document().inStyleRecalc()); |
1664 | 1667 |
1665 RefPtr<ComputedStyle> style; | 1668 RefPtr<ComputedStyle> style; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1784 return Reattach; | 1787 return Reattach; |
1785 return ReattachNoLayoutObject; | 1788 return ReattachNoLayoutObject; |
1786 } | 1789 } |
1787 | 1790 |
1788 ASSERT(oldStyle); | 1791 ASSERT(oldStyle); |
1789 | 1792 |
1790 if (localChange != NoChange) | 1793 if (localChange != NoChange) |
1791 updateCallbackSelectors(oldStyle.get(), newStyle.get()); | 1794 updateCallbackSelectors(oldStyle.get(), newStyle.get()); |
1792 | 1795 |
1793 if (LayoutObject* layoutObject = this->layoutObject()) { | 1796 if (LayoutObject* layoutObject = this->layoutObject()) { |
1794 if (localChange != NoChange || pseudoStyleCacheIsInvalid(oldStyle.get(),
newStyle.get()) || svgFilterNeedsLayerUpdate()) { | 1797 bool pseudoStyleCacheUpdated = updatePseudoStyleCache(oldStyle.get(), ne
wStyle.get()); |
| 1798 if (localChange != NoChange || pseudoStyleCacheUpdated || svgFilterNeeds
LayerUpdate()) { |
1795 layoutObject->setStyle(newStyle.get()); | 1799 layoutObject->setStyle(newStyle.get()); |
1796 } else { | 1800 } else { |
1797 // Although no change occurred, we use the new style so that the cou
sin style sharing code won't get | 1801 // Although no change occurred, we use the new style so that the cou
sin style sharing code won't get |
1798 // fooled into believing this style is the same. | 1802 // fooled into believing this style is the same. |
1799 // FIXME: We may be able to remove this hack, see discussion in | 1803 // FIXME: We may be able to remove this hack, see discussion in |
1800 // https://codereview.chromium.org/30453002/ | 1804 // https://codereview.chromium.org/30453002/ |
1801 layoutObject->setStyleInternal(newStyle.get()); | 1805 layoutObject->setStyleInternal(newStyle.get()); |
1802 } | 1806 } |
1803 } | 1807 } |
1804 | 1808 |
(...skipping 1762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3567 { | 3571 { |
3568 #if ENABLE(OILPAN) | 3572 #if ENABLE(OILPAN) |
3569 if (hasRareData()) | 3573 if (hasRareData()) |
3570 visitor->trace(elementRareData()); | 3574 visitor->trace(elementRareData()); |
3571 visitor->trace(m_elementData); | 3575 visitor->trace(m_elementData); |
3572 #endif | 3576 #endif |
3573 ContainerNode::trace(visitor); | 3577 ContainerNode::trace(visitor); |
3574 } | 3578 } |
3575 | 3579 |
3576 } // namespace blink | 3580 } // namespace blink |
OLD | NEW |