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

Side by Side Diff: Source/core/css/resolver/StyleResolver.cpp

Issue 82083002: Move viewport unit resolution to style recalc time (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: rename browser zoom to page zoom 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 // important rules, but this currently happens here as we require adjustment to have happened 724 // important rules, but this currently happens here as we require adjustment to have happened
725 // before deciding which properties to transition. 725 // before deciding which properties to transition.
726 applyAnimatedProperties(state, element); 726 applyAnimatedProperties(state, element);
727 727
728 // FIXME: Shouldn't this be on RenderBody::styleDidChange? 728 // FIXME: Shouldn't this be on RenderBody::styleDidChange?
729 if (element->hasTagName(bodyTag)) 729 if (element->hasTagName(bodyTag))
730 document().textLinkColors().setTextColor(state.style()->color()); 730 document().textLinkColors().setTextColor(state.style()->color());
731 731
732 setAnimationUpdateIfNeeded(state, *element); 732 setAnimationUpdateIfNeeded(state, *element);
733 733
734 if (state.style()->hasViewportUnits())
735 document().setHasViewportUnits();
736
734 // Now return the style. 737 // Now return the style.
735 return state.takeStyle(); 738 return state.takeStyle();
736 } 739 }
737 740
738 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* element, const RenderStyle& elementStyle, RenderStyle* parentStyle, const StyleKeyframe* keyfra me, const AtomicString& animationName) 741 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* element, const RenderStyle& elementStyle, RenderStyle* parentStyle, const StyleKeyframe* keyfra me, const AtomicString& animationName)
739 { 742 {
740 ASSERT(document().frame()); 743 ASSERT(document().frame());
741 ASSERT(documentSettings()); 744 ASSERT(documentSettings());
742 ASSERT(!hasPendingAuthorStyleSheets()); 745 ASSERT(!hasPendingAuthorStyleSheets());
743 746
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 // FIXME: The CSSWG wants to specify that the effects of animations are appl ied before 936 // FIXME: The CSSWG wants to specify that the effects of animations are appl ied before
934 // important rules, but this currently happens here as we require adjustment to have happened 937 // important rules, but this currently happens here as we require adjustment to have happened
935 // before deciding which properties to transition. 938 // before deciding which properties to transition.
936 applyAnimatedProperties(state, element->pseudoElement(pseudoStyleRequest.pse udoId)); 939 applyAnimatedProperties(state, element->pseudoElement(pseudoStyleRequest.pse udoId));
937 940
938 didAccess(); 941 didAccess();
939 942
940 if (PseudoElement* pseudoElement = element->pseudoElement(pseudoStyleRequest .pseudoId)) 943 if (PseudoElement* pseudoElement = element->pseudoElement(pseudoStyleRequest .pseudoId))
941 setAnimationUpdateIfNeeded(state, *pseudoElement); 944 setAnimationUpdateIfNeeded(state, *pseudoElement);
942 945
946 if (state.style()->hasViewportUnits())
947 document().setHasViewportUnits();
948
943 // Now return the style. 949 // Now return the style.
944 return state.takeStyle(); 950 return state.takeStyle();
945 } 951 }
946 952
947 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex) 953 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex)
948 { 954 {
949 ASSERT(!hasPendingAuthorStyleSheets()); 955 ASSERT(!hasPendingAuthorStyleSheets());
950 resetDirectionAndWritingModeOnDocument(document()); 956 resetDirectionAndWritingModeOnDocument(document());
951 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style. 957 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style.
952 958
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) { 1044 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) {
1039 if (scopedResolver->checkRegionStyle(regionElement)) 1045 if (scopedResolver->checkRegionStyle(regionElement))
1040 return true; 1046 return true;
1041 } 1047 }
1042 return false; 1048 return false;
1043 } 1049 }
1044 1050
1045 void StyleResolver::updateFont(StyleResolverState& state) 1051 void StyleResolver::updateFont(StyleResolverState& state)
1046 { 1052 {
1047 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.parentStyle(), state.style()); 1053 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.parentStyle(), state.style());
1054 if (state.fontBuilder().fontSizeHasViewportUnits())
1055 state.style()->setHasViewportUnits();
1048 } 1056 }
1049 1057
1050 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude) 1058 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude)
1051 { 1059 {
1052 ASSERT(element); 1060 ASSERT(element);
1053 StyleResolverState state(document(), element); 1061 StyleResolverState state(document(), element);
1054 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta te.style()); 1062 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta te.style());
1055 collector.setMode(SelectorChecker::CollectingStyleRules); 1063 collector.setMode(SelectorChecker::CollectingStyleRules);
1056 collectPseudoRulesForElement(element, collector, NOPSEUDO, rulesToInclude); 1064 collectPseudoRulesForElement(element, collector, NOPSEUDO, rulesToInclude);
1057 return collector.matchedStyleRuleList(); 1065 return collector.matchedStyleRuleList();
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties , unsigned size) 1294 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties , unsigned size)
1287 { 1295 {
1288 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size ); 1296 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size );
1289 } 1297 }
1290 1298
1291 void StyleResolver::invalidateMatchedPropertiesCache() 1299 void StyleResolver::invalidateMatchedPropertiesCache()
1292 { 1300 {
1293 m_matchedPropertiesCache.clear(); 1301 m_matchedPropertiesCache.clear();
1294 } 1302 }
1295 1303
1304 void StyleResolver::notifyResizeForViewportUnits()
1305 {
1306 collectViewportRules();
1307 m_matchedPropertiesCache.clearViewportDependent();
1308 }
1309
1296 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc hResult& matchResult) 1310 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc hResult& matchResult)
1297 { 1311 {
1298 const Element* element = state.element(); 1312 const Element* element = state.element();
1299 ASSERT(element); 1313 ASSERT(element);
1300 1314
1301 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyApply); 1315 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyApply);
1302 1316
1303 unsigned cacheHash = matchResult.isCacheable ? computeMatchedPropertiesHash( matchResult.matchedProperties.data(), matchResult.matchedProperties.size()) : 0; 1317 unsigned cacheHash = matchResult.isCacheable ? computeMatchedPropertiesHash( matchResult.matchedProperties.data(), matchResult.matchedProperties.size()) : 0;
1304 bool applyInheritedOnly = false; 1318 bool applyInheritedOnly = false;
1305 const CachedMatchedProperties* cachedMatchedProperties = 0; 1319 const CachedMatchedProperties* cachedMatchedProperties = 0;
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1451 } 1465 }
1452 } 1466 }
1453 } 1467 }
1454 1468
1455 void StyleResolver::addMediaQueryResults(const MediaQueryResultList& list) 1469 void StyleResolver::addMediaQueryResults(const MediaQueryResultList& list)
1456 { 1470 {
1457 for (size_t i = 0; i < list.size(); ++i) 1471 for (size_t i = 0; i < list.size(); ++i)
1458 m_viewportDependentMediaQueryResults.append(list[i]); 1472 m_viewportDependentMediaQueryResults.append(list[i]);
1459 } 1473 }
1460 1474
1461 bool StyleResolver::affectedByViewportChange() const 1475 bool StyleResolver::mediaQueryAffectedByViewportChange() const
1462 { 1476 {
1463 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { 1477 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) {
1464 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio n) != m_viewportDependentMediaQueryResults[i]->m_result) 1478 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio n) != m_viewportDependentMediaQueryResults[i]->m_result)
1465 return true; 1479 return true;
1466 } 1480 }
1467 return false; 1481 return false;
1468 } 1482 }
1469 1483
1470 } // namespace WebCore 1484 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | Source/core/css/resolver/StyleResolverState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698