PropertySetCSSStyleDeclaration.h [plain text]
#ifndef PropertySetCSSStyleDeclaration_h
#define PropertySetCSSStyleDeclaration_h
#include "CSSStyleDeclaration.h"
namespace WebCore {
class CSSRule;
class CSSProperty;
class CSSValue;
class StylePropertySet;
class StyleSheetInternal;
class StyledElement;
class PropertySetCSSStyleDeclaration : public CSSStyleDeclaration {
public:
PropertySetCSSStyleDeclaration(StylePropertySet* propertySet) : m_propertySet(propertySet) { }
virtual StyledElement* parentElement() const { return 0; }
virtual void clearParentElement() { ASSERT_NOT_REACHED(); }
StyleSheetInternal* contextStyleSheet() const;
virtual void ref() OVERRIDE;
virtual void deref() OVERRIDE;
private:
virtual CSSRule* parentRule() const OVERRIDE { return 0; };
virtual unsigned length() const OVERRIDE;
virtual String item(unsigned index) const OVERRIDE;
virtual PassRefPtr<CSSValue> getPropertyCSSValue(const String& propertyName) OVERRIDE;
virtual String getPropertyValue(const String& propertyName) OVERRIDE;
virtual String getPropertyPriority(const String& propertyName) OVERRIDE;
virtual String getPropertyShorthand(const String& propertyName) OVERRIDE;
virtual bool isPropertyImplicit(const String& propertyName) OVERRIDE;
virtual void setProperty(const String& propertyName, const String& value, const String& priority, ExceptionCode&) OVERRIDE;
virtual String removeProperty(const String& propertyName, ExceptionCode&) OVERRIDE;
virtual String cssText() const OVERRIDE;
virtual void setCssText(const String&, ExceptionCode&) OVERRIDE;
virtual PassRefPtr<CSSValue> getPropertyCSSValueInternal(CSSPropertyID) OVERRIDE;
virtual String getPropertyValueInternal(CSSPropertyID) OVERRIDE;
virtual void setPropertyInternal(CSSPropertyID, const String& value, bool important, ExceptionCode&) OVERRIDE;
virtual bool cssPropertyMatches(const CSSProperty*) const OVERRIDE;
virtual PassRefPtr<StylePropertySet> copy() const OVERRIDE;
virtual PassRefPtr<StylePropertySet> makeMutable() OVERRIDE;
CSSValue* cloneAndCacheForCSSOM(CSSValue*);
protected:
enum MutationType { NoChanges, PropertyChanged };
virtual void willMutate() { }
virtual void didMutate(MutationType) { }
StylePropertySet* m_propertySet;
OwnPtr<HashMap<CSSValue*, RefPtr<CSSValue> > > m_cssomCSSValueClones;
};
class StyleRuleCSSStyleDeclaration : public PropertySetCSSStyleDeclaration
{
public:
static PassRefPtr<StyleRuleCSSStyleDeclaration> create(StylePropertySet* propertySet, CSSRule* parentRule)
{
return adoptRef(new StyleRuleCSSStyleDeclaration(propertySet, parentRule));
}
void clearParentRule() { m_parentRule = 0; }
virtual void ref() OVERRIDE;
virtual void deref() OVERRIDE;
void reattach(StylePropertySet*);
private:
StyleRuleCSSStyleDeclaration(StylePropertySet*, CSSRule*);
virtual ~StyleRuleCSSStyleDeclaration();
virtual CSSStyleSheet* parentStyleSheet() const OVERRIDE;
virtual CSSRule* parentRule() const OVERRIDE { return m_parentRule; }
virtual void willMutate() OVERRIDE;
virtual void didMutate(MutationType) OVERRIDE;
unsigned m_refCount;
CSSRule* m_parentRule;
};
class InlineCSSStyleDeclaration : public PropertySetCSSStyleDeclaration
{
public:
InlineCSSStyleDeclaration(StylePropertySet* propertySet, StyledElement* parentElement)
: PropertySetCSSStyleDeclaration(propertySet)
, m_parentElement(parentElement)
{
}
private:
virtual CSSStyleSheet* parentStyleSheet() const OVERRIDE;
virtual StyledElement* parentElement() const OVERRIDE { return m_parentElement; }
virtual void clearParentElement() OVERRIDE { m_parentElement = 0; }
virtual void didMutate(MutationType) OVERRIDE;
StyledElement* m_parentElement;
};
}
#endif