OLD | NEW |
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 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 } | 555 } |
556 } | 556 } |
557 } | 557 } |
558 } | 558 } |
559 | 559 |
560 // Seamless iframes want to inherit their font from their parent iframe, so
early return before setting the font. | 560 // Seamless iframes want to inherit their font from their parent iframe, so
early return before setting the font. |
561 if (seamlessWithParent) | 561 if (seamlessWithParent) |
562 return documentStyle.release(); | 562 return documentStyle.release(); |
563 | 563 |
564 FontBuilder fontBuilder; | 564 FontBuilder fontBuilder; |
565 fontBuilder.initForStyleResolve(&document, documentStyle.get(), document.isS
VGDocument()); | 565 fontBuilder.initForStyleResolve(document, documentStyle.get(), document.isSV
GDocument()); |
566 fontBuilder.createFontForDocument(fontSelector, documentStyle.get()); | 566 fontBuilder.createFontForDocument(fontSelector, documentStyle.get()); |
567 | 567 |
568 return documentStyle.release(); | 568 return documentStyle.release(); |
569 } | 569 } |
570 | 570 |
571 // FIXME: This is duplicated with StyleAdjuster.cpp | 571 // FIXME: This is duplicated with StyleAdjuster.cpp |
572 // Perhaps this should move onto ElementResolveContext or even Element? | 572 // Perhaps this should move onto ElementResolveContext or even Element? |
573 static inline bool isAtShadowBoundary(const Element* element) | 573 static inline bool isAtShadowBoundary(const Element* element) |
574 { | 574 { |
575 if (!element) | 575 if (!element) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 } | 628 } |
629 // contenteditable attribute (implemented by -webkit-user-modify) should | 629 // contenteditable attribute (implemented by -webkit-user-modify) should |
630 // be propagated from shadow host to distributed node. | 630 // be propagated from shadow host to distributed node. |
631 if (state.distributedToInsertionPoint()) { | 631 if (state.distributedToInsertionPoint()) { |
632 if (Element* parent = element->parentElement()) { | 632 if (Element* parent = element->parentElement()) { |
633 if (RenderStyle* styleOfShadowHost = parent->renderStyle()) | 633 if (RenderStyle* styleOfShadowHost = parent->renderStyle()) |
634 state.style()->setUserModify(styleOfShadowHost->userModify()); | 634 state.style()->setUserModify(styleOfShadowHost->userModify()); |
635 } | 635 } |
636 } | 636 } |
637 | 637 |
638 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st
ate.useSVGZoomRules()); | 638 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta
te.useSVGZoomRules()); |
639 | 639 |
640 if (element->isLink()) { | 640 if (element->isLink()) { |
641 state.style()->setIsLink(true); | 641 state.style()->setIsLink(true); |
642 EInsideLink linkState = state.elementLinkState(); | 642 EInsideLink linkState = state.elementLinkState(); |
643 if (linkState != NotInsideLink) { | 643 if (linkState != NotInsideLink) { |
644 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme
nt, CSSSelector::PseudoVisited); | 644 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme
nt, CSSSelector::PseudoVisited); |
645 if (forceVisited) | 645 if (forceVisited) |
646 linkState = InsideVisitedLink; | 646 linkState = InsideVisitedLink; |
647 } | 647 } |
648 state.style()->setInsideLink(linkState); | 648 state.style()->setInsideLink(linkState); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
699 MatchResult result; | 699 MatchResult result; |
700 if (keyframe->properties()) | 700 if (keyframe->properties()) |
701 result.addMatchedProperties(keyframe->properties()); | 701 result.addMatchedProperties(keyframe->properties()); |
702 | 702 |
703 ASSERT(!state.style()); | 703 ASSERT(!state.style()); |
704 | 704 |
705 // Create the style | 705 // Create the style |
706 state.setStyle(RenderStyle::clone(elementStyle)); | 706 state.setStyle(RenderStyle::clone(elementStyle)); |
707 state.setLineHeightValue(0); | 707 state.setLineHeightValue(0); |
708 | 708 |
709 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st
ate.useSVGZoomRules()); | 709 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta
te.useSVGZoomRules()); |
710 | 710 |
711 // We don't need to bother with !important. Since there is only ever one | 711 // We don't need to bother with !important. Since there is only ever one |
712 // decl, there's nothing to override. So just add the first properties. | 712 // decl, there's nothing to override. So just add the first properties. |
713 bool inheritedOnly = false; | 713 bool inheritedOnly = false; |
714 if (keyframe->properties()) { | 714 if (keyframe->properties()) { |
715 // FIXME: Can't keyframes contain variables? | 715 // FIXME: Can't keyframes contain variables? |
716 applyMatchedProperties<AnimationProperties>(state, result, false, 0, res
ult.matchedProperties.size() - 1, inheritedOnly); | 716 applyMatchedProperties<AnimationProperties>(state, result, false, 0, res
ult.matchedProperties.size() - 1, inheritedOnly); |
717 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0,
result.matchedProperties.size() - 1, inheritedOnly); | 717 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0,
result.matchedProperties.size() - 1, inheritedOnly); |
718 } | 718 } |
719 | 719 |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
918 StyleResolverState state(document(), e, parentStyle); | 918 StyleResolverState state(document(), e, parentStyle); |
919 | 919 |
920 if (pseudoStyleRequest.allowsInheritance(state.parentStyle())) { | 920 if (pseudoStyleRequest.allowsInheritance(state.parentStyle())) { |
921 state.setStyle(RenderStyle::create()); | 921 state.setStyle(RenderStyle::create()); |
922 state.style()->inheritFrom(state.parentStyle()); | 922 state.style()->inheritFrom(state.parentStyle()); |
923 } else { | 923 } else { |
924 state.setStyle(defaultStyleForElement()); | 924 state.setStyle(defaultStyleForElement()); |
925 state.setParentStyle(RenderStyle::clone(state.style())); | 925 state.setParentStyle(RenderStyle::clone(state.style())); |
926 } | 926 } |
927 | 927 |
928 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st
ate.useSVGZoomRules()); | 928 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta
te.useSVGZoomRules()); |
929 | 929 |
930 // Since we don't use pseudo-elements in any of our quirk/print | 930 // Since we don't use pseudo-elements in any of our quirk/print |
931 // user agent rules, don't waste time walking those rules. | 931 // user agent rules, don't waste time walking those rules. |
932 | 932 |
933 { | 933 { |
934 // Check UA, user and author rules. | 934 // Check UA, user and author rules. |
935 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style()); | 935 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style()); |
936 collector.setPseudoStyleRequest(pseudoStyleRequest); | 936 collector.setPseudoStyleRequest(pseudoStyleRequest); |
937 | 937 |
938 matchUARules(collector); | 938 matchUARules(collector); |
(...skipping 28 matching lines...) Expand all Loading... |
967 } | 967 } |
968 | 968 |
969 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex) | 969 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex) |
970 { | 970 { |
971 resetDirectionAndWritingModeOnDocument(document()); | 971 resetDirectionAndWritingModeOnDocument(document()); |
972 StyleResolverState state(document(), document().documentElement()); // m_roo
tElementStyle will be set to the document style. | 972 StyleResolverState state(document(), document().documentElement()); // m_roo
tElementStyle will be set to the document style. |
973 | 973 |
974 state.setStyle(RenderStyle::create()); | 974 state.setStyle(RenderStyle::create()); |
975 state.style()->inheritFrom(state.rootElementStyle()); | 975 state.style()->inheritFrom(state.rootElementStyle()); |
976 | 976 |
977 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st
ate.useSVGZoomRules()); | 977 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta
te.useSVGZoomRules()); |
978 | 978 |
979 PageRuleCollector collector(state.elementContext(), pageIndex); | 979 PageRuleCollector collector(state.elementContext(), pageIndex); |
980 | 980 |
981 collector.matchPageRules(CSSDefaultStyleSheets::defaultPrintStyle); | 981 collector.matchPageRules(CSSDefaultStyleSheets::defaultPrintStyle); |
982 collector.matchPageRules(m_ruleSets.userStyle()); | 982 collector.matchPageRules(m_ruleSets.userStyle()); |
983 | 983 |
984 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor
Document()) | 984 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor
Document()) |
985 scopedResolver->matchPageRules(collector); | 985 scopedResolver->matchPageRules(collector); |
986 | 986 |
987 state.setLineHeightValue(0); | 987 state.setLineHeightValue(0); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 | 1033 |
1034 const Vector<StyleRuleViewport*>& viewportRules = rules->viewportRules(); | 1034 const Vector<StyleRuleViewport*>& viewportRules = rules->viewportRules(); |
1035 for (size_t i = 0; i < viewportRules.size(); ++i) | 1035 for (size_t i = 0; i < viewportRules.size(); ++i) |
1036 viewportStyleResolver()->addViewportRule(viewportRules[i]); | 1036 viewportStyleResolver()->addViewportRule(viewportRules[i]); |
1037 } | 1037 } |
1038 | 1038 |
1039 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() | 1039 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() |
1040 { | 1040 { |
1041 StyleResolverState state(document(), 0); | 1041 StyleResolverState state(document(), 0); |
1042 state.setStyle(RenderStyle::create()); | 1042 state.setStyle(RenderStyle::create()); |
1043 state.fontBuilder().initForStyleResolve(&document(), state.style(), state.us
eSVGZoomRules()); | 1043 state.fontBuilder().initForStyleResolve(document(), state.style(), state.use
SVGZoomRules()); |
1044 state.style()->setLineHeight(RenderStyle::initialLineHeight()); | 1044 state.style()->setLineHeight(RenderStyle::initialLineHeight()); |
1045 state.setLineHeightValue(0); | 1045 state.setLineHeightValue(0); |
1046 state.fontBuilder().setInitial(state.style()->effectiveZoom()); | 1046 state.fontBuilder().setInitial(state.style()->effectiveZoom()); |
1047 state.style()->font().update(fontSelector()); | 1047 state.style()->font().update(fontSelector()); |
1048 return state.takeStyle(); | 1048 return state.takeStyle(); |
1049 } | 1049 } |
1050 | 1050 |
1051 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode) | 1051 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode) |
1052 { | 1052 { |
1053 ASSERT(textNode); | 1053 ASSERT(textNode); |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1479 | 1479 |
1480 CSSPropertyValue::CSSPropertyValue(CSSPropertyID id, const StylePropertySet& pro
pertySet) | 1480 CSSPropertyValue::CSSPropertyValue(CSSPropertyID id, const StylePropertySet& pro
pertySet) |
1481 : property(id), value(propertySet.getPropertyCSSValue(id).get()) | 1481 : property(id), value(propertySet.getPropertyCSSValue(id).get()) |
1482 { } | 1482 { } |
1483 | 1483 |
1484 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s
ize_t count, RenderStyle* style) | 1484 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s
ize_t count, RenderStyle* style) |
1485 { | 1485 { |
1486 StyleResolverState state(document(), 0, style); | 1486 StyleResolverState state(document(), 0, style); |
1487 state.setStyle(style); | 1487 state.setStyle(style); |
1488 | 1488 |
1489 state.fontBuilder().initForStyleResolve(&document(), style, state.useSVGZoom
Rules()); | 1489 state.fontBuilder().initForStyleResolve(document(), style, state.useSVGZoomR
ules()); |
1490 | 1490 |
1491 for (size_t i = 0; i < count; ++i) { | 1491 for (size_t i = 0; i < count; ++i) { |
1492 if (properties[i].value) { | 1492 if (properties[i].value) { |
1493 // As described in BUG66291, setting font-size and line-height on a
font may entail a CSSPrimitiveValue::computeLengthDouble call, | 1493 // As described in BUG66291, setting font-size and line-height on a
font may entail a CSSPrimitiveValue::computeLengthDouble call, |
1494 // which assumes the fontMetrics are available for the affected font
, otherwise a crash occurs (see http://trac.webkit.org/changeset/96122). | 1494 // which assumes the fontMetrics are available for the affected font
, otherwise a crash occurs (see http://trac.webkit.org/changeset/96122). |
1495 // The updateFont() call below updates the fontMetrics and ensure th
e proper setting of font-size and line-height. | 1495 // The updateFont() call below updates the fontMetrics and ensure th
e proper setting of font-size and line-height. |
1496 switch (properties[i].property) { | 1496 switch (properties[i].property) { |
1497 case CSSPropertyFontSize: | 1497 case CSSPropertyFontSize: |
1498 case CSSPropertyLineHeight: | 1498 case CSSPropertyLineHeight: |
1499 updateFont(state); | 1499 updateFont(state); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1550 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties
SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa
che); | 1550 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties
SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa
che); |
1551 | 1551 |
1552 fprintf(stderr, "Total:\n"); | 1552 fprintf(stderr, "Total:\n"); |
1553 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS
tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, | 1553 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS
tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, |
1554 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa
tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch
edPropertiesEnteredIntoCache); | 1554 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa
tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch
edPropertiesEnteredIntoCache); |
1555 fprintf(stderr, "-----------------------------------------------------------
---------------------\n"); | 1555 fprintf(stderr, "-----------------------------------------------------------
---------------------\n"); |
1556 } | 1556 } |
1557 #endif | 1557 #endif |
1558 | 1558 |
1559 } // namespace WebCore | 1559 } // namespace WebCore |
OLD | NEW |