Back to index
An object implementing |nsIStyleRule| (henceforth, a rule) represents immutable stylistic information that either applies or does not apply to a given element. More...
|NS_IMETHOD||MapRuleInfoInto (nsRuleData *aRuleData)=0|
||nsIStyleRule::MapRuleInfoInto| is a request to copy all stylistic data represented by the rule that: |
An object implementing |nsIStyleRule| (henceforth, a rule) represents immutable stylistic information that either applies or does not apply to a given element.
It belongs to an object or group of objects that implement |nsIStyleSheet| and |nsIStyleRuleProcessor| (henceforth, a sheet).
A rule becomes relevant to the computation of style data when |nsIStyleRuleProcessor::RulesMatching| creates a rule node that points to the rule. (A rule node, |nsRuleNode|, is a node in the rule tree, which is a lexicographic tree indexed by rules. The path from the root of the rule tree to the |nsRuleNode| for a given |nsStyleContext| contains exactly the rules that match the element that the style context is for, in priority (weight, origin, specificity) order.)
The computation of style data uses the rule tree, which calls |nsIStyleRule::MapRuleInfoInto| below.
It is worth emphasizing that the data represented by a rule implementation are immutable. When the data need to be changed, a new rule object must be created. Failing to do this will lead to bugs in the handling of dynamic style changes, since the rule tree caches the results of |MapRuleInfoInto|.
|nsIStyleRule| objects are owned by |nsRuleNode| objects (in addition to typically being owned by their sheet), which are in turn garbage collected (with the garbage collection roots being style contexts).
|nsIStyleRule::MapRuleInfoInto| is a request to copy all stylistic data represented by the rule that:
Implemented in CSSStyleRuleImpl, CSSImportantRule, nsHTMLStyleSheet::TableUngroupedColRule, nsHTMLStyleSheet::TableColRule, nsHTMLStyleSheet::TableColgroupRule, nsHTMLStyleSheet::TableRowRule, nsHTMLStyleSheet::TableTbodyRule, nsHTMLStyleSheet::TableTHRule, nsHTMLStyleSheet::GenericTableRule, nsHTMLStyleSheet::HTMLColorRule, CSSFirstLetterRule, nsMappedAttributes, CSSFirstLineRule, and BodyRule.