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

📄 qsvgstyle_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtSVG module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QSVGSTYLE_P_H#define QSVGSTYLE_P_H////  W A R N I N G//  -------------//// This file is not part of the Qt API.  It exists purely as an// implementation detail.  This header file may change from version to// version without notice, or even be removed.//// We mean it.//#include "QtGui/qpainter.h"#include "QtGui/qpen.h"#include "QtGui/qbrush.h"#include "QtGui/qmatrix.h"#include "QtGui/qcolor.h"#include "QtGui/qfont.h"#include <qdebug.h>class QPainter;class QSvgNode;class QSvgFont;class QSvgTinyDocument;template <class T> class QSvgRefCounter{public:    QSvgRefCounter() { t = 0; }    QSvgRefCounter(T *_t)    {        t = _t;        if (t)            t->ref();    }    QSvgRefCounter(const QSvgRefCounter &other)    {        t = other.t;        if (t)            t->ref();    }    QSvgRefCounter &operator =(T *_t)    {        if(_t)            _t->ref();        if (t)            t->deref();        t = _t;        return *this;    }    QSvgRefCounter &operator =(const QSvgRefCounter &other)    {        if(other.t)            other.t->ref();        if (t)            t->deref();        t = other.t;        return *this;    }    ~QSvgRefCounter()    {        if (t)            t->deref();    }    inline T *operator->() const { return t; }    inline operator T*() const { return t; }private:    T *t;};class QSvgRefCounted{public:    QSvgRefCounted() { _ref = 0; }    virtual ~QSvgRefCounted() {}    void ref() {        ++_ref;//        qDebug() << this << ": adding ref, now " << _ref;    }    void deref() {//        qDebug() << this << ": removing ref, now " << _ref;        if(!--_ref) {//            qDebug("     deleting");            delete this;        }    }private:    int _ref;};class QSvgStyleProperty : public QSvgRefCounted{public:    enum Type    {        QUALITY,        FILL,        VIEWPORT_FILL,        FONT,        STROKE,        SOLID_COLOR,        GRADIENT,        TRANSFORM,        ANIMATE_TRANSFORM,        ANIMATE_COLOR,        OPACITY,        COMP_OP    };public:    virtual ~QSvgStyleProperty();    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node)  =0;    virtual void revert(QPainter *p) =0;    virtual Type type() const=0;};class QSvgQualityStyle : public QSvgStyleProperty{public:    QSvgQualityStyle(int color);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;private:    // color-render ing v 	v 	'auto' | 'optimizeSpeed' |    //                                  'optimizeQuality' | 'inherit'    int m_colorRendering;    // shape-rendering v 	v 	'auto' | 'optimizeSpeed' | 'crispEdges' |    //                                  'geometricPrecision' | 'inherit'    //QSvgShapeRendering m_shapeRendering;    // text-rendering    v 	v 	'auto' | 'optimizeSpeed' | 'optimizeLegibility'    //                                | 'geometricPrecision' | 'inherit'    //QSvgTextRendering m_textRendering;    // vector-effect         v 	x 	'default' | 'non-scaling-stroke' | 'inherit'    //QSvgVectorEffect m_vectorEffect;    // image-rendering v 	v 	'auto' | 'optimizeSpeed' | 'optimizeQuality' |    //                                      'inherit'    //QSvgImageRendering m_imageRendering;};class QSvgOpacityStyle : public QSvgStyleProperty{public:    QSvgOpacityStyle(qreal opacity);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;private:    qreal m_opacity;    qreal m_oldOpacity;};class QSvgFillStyle : public QSvgStyleProperty{public:    QSvgFillStyle(const QBrush &brush, bool fromColor=false);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    void setFillRule(Qt::FillRule f);    //### hack that would be a lot better handled by    //having a default QSvgColorStyle element and handling it    //correctly in qsvghandler    bool fromColor() const    {        return m_fromColor;    }    const QBrush & qbrush() const    {        return m_fill;    }private:    // fill            v 	v 	'inherit' | <Paint.datatype>    // fill-opacity    v 	v 	'inherit' | <OpacityValue.datatype>    QBrush m_fill;    QBrush m_oldFill;    bool m_fromColor;    bool         m_fillRuleSet;    Qt::FillRule m_fillRule;};class QSvgViewportFillStyle : public QSvgStyleProperty{public:    QSvgViewportFillStyle(const QBrush &brush);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    const QBrush & qbrush() const    {        return m_viewportFill;    }private:    // viewport-fill         v 	x 	'inherit' | <Paint.datatype>    // viewport-fill-opacity 	v 	x 	'inherit' | <OpacityValue.datatype>    QBrush m_viewportFill;    QBrush m_oldFill;};class QSvgFontStyle : public QSvgStyleProperty{public:    QSvgFontStyle(QSvgFont *font, QSvgTinyDocument *doc);    QSvgFontStyle(const QFont &font, QSvgTinyDocument *doc);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    void setPointSize(qreal size);    qreal pointSize() const;    //### hack to avoid having a separate style element for text-anchor    QString textAnchor() const;    void setTextAnchor(const QString &anchor);    QSvgFont * svgFont() const    {        return m_font;    }    QSvgTinyDocument *doc() const    {        return m_doc;    }    const QFont & qfont() const    {        return m_qfont;    }private:    QSvgFont *m_font;    qreal     m_pointSize;    QSvgTinyDocument *m_doc;    QString m_textAnchor;    QFont m_qfont;    QFont m_oldFont;};class QSvgStrokeStyle : public QSvgStyleProperty{public:    QSvgStrokeStyle(const QPen &pen);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    const QPen & qpen() const    {        return m_stroke;    }private:    // stroke            v 	v 	'inherit' | <Paint.datatype>    // stroke-dasharray  v 	v 	'inherit' | <StrokeDashArrayValue.datatype>    // stroke-dashoffset v 	v 	'inherit' | <StrokeDashOffsetValue.datatype>    // stroke-linecap    v 	v 	'butt' | 'round' | 'square' | 'inherit'    // stroke-linejoin   v 	v 	'miter' | 'round' | 'bevel' | 'inherit'    // stroke-miterlimit v 	v 	'inherit' | <StrokeMiterLimitValue.datatype>    // stroke-opacity    v 	v 	'inherit' | <OpacityValue.datatype>    // stroke-width      v 	v 	'inherit' | <StrokeWidthValue.datatype>    QPen m_stroke;    QPen m_oldStroke;};class QSvgSolidColorStyle : public QSvgStyleProperty{public:    QSvgSolidColorStyle(const QColor &color);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    const QColor & qcolor() const    {        return m_solidColor;    }private:    // solid-color       v 	x 	'inherit' | <SVGColor.datatype>    // solid-opacity     v 	x 	'inherit' | <OpacityValue.datatype>    QColor m_solidColor;    QBrush m_oldFill;    QPen   m_oldStroke;};class QSvgGradientStyle : public QSvgStyleProperty{public:    QSvgGradientStyle(QGradient *grad, bool resolveBounds=false);    ~QSvgGradientStyle() { delete m_gradient; }    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    void setStopLink(const QString &link, QSvgTinyDocument *doc);    QString stopLink() const { return m_link; }    void resolveStops();    void setMatrix(const QMatrix &matrix);    QMatrix  qmatrix() const    {        return m_matrix;    }    QGradient *qgradient() const    {        return m_gradient;    }    void addResolve(qreal offset);private:    QGradient      *m_gradient;    QList<qreal>  m_resolvePoints;    QBrush m_oldFill;    bool   m_resolveBounds;    QMatrix m_matrix;    QSvgTinyDocument *m_doc;    QString           m_link;};class QSvgTransformStyle : public QSvgStyleProperty{public:    QSvgTransformStyle(const QMatrix &trans);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    const QMatrix & qmatrix() const    {        return m_transform;    }private:    //7.6 The transform  attribute    QMatrix m_transform;    QMatrix m_oldWorldMatrix;};class QSvgAnimateTransform : public QSvgStyleProperty{public:    enum TransformType    {        Empty,        Translate,        Scale,        Rotate,        SkewX,        SkewY    };public:    QSvgAnimateTransform(int startMs, int endMs, int by = 0);    void setArgs(TransformType type, const QVector<qreal> &args);    void setFreeze(bool freeze);    void setRepeatCount(qreal repeatCount);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;protected:    void resolveMatrix(QSvgNode *node);private:    qreal m_from, m_to, m_by;    qreal m_totalRunningTime;    TransformType m_type;    QVector<qreal> m_args;    int m_count;    QMatrix m_transform;    QMatrix m_oldWorldMatrix;    bool m_finished;    bool m_freeze;    qreal m_repeatCount;};class QSvgAnimateColor : public QSvgStyleProperty{public:    QSvgAnimateColor(int startMs, int endMs, int by = 0);    void setArgs(bool fill, const QList<QColor> &colors);    void setFreeze(bool freeze);    void setRepeatCount(qreal repeatCount);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;private:    qreal m_from, m_to, m_by;    qreal m_totalRunningTime;    QList<QColor> m_colors;    QBrush m_oldBrush;    QPen   m_oldPen;    bool m_fill;    bool m_finished;    bool m_freeze;    qreal m_repeatCount;};class QSvgCompOpStyle : public QSvgStyleProperty{public:    QSvgCompOpStyle(QPainter::CompositionMode mode);    virtual void apply(QPainter *p, const QRectF &, QSvgNode *node);    virtual void revert(QPainter *p);    virtual Type type() const;    const QPainter::CompositionMode & compOp() const    {        return m_mode;    }private:    //comp-op attribute    QPainter::CompositionMode m_mode;    QPainter::CompositionMode m_oldMode;};class QSvgStyle{public:    QSvgStyle()        : quality(0),          fill(0),          viewportFill(0),          font(0),          stroke(0),          solidColor(0),          gradient(0),          transform(0),          animateColor(0),          opacity(0),          compop(0)    {}    ~QSvgStyle();    void apply(QPainter *p, const QRectF &rect, QSvgNode *node);    void revert(QPainter *p);    QSvgRefCounter<QSvgQualityStyle>      quality;    QSvgRefCounter<QSvgFillStyle>         fill;    QSvgRefCounter<QSvgViewportFillStyle> viewportFill;    QSvgRefCounter<QSvgFontStyle>         font;    QSvgRefCounter<QSvgStrokeStyle>       stroke;    QSvgRefCounter<QSvgSolidColorStyle>   solidColor;    QSvgRefCounter<QSvgGradientStyle>     gradient;    QSvgRefCounter<QSvgTransformStyle>    transform;    QSvgRefCounter<QSvgAnimateColor>      animateColor;    QList<QSvgRefCounter<QSvgAnimateTransform> >   animateTransforms;    QSvgRefCounter<QSvgOpacityStyle>      opacity;    QSvgRefCounter<QSvgCompOpStyle>       compop;};/********************************************************/// NOT implemented:// color           v 	v 	'inherit' | <Color.datatype>//QColor m_color;// display         v 	x 	'inline' | 'block' | 'list-item'//                                 | 'run-in' | 'compact' | 'marker' |//                                 'table' | 'inline-table' |//                                 'table-row-group' | 'table-header-group' |//                                 'table-footer-group' | 'table-row' |//                                 'table-column-group' | 'table-column' |//                                 'table-cell' | 'table-caption' |//                                 'none' | 'inherit'//QSvgDisplayStyle m_display;// display-align   v 	v 	'auto' | 'before' | 'center' | 'after' | 'inherit'//QSvgDisplayAlign m_displayAlign;// line-increment  v 	v 	'auto' | 'inherit' | <Number.datatype>//int m_lineIncrement;// text-anchor       v 	v 	'start' | 'middle' | 'end' | 'inherit'//QSvgTextAnchor m_textAnchor;// visibility 	v 	v 	'visible' | 'hidden' | 'inherit'//QSvgVisibility m_visibility;/******************************************************/// the following do not make sense for us// pointer-events  v 	v 	'visiblePainted' | 'visibleFill' | 'visibleStroke' |//                              'visible' | 'painted' | 'fill' | 'stroke' | 'all' |//                              'none' | 'inherit'//QSvgPointEvents m_pointerEvents;// audio-level     v  	x  	'inherit' | <Number.datatype>#endif // QSVGSTYLE_P_H

⌨️ 快捷键说明

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