1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
/*
* Copyright (C) 2004 Zack Rusin <zack@kde.org>
* Copyright (C) 2004, 2005, 2006, 2008, 2012, 2013 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef CSSComputedStyleDeclaration_h
#define CSSComputedStyleDeclaration_h
#include "CSSStyleDeclaration.h"
#include "RenderStyleConstants.h"
#include <wtf/RefPtr.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class CSSPrimitiveValue;
class CSSValueList;
class Color;
class MutableStylePropertySet;
class Node;
class RenderObject;
class RenderStyle;
class SVGPaint;
class ShadowData;
class StylePropertySet;
class StylePropertyShorthand;
#if ENABLE(CSS_SHADERS)
class CustomFilterNumberParameter;
class CustomFilterParameter;
#endif
enum EUpdateLayout { DoNotUpdateLayout = false, UpdateLayout = true };
class ComputedStyleExtractor {
public:
ComputedStyleExtractor(PassRefPtr<Node>, bool allowVisitedStyle = false, PseudoId = NOPSEUDO);
PassRefPtr<CSSValue> propertyValue(CSSPropertyID, EUpdateLayout = UpdateLayout) const;
// Helper methods for HTML editing.
PassRefPtr<MutableStylePropertySet> copyPropertiesInSet(const CSSPropertyID* set, unsigned length) const;
PassRefPtr<MutableStylePropertySet> copyProperties() const;
PassRefPtr<CSSPrimitiveValue> getFontSizeCSSValuePreferringKeyword() const;
bool useFixedFontDefaultSize() const;
bool propertyMatches(CSSPropertyID, const CSSValue*) const;
private:
// The styled node is either the node passed into computedPropertyValue, or the
// PseudoElement for :before and :after if they exist.
// FIXME: This should be styledElement since in JS getComputedStyle only works
// on Elements, but right now editing creates these for text nodes. We should fix that.
Node* styledNode() const;
#if ENABLE(SVG)
PassRefPtr<CSSValue> svgPropertyValue(CSSPropertyID, EUpdateLayout) const;
PassRefPtr<SVGPaint> adjustSVGPaintForCurrentColor(PassRefPtr<SVGPaint>, RenderStyle*) const;
#endif
PassRefPtr<CSSValue> valueForShadow(const ShadowData*, CSSPropertyID, const RenderStyle*) const;
PassRefPtr<CSSPrimitiveValue> currentColorOrValidColor(RenderStyle*, const Color&) const;
#if ENABLE(CSS_FILTERS)
PassRefPtr<CSSValue> valueForFilter(const RenderObject*, const RenderStyle*) const;
#endif
PassRefPtr<CSSValueList> getCSSPropertyValuesForShorthandProperties(const StylePropertyShorthand&) const;
PassRefPtr<CSSValueList> getCSSPropertyValuesForSidesShorthand(const StylePropertyShorthand&) const;
PassRefPtr<CSSValueList> getBackgroundShorthandValue() const;
PassRefPtr<CSSValueList> getCSSPropertyValuesForGridShorthand(const StylePropertyShorthand&) const;
RefPtr<Node> m_node;
PseudoId m_pseudoElementSpecifier;
bool m_allowVisitedStyle;
};
class CSSComputedStyleDeclaration : public CSSStyleDeclaration {
public:
static PassRefPtr<CSSComputedStyleDeclaration> create(PassRefPtr<Node> node, bool allowVisitedStyle = false, const String& pseudoElementName = String())
{
return adoptRef(new CSSComputedStyleDeclaration(node, allowVisitedStyle, pseudoElementName));
}
virtual ~CSSComputedStyleDeclaration();
virtual void ref() OVERRIDE;
virtual void deref() OVERRIDE;
String getPropertyValue(CSSPropertyID) const;
private:
CSSComputedStyleDeclaration(PassRefPtr<Node>, bool allowVisitedStyle, const String&);
// CSSOM functions. Don't make these public.
virtual CSSRule* parentRule() const;
virtual unsigned length() const;
virtual String item(unsigned index) const;
virtual PassRefPtr<CSSValue> getPropertyCSSValue(const String& propertyName);
virtual String getPropertyValue(const String& propertyName);
virtual String getPropertyPriority(const String& propertyName);
virtual String getPropertyShorthand(const String& propertyName);
virtual bool isPropertyImplicit(const String& propertyName);
virtual void setProperty(const String& propertyName, const String& value, const String& priority, ExceptionCode&);
virtual String removeProperty(const String& propertyName, ExceptionCode&);
virtual String cssText() const;
virtual void setCssText(const String&, ExceptionCode&);
virtual PassRefPtr<CSSValue> getPropertyCSSValueInternal(CSSPropertyID);
virtual String getPropertyValueInternal(CSSPropertyID);
virtual void setPropertyInternal(CSSPropertyID, const String& value, bool important, ExceptionCode&);
virtual PassRefPtr<MutableStylePropertySet> copyProperties() const OVERRIDE;
PassRefPtr<CSSValue> getPropertyCSSValue(CSSPropertyID, EUpdateLayout = UpdateLayout) const;
RefPtr<Node> m_node;
PseudoId m_pseudoElementSpecifier;
bool m_allowVisitedStyle;
unsigned m_refCount;
};
} // namespace WebCore
#endif // CSSComputedStyleDeclaration_h
|