Split nsStyleSet::ResolveStyleForRules into two different APIs for the two different types of uses. (Bug 147777) r=bzbarsky

This commit is contained in:
L. David Baron 2010-04-02 18:58:25 -07:00
Родитель 9994fdbfbf
Коммит 681596fa66
5 изменённых файлов: 34 добавлений и 32 удалений

Просмотреть файл

@ -2028,19 +2028,14 @@ nsCanvasRenderingContext2D::SetFont(const nsAString& font)
return rv;
nsCOMArray<nsIStyleRule> parentRules;
parentRules.AppendObject(parentRule);
parentContext =
styleSet->ResolveStyleForRules(nsnull, nsnull,
nsCSSPseudoElements::ePseudo_NotPseudoElement,
nsnull, parentRules);
parentContext = styleSet->ResolveStyleForRules(nsnull, parentRules);
}
if (!parentContext)
return NS_ERROR_FAILURE;
nsRefPtr<nsStyleContext> sc =
styleSet->ResolveStyleForRules(parentContext, nsnull,
nsCSSPseudoElements::ePseudo_NotPseudoElement,
nsnull, rules);
styleSet->ResolveStyleForRules(parentContext, rules);
if (!sc)
return NS_ERROR_FAILURE;
const nsStyleFont* fontStyle = sc->GetStyleFont();

Просмотреть файл

@ -747,12 +747,8 @@ TryStartingTransition(nsPresContext *aPresContext, nsIContent *aContent,
if (coverRule) {
nsCOMArray<nsIStyleRule> rules;
rules.AppendObject(coverRule);
*aNewStyleContext = aPresContext->StyleSet()->ResolveStyleForRules(
(*aNewStyleContext)->GetParent(),
(*aNewStyleContext)->GetPseudo(),
(*aNewStyleContext)->GetPseudoType(),
(*aNewStyleContext)->GetRuleNode(),
rules);
*aNewStyleContext = aPresContext->StyleSet()->
ResolveStyleByAddingRules(*aNewStyleContext, rules);
}
}

Просмотреть файл

@ -1034,11 +1034,7 @@ StyleWithDeclarationAdded(nsCSSProperty aProperty,
nsCOMArray<nsIStyleRule> ruleArray;
ruleArray.AppendObject(styleRule);
nsStyleSet* styleSet = styleContext->PresContext()->StyleSet();
return styleSet->ResolveStyleForRules(styleContext->GetParent(),
styleContext->GetPseudo(),
styleContext->GetPseudoType(),
styleContext->GetRuleNode(),
ruleArray);
return styleSet->ResolveStyleByAddingRules(styleContext, ruleArray);
}
PRBool

Просмотреть файл

@ -753,16 +753,11 @@ nsStyleSet::ResolveStyleFor(nsIContent* aContent,
already_AddRefed<nsStyleContext>
nsStyleSet::ResolveStyleForRules(nsStyleContext* aParentContext,
nsIAtom* aPseudoTag,
nsCSSPseudoElements::Type aPseudoType,
nsRuleNode *aRuleNode,
const nsCOMArray<nsIStyleRule> &aRules)
{
NS_ENSURE_FALSE(mInShutdown, nsnull);
nsRuleWalker ruleWalker(mRuleTree);
if (aRuleNode)
ruleWalker.SetCurrentNode(aRuleNode);
// FIXME: Perhaps this should be passed in, but it probably doesn't
// matter.
ruleWalker.SetLevel(eDocSheet, PR_FALSE, PR_FALSE);
@ -771,7 +766,26 @@ nsStyleSet::ResolveStyleForRules(nsStyleContext* aParentContext,
}
return GetContext(aParentContext, ruleWalker.CurrentNode(),
aPseudoTag, aPseudoType);
nsnull, nsCSSPseudoElements::ePseudo_NotPseudoElement);
}
already_AddRefed<nsStyleContext>
nsStyleSet::ResolveStyleByAddingRules(nsStyleContext* aBaseContext,
const nsCOMArray<nsIStyleRule> &aRules)
{
NS_ENSURE_FALSE(mInShutdown, nsnull);
nsRuleWalker ruleWalker(mRuleTree);
ruleWalker.SetCurrentNode(aBaseContext->GetRuleNode());
// FIXME: Perhaps this should be passed in, but it probably doesn't
// matter.
ruleWalker.SetLevel(eDocSheet, PR_FALSE, PR_FALSE);
for (PRInt32 i = 0; i < aRules.Count(); i++) {
ruleWalker.Forward(aRules.ObjectAt(i));
}
return GetContext(aBaseContext->GetParent(), ruleWalker.CurrentNode(),
aBaseContext->GetPseudo(),
aBaseContext->GetPseudoType());
}
already_AddRefed<nsStyleContext>

Просмотреть файл

@ -99,18 +99,19 @@ class nsStyleSet
already_AddRefed<nsStyleContext>
ResolveStyleFor(nsIContent* aContent, nsStyleContext* aParentContext);
// Get a style context (with the given parent and pseudo-tag/type) for a
// sequence of style rules consisting of the concatenation of:
// (1) the rule sequence represented by aRuleNode (which is the empty
// sequence if aRuleNode is null or the root of the rule tree), and
// (2) the rules in the |aRules| array.
// Get a style context (with the given parent) for the
// sequence of style rules in the |aRules| array.
already_AddRefed<nsStyleContext>
ResolveStyleForRules(nsStyleContext* aParentContext,
nsIAtom* aPseudoTag,
nsCSSPseudoElements::Type aPseudoType,
nsRuleNode *aRuleNode,
const nsCOMArray<nsIStyleRule> &aRules);
// Get a style context that represents aBaseContext, but as though
// it additionally matched the rules in the aRules array (in that
// order, as more specific than any other rules).
already_AddRefed<nsStyleContext>
ResolveStyleByAddingRules(nsStyleContext* aBaseContext,
const nsCOMArray<nsIStyleRule> &aRules);
// Get a style context for a non-element (which no rules will match),
// such as text nodes, placeholder frames, and the nsFirstLetterFrame
// for everything after the first letter.