зеркало из https://github.com/mozilla/gecko-dev.git
Split nsStyleSet::ResolveStyleForRules into two different APIs for the two different types of uses. (Bug 147777) r=bzbarsky
This commit is contained in:
Родитель
9994fdbfbf
Коммит
681596fa66
|
@ -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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче