summaryrefslogtreecommitdiff
path: root/src/css.cc
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-01-30 21:03:14 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-01-30 21:03:14 +0100
commit728e69c56a0fd440af3ae0e2c3d18ab263ad248a (patch)
treefac5b50f2db77e6b218c3846e088a7305bf03a8c /src/css.cc
parent05581a769d934cf6231cd112c917ddde949354b4 (diff)
insert rules in correct order
Diffstat (limited to 'src/css.cc')
-rw-r--r--src/css.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/css.cc b/src/css.cc
index 6fe0e8fb..abc08231 100644
--- a/src/css.cc
+++ b/src/css.cc
@@ -237,6 +237,16 @@ void CssRule::print () {
props->print ();
}
+void CssStyleSheet::RuleList::insert (CssRule *rule) {
+ increase ();
+ int i = size () - 1;
+
+ while (i > 0 && rule->specificity () < get (i - 1)->specificity ())
+ *getRef (i) = get (i - 1);
+
+ *getRef (i) = rule;
+}
+
CssStyleSheet::CssStyleSheet () {
for (int i = 0; i < ntags; i++)
elementTable[i] = new RuleList ();
@@ -283,10 +293,8 @@ void CssStyleSheet::addRule (CssRule *rule) {
ruleList = anyTable;
}
- if (ruleList) {
- ruleList->increase ();
- *ruleList->getRef (ruleList->size() - 1) = rule;
- }
+ if (ruleList)
+ ruleList->insert (rule);
}
void CssStyleSheet::apply (CssPropertyList *props,