| OLD | NEW |
| 1 /* | 1 /* |
| 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r
ights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r
ights reserved. |
| 4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. | 4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. |
| 5 * Copyright (C) 2013 Intel Corporation. All rights reserved. | 5 * Copyright (C) 2013 Intel Corporation. All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 namespace blink { | 33 namespace blink { |
| 34 | 34 |
| 35 static bool isInitialOrInherit(const String& value) | 35 static bool isInitialOrInherit(const String& value) |
| 36 { | 36 { |
| 37 DEFINE_STATIC_LOCAL(String, initial, ("initial")); | 37 DEFINE_STATIC_LOCAL(String, initial, ("initial")); |
| 38 DEFINE_STATIC_LOCAL(String, inherit, ("inherit")); | 38 DEFINE_STATIC_LOCAL(String, inherit, ("inherit")); |
| 39 return value.length() == 7 && (value == initial || value == inherit); | 39 return value.length() == 7 && (value == initial || value == inherit); |
| 40 } | 40 } |
| 41 | 41 |
| 42 StylePropertySerializer::StylePropertySetForSerializer::StylePropertySetForSeria
lizer(const StylePropertySet& properties) | 42 StylePropertySerializer::StylePropertySetForSerializer::StylePropertySetForSeria
lizer(const StylePropertySet& properties) |
| 43 : m_propertySet(properties) | 43 : m_propertySet(&properties) |
| 44 , m_allIndex(m_propertySet.findPropertyIndex(CSSPropertyAll)) | 44 , m_allIndex(m_propertySet->findPropertyIndex(CSSPropertyAll)) |
| 45 , m_needToExpandAll(false) | 45 , m_needToExpandAll(false) |
| 46 { | 46 { |
| 47 if (!hasAllProperty()) | 47 if (!hasAllProperty()) |
| 48 return; | 48 return; |
| 49 | 49 |
| 50 StylePropertySet::PropertyReference allProperty = m_propertySet.propertyAt(m
_allIndex); | 50 StylePropertySet::PropertyReference allProperty = m_propertySet->propertyAt(
m_allIndex); |
| 51 for (unsigned i = 0; i < m_propertySet.propertyCount(); ++i) { | 51 for (unsigned i = 0; i < m_propertySet->propertyCount(); ++i) { |
| 52 StylePropertySet::PropertyReference property = m_propertySet.propertyAt(
i); | 52 StylePropertySet::PropertyReference property = m_propertySet->propertyAt
(i); |
| 53 if (CSSProperty::isAffectedByAllProperty(property.id())) { | 53 if (CSSProperty::isAffectedByAllProperty(property.id())) { |
| 54 if (allProperty.isImportant() && !property.isImportant()) | 54 if (allProperty.isImportant() && !property.isImportant()) |
| 55 continue; | 55 continue; |
| 56 if (static_cast<unsigned>(m_allIndex) >= i) | 56 if (static_cast<unsigned>(m_allIndex) >= i) |
| 57 continue; | 57 continue; |
| 58 if (property.value()->equals(*allProperty.value()) | 58 if (property.value()->equals(*allProperty.value()) |
| 59 && property.isImportant() == allProperty.isImportant()) | 59 && property.isImportant() == allProperty.isImportant()) |
| 60 continue; | 60 continue; |
| 61 m_needToExpandAll = true; | 61 m_needToExpandAll = true; |
| 62 } | 62 } |
| 63 m_longhandPropertyUsed.set(property.id() - firstCSSProperty); | 63 m_longhandPropertyUsed.set(property.id() - firstCSSProperty); |
| 64 } | 64 } |
| 65 } | 65 } |
| 66 | 66 |
| 67 DEFINE_TRACE(StylePropertySerializer::StylePropertySetForSerializer) |
| 68 { |
| 69 visitor->trace(m_propertySet); |
| 70 } |
| 71 |
| 67 unsigned StylePropertySerializer::StylePropertySetForSerializer::propertyCount()
const | 72 unsigned StylePropertySerializer::StylePropertySetForSerializer::propertyCount()
const |
| 68 { | 73 { |
| 69 if (!hasExpandedAllProperty()) | 74 if (!hasExpandedAllProperty()) |
| 70 return m_propertySet.propertyCount(); | 75 return m_propertySet->propertyCount(); |
| 71 return lastCSSProperty - firstCSSProperty + 1; | 76 return lastCSSProperty - firstCSSProperty + 1; |
| 72 } | 77 } |
| 73 | 78 |
| 74 StylePropertySerializer::PropertyValueForSerializer StylePropertySerializer::Sty
lePropertySetForSerializer::propertyAt(unsigned index) const | 79 StylePropertySerializer::PropertyValueForSerializer StylePropertySerializer::Sty
lePropertySetForSerializer::propertyAt(unsigned index) const |
| 75 { | 80 { |
| 76 if (!hasExpandedAllProperty()) | 81 if (!hasExpandedAllProperty()) |
| 77 return StylePropertySerializer::PropertyValueForSerializer(m_propertySet
.propertyAt(index)); | 82 return StylePropertySerializer::PropertyValueForSerializer(m_propertySet
->propertyAt(index)); |
| 78 | 83 |
| 79 CSSPropertyID propertyID = static_cast<CSSPropertyID>(index + firstCSSProper
ty); | 84 CSSPropertyID propertyID = static_cast<CSSPropertyID>(index + firstCSSProper
ty); |
| 80 ASSERT(firstCSSProperty <= propertyID && propertyID <= lastCSSProperty); | 85 ASSERT(firstCSSProperty <= propertyID && propertyID <= lastCSSProperty); |
| 81 if (m_longhandPropertyUsed.get(index)) { | 86 if (m_longhandPropertyUsed.get(index)) { |
| 82 int index = m_propertySet.findPropertyIndex(propertyID); | 87 int index = m_propertySet->findPropertyIndex(propertyID); |
| 83 ASSERT(index != -1); | 88 ASSERT(index != -1); |
| 84 return StylePropertySerializer::PropertyValueForSerializer(m_propertySet
.propertyAt(index)); | 89 return StylePropertySerializer::PropertyValueForSerializer(m_propertySet
->propertyAt(index)); |
| 85 } | 90 } |
| 86 | 91 |
| 87 StylePropertySet::PropertyReference property = m_propertySet.propertyAt(m_al
lIndex); | 92 StylePropertySet::PropertyReference property = m_propertySet->propertyAt(m_a
llIndex); |
| 88 return StylePropertySerializer::PropertyValueForSerializer(propertyID, prope
rty.value(), property.isImportant()); | 93 return StylePropertySerializer::PropertyValueForSerializer(propertyID, prope
rty.value(), property.isImportant()); |
| 89 } | 94 } |
| 90 | 95 |
| 91 bool StylePropertySerializer::StylePropertySetForSerializer::shouldProcessProper
tyAt(unsigned index) const | 96 bool StylePropertySerializer::StylePropertySetForSerializer::shouldProcessProper
tyAt(unsigned index) const |
| 92 { | 97 { |
| 93 // StylePropertySet has all valid longhands. We should process. | 98 // StylePropertySet has all valid longhands. We should process. |
| 94 if (!hasAllProperty()) | 99 if (!hasAllProperty()) |
| 95 return true; | 100 return true; |
| 96 | 101 |
| 97 // If all is not expanded, we need to process "all" and properties which | 102 // If all is not expanded, we need to process "all" and properties which |
| 98 // are not overwritten by "all". | 103 // are not overwritten by "all". |
| 99 if (!m_needToExpandAll) { | 104 if (!m_needToExpandAll) { |
| 100 StylePropertySet::PropertyReference property = m_propertySet.propertyAt(
index); | 105 StylePropertySet::PropertyReference property = m_propertySet->propertyAt
(index); |
| 101 if (property.id() == CSSPropertyAll || !CSSProperty::isAffectedByAllProp
erty(property.id())) | 106 if (property.id() == CSSPropertyAll || !CSSProperty::isAffectedByAllProp
erty(property.id())) |
| 102 return true; | 107 return true; |
| 103 return m_longhandPropertyUsed.get(property.id() - firstCSSProperty); | 108 return m_longhandPropertyUsed.get(property.id() - firstCSSProperty); |
| 104 } | 109 } |
| 105 | 110 |
| 106 CSSPropertyID propertyID = static_cast<CSSPropertyID>(index + firstCSSProper
ty); | 111 CSSPropertyID propertyID = static_cast<CSSPropertyID>(index + firstCSSProper
ty); |
| 107 ASSERT(firstCSSProperty <= propertyID && propertyID <= lastCSSProperty); | 112 ASSERT(firstCSSProperty <= propertyID && propertyID <= lastCSSProperty); |
| 108 | 113 |
| 109 // Since "all" is expanded, we don't need to process "all". | 114 // Since "all" is expanded, we don't need to process "all". |
| 110 // We should not process expanded shorthands (e.g. font, background, | 115 // We should not process expanded shorthands (e.g. font, background, |
| 111 // and so on) either. | 116 // and so on) either. |
| 112 if (isShorthandProperty(propertyID) || propertyID == CSSPropertyAll) | 117 if (isShorthandProperty(propertyID) || propertyID == CSSPropertyAll) |
| 113 return false; | 118 return false; |
| 114 | 119 |
| 115 // The all property is a shorthand that resets all CSS properties except | 120 // The all property is a shorthand that resets all CSS properties except |
| 116 // direction and unicode-bidi. It only accepts the CSS-wide keywords. | 121 // direction and unicode-bidi. It only accepts the CSS-wide keywords. |
| 117 // c.f. http://dev.w3.org/csswg/css-cascade/#all-shorthand | 122 // c.f. http://dev.w3.org/csswg/css-cascade/#all-shorthand |
| 118 if (!CSSProperty::isAffectedByAllProperty(propertyID)) | 123 if (!CSSProperty::isAffectedByAllProperty(propertyID)) |
| 119 return m_longhandPropertyUsed.get(index); | 124 return m_longhandPropertyUsed.get(index); |
| 120 | 125 |
| 121 return true; | 126 return true; |
| 122 } | 127 } |
| 123 | 128 |
| 124 int StylePropertySerializer::StylePropertySetForSerializer::findPropertyIndex(CS
SPropertyID propertyID) const | 129 int StylePropertySerializer::StylePropertySetForSerializer::findPropertyIndex(CS
SPropertyID propertyID) const |
| 125 { | 130 { |
| 126 if (!hasExpandedAllProperty()) | 131 if (!hasExpandedAllProperty()) |
| 127 return m_propertySet.findPropertyIndex(propertyID); | 132 return m_propertySet->findPropertyIndex(propertyID); |
| 128 return propertyID - firstCSSProperty; | 133 return propertyID - firstCSSProperty; |
| 129 } | 134 } |
| 130 | 135 |
| 131 const CSSValue* StylePropertySerializer::StylePropertySetForSerializer::getPrope
rtyCSSValue(CSSPropertyID propertyID) const | 136 const CSSValue* StylePropertySerializer::StylePropertySetForSerializer::getPrope
rtyCSSValue(CSSPropertyID propertyID) const |
| 132 { | 137 { |
| 133 int index = findPropertyIndex(propertyID); | 138 int index = findPropertyIndex(propertyID); |
| 134 if (index == -1) | 139 if (index == -1) |
| 135 return 0; | 140 return 0; |
| 136 StylePropertySerializer::PropertyValueForSerializer value = propertyAt(index
); | 141 StylePropertySerializer::PropertyValueForSerializer value = propertyAt(index
); |
| 137 return value.value(); | 142 return value.value(); |
| 138 } | 143 } |
| 139 | 144 |
| 140 String StylePropertySerializer::StylePropertySetForSerializer::getPropertyValue(
CSSPropertyID propertyID) const | 145 String StylePropertySerializer::StylePropertySetForSerializer::getPropertyValue(
CSSPropertyID propertyID) const |
| 141 { | 146 { |
| 142 if (!hasExpandedAllProperty()) | 147 if (!hasExpandedAllProperty()) |
| 143 return m_propertySet.getPropertyValue(propertyID); | 148 return m_propertySet->getPropertyValue(propertyID); |
| 144 | 149 |
| 145 const CSSValue* value = getPropertyCSSValue(propertyID); | 150 const CSSValue* value = getPropertyCSSValue(propertyID); |
| 146 if (!value) | 151 if (!value) |
| 147 return String(); | 152 return String(); |
| 148 return value->cssText(); | 153 return value->cssText(); |
| 149 } | 154 } |
| 150 | 155 |
| 151 bool StylePropertySerializer::StylePropertySetForSerializer::isPropertyImplicit(
CSSPropertyID propertyID) const | 156 bool StylePropertySerializer::StylePropertySetForSerializer::isPropertyImplicit(
CSSPropertyID propertyID) const |
| 152 { | 157 { |
| 153 int index = findPropertyIndex(propertyID); | 158 int index = findPropertyIndex(propertyID); |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 964 isInitialValue = false; | 969 isInitialValue = false; |
| 965 if (!value->isInheritedValue()) | 970 if (!value->isInheritedValue()) |
| 966 isInheritedValue = false; | 971 isInheritedValue = false; |
| 967 if (isImportant != m_propertySet.propertyIsImportant(shorthand.propertie
s()[i])) | 972 if (isImportant != m_propertySet.propertyIsImportant(shorthand.propertie
s()[i])) |
| 968 return false; | 973 return false; |
| 969 } | 974 } |
| 970 return isInitialValue || isInheritedValue; | 975 return isInitialValue || isInheritedValue; |
| 971 } | 976 } |
| 972 | 977 |
| 973 } | 978 } |
| OLD | NEW |