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

📄 qsvgnode.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** 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.******************************************************************************/#include "qsvgnode_p.h"#include "qsvgtinydocument_p.h"#include "qdebug.h"QSvgNode::QSvgNode(QSvgNode *parent)    : m_parent(parent),      m_visible(true),      m_displayMode(BlockMode){}QSvgNode::~QSvgNode(){}void QSvgNode::appendStyleProperty(QSvgStyleProperty *prop, const QString &id,                                   bool justLink){    //qDebug()<<"appending "<<prop->type()<< " ("<< id <<") "<<"to "<<this<<this->type();    if (!justLink) {        switch (prop->type()) {        case QSvgStyleProperty::QUALITY:            m_style.quality = static_cast<QSvgQualityStyle*>(prop);            break;        case QSvgStyleProperty::FILL:            m_style.fill = static_cast<QSvgFillStyle*>(prop);            break;        case QSvgStyleProperty::VIEWPORT_FILL:            m_style.viewportFill = static_cast<QSvgViewportFillStyle*>(prop);            break;        case QSvgStyleProperty::FONT:            m_style.font = static_cast<QSvgFontStyle*>(prop);            break;        case QSvgStyleProperty::STROKE:            m_style.stroke = static_cast<QSvgStrokeStyle*>(prop);            break;        case QSvgStyleProperty::SOLID_COLOR:            m_style.solidColor = static_cast<QSvgSolidColorStyle*>(prop);            break;        case QSvgStyleProperty::GRADIENT:            m_style.gradient = static_cast<QSvgGradientStyle*>(prop);            break;        case QSvgStyleProperty::TRANSFORM:            m_style.transform = static_cast<QSvgTransformStyle*>(prop);            break;        case QSvgStyleProperty::ANIMATE_COLOR:            m_style.animateColor = static_cast<QSvgAnimateColor*>(prop);            break;        case QSvgStyleProperty::ANIMATE_TRANSFORM:            m_style.animateTransforms.append(                static_cast<QSvgAnimateTransform*>(prop));            break;        case QSvgStyleProperty::OPACITY:            m_style.opacity = static_cast<QSvgOpacityStyle*>(prop);            break;        case QSvgStyleProperty::COMP_OP:            m_style.compop = static_cast<QSvgCompOpStyle*>(prop);            break;        default:            qDebug("QSvgNode: Trying to append unknown property!");            break;        }    }    if (!id.isEmpty()) {        m_styles.insert(id, prop);    }}void QSvgNode::applyStyle(QPainter *p){    m_style.apply(p, bounds(), this);}void QSvgNode::revertStyle(QPainter *p){    m_style.revert(p);}QSvgStyleProperty * QSvgNode::styleProperty(QSvgStyleProperty::Type type) const{    const QSvgNode *node = this;    while (node) {        switch (type) {        case QSvgStyleProperty::QUALITY:            if (node->m_style.quality)                return node->m_style.quality;            break;        case QSvgStyleProperty::FILL:            if (node->m_style.fill)                return node->m_style.fill;            break;        case QSvgStyleProperty::VIEWPORT_FILL:            if (m_style.viewportFill)                return node->m_style.viewportFill;            break;        case QSvgStyleProperty::FONT:            if (node->m_style.font)                return node->m_style.font;            break;        case QSvgStyleProperty::STROKE:            if (node->m_style.stroke)                return node->m_style.stroke;            break;        case QSvgStyleProperty::SOLID_COLOR:            if (node->m_style.solidColor)                return node->m_style.solidColor;            break;        case QSvgStyleProperty::GRADIENT:            if (node->m_style.gradient)                return node->m_style.gradient;            break;        case QSvgStyleProperty::TRANSFORM:            if (node->m_style.transform)                return node->m_style.transform;            break;        case QSvgStyleProperty::ANIMATE_COLOR:            if (node->m_style.animateColor)                return node->m_style.animateColor;            break;        case QSvgStyleProperty::ANIMATE_TRANSFORM:            if (!node->m_style.animateTransforms.isEmpty())                return node->m_style.animateTransforms.first();            break;        case QSvgStyleProperty::OPACITY:            if (node->m_style.opacity)                return node->m_style.opacity;            break;        case QSvgStyleProperty::COMP_OP:            if (node->m_style.compop)                return node->m_style.compop;            break;        default:            break;        }        node = node->parent();    }    return 0;}QSvgStyleProperty * QSvgNode::styleProperty(const QString &id) const{    QString rid = id;    if (rid.startsWith(QLatin1Char('#')))        rid.remove(0, 1);    const QSvgNode *node = this;    while (node) {        QSvgStyleProperty *style = node->m_styles[rid];        if (style)            return style;        node = node->parent();    }    return 0;}QRectF QSvgNode::bounds() const{    return QRectF(0, 0, 0, 0);}QSvgTinyDocument * QSvgNode::document() const{    QSvgTinyDocument *doc = 0;    QSvgNode *node = const_cast<QSvgNode*>(this);    while (node && node->type() != QSvgNode::DOC) {        node = node->parent();    }    doc = static_cast<QSvgTinyDocument*>(node);    return doc;}void QSvgNode::setRequiredFeatures(const QStringList &lst){    m_requiredFeatures = lst;}const QStringList & QSvgNode::requiredFeatures() const{    return m_requiredFeatures;}void QSvgNode::setRequiredExtensions(const QStringList &lst){    m_requiredExtensions = lst;}const QStringList & QSvgNode::requiredExtensions() const{    return m_requiredExtensions;}void QSvgNode::setRequiredLanguages(const QStringList &lst){    m_requiredLanguages = lst;}const QStringList & QSvgNode::requiredLanguages() const{    return m_requiredLanguages;}void QSvgNode::setRequiredFormats(const QStringList &lst){    m_requiredFormats = lst;}const QStringList & QSvgNode::requiredFormats() const{    return m_requiredFormats;}void QSvgNode::setRequiredFonts(const QStringList &lst){    m_requiredFonts = lst;}const QStringList & QSvgNode::requiredFonts() const{    return m_requiredFonts;}void QSvgNode::setVisible(bool visible){    //propagate visibility change of true to the parent    //not propagating false is just a small performance    //degradation since we'll iterate over children without    //drawing any of them    if (m_parent && visible && !m_parent->isVisible())        m_parent->setVisible(true);    m_visible = visible;}QRectF QSvgNode::transformedBounds(const QMatrix &mat) const{    QMatrix m = mat;    QSvgTransformStyle *trans = m_style.transform;    if (trans) {        m = trans->qmatrix() * m;    }    QRectF rect = bounds();    rect = m.mapRect(rect);    return rect;}void QSvgNode::setNodeId(const QString &i){    m_id = i;}void QSvgNode::setXmlClass(const QString &str){    m_class = str;}void QSvgNode::setDisplayMode(DisplayMode mode){    m_displayMode = mode;}QSvgNode::DisplayMode QSvgNode::displayMode() const{    return m_displayMode;}qreal QSvgNode::strokeWidth() const{    QSvgStrokeStyle *stroke = static_cast<QSvgStrokeStyle*>(        styleProperty(QSvgStyleProperty::STROKE));    if (!stroke)        return 0;    return stroke->qpen().widthF();}

⌨️ 快捷键说明

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