Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: Source/core/dom/Element.cpp

Issue 144963002: Make pseudo element update work with LocalStyleChange. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 1572 matching lines...) Expand 10 before | Expand all | Expand 10 after
1583 if (ActiveAnimations* activeAnimations = data->activeAnimations( )) 1583 if (ActiveAnimations* activeAnimations = data->activeAnimations( ))
1584 activeAnimations->setAnimationStyleChange(false); 1584 activeAnimations->setAnimationStyleChange(false);
1585 } 1585 }
1586 } 1586 }
1587 if (parentRenderStyle()) 1587 if (parentRenderStyle())
1588 change = recalcOwnStyle(change); 1588 change = recalcOwnStyle(change);
1589 clearNeedsStyleRecalc(); 1589 clearNeedsStyleRecalc();
1590 } 1590 }
1591 1591
1592 // If we reattached we don't need to recalc the style of our descendants any more. 1592 // If we reattached we don't need to recalc the style of our descendants any more.
1593 if ((change >= Inherit && change < Reattach) || childNeedsStyleRecalc()) 1593 if ((change >= Inherit && change < Reattach) || childNeedsStyleRecalc()) {
1594 recalcChildStyle(change); 1594 recalcChildStyle(change);
1595 clearChildNeedsStyleRecalc(); 1595 clearChildNeedsStyleRecalc();
1596 } else if (change == UpdatePseudoElements) {
1597 updatePseudoElement(BEFORE, change);
1598 updatePseudoElement(AFTER, change);
1599 updatePseudoElement(BACKDROP, change);
esprehn 2014/01/24 22:53:49 Can you just merge this into recalcChildStyle? If
rune 2014/01/25 00:00:38 I've tried in patch set 6. I've changed it so that
1600 }
1596 1601
1597 if (hasCustomStyleCallbacks()) 1602 if (hasCustomStyleCallbacks())
1598 didRecalcStyle(change); 1603 didRecalcStyle(change);
1599 1604
1600 if (change == Reattach) 1605 if (change == Reattach)
1601 reattachWhitespaceSiblings(nextTextSibling); 1606 reattachWhitespaceSiblings(nextTextSibling);
1602 } 1607 }
1603 1608
1604 StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change) 1609 StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change)
1605 { 1610 {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 // all the way down the tree. This is simpler than having to maintain a cach e of objects (and such font size changes should be rare anyway). 1649 // all the way down the tree. This is simpler than having to maintain a cach e of objects (and such font size changes should be rare anyway).
1645 if (document().styleEngine()->usesRemUnits() && document().documentElement() == this && oldStyle->fontSize() != newStyle->fontSize()) { 1650 if (document().styleEngine()->usesRemUnits() && document().documentElement() == this && oldStyle->fontSize() != newStyle->fontSize()) {
1646 // Cached RenderStyles may depend on the re units. 1651 // Cached RenderStyles may depend on the re units.
1647 document().ensureStyleResolver().invalidateMatchedPropertiesCache(); 1652 document().ensureStyleResolver().invalidateMatchedPropertiesCache();
1648 return Force; 1653 return Force;
1649 } 1654 }
1650 1655
1651 if (styleChangeType() >= SubtreeStyleChange) 1656 if (styleChangeType() >= SubtreeStyleChange)
1652 return Force; 1657 return Force;
1653 1658
1654 if (change <= Inherit) 1659 if (change > Inherit || localChange > Inherit)
1655 return localChange; 1660 return max(localChange, change);
1656 1661
1657 return max(localChange, change); 1662 if (localChange < Inherit && (oldStyle->hasContentPseudoStyle() || newStyle- >hasContentPseudoStyle()))
1663 return UpdatePseudoElements;
1664
1665 return localChange;
1658 } 1666 }
1659 1667
1660 void Element::recalcChildStyle(StyleRecalcChange change) 1668 void Element::recalcChildStyle(StyleRecalcChange change)
1661 { 1669 {
1662 ASSERT(document().inStyleRecalc()); 1670 ASSERT(document().inStyleRecalc());
1663 ASSERT(change >= Inherit || childNeedsStyleRecalc()); 1671 ASSERT(change >= Inherit || childNeedsStyleRecalc());
1664 ASSERT(!needsStyleRecalc()); 1672 ASSERT(!needsStyleRecalc());
1665 1673
1666 StyleResolverParentPusher parentPusher(*this); 1674 StyleResolverParentPusher parentPusher(*this);
1667 1675
(...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after
2761 if (!hasAttributes()) 2769 if (!hasAttributes())
2762 return; 2770 return;
2763 for (unsigned i = 0; i < attributeCount(); ++i) { 2771 for (unsigned i = 0; i < attributeCount(); ++i) {
2764 if (RefPtr<Attr> attr = attrIfExists(attributeItem(i)->name())) 2772 if (RefPtr<Attr> attr = attrIfExists(attributeItem(i)->name()))
2765 attr->normalize(); 2773 attr->normalize();
2766 } 2774 }
2767 } 2775 }
2768 2776
2769 void Element::updatePseudoElement(PseudoId pseudoId, StyleRecalcChange change) 2777 void Element::updatePseudoElement(PseudoId pseudoId, StyleRecalcChange change)
2770 { 2778 {
2779 ASSERT(!needsStyleRecalc());
2771 PseudoElement* element = pseudoElement(pseudoId); 2780 PseudoElement* element = pseudoElement(pseudoId);
2772 if (element && (needsStyleRecalc() || shouldRecalcStyle(change, element))) { 2781 if (element && (change == UpdatePseudoElements || shouldRecalcStyle(change, element))) {
2782
2773 // Need to clear the cached style if the PseudoElement wants a recalc so it 2783 // Need to clear the cached style if the PseudoElement wants a recalc so it
2774 // computes a new style. 2784 // computes a new style.
2775 if (element->needsStyleRecalc()) 2785 if (element->needsStyleRecalc())
2776 renderer()->style()->removeCachedPseudoStyle(pseudoId); 2786 renderer()->style()->removeCachedPseudoStyle(pseudoId);
2777 2787
2778 // PseudoElement styles hang off their parent element's style so if we n eeded 2788 // PseudoElement styles hang off their parent element's style so if we n eeded
2779 // a style recalc we should Force one on the pseudo. 2789 // a style recalc we should Force one on the pseudo.
2780 // FIXME: We should figure out the right text sibling to pass. 2790 // FIXME: We should figure out the right text sibling to pass.
2781 element->recalcStyle(needsStyleRecalc() ? Force : change); 2791 element->recalcStyle(change == UpdatePseudoElements ? Force : change);
2782 2792
2783 // Wait until our parent is not displayed or pseudoElementRendererIsNeed ed 2793 // Wait until our parent is not displayed or pseudoElementRendererIsNeed ed
2784 // is false, otherwise we could continously create and destroy PseudoEle ments 2794 // is false, otherwise we could continously create and destroy PseudoEle ments
2785 // when RenderObject::isChildAllowed on our parent returns false for the 2795 // when RenderObject::isChildAllowed on our parent returns false for the
2786 // PseudoElement's renderer for each style recalc. 2796 // PseudoElement's renderer for each style recalc.
2787 if (!renderer() || !pseudoElementRendererIsNeeded(renderer()->getCachedP seudoStyle(pseudoId))) 2797 if (!renderer() || !pseudoElementRendererIsNeeded(renderer()->getCachedP seudoStyle(pseudoId)))
2788 elementRareData()->setPseudoElement(pseudoId, 0); 2798 elementRareData()->setPseudoElement(pseudoId, 0);
2789 } else if (change >= Inherit || needsStyleRecalc()) 2799 } else if (change >= UpdatePseudoElements) {
2790 createPseudoElementIfNeeded(pseudoId); 2800 createPseudoElementIfNeeded(pseudoId);
2801 }
2791 } 2802 }
2792 2803
2793 bool Element::needsPseudoElement(PseudoId pseudoId, const RenderStyle& style) co nst 2804 bool Element::needsPseudoElement(PseudoId pseudoId, const RenderStyle& style) co nst
2794 { 2805 {
2795 if (pseudoId == BACKDROP && !isInTopLayer()) 2806 if (pseudoId == BACKDROP && !isInTopLayer())
2796 return false; 2807 return false;
2797 if (!renderer() || !pseudoElementRendererIsNeeded(&style)) 2808 if (!renderer() || !pseudoElementRendererIsNeeded(&style))
2798 return false; 2809 return false;
2799 /* It's safe to have a backdrop since its renderer is always a child of Rend erView. */ 2810 /* It's safe to have a backdrop since its renderer is always a child of Rend erView. */
2800 if (pseudoId != BACKDROP && !renderer()->canHaveGeneratedChildren()) 2811 if (pseudoId != BACKDROP && !renderer()->canHaveGeneratedChildren())
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
3642 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi stItems 3653 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi stItems
3643 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg i?id=88405 3654 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg i?id=88405
3644 if (hasTagName(optionTag) || hasTagName(optgroupTag)) 3655 if (hasTagName(optionTag) || hasTagName(optgroupTag))
3645 return false; 3656 return false;
3646 if (FullscreenElementStack::isActiveFullScreenElement(this)) 3657 if (FullscreenElementStack::isActiveFullScreenElement(this))
3647 return false; 3658 return false;
3648 return true; 3659 return true;
3649 } 3660 }
3650 3661
3651 } // namespace WebCore 3662 } // namespace WebCore
OLDNEW
« no previous file with comments | « no previous file | Source/core/rendering/style/RenderStyle.h » ('j') | Source/core/rendering/style/RenderStyle.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698