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 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 else | 707 else |
708 style = RenderStyle::create(); | 708 style = RenderStyle::create(); |
709 StyleResolverState state(element.document(), &element); | 709 StyleResolverState state(element.document(), &element); |
710 state.setStyle(style); | 710 state.setStyle(style); |
711 return createAnimatableValueSnapshot(state, property, value); | 711 return createAnimatableValueSnapshot(state, property, value); |
712 } | 712 } |
713 | 713 |
714 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap
shot(StyleResolverState& state, CSSPropertyID property, CSSValue& value) | 714 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap
shot(StyleResolverState& state, CSSPropertyID property, CSSValue& value) |
715 { | 715 { |
716 StyleBuilder::applyProperty(property, state, &value); | 716 StyleBuilder::applyProperty(property, state, &value); |
717 state.fontBuilder().createFont(state.document().styleEngine()->fontSelector(
), state.style(), state.parentStyle()); | 717 state.fontBuilder().createFont(state.document().styleEngine()->fontSelector(
), state.style()); |
718 return CSSAnimatableValueFactory::create(property, *state.style()); | 718 return CSSAnimatableValueFactory::create(property, *state.style()); |
719 } | 719 } |
720 | 720 |
721 PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElement(Element
* parent, PseudoId pseudoId) | 721 PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElement(Element
* parent, PseudoId pseudoId) |
722 { | 722 { |
723 if (pseudoId == FIRST_LETTER) | 723 if (pseudoId == FIRST_LETTER) |
724 return FirstLetterPseudoElement::create(parent); | 724 return FirstLetterPseudoElement::create(parent); |
725 return PseudoElement::create(parent, pseudoId); | 725 return PseudoElement::create(parent, pseudoId); |
726 } | 726 } |
727 | 727 |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 scopedResolver->collectViewportRulesTo(this); | 910 scopedResolver->collectViewportRulesTo(this); |
911 | 911 |
912 viewportStyleResolver()->resolve(); | 912 viewportStyleResolver()->resolve(); |
913 } | 913 } |
914 | 914 |
915 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() | 915 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() |
916 { | 916 { |
917 RefPtr<RenderStyle> style = RenderStyle::create(); | 917 RefPtr<RenderStyle> style = RenderStyle::create(); |
918 FontBuilder fontBuilder(document()); | 918 FontBuilder fontBuilder(document()); |
919 fontBuilder.setInitial(style->effectiveZoom()); | 919 fontBuilder.setInitial(style->effectiveZoom()); |
920 fontBuilder.createFont(document().styleEngine()->fontSelector(), style.get()
, nullptr); | 920 fontBuilder.createFont(document().styleEngine()->fontSelector(), style.get()
); |
921 return style.release(); | 921 return style.release(); |
922 } | 922 } |
923 | 923 |
924 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode) | 924 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode) |
925 { | 925 { |
926 ASSERT(textNode); | 926 ASSERT(textNode); |
927 | 927 |
928 Node* parentNode = NodeRenderingTraversal::parent(*textNode); | 928 Node* parentNode = NodeRenderingTraversal::parent(*textNode); |
929 if (!parentNode || !parentNode->renderStyle()) | 929 if (!parentNode || !parentNode->renderStyle()) |
930 return defaultStyleForElement(); | 930 return defaultStyleForElement(); |
931 return parentNode->renderStyle(); | 931 return parentNode->renderStyle(); |
932 } | 932 } |
933 | 933 |
934 void StyleResolver::updateFont(StyleResolverState& state) | 934 void StyleResolver::updateFont(StyleResolverState& state) |
935 { | 935 { |
936 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta
te.style(), state.parentStyle()); | 936 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta
te.style()); |
937 state.setConversionFontSizes(CSSToLengthConversionData::FontSizes(state.styl
e(), state.rootElementStyle())); | 937 state.setConversionFontSizes(CSSToLengthConversionData::FontSizes(state.styl
e(), state.rootElementStyle())); |
938 state.setConversionZoom(state.style()->effectiveZoom()); | 938 state.setConversionZoom(state.style()->effectiveZoom()); |
939 } | 939 } |
940 | 940 |
941 PassRefPtrWillBeRawPtr<StyleRuleList> StyleResolver::styleRulesForElement(Elemen
t* element, unsigned rulesToInclude) | 941 PassRefPtrWillBeRawPtr<StyleRuleList> StyleResolver::styleRulesForElement(Elemen
t* element, unsigned rulesToInclude) |
942 { | 942 { |
943 ASSERT(element); | 943 ASSERT(element); |
944 StyleResolverState state(document(), element); | 944 StyleResolverState state(document(), element); |
945 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style()); | 945 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style()); |
946 collector.setMode(SelectorChecker::CollectingStyleRules); | 946 collector.setMode(SelectorChecker::CollectingStyleRules); |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1356 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyCacheInheritedHi
t); | 1356 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyCacheInheritedHi
t); |
1357 | 1357 |
1358 EInsideLink linkStatus = state.style()->insideLink(); | 1358 EInsideLink linkStatus = state.style()->insideLink(); |
1359 // If the cache item parent style has identical inherited properties
to the current parent style then the | 1359 // If the cache item parent style has identical inherited properties
to the current parent style then the |
1360 // resulting style will be identical too. We copy the inherited prop
erties over from the cache and are done. | 1360 // resulting style will be identical too. We copy the inherited prop
erties over from the cache and are done. |
1361 state.style()->inheritFrom(cachedMatchedProperties->renderStyle.get(
)); | 1361 state.style()->inheritFrom(cachedMatchedProperties->renderStyle.get(
)); |
1362 | 1362 |
1363 // Unfortunately the link status is treated like an inherited proper
ty. We need to explicitly restore it. | 1363 // Unfortunately the link status is treated like an inherited proper
ty. We need to explicitly restore it. |
1364 state.style()->setInsideLink(linkStatus); | 1364 state.style()->setInsideLink(linkStatus); |
1365 | 1365 |
1366 state.fontBuilder().setFontDescription(state.style()->fontDescriptio
n()); | |
1367 | |
1368 updateFont(state); | 1366 updateFont(state); |
1369 | 1367 |
1370 return; | 1368 return; |
1371 } | 1369 } |
1372 applyInheritedOnly = true; | 1370 applyInheritedOnly = true; |
1373 } | 1371 } |
1374 | 1372 |
1375 // Now we have all of the matched rules in the appropriate order. Walk the r
ules and apply | 1373 // Now we have all of the matched rules in the appropriate order. Walk the r
ules and apply |
1376 // high-priority properties first, i.e., those properties that other propert
ies depend on. | 1374 // high-priority properties first, i.e., those properties that other propert
ies depend on. |
1377 // The order is (1) high-priority not important, (2) high-priority important
, (3) normal not important | 1375 // The order is (1) high-priority not important, (2) high-priority important
, (3) normal not important |
1378 // and (4) normal important. | 1376 // and (4) normal important. |
1379 applyMatchedProperties<HighPropertyPriority>(state, matchResult, false, 0, m
atchResult.matchedProperties.size() - 1, applyInheritedOnly); | 1377 applyMatchedProperties<HighPropertyPriority>(state, matchResult, false, 0, m
atchResult.matchedProperties.size() - 1, applyInheritedOnly); |
1380 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInherited
Only); | 1378 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInherited
Only); |
1381 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly); | 1379 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly); |
1382 | 1380 |
1383 if (UNLIKELY(isSVGForeignObjectElement(element))) { | 1381 if (UNLIKELY(isSVGForeignObjectElement(element))) { |
1384 // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignOb
ject content should not be scaled again. | 1382 // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignOb
ject content should not be scaled again. |
1385 // | 1383 // |
1386 // FIXME: The following hijacks the zoom property for foreignObject so t
hat children of foreignObject get the | 1384 // FIXME: The following hijacks the zoom property for foreignObject so t
hat children of foreignObject get the |
1387 // correct font-size in case of zooming. 'zoom' has HighPropertyPriority
, along with other font-related | 1385 // correct font-size in case of zooming. 'zoom' has HighPropertyPriority
, along with other font-related |
1388 // properties used as input to the FontBuilder, so resetting it here may
cause the FontBuilder to recompute the | 1386 // properties used as input to the FontBuilder, so resetting it here may
cause the FontBuilder to recompute the |
1389 // font used as inheritable font for foreignObject content. If we want t
o support zoom on foreignObject we'll | 1387 // font used as inheritable font for foreignObject content. If we want t
o support zoom on foreignObject we'll |
1390 // need to find another way of handling the SVG zoom model. | 1388 // need to find another way of handling the SVG zoom model. |
1391 state.setEffectiveZoom(RenderStyle::initialZoom()); | 1389 state.setEffectiveZoom(RenderStyle::initialZoom()); |
1392 } | 1390 } |
1393 | 1391 |
1394 if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->effecti
veZoom() != state.style()->effectiveZoom()) { | 1392 if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->effecti
veZoom() != state.style()->effectiveZoom()) { |
1395 state.fontBuilder().setFontDirty(true); | 1393 state.fontBuilder().didChangeEffectiveZoom(); |
1396 applyInheritedOnly = false; | 1394 applyInheritedOnly = false; |
1397 } | 1395 } |
1398 | 1396 |
1399 // If our font got dirtied, go ahead and update it now. | 1397 // If our font got dirtied, go ahead and update it now. |
1400 updateFont(state); | 1398 updateFont(state); |
1401 | 1399 |
1402 // Many properties depend on the font. If it changes we just apply all prope
rties. | 1400 // Many properties depend on the font. If it changes we just apply all prope
rties. |
1403 if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->fontDes
cription() != state.style()->fontDescription()) | 1401 if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->fontDes
cription() != state.style()->fontDescription()) |
1404 applyInheritedOnly = false; | 1402 applyInheritedOnly = false; |
1405 | 1403 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1527 visitor->trace(m_uncommonAttributeRuleSet); | 1525 visitor->trace(m_uncommonAttributeRuleSet); |
1528 visitor->trace(m_watchedSelectorsRules); | 1526 visitor->trace(m_watchedSelectorsRules); |
1529 visitor->trace(m_treeBoundaryCrossingRules); | 1527 visitor->trace(m_treeBoundaryCrossingRules); |
1530 visitor->trace(m_styleSharingLists); | 1528 visitor->trace(m_styleSharingLists); |
1531 visitor->trace(m_pendingStyleSheets); | 1529 visitor->trace(m_pendingStyleSheets); |
1532 visitor->trace(m_document); | 1530 visitor->trace(m_document); |
1533 #endif | 1531 #endif |
1534 } | 1532 } |
1535 | 1533 |
1536 } // namespace blink | 1534 } // namespace blink |
OLD | NEW |