Qt 4.8
Functions
qtextimagehandler.cpp File Reference
#include "qtextimagehandler_p.h"
#include <qapplication.h>
#include <qtextformat.h>
#include <qpainter.h>
#include <qdebug.h>
#include <private/qtextengine_p.h>
#include <qpalette.h>
#include <qtextbrowser.h>
#include <qthread.h>

Go to the source code of this file.

Functions

static QImage getImage (QTextDocument *doc, const QTextImageFormat &format)
 
static QSize getImageSize (QTextDocument *doc, const QTextImageFormat &format)
 
static QPixmap getPixmap (QTextDocument *doc, const QTextImageFormat &format)
 
static QSize getPixmapSize (QTextDocument *doc, const QTextImageFormat &format)
 

Function Documentation

◆ getImage()

static QImage getImage ( QTextDocument doc,
const QTextImageFormat format 
)
static

Definition at line 136 of file qtextimagehandler.cpp.

Referenced by QTextImageHandler::drawObject(), and getImageSize().

137 {
138  QImage image;
139 
140  QString name = format.name();
141  if (name.startsWith(QLatin1String(":/"))) // auto-detect resources
142  name.prepend(QLatin1String("qrc"));
143  QUrl url = QUrl::fromEncoded(name.toUtf8());
145  if (data.type() == QVariant::Image) {
146  image = qvariant_cast<QImage>(data);
147  } else if (data.type() == QVariant::ByteArray) {
148  image.loadFromData(data.toByteArray());
149  }
150 
151  if (image.isNull()) {
152  QString context;
153 #ifndef QT_NO_TEXTBROWSER
154  QTextBrowser *browser = qobject_cast<QTextBrowser *>(doc->parent());
155  if (browser)
156  context = browser->source().toString();
157 #endif
159  image = QTextImageHandler::externalLoader(name, context);
160 
161  if (image.isNull()) { // try direct loading
162  name = format.name(); // remove qrc:/ prefix again
163  if (name.isEmpty() || !image.load(name))
164  return QImage(QLatin1String(":/trolltech/styles/commonstyle/images/file-16.png"));
165  }
166  doc->addResource(QTextDocument::ImageResource, url, image);
167  }
168 
169  return image;
170 }
The QVariant class acts like a union for the most common Qt data types.
Definition: qvariant.h:92
QString toString(FormattingOptions options=None) const
Returns the human-displayable string representation of the URL.
Definition: qurl.cpp:5896
QByteArray toUtf8() const Q_REQUIRED_RESULT
Returns a UTF-8 representation of the string as a QByteArray.
Definition: qstring.cpp:4074
bool isNull() const
Returns true if it is a null image, otherwise returns false.
Definition: qimage.cpp:1542
QString & prepend(QChar c)
Definition: qstring.h:261
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
Definition: qstring.cpp:3734
QLatin1String(DBUS_INTERFACE_DBUS))) Q_GLOBAL_STATIC_WITH_ARGS(QString
static Q_GUI_EXPORT ExternalImageLoaderFunction externalLoader
The QUrl class provides a convenient interface for working with URLs.
Definition: qurl.h:61
The QString class provides a Unicode character string.
Definition: qstring.h:83
T * qobject_cast(QObject *object)
Definition: qobject.h:375
QUrl source
the name of the displayed document.
Definition: qtextbrowser.h:62
bool load(QIODevice *device, const char *format)
This function reads a QImage from the given device.
Definition: qimage.cpp:5251
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
Definition: qstring.h:704
const char * name
The QImage class provides a hardware-independent image representation that allows direct access to th...
Definition: qimage.h:87
static const char * data(const QByteArray &arr)
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal...
Definition: qstring.h:654
QObject * parent() const
Returns a pointer to the parent object.
Definition: qobject.h:273
The QTextBrowser class provides a rich text browser with hypertext navigation.
Definition: qtextbrowser.h:58
void addResource(int type, const QUrl &name, const QVariant &resource)
Adds the resource resource to the resource cache, using type and name as identifiers.
QVariant resource(int type, const QUrl &name) const
Returns data of the specified type from the resource with the given name.
static QUrl fromEncoded(const QByteArray &url)
Parses input and returns the corresponding QUrl.
Definition: qurl.cpp:5964
QString name() const
Returns the name of the image.
Definition: qtextformat.h:702
bool loadFromData(const uchar *buf, int len, const char *format=0)
Loads an image from the first len bytes of the given binary data.
Definition: qimage.cpp:5275
T qvariant_cast(const QVariant &value)
Returns the given value converted to the template type T.
Definition: qvariant.h:571

◆ getImageSize()

static QSize getImageSize ( QTextDocument doc,
const QTextImageFormat format 
)
static

Definition at line 172 of file qtextimagehandler.cpp.

Referenced by QTextImageHandler::intrinsicSize().

173 {
174  QImage image;
175 
176  const bool hasWidth = format.hasProperty(QTextFormat::ImageWidth);
177  const int width = qRound(format.width());
178  const bool hasHeight = format.hasProperty(QTextFormat::ImageHeight);
179  const int height = qRound(format.height());
180 
181  QSize size(width, height);
182  if (!hasWidth || !hasHeight) {
183  image = getImage(doc, format);
184  if (!hasWidth)
185  size.setWidth(image.width());
186  if (!hasHeight)
187  size.setHeight(image.height());
188  }
189 
190  qreal scale = 1.0;
191  QPaintDevice *pdev = doc->documentLayout()->paintDevice();
192  if (pdev) {
193  if (image.isNull())
194  image = getImage(doc, format);
195  if (!image.isNull())
196  scale = qreal(pdev->logicalDpiY()) / qreal(qt_defaultDpi());
197  }
198  size *= scale;
199 
200  return size;
201 }
double qreal
Definition: qglobal.h:1193
int logicalDpiY() const
Definition: qpaintdevice.h:96
bool isNull() const
Returns true if it is a null image, otherwise returns false.
Definition: qimage.cpp:1542
qreal height() const
Returns the height of the rectangle occupied by the image.
Definition: qtextformat.h:710
bool hasProperty(int propertyId) const
Returns true if the text format has a property with the given propertyId; otherwise returns false...
static QImage getImage(QTextDocument *doc, const QTextImageFormat &format)
The QImage class provides a hardware-independent image representation that allows direct access to th...
Definition: qimage.h:87
int width() const
Returns the width of the image.
Definition: qimage.cpp:1557
Q_GUI_EXPORT int qt_defaultDpi()
Definition: qfont.cpp:240
QAbstractTextDocumentLayout * documentLayout() const
Returns the document layout for this document.
QPaintDevice * paintDevice() const
Returns the paint device used to render the document&#39;s layout.
int height() const
Returns the height of the image.
Definition: qimage.cpp:1572
The QSize class defines the size of a two-dimensional object using integer point precision.
Definition: qsize.h:53
Q_DECL_CONSTEXPR int qRound(qreal d)
Definition: qglobal.h:1203
qreal width() const
Returns the width of the rectangle occupied by the image.
Definition: qtextformat.h:706

◆ getPixmap()

static QPixmap getPixmap ( QTextDocument doc,
const QTextImageFormat format 
)
static

Definition at line 59 of file qtextimagehandler.cpp.

Referenced by QTextImageHandler::drawObject(), and getPixmapSize().

60 {
61  QPixmap pm;
62 
63  QString name = format.name();
64  if (name.startsWith(QLatin1String(":/"))) // auto-detect resources
65  name.prepend(QLatin1String("qrc"));
66  QUrl url = QUrl::fromEncoded(name.toUtf8());
68  if (data.type() == QVariant::Pixmap || data.type() == QVariant::Image) {
69  pm = qvariant_cast<QPixmap>(data);
70  } else if (data.type() == QVariant::ByteArray) {
71  pm.loadFromData(data.toByteArray());
72  }
73 
74  if (pm.isNull()) {
75  QString context;
76 #ifndef QT_NO_TEXTBROWSER
77  QTextBrowser *browser = qobject_cast<QTextBrowser *>(doc->parent());
78  if (browser)
79  context = browser->source().toString();
80 #endif
81  QImage img;
83  img = QTextImageHandler::externalLoader(name, context);
84 
85  if (img.isNull()) { // try direct loading
86  name = format.name(); // remove qrc:/ prefix again
87  if (name.isEmpty() || !img.load(name))
88  return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/file-16.png"));
89  }
90  pm = QPixmap::fromImage(img);
92  }
93 
94  return pm;
95 }
The QVariant class acts like a union for the most common Qt data types.
Definition: qvariant.h:92
static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags=Qt::AutoColor)
Converts the given image to a pixmap using the specified flags to control the conversion.
Definition: qpixmap.cpp:2197
QString toString(FormattingOptions options=None) const
Returns the human-displayable string representation of the URL.
Definition: qurl.cpp:5896
QByteArray toUtf8() const Q_REQUIRED_RESULT
Returns a UTF-8 representation of the string as a QByteArray.
Definition: qstring.cpp:4074
bool isNull() const
Returns true if it is a null image, otherwise returns false.
Definition: qimage.cpp:1542
QString & prepend(QChar c)
Definition: qstring.h:261
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
Definition: qstring.cpp:3734
QLatin1String(DBUS_INTERFACE_DBUS))) Q_GLOBAL_STATIC_WITH_ARGS(QString
static Q_GUI_EXPORT ExternalImageLoaderFunction externalLoader
The QUrl class provides a convenient interface for working with URLs.
Definition: qurl.h:61
The QString class provides a Unicode character string.
Definition: qstring.h:83
T * qobject_cast(QObject *object)
Definition: qobject.h:375
QUrl source
the name of the displayed document.
Definition: qtextbrowser.h:62
bool load(QIODevice *device, const char *format)
This function reads a QImage from the given device.
Definition: qimage.cpp:5251
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
Definition: qstring.h:704
const char * name
The QImage class provides a hardware-independent image representation that allows direct access to th...
Definition: qimage.h:87
static const char * data(const QByteArray &arr)
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal...
Definition: qstring.h:654
bool loadFromData(const uchar *buf, uint len, const char *format=0, Qt::ImageConversionFlags flags=Qt::AutoColor)
Loads a pixmap from the len first bytes of the given binary data.
Definition: qpixmap.cpp:979
QObject * parent() const
Returns a pointer to the parent object.
Definition: qobject.h:273
The QTextBrowser class provides a rich text browser with hypertext navigation.
Definition: qtextbrowser.h:58
void addResource(int type, const QUrl &name, const QVariant &resource)
Adds the resource resource to the resource cache, using type and name as identifiers.
The QPixmap class is an off-screen image representation that can be used as a paint device...
Definition: qpixmap.h:71
QVariant resource(int type, const QUrl &name) const
Returns data of the specified type from the resource with the given name.
static QUrl fromEncoded(const QByteArray &url)
Parses input and returns the corresponding QUrl.
Definition: qurl.cpp:5964
bool isNull() const
Returns true if this is a null pixmap; otherwise returns false.
Definition: qpixmap.cpp:615
QString name() const
Returns the name of the image.
Definition: qtextformat.h:702
T qvariant_cast(const QVariant &value)
Returns the given value converted to the template type T.
Definition: qvariant.h:571

◆ getPixmapSize()

static QSize getPixmapSize ( QTextDocument doc,
const QTextImageFormat format 
)
static

Definition at line 97 of file qtextimagehandler.cpp.

Referenced by QTextImageHandler::intrinsicSize().

98 {
99  QPixmap pm;
100 
101  const bool hasWidth = format.hasProperty(QTextFormat::ImageWidth);
102  const int width = qRound(format.width());
103  const bool hasHeight = format.hasProperty(QTextFormat::ImageHeight);
104  const int height = qRound(format.height());
105 
106  QSize size(width, height);
107  if (!hasWidth || !hasHeight) {
108  pm = getPixmap(doc, format);
109  if (!hasWidth) {
110  if (!hasHeight)
111  size.setWidth(pm.width());
112  else
113  size.setWidth(qRound(height * (pm.width() / (qreal) pm.height())));
114  }
115  if (!hasHeight) {
116  if (!hasWidth)
117  size.setHeight(pm.height());
118  else
119  size.setHeight(qRound(width * (pm.height() / (qreal) pm.width())));
120  }
121  }
122 
123  qreal scale = 1.0;
124  QPaintDevice *pdev = doc->documentLayout()->paintDevice();
125  if (pdev) {
126  if (pm.isNull())
127  pm = getPixmap(doc, format);
128  if (!pm.isNull())
129  scale = qreal(pdev->logicalDpiY()) / qreal(qt_defaultDpi());
130  }
131  size *= scale;
132 
133  return size;
134 }
double qreal
Definition: qglobal.h:1193
int width() const
Returns the width of the pixmap.
Definition: qpixmap.cpp:630
int logicalDpiY() const
Definition: qpaintdevice.h:96
static QPixmap getPixmap(QTextDocument *doc, const QTextImageFormat &format)
qreal height() const
Returns the height of the rectangle occupied by the image.
Definition: qtextformat.h:710
bool hasProperty(int propertyId) const
Returns true if the text format has a property with the given propertyId; otherwise returns false...
Q_GUI_EXPORT int qt_defaultDpi()
Definition: qfont.cpp:240
QAbstractTextDocumentLayout * documentLayout() const
Returns the document layout for this document.
QPaintDevice * paintDevice() const
Returns the paint device used to render the document&#39;s layout.
The QPixmap class is an off-screen image representation that can be used as a paint device...
Definition: qpixmap.h:71
int height() const
Returns the height of the pixmap.
Definition: qpixmap.cpp:645
The QSize class defines the size of a two-dimensional object using integer point precision.
Definition: qsize.h:53
bool isNull() const
Returns true if this is a null pixmap; otherwise returns false.
Definition: qpixmap.cpp:615
Q_DECL_CONSTEXPR int qRound(qreal d)
Definition: qglobal.h:1203
qreal width() const
Returns the width of the rectangle occupied by the image.
Definition: qtextformat.h:706