| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009 Apple Computer, Inc. | 2 * Copyright (C) 2007, 2008, 2009 Apple Computer, Inc. |
| 3 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 CSSValue* value = property.value(); | 1049 CSSValue* value = property.value(); |
| 1050 if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) | 1050 if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) |
| 1051 if (static_cast<CSSPrimitiveValue*>(value)->primitiveType() == C
SSPrimitiveValue::CSS_PERCENTAGE) | 1051 if (static_cast<CSSPrimitiveValue*>(value)->primitiveType() == C
SSPrimitiveValue::CSS_PERCENTAGE) |
| 1052 if (RefPtr<CSSValue> computedPropertyValue = computedStyleFo
rElement->getPropertyCSSValue(property.id())) | 1052 if (RefPtr<CSSValue> computedPropertyValue = computedStyleFo
rElement->getPropertyCSSValue(property.id())) |
| 1053 fromComputedStyle->addParsedProperty(CSSProperty(propert
y.id(), computedPropertyValue)); | 1053 fromComputedStyle->addParsedProperty(CSSProperty(propert
y.id(), computedPropertyValue)); |
| 1054 } | 1054 } |
| 1055 } | 1055 } |
| 1056 m_mutableStyle->merge(fromComputedStyle.get()); | 1056 m_mutableStyle->merge(fromComputedStyle.get()); |
| 1057 } | 1057 } |
| 1058 | 1058 |
| 1059 static void removePropertiesInStyle(CSSMutableStyleDeclaration* styleToRemovePro
pertiesFrom, CSSMutableStyleDeclaration* style) |
| 1060 { |
| 1061 Vector<int> propertiesToRemove(style->length()); |
| 1062 size_t i = 0; |
| 1063 CSSMutableStyleDeclaration::const_iterator end = style->end(); |
| 1064 for (CSSMutableStyleDeclaration::const_iterator it = style->begin(); it != e
nd; ++it, ++i) |
| 1065 propertiesToRemove[i] = it->id(); |
| 1066 |
| 1067 styleToRemovePropertiesFrom->removePropertiesInSet(propertiesToRemove.data()
, propertiesToRemove.size()); |
| 1068 } |
| 1069 |
| 1059 void EditingStyle::removeStyleFromRulesAndContext(StyledElement* element, Node*
context) | 1070 void EditingStyle::removeStyleFromRulesAndContext(StyledElement* element, Node*
context) |
| 1060 { | 1071 { |
| 1061 ASSERT(element); | 1072 ASSERT(element); |
| 1062 if (!m_mutableStyle) | 1073 if (!m_mutableStyle) |
| 1063 return; | 1074 return; |
| 1064 | 1075 |
| 1065 // 1. Remove style from matched rules because style remain without repeating
it in inline style declaration | 1076 // 1. Remove style from matched rules because style remain without repeating
it in inline style declaration |
| 1066 RefPtr<CSSMutableStyleDeclaration> styleFromMatchedRules = styleFromMatchedR
ulesForElement(element, CSSStyleSelector::AllButEmptyCSSRules); | 1077 RefPtr<CSSMutableStyleDeclaration> styleFromMatchedRules = styleFromMatchedR
ulesForElement(element, CSSStyleSelector::AllButEmptyCSSRules); |
| 1067 if (styleFromMatchedRules && styleFromMatchedRules->length()) | 1078 if (styleFromMatchedRules && styleFromMatchedRules->length()) |
| 1068 m_mutableStyle = getPropertiesNotIn(m_mutableStyle.get(), styleFromMatch
edRules.get()); | 1079 m_mutableStyle = getPropertiesNotIn(m_mutableStyle.get(), styleFromMatch
edRules.get()); |
| 1069 | 1080 |
| 1070 // 2. Remove style present in context and not overriden by matched rules. | 1081 // 2. Remove style present in context and not overriden by matched rules. |
| 1071 RefPtr<EditingStyle> computedStyle = EditingStyle::create(context, EditingIn
heritablePropertiesAndBackgroundColorInEffect); | 1082 RefPtr<EditingStyle> computedStyle = EditingStyle::create(context, EditingIn
heritablePropertiesAndBackgroundColorInEffect); |
| 1072 if (computedStyle->m_mutableStyle) { | 1083 if (computedStyle->m_mutableStyle) { |
| 1073 computedStyle->removePropertiesInElementDefaultStyle(element); | 1084 if (!computedStyle->m_mutableStyle->getPropertyCSSValue(CSSPropertyBackg
roundColor)) |
| 1085 computedStyle->m_mutableStyle->setProperty(CSSPropertyBackgroundColo
r, CSSValueTransparent); |
| 1086 |
| 1087 removePropertiesInStyle(computedStyle->m_mutableStyle.get(), styleFromMa
tchedRules.get()); |
| 1074 m_mutableStyle = getPropertiesNotIn(m_mutableStyle.get(), computedStyle-
>m_mutableStyle.get()); | 1088 m_mutableStyle = getPropertiesNotIn(m_mutableStyle.get(), computedStyle-
>m_mutableStyle.get()); |
| 1075 } | 1089 } |
| 1076 | 1090 |
| 1077 // 3. If this element is a span and has display: inline or float: none, remo
ve them unless they are overriden by rules. | 1091 // 3. If this element is a span and has display: inline or float: none, remo
ve them unless they are overriden by rules. |
| 1078 // These rules are added by serialization code to wrap text nodes. | 1092 // These rules are added by serialization code to wrap text nodes. |
| 1079 if (isStyleSpanOrSpanWithOnlyStyleAttribute(element)) { | 1093 if (isStyleSpanOrSpanWithOnlyStyleAttribute(element)) { |
| 1080 if (!styleFromMatchedRules->getPropertyCSSValue(CSSPropertyDisplay) && g
etIdentifierValue(m_mutableStyle.get(), CSSPropertyDisplay) == CSSValueInline) | 1094 if (!styleFromMatchedRules->getPropertyCSSValue(CSSPropertyDisplay) && g
etIdentifierValue(m_mutableStyle.get(), CSSPropertyDisplay) == CSSValueInline) |
| 1081 m_mutableStyle->removeProperty(CSSPropertyDisplay); | 1095 m_mutableStyle->removeProperty(CSSPropertyDisplay); |
| 1082 if (!styleFromMatchedRules->getPropertyCSSValue(CSSPropertyFloat) && get
IdentifierValue(m_mutableStyle.get(), CSSPropertyFloat) == CSSValueNone) | 1096 if (!styleFromMatchedRules->getPropertyCSSValue(CSSPropertyFloat) && get
IdentifierValue(m_mutableStyle.get(), CSSPropertyFloat) == CSSValueNone) |
| 1083 m_mutableStyle->removeProperty(CSSPropertyFloat); | 1097 m_mutableStyle->removeProperty(CSSPropertyFloat); |
| 1084 } | 1098 } |
| 1085 } | 1099 } |
| 1086 | 1100 |
| 1087 void EditingStyle::removePropertiesInElementDefaultStyle(Element* element) | 1101 void EditingStyle::removePropertiesInElementDefaultStyle(Element* element) |
| 1088 { | 1102 { |
| 1089 if (!m_mutableStyle || !m_mutableStyle->length()) | 1103 if (!m_mutableStyle || !m_mutableStyle->length()) |
| 1090 return; | 1104 return; |
| 1091 | 1105 |
| 1092 RefPtr<CSSMutableStyleDeclaration> defaultStyle = styleFromMatchedRulesForEl
ement(element, CSSStyleSelector::UAAndUserCSSRules); | 1106 RefPtr<CSSMutableStyleDeclaration> defaultStyle = styleFromMatchedRulesForEl
ement(element, CSSStyleSelector::UAAndUserCSSRules); |
| 1093 | 1107 |
| 1094 Vector<int> propertiesToRemove(defaultStyle->length()); | 1108 removePropertiesInStyle(m_mutableStyle.get(), defaultStyle.get()); |
| 1095 size_t i = 0; | |
| 1096 CSSMutableStyleDeclaration::const_iterator end = defaultStyle->end(); | |
| 1097 for (CSSMutableStyleDeclaration::const_iterator it = defaultStyle->begin();
it != end; ++it, ++i) | |
| 1098 propertiesToRemove[i] = it->id(); | |
| 1099 | |
| 1100 m_mutableStyle->removePropertiesInSet(propertiesToRemove.data(), propertiesT
oRemove.size()); | |
| 1101 } | 1109 } |
| 1102 | 1110 |
| 1103 void EditingStyle::forceInline() | 1111 void EditingStyle::forceInline() |
| 1104 { | 1112 { |
| 1105 if (!m_mutableStyle) | 1113 if (!m_mutableStyle) |
| 1106 m_mutableStyle = CSSMutableStyleDeclaration::create(); | 1114 m_mutableStyle = CSSMutableStyleDeclaration::create(); |
| 1107 const bool propertyIsImportant = true; | 1115 const bool propertyIsImportant = true; |
| 1108 m_mutableStyle->setProperty(CSSPropertyDisplay, CSSValueInline, propertyIsIm
portant); | 1116 m_mutableStyle->setProperty(CSSPropertyDisplay, CSSValueInline, propertyIsIm
portant); |
| 1109 } | 1117 } |
| 1110 | 1118 |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1422 { | 1430 { |
| 1423 for (Node* ancestor = node; ancestor; ancestor = ancestor->parentNode()) { | 1431 for (Node* ancestor = node; ancestor; ancestor = ancestor->parentNode()) { |
| 1424 RefPtr<CSSComputedStyleDeclaration> ancestorStyle = computedStyle(ancest
or); | 1432 RefPtr<CSSComputedStyleDeclaration> ancestorStyle = computedStyle(ancest
or); |
| 1425 if (!hasTransparentBackgroundColor(ancestorStyle.get())) | 1433 if (!hasTransparentBackgroundColor(ancestorStyle.get())) |
| 1426 return ancestorStyle->getPropertyCSSValue(CSSPropertyBackgroundColor
); | 1434 return ancestorStyle->getPropertyCSSValue(CSSPropertyBackgroundColor
); |
| 1427 } | 1435 } |
| 1428 return 0; | 1436 return 0; |
| 1429 } | 1437 } |
| 1430 | 1438 |
| 1431 } | 1439 } |
| OLD | NEW |