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

📄 css_valueimpl.h

📁 khtml在gtk上的移植版本
💻 H
字号:
/* * This file is part of the DOM implementation for KDE. * * (C) 1999-2003 Lars Knoll (knoll@kde.org) * Copyright (C) 2002 Apple Computer, Inc. * * 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * $Id: css_valueimpl.h,v 1.1.1.1 2004/09/23 08:27:53 kimkinnu Exp $ */#ifndef _CSS_css_valueimpl_h_#define _CSS_css_valueimpl_h_#include "dom/css_value.h"#include "dom/dom_string.h"#include "css/css_base.h"#include "misc/loader_client.h"#include "misc/shared.h"#include <qintdict.h>namespace khtml {    class RenderStyle;    class CachedImage;    class DocLoader;}namespace DOM {class CSSRuleImpl;class CSSValueImpl;class NodeImpl;class CounterImpl;class CSSStyleDeclarationImpl : public StyleBaseImpl{public:    CSSStyleDeclarationImpl(CSSRuleImpl *parentRule);    CSSStyleDeclarationImpl(CSSRuleImpl *parentRule, QPtrList<CSSProperty> *lstValues);    virtual ~CSSStyleDeclarationImpl();    CSSStyleDeclarationImpl& operator=( const CSSStyleDeclarationImpl&);    unsigned long length() const;    CSSRuleImpl *parentRule() const;    virtual DOM::DOMString removeProperty(int propertyID, bool notifyChanged = true);    virtual bool setProperty(int propertyId, const DOM::DOMString &value, bool important = false, bool notifyChanged = true);    virtual void setProperty(int propertyId, int value, bool important = false, bool notifyChanged = true);    // this treats integers as pixels!    // needed for conversion of html attributes    virtual void setLengthProperty(int id, const DOM::DOMString &value, bool important,bool multiLength = false);    virtual void setStringProperty(int propertyId, const DOM::DOMString &value, DOM::CSSPrimitiveValue::UnitTypes, bool important = false); // parsed string value    virtual void setImageProperty(int propertyId, const DOM::DOMString &URL, bool important = false);    // add a whole, unparsed property    virtual void setProperty ( const DOMString &propertyString);    virtual DOM::DOMString item ( unsigned long index );    virtual DOM::DOMString cssText() const;    virtual void setCssText(const DOM::DOMString& str);    virtual bool isStyleDeclaration() { return true; }    virtual bool parseString( const DOMString &string, bool = false );    virtual CSSValueImpl *getPropertyCSSValue( int propertyID ) const;    virtual DOMString getPropertyValue( int propertyID ) const;    virtual bool getPropertyPriority( int propertyID ) const;    QPtrList<CSSProperty> *values() { return m_lstValues; }    void setNode(NodeImpl *_node) { m_node = _node; }    NodeImpl* node() const { return m_node; }    void setChanged();protected:    DOMString getShortHandValue( const int* properties, int number ) const;    DOMString get4Values( const int* properties ) const;    QPtrList<CSSProperty> *m_lstValues;    NodeImpl *m_node;private:    // currently not needed - make sure its not used    CSSStyleDeclarationImpl(const CSSStyleDeclarationImpl& o);};class CSSValueImpl : public StyleBaseImpl{public:    CSSValueImpl();    virtual ~CSSValueImpl();    virtual unsigned short cssValueType() const = 0;    virtual DOM::DOMString cssText() const = 0;    virtual bool isValue() { return true; }    virtual bool isFontValue() { return false; }};class CSSInheritedValueImpl : public CSSValueImpl{public:    CSSInheritedValueImpl() : CSSValueImpl() {}    virtual ~CSSInheritedValueImpl() {}    virtual unsigned short cssValueType() const;    virtual DOM::DOMString cssText() const;};class CSSInitialValueImpl : public CSSValueImpl{public:    virtual unsigned short cssValueType() const;    virtual DOM::DOMString cssText() const;};class CSSValueListImpl : public CSSValueImpl{public:    CSSValueListImpl();    virtual ~CSSValueListImpl();    unsigned long length() const { return m_values.count(); }    CSSValueImpl *item ( unsigned long index ) { return m_values.at(index); }    virtual bool isValueList() { return true; }    virtual unsigned short cssValueType() const;    void append(CSSValueImpl *val);    virtual DOM::DOMString cssText() const;protected:    QPtrList<CSSValueImpl> m_values;};class Counter;class RGBColor;class Rect;class CSSPrimitiveValueImpl : public CSSValueImpl{public:    CSSPrimitiveValueImpl();    CSSPrimitiveValueImpl(int ident);    CSSPrimitiveValueImpl(double num, CSSPrimitiveValue::UnitTypes type);    CSSPrimitiveValueImpl(const DOMString &str, CSSPrimitiveValue::UnitTypes type);    CSSPrimitiveValueImpl(const Counter &c);    CSSPrimitiveValueImpl( RectImpl *r);    CSSPrimitiveValueImpl(QRgb color);    virtual ~CSSPrimitiveValueImpl();    void cleanup();    unsigned short primitiveType() const {	    return m_type;    }    /*     * computes a length in pixels out of the given CSSValue. Need the RenderStyle to get     * the fontinfo in case val is defined in em or ex.     *     * The metrics have to be a bit different for screen and printer output.     * For screen output we assume 1 inch == 72 px, for printer we assume 300 dpi     *     * this is screen/printer dependent, so we probably need a config option for this,     * and some tool to calibrate.     */    int computeLength( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics );    int computeLength( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics, double multiplier );    double computeLengthFloat( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics,                               bool applyZoomFactor = true );    // use with care!!!    void setPrimitiveType(unsigned short type) { m_type = type; }    void setFloatValue ( unsigned short unitType, double floatValue, int &exceptioncode );    double getFloatValue ( unsigned short/* unitType */) const {	return m_value.num;    }    void setStringValue ( unsigned short stringType, const DOM::DOMString &stringValue, int &exceptioncode );    DOM::DOMStringImpl *getStringValue () const {	return ( ( m_type < CSSPrimitiveValue::CSS_STRING ||		   m_type > CSSPrimitiveValue::CSS_ATTR ||		   m_type == CSSPrimitiveValue::CSS_IDENT ) ? // fix IDENT		 0 : m_value.string );    }    CounterImpl *getCounterValue () const {        return ( m_type != CSSPrimitiveValue::CSS_COUNTER ? 0 : m_value.counter );    }    RectImpl *getRectValue () const {	return ( m_type != CSSPrimitiveValue::CSS_RECT ? 0 : m_value.rect );    }    QRgb getRGBColorValue () const {	return ( m_type != CSSPrimitiveValue::CSS_RGBCOLOR ? 0 : m_value.rgbcolor );    }    virtual bool isPrimitiveValue() const { return true; }    virtual unsigned short cssValueType() const;    int getIdent();    virtual bool parseString( const DOMString &string, bool = false);    virtual DOM::DOMString cssText() const;    virtual bool isQuirkValue() { return false; }protected:    int m_type;    union {	int ident;	double num;	DOM::DOMStringImpl *string;	CounterImpl *counter;	RectImpl *rect;        QRgb rgbcolor;    } m_value;};// This value is used to handle quirky margins in reflow roots (body, td, and th) like WinIE.// The basic idea is that a stylesheet can use the value __qem (for quirky em) instead of em// in a stylesheet.  When the quirky value is used, if you're in quirks mode, the margin will// collapse away inside a table cell.class CSSQuirkPrimitiveValueImpl : public CSSPrimitiveValueImpl{public:    CSSQuirkPrimitiveValueImpl(double num, CSSPrimitiveValue::UnitTypes type)      :CSSPrimitiveValueImpl(num, type) {}    virtual ~CSSQuirkPrimitiveValueImpl() {}    virtual bool isQuirkValue() { return true; }};class CounterImpl : public khtml::Shared<CounterImpl> {public:    CounterImpl() { }    DOMString identifier() const { return m_identifier; }    DOMString listStyle() const { return m_listStyle; }    DOMString separator() const { return m_separator; }    DOMString m_identifier;    DOMString m_listStyle;    DOMString m_separator;};class RectImpl : public khtml::Shared<RectImpl> {public:    RectImpl();    ~RectImpl();    CSSPrimitiveValueImpl *top() { return m_top; }    CSSPrimitiveValueImpl *right() { return m_right; }    CSSPrimitiveValueImpl *bottom() { return m_bottom; }    CSSPrimitiveValueImpl *left() { return m_left; }    void setTop( CSSPrimitiveValueImpl *top );    void setRight( CSSPrimitiveValueImpl *right );    void setBottom( CSSPrimitiveValueImpl *bottom );    void setLeft( CSSPrimitiveValueImpl *left );protected:    CSSPrimitiveValueImpl *m_top;    CSSPrimitiveValueImpl *m_right;    CSSPrimitiveValueImpl *m_bottom;    CSSPrimitiveValueImpl *m_left;};class CSSImageValueImpl : public CSSPrimitiveValueImpl, public khtml::CachedObjectClient{public:    CSSImageValueImpl(const DOMString &url, StyleBaseImpl *style);    CSSImageValueImpl();    virtual ~CSSImageValueImpl();    khtml::CachedImage *image(khtml::DocLoader* loader);protected:    khtml::CachedImage* m_image;    bool m_accessedImage;};class FontFamilyValueImpl : public CSSPrimitiveValueImpl{public:    FontFamilyValueImpl( const QString &string);    const QString &fontName() const { return parsedFontName; }    int genericFamilyType() const { return _genericFamilyType; }    virtual DOM::DOMString cssText() const;    QString parsedFontName;private:    int _genericFamilyType;};class FontValueImpl : public CSSValueImpl{public:    FontValueImpl();    virtual ~FontValueImpl();    virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; }        virtual DOM::DOMString cssText() const;        virtual bool isFontValue() { return true; }    CSSPrimitiveValueImpl *style;    CSSPrimitiveValueImpl *variant;    CSSPrimitiveValueImpl *weight;    CSSPrimitiveValueImpl *size;    CSSPrimitiveValueImpl *lineHeight;    CSSValueListImpl *family;};// Used for text-shadow and box-shadowclass ShadowValueImpl : public CSSValueImpl{public:    ShadowValueImpl(CSSPrimitiveValueImpl* _x, CSSPrimitiveValueImpl* _y,                    CSSPrimitiveValueImpl* _blur, CSSPrimitiveValueImpl* _color);    virtual ~ShadowValueImpl();    virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; }    virtual DOM::DOMString cssText() const;    CSSPrimitiveValueImpl* x;    CSSPrimitiveValueImpl* y;    CSSPrimitiveValueImpl* blur;    CSSPrimitiveValueImpl* color;};// Used by box-flex-group-transitionclass FlexGroupTransitionValueImpl : public CSSValueImpl{public:    FlexGroupTransitionValueImpl();    FlexGroupTransitionValueImpl(unsigned int _group1,                                  unsigned int _group2,                                 CSSPrimitiveValueImpl* _length);    virtual ~FlexGroupTransitionValueImpl();        virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; }        virtual DOM::DOMString cssText() const;        bool isAuto() const { return autoValue; }    bool autoValue;    unsigned int group1;    unsigned int group2;    CSSPrimitiveValueImpl* length;};// ------------------------------------------------------------------------------// another helper classclass CSSProperty{public:    CSSProperty()    {	m_id = -1;	m_bImportant = false;	m_value = 0;    }    CSSProperty(const CSSProperty& o)    {        m_id = o.m_id;        m_bImportant = o.m_bImportant;        m_value = o.m_value;        if (m_value) m_value->ref();    }    ~CSSProperty() {	if(m_value) m_value->deref();    }    void setValue(CSSValueImpl *val) {	if ( val != m_value ) {	    if(m_value) m_value->deref();	    m_value = val;	    if(m_value) m_value->ref();	}    }    int id() const { return m_id; }    bool isImportant() const { return m_bImportant; }        CSSValueImpl *value() const { return m_value; }        DOM::DOMString cssText() const;    // make sure the following fits in 4 bytes.    int  m_id;    bool m_bImportant;protected:    CSSValueImpl *m_value;private:    CSSProperty &operator=(const CSSProperty&);};} // namespace#endif

⌨️ 快捷键说明

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