Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h

Issue 2485663002: Store CSSPropertyID in SVGAnimatedPropertyBase (Closed)
Patch Set: Add missing case Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
index 22100a5d747b6ee5ab9ee85002090149b485a0ff..f39ec0f29a5f9d3b49368ed85f6143e32664c304 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
@@ -62,12 +62,22 @@ class SVGAnimatedPropertyBase
virtual bool needsSynchronizeAttribute() = 0;
virtual void synchronizeAttribute();
- AnimatedPropertyType type() const { return m_type; }
+ AnimatedPropertyType type() const {
+ return static_cast<AnimatedPropertyType>(m_type);
+ }
SVGElement* contextElement() const { return m_contextElement; }
const QualifiedName& attributeName() const { return m_attributeName; }
+ CSSPropertyID cssPropertyId() const {
+ return static_cast<CSSPropertyID>(m_cssPropertyId);
+ }
+
+ bool hasPresentationAttributeMapping() const {
+ return cssPropertyId() != CSSPropertyInvalid;
+ }
+
bool isReadOnly() const { return m_isReadOnly; }
void setReadOnly() { m_isReadOnly = true; }
@@ -79,11 +89,19 @@ class SVGAnimatedPropertyBase
protected:
SVGAnimatedPropertyBase(AnimatedPropertyType,
SVGElement*,
- const QualifiedName& attributeName);
+ const QualifiedName& attributeName,
+ CSSPropertyID = CSSPropertyInvalid);
private:
- const AnimatedPropertyType m_type;
- bool m_isReadOnly;
+ static_assert(NumberOfAnimatedPropertyTypes <= (1u << 5),
+ "enough bits for AnimatedPropertyType (m_type)");
+ static constexpr int kCssPropertyBits = 9;
+ static_assert((1u << kCssPropertyBits) - 1 >= lastCSSProperty,
+ "enough bits for CSS property ids");
+
+ const unsigned m_type : 5;
+ const unsigned m_cssPropertyId : kCssPropertyBits;
+ unsigned m_isReadOnly : 1;
// This raw pointer is safe since the SVG element is guaranteed to be kept
// alive by a V8 wrapper.
@@ -140,10 +158,12 @@ class SVGAnimatedPropertyCommon : public SVGAnimatedPropertyBase {
protected:
SVGAnimatedPropertyCommon(SVGElement* contextElement,
const QualifiedName& attributeName,
- Property* initialValue)
+ Property* initialValue,
+ CSSPropertyID cssPropertyId = CSSPropertyInvalid)
: SVGAnimatedPropertyBase(Property::classType(),
contextElement,
- attributeName),
+ attributeName,
+ cssPropertyId),
m_baseValue(initialValue) {}
private:
@@ -200,10 +220,12 @@ class SVGAnimatedProperty : public SVGAnimatedPropertyCommon<Property> {
protected:
SVGAnimatedProperty(SVGElement* contextElement,
const QualifiedName& attributeName,
- Property* initialValue)
+ Property* initialValue,
+ CSSPropertyID cssPropertyId = CSSPropertyInvalid)
: SVGAnimatedPropertyCommon<Property>(contextElement,
attributeName,
- initialValue),
+ initialValue,
+ cssPropertyId),
m_baseValueUpdated(false) {}
bool m_baseValueUpdated;
@@ -220,9 +242,10 @@ class SVGAnimatedProperty<Property, TearOffType, void>
static SVGAnimatedProperty<Property>* create(
SVGElement* contextElement,
const QualifiedName& attributeName,
- Property* initialValue) {
+ Property* initialValue,
+ CSSPropertyID cssPropertyId = CSSPropertyInvalid) {
return new SVGAnimatedProperty<Property>(contextElement, attributeName,
- initialValue);
+ initialValue, cssPropertyId);
}
void setAnimatedValue(SVGPropertyBase* value) override {
@@ -276,10 +299,12 @@ class SVGAnimatedProperty<Property, TearOffType, void>
protected:
SVGAnimatedProperty(SVGElement* contextElement,
const QualifiedName& attributeName,
- Property* initialValue)
+ Property* initialValue,
+ CSSPropertyID cssPropertyId = CSSPropertyInvalid)
: SVGAnimatedPropertyCommon<Property>(contextElement,
attributeName,
- initialValue) {}
+ initialValue,
+ cssPropertyId) {}
private:
void updateAnimValTearOffIfNeeded() {
@@ -306,9 +331,10 @@ class SVGAnimatedProperty<Property, void, void>
static SVGAnimatedProperty<Property>* create(
SVGElement* contextElement,
const QualifiedName& attributeName,
- Property* initialValue) {
+ Property* initialValue,
+ CSSPropertyID cssPropertyId = CSSPropertyInvalid) {
return new SVGAnimatedProperty<Property>(contextElement, attributeName,
- initialValue);
+ initialValue, cssPropertyId);
}
bool needsSynchronizeAttribute() override {
@@ -320,10 +346,12 @@ class SVGAnimatedProperty<Property, void, void>
protected:
SVGAnimatedProperty(SVGElement* contextElement,
const QualifiedName& attributeName,
- Property* initialValue)
+ Property* initialValue,
+ CSSPropertyID cssPropertyId = CSSPropertyInvalid)
: SVGAnimatedPropertyCommon<Property>(contextElement,
attributeName,
- initialValue) {}
+ initialValue,
+ cssPropertyId) {}
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698