⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cssmutablestyledeclaration.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
字号:
/* * (C) 1999-2003 Lars Knoll (knoll@kde.org) * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */#ifndef CSSMutableStyleDeclaration_h#define CSSMutableStyleDeclaration_h#include "CSSStyleDeclaration.h"#include "CSSPrimitiveValue.h"#include "CSSProperty.h"#include "KURLHash.h"#include "PlatformString.h"#include <wtf/ListHashSet.h>#include <wtf/Vector.h>namespace WebCore {class Node;class CSSMutableStyleDeclarationConstIterator {public:    CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclaration* decl, CSSProperty* current);    CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclarationConstIterator& o);    ~CSSMutableStyleDeclarationConstIterator();        const CSSProperty& operator*() const { return *m_current; }    const CSSProperty* operator->() const { return m_current; }        bool operator!=(const CSSMutableStyleDeclarationConstIterator& o) { ASSERT(m_decl == o.m_decl); return m_current != o.m_current; }    bool operator==(const CSSMutableStyleDeclarationConstIterator& o) { ASSERT(m_decl == o.m_decl); return m_current == o.m_current; }        CSSMutableStyleDeclarationConstIterator& operator=(const CSSMutableStyleDeclarationConstIterator& o);        CSSMutableStyleDeclarationConstIterator& operator++();    CSSMutableStyleDeclarationConstIterator& operator--();private:    const CSSMutableStyleDeclaration* m_decl;    CSSProperty* m_current;};class CSSMutableStyleDeclaration : public CSSStyleDeclaration {public:    static PassRefPtr<CSSMutableStyleDeclaration> create()    {        return adoptRef(new CSSMutableStyleDeclaration);    }    static PassRefPtr<CSSMutableStyleDeclaration> create(CSSRule* parentRule)    {        return adoptRef(new CSSMutableStyleDeclaration(parentRule));    }    static PassRefPtr<CSSMutableStyleDeclaration> create(CSSRule* parentRule, const CSSProperty* const* properties, int numProperties)    {        return adoptRef(new CSSMutableStyleDeclaration(parentRule, properties, numProperties));    }    static PassRefPtr<CSSMutableStyleDeclaration> create(const Vector<CSSProperty>& properties, unsigned variableDependentValueCount)    {        return adoptRef(new CSSMutableStyleDeclaration(0, properties, variableDependentValueCount));    }    CSSMutableStyleDeclaration& operator=(const CSSMutableStyleDeclaration&);        typedef CSSMutableStyleDeclarationConstIterator const_iterator;    const_iterator begin() { return const_iterator(this, m_properties.begin()); }    const_iterator end() { return const_iterator(this, m_properties.end()); }    void setNode(Node* node) { m_node = node; }    virtual bool isMutableStyleDeclaration() const { return true; }    virtual String cssText() const;    virtual void setCssText(const String&, ExceptionCode&);    virtual unsigned length() const;    virtual String item(unsigned index) const;    virtual PassRefPtr<CSSValue> getPropertyCSSValue(int propertyID) const;    virtual String getPropertyValue(int propertyID) const;    virtual bool getPropertyPriority(int propertyID) const;    virtual int getPropertyShorthand(int propertyID) const;    virtual bool isPropertyImplicit(int propertyID) const;    virtual void setProperty(int propertyId, const String& value, bool important, ExceptionCode&);    virtual String removeProperty(int propertyID, ExceptionCode&);    virtual PassRefPtr<CSSMutableStyleDeclaration> copy() const;    bool setProperty(int propertyID, int value, bool important = false, bool notifyChanged = true);    bool setProperty(int propertyID, const String& value, bool important = false, bool notifyChanged = true);    String removeProperty(int propertyID, bool notifyChanged = true, bool returnText = false);     // setLengthProperty treats integers as pixels! (Needed for conversion of HTML attributes.)    void setLengthProperty(int propertyId, const String& value, bool important, bool multiLength = false);    void setStringProperty(int propertyId, const String& value, CSSPrimitiveValue::UnitTypes, bool important = false); // parsed string value    void setImageProperty(int propertyId, const String& url, bool important = false);     // The following parses an entire new style declaration.    void parseDeclaration(const String& styleDeclaration);    // Besides adding the properties, this also removes any existing properties with these IDs.    // It does no notification since it's called by the parser.    void addParsedProperties(const CSSProperty* const *, int numProperties);    // This does no change notifications since it's only called by createMarkup.    void addParsedProperty(const CSSProperty&);     PassRefPtr<CSSMutableStyleDeclaration> copyBlockProperties() const;    void removeBlockProperties();    void removePropertiesInSet(const int* set, unsigned length, bool notifyChanged = true);    void merge(CSSMutableStyleDeclaration*, bool argOverridesOnConflict = true);    bool hasVariableDependentValue() const { return m_variableDependentValueCount > 0; }        void setStrictParsing(bool b) { m_strictParsing = b; }    bool useStrictParsing() const { return m_strictParsing; }    void addSubresourceStyleURLs(ListHashSet<KURL>&);protected:    CSSMutableStyleDeclaration(CSSRule* parentRule);private:    CSSMutableStyleDeclaration();    CSSMutableStyleDeclaration(CSSRule* parentRule, const Vector<CSSProperty>&, unsigned variableDependentValueCount);    CSSMutableStyleDeclaration(CSSRule* parentRule, const CSSProperty* const *, int numProperties);    virtual PassRefPtr<CSSMutableStyleDeclaration> makeMutable();    void setChanged();    String getShorthandValue(const int* properties, int number) const;    String getCommonValue(const int* properties, int number) const;    String getLayeredShorthandValue(const int* properties, unsigned number) const;    String get4Values(const int* properties) const;        void setPropertyInternal(const CSSProperty&, CSSProperty* slot = 0);    bool removeShorthandProperty(int propertyID, bool notifyChanged);    Vector<CSSProperty>::const_iterator findPropertyWithId(int propertyId) const;    Vector<CSSProperty>::iterator findPropertyWithId(int propertyId);    Vector<CSSProperty, 4> m_properties;    Node* m_node;    unsigned m_variableDependentValueCount : 24;    bool m_strictParsing : 1;#ifndef NDEBUG    unsigned m_iteratorCount : 4;#endif    friend class CSSMutableStyleDeclarationConstIterator;};    inline CSSMutableStyleDeclarationConstIterator::CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclaration* decl, CSSProperty* current) : m_decl(decl), m_current(current){ #ifndef NDEBUG    const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount++; #endif}inline CSSMutableStyleDeclarationConstIterator::CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclarationConstIterator& o): m_decl(o.m_decl), m_current(o.m_current){#ifndef NDEBUG    const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount++; #endif}inline CSSMutableStyleDeclarationConstIterator::~CSSMutableStyleDeclarationConstIterator() {#ifndef NDEBUG    const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount--;#endif}inline CSSMutableStyleDeclarationConstIterator& CSSMutableStyleDeclarationConstIterator::operator=(const CSSMutableStyleDeclarationConstIterator& o){    m_decl = o.m_decl;    m_current = o.m_current;#ifndef NDEBUG    const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount++; #endif    return *this;}    inline CSSMutableStyleDeclarationConstIterator& CSSMutableStyleDeclarationConstIterator::operator++() {     ASSERT(m_current != const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_properties.end());    ++m_current;    return *this; }inline CSSMutableStyleDeclarationConstIterator& CSSMutableStyleDeclarationConstIterator::operator--() {     --m_current;     return *this; }} // namespace WebCore#endif // CSSMutableStyleDeclaration_h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -