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

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

Issue 671613003: Eliminate FontBuilder::initForStyleResolve. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 2 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 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 } 604 }
605 // contenteditable attribute (implemented by -webkit-user-modify) should 605 // contenteditable attribute (implemented by -webkit-user-modify) should
606 // be propagated from shadow host to distributed node. 606 // be propagated from shadow host to distributed node.
607 if (state.distributedToInsertionPoint()) { 607 if (state.distributedToInsertionPoint()) {
608 if (Element* parent = element->parentElement()) { 608 if (Element* parent = element->parentElement()) {
609 if (RenderStyle* styleOfShadowHost = parent->renderStyle()) 609 if (RenderStyle* styleOfShadowHost = parent->renderStyle())
610 state.style()->setUserModify(styleOfShadowHost->userModify()); 610 state.style()->setUserModify(styleOfShadowHost->userModify());
611 } 611 }
612 } 612 }
613 613
614 state.fontBuilder().initForStyleResolve(state.document(), state.style());
615
616 if (element->isLink()) { 614 if (element->isLink()) {
617 state.style()->setIsLink(true); 615 state.style()->setIsLink(true);
618 EInsideLink linkState = state.elementLinkState(); 616 EInsideLink linkState = state.elementLinkState();
619 if (linkState != NotInsideLink) { 617 if (linkState != NotInsideLink) {
620 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme nt, CSSSelector::PseudoVisited); 618 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme nt, CSSSelector::PseudoVisited);
621 if (forceVisited) 619 if (forceVisited)
622 linkState = InsideVisitedLink; 620 linkState = InsideVisitedLink;
623 } 621 }
624 state.style()->setInsideLink(linkState); 622 state.style()->setInsideLink(linkState);
625 } 623 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 677
680 MatchResult result; 678 MatchResult result;
681 result.addMatchedProperties(&keyframe->properties()); 679 result.addMatchedProperties(&keyframe->properties());
682 680
683 ASSERT(!state.style()); 681 ASSERT(!state.style());
684 682
685 // Create the style 683 // Create the style
686 state.setStyle(RenderStyle::clone(&elementStyle)); 684 state.setStyle(RenderStyle::clone(&elementStyle));
687 state.setLineHeightValue(0); 685 state.setLineHeightValue(0);
688 686
689 state.fontBuilder().initForStyleResolve(state.document(), state.style());
690
691 // We don't need to bother with !important. Since there is only ever one 687 // We don't need to bother with !important. Since there is only ever one
692 // decl, there's nothing to override. So just add the first properties. 688 // decl, there's nothing to override. So just add the first properties.
693 // We also don't need to bother with animation properties since the only 689 // We also don't need to bother with animation properties since the only
694 // relevant one is animation-timing-function and we special-case that in 690 // relevant one is animation-timing-function and we special-case that in
695 // CSSAnimations.cpp 691 // CSSAnimations.cpp
696 bool inheritedOnly = false; 692 bool inheritedOnly = false;
697 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, resu lt.matchedProperties.size() - 1, inheritedOnly); 693 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, resu lt.matchedProperties.size() - 1, inheritedOnly);
698 694
699 // If our font got dirtied, go ahead and update it now. 695 // If our font got dirtied, go ahead and update it now.
700 updateFont(state); 696 updateFont(state);
(...skipping 16 matching lines...) Expand all
717 // FIXME: Remove this when animate() switches away from resolution-dependent par sing. 713 // FIXME: Remove this when animate() switches away from resolution-dependent par sing.
718 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(Element& element, CSSPropertyID property, CSSValue& value) 714 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(Element& element, CSSPropertyID property, CSSValue& value)
719 { 715 {
720 RefPtr<RenderStyle> style; 716 RefPtr<RenderStyle> style;
721 if (element.renderStyle()) 717 if (element.renderStyle())
722 style = RenderStyle::clone(element.renderStyle()); 718 style = RenderStyle::clone(element.renderStyle());
723 else 719 else
724 style = RenderStyle::create(); 720 style = RenderStyle::create();
725 StyleResolverState state(element.document(), &element); 721 StyleResolverState state(element.document(), &element);
726 state.setStyle(style); 722 state.setStyle(style);
727 state.fontBuilder().initForStyleResolve(state.document(), state.style());
728 return createAnimatableValueSnapshot(state, property, value); 723 return createAnimatableValueSnapshot(state, property, value);
729 } 724 }
730 725
731 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(StyleResolverState& state, CSSPropertyID property, CSSValue& value) 726 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(StyleResolverState& state, CSSPropertyID property, CSSValue& value)
732 { 727 {
733 StyleBuilder::applyProperty(property, state, &value); 728 StyleBuilder::applyProperty(property, state, &value);
734 return CSSAnimatableValueFactory::create(property, *state.style()); 729 return CSSAnimatableValueFactory::create(property, *state.style());
735 } 730 }
736 731
737 PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElement(Element * parent, PseudoId pseudoId) 732 PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElement(Element * parent, PseudoId pseudoId)
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 state.setStyle(RenderStyle::clone(baseRenderStyle)); 798 state.setStyle(RenderStyle::clone(baseRenderStyle));
804 } else if (pseudoStyleRequest.allowsInheritance(state.parentStyle())) { 799 } else if (pseudoStyleRequest.allowsInheritance(state.parentStyle())) {
805 state.setStyle(RenderStyle::create()); 800 state.setStyle(RenderStyle::create());
806 state.style()->inheritFrom(state.parentStyle()); 801 state.style()->inheritFrom(state.parentStyle());
807 } else { 802 } else {
808 state.setStyle(defaultStyleForElement()); 803 state.setStyle(defaultStyleForElement());
809 state.setParentStyle(RenderStyle::clone(state.style())); 804 state.setParentStyle(RenderStyle::clone(state.style()));
810 } 805 }
811 806
812 state.style()->setStyleType(pseudoStyleRequest.pseudoId); 807 state.style()->setStyleType(pseudoStyleRequest.pseudoId);
813 state.fontBuilder().initForStyleResolve(state.document(), state.style());
814 808
815 // Since we don't use pseudo-elements in any of our quirk/print 809 // Since we don't use pseudo-elements in any of our quirk/print
816 // user agent rules, don't waste time walking those rules. 810 // user agent rules, don't waste time walking those rules.
817 811
818 if (!baseRenderStyle) { 812 if (!baseRenderStyle) {
819 // Check UA, user and author rules. 813 // Check UA, user and author rules.
820 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style()); 814 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style());
821 collector.setPseudoStyleRequest(pseudoStyleRequest); 815 collector.setPseudoStyleRequest(pseudoStyleRequest);
822 816
823 matchUARules(collector); 817 matchUARules(collector);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 { 874 {
881 ASSERT(!hasPendingAuthorStyleSheets()); 875 ASSERT(!hasPendingAuthorStyleSheets());
882 resetDirectionAndWritingModeOnDocument(document()); 876 resetDirectionAndWritingModeOnDocument(document());
883 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style. 877 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style.
884 878
885 state.setStyle(RenderStyle::create()); 879 state.setStyle(RenderStyle::create());
886 const RenderStyle* rootElementStyle = state.rootElementStyle() ? state.rootE lementStyle() : document().renderStyle(); 880 const RenderStyle* rootElementStyle = state.rootElementStyle() ? state.rootE lementStyle() : document().renderStyle();
887 ASSERT(rootElementStyle); 881 ASSERT(rootElementStyle);
888 state.style()->inheritFrom(rootElementStyle); 882 state.style()->inheritFrom(rootElementStyle);
889 883
890 state.fontBuilder().initForStyleResolve(state.document(), state.style());
891
892 PageRuleCollector collector(rootElementStyle, pageIndex); 884 PageRuleCollector collector(rootElementStyle, pageIndex);
893 885
894 collector.matchPageRules(CSSDefaultStyleSheets::instance().defaultPrintStyle ()); 886 collector.matchPageRules(CSSDefaultStyleSheets::instance().defaultPrintStyle ());
895 887
896 if (ScopedStyleResolver* scopedResolver = document().scopedStyleResolver()) 888 if (ScopedStyleResolver* scopedResolver = document().scopedStyleResolver())
897 scopedResolver->matchPageRules(collector); 889 scopedResolver->matchPageRules(collector);
898 890
899 state.setLineHeightValue(0); 891 state.setLineHeightValue(0);
900 bool inheritedOnly = false; 892 bool inheritedOnly = false;
901 893
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 if (ScopedStyleResolver* scopedResolver = document().scopedStyleResolver()) 927 if (ScopedStyleResolver* scopedResolver = document().scopedStyleResolver())
936 scopedResolver->collectViewportRulesTo(this); 928 scopedResolver->collectViewportRulesTo(this);
937 929
938 viewportStyleResolver()->resolve(); 930 viewportStyleResolver()->resolve();
939 } 931 }
940 932
941 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() 933 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement()
942 { 934 {
943 StyleResolverState state(document(), 0); 935 StyleResolverState state(document(), 0);
944 state.setStyle(RenderStyle::create()); 936 state.setStyle(RenderStyle::create());
945 state.fontBuilder().initForStyleResolve(document(), state.style());
946 state.style()->setLineHeight(RenderStyle::initialLineHeight()); 937 state.style()->setLineHeight(RenderStyle::initialLineHeight());
947 state.setLineHeightValue(0); 938 state.setLineHeightValue(0);
948 state.fontBuilder().setInitial(state.style()->effectiveZoom()); 939 state.fontBuilder().setInitial(state.style()->effectiveZoom());
949 state.style()->font().update(document().styleEngine()->fontSelector()); 940 state.style()->font().update(document().styleEngine()->fontSelector());
950 return state.takeStyle(); 941 return state.takeStyle();
951 } 942 }
952 943
953 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode) 944 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode)
954 { 945 {
955 ASSERT(textNode); 946 ASSERT(textNode);
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 fprintf(stderr, "%s\n", m_styleResolverStats->report().utf8().data()); 1561 fprintf(stderr, "%s\n", m_styleResolverStats->report().utf8().data());
1571 fprintf(stderr, "== Totals ==\n"); 1562 fprintf(stderr, "== Totals ==\n");
1572 fprintf(stderr, "%s\n", m_styleResolverStatsTotals->report().utf8().data()); 1563 fprintf(stderr, "%s\n", m_styleResolverStatsTotals->report().utf8().data());
1573 } 1564 }
1574 1565
1575 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s ize_t count, RenderStyle* style) 1566 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s ize_t count, RenderStyle* style)
1576 { 1567 {
1577 StyleResolverState state(document(), document().documentElement(), style); 1568 StyleResolverState state(document(), document().documentElement(), style);
1578 state.setStyle(style); 1569 state.setStyle(style);
1579 1570
1580 state.fontBuilder().initForStyleResolve(document(), style);
1581
1582 for (size_t i = 0; i < count; ++i) { 1571 for (size_t i = 0; i < count; ++i) {
1583 if (properties[i].value) { 1572 if (properties[i].value) {
1584 // As described in BUG66291, setting font-size and line-height on a font may entail a CSSPrimitiveValue::computeLengthDouble call, 1573 // As described in BUG66291, setting font-size and line-height on a font may entail a CSSPrimitiveValue::computeLengthDouble call,
1585 // which assumes the fontMetrics are available for the affected font , otherwise a crash occurs (see http://trac.webkit.org/changeset/96122). 1574 // which assumes the fontMetrics are available for the affected font , otherwise a crash occurs (see http://trac.webkit.org/changeset/96122).
1586 // The updateFont() call below updates the fontMetrics and ensure th e proper setting of font-size and line-height. 1575 // The updateFont() call below updates the fontMetrics and ensure th e proper setting of font-size and line-height.
1587 switch (properties[i].property) { 1576 switch (properties[i].property) {
1588 case CSSPropertyFontSize: 1577 case CSSPropertyFontSize:
1589 case CSSPropertyLineHeight: 1578 case CSSPropertyLineHeight:
1590 updateFont(state); 1579 updateFont(state);
1591 break; 1580 break;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1625 visitor->trace(m_uncommonAttributeRuleSet); 1614 visitor->trace(m_uncommonAttributeRuleSet);
1626 visitor->trace(m_watchedSelectorsRules); 1615 visitor->trace(m_watchedSelectorsRules);
1627 visitor->trace(m_treeBoundaryCrossingRules); 1616 visitor->trace(m_treeBoundaryCrossingRules);
1628 visitor->trace(m_styleSharingLists); 1617 visitor->trace(m_styleSharingLists);
1629 visitor->trace(m_pendingStyleSheets); 1618 visitor->trace(m_pendingStyleSheets);
1630 visitor->trace(m_document); 1619 visitor->trace(m_document);
1631 #endif 1620 #endif
1632 } 1621 }
1633 1622
1634 } // namespace blink 1623 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/resolver/FontBuilderTest.cpp ('k') | Source/core/css/resolver/StyleResolverState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698