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

📄 qtextimagehandler.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtGui 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://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** 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 "qtextimagehandler_p.h"#include <qtextformat.h>#include <qpainter.h>#include <qpixmapcache.h>#include <qdebug.h>#include <private/qtextengine_p.h>#include <qpalette.h>#include <qtextbrowser.h>// set by the mime source factory in Qt3CompatQTextImageHandler::ExternalImageLoaderFunction QTextImageHandler::externalLoader = 0;static QPixmap getPixmap(QTextDocument *doc, const QTextImageFormat &format){    QPixmap pm;    QString name = format.name();    const QVariant data = doc->resource(QTextDocument::ImageResource, name);    if (data.type() == QVariant::Pixmap || data.type() == QVariant::Image) {        pm = qvariant_cast<QPixmap>(data);    } else if (data.type() == QVariant::ByteArray) {        pm.loadFromData(data.toByteArray());    }    if (pm.isNull()) {        QString context;#ifndef QT_NO_TEXTBROWSER        QTextBrowser *browser = qobject_cast<QTextBrowser *>(doc->parent());        if (browser)            context = browser->source().toString();#endif        QImage img;        if (QTextImageHandler::externalLoader)            img = QTextImageHandler::externalLoader(name, context);        if (img.isNull()) // try direct loading            if (name.isEmpty() || !img.load(name))                return QPixmap(":/trolltech/styles/commonstyle/images/file-16.png");        pm = QPixmap::fromImage(img);        doc->addResource(QTextDocument::ImageResource, name, pm);    }    return pm;}static QSize getPixmapSize(QTextDocument *doc, const QTextImageFormat &format){    QPixmap pm;    const bool hasWidth = format.hasProperty(QTextFormat::ImageWidth);    const int width = qRound(format.width());    const bool hasHeight = format.hasProperty(QTextFormat::ImageHeight);    const int height = qRound(format.height());    QSize size(width, height);    if (!hasWidth || !hasHeight) {        pm = getPixmap(doc, format);        if (!hasWidth)            size.setWidth(pm.width());        if (!hasHeight)            size.setHeight(pm.height());    }    qreal scale = 1.0;    QPaintDevice *pdev = doc->documentLayout()->paintDevice();    if (pdev) {        extern int qt_defaultDpi();        if (pm.isNull())            pm = getPixmap(doc, format);        if (!pm.isNull())            scale = qreal(pdev->logicalDpiY()) / qreal(qt_defaultDpi());    }    size *= scale;    return size;}QTextImageHandler::QTextImageHandler(QObject *parent)    : QObject(parent){}QSizeF QTextImageHandler::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format){    Q_UNUSED(posInDocument)    const QTextImageFormat imageFormat = format.toImageFormat();    return getPixmapSize(doc, imageFormat);}void QTextImageHandler::drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format){    Q_UNUSED(posInDocument)    const QTextImageFormat imageFormat = format.toImageFormat();    const QPixmap pixmap = getPixmap(doc, imageFormat);    p->drawPixmap(rect, pixmap, pixmap.rect());}

⌨️ 快捷键说明

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