summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/graphicsitems')
-rw-r--r--src/declarative/graphicsitems/graphicsitems.pri2
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsborderimage.cpp14
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsimagebase.cpp10
-rw-r--r--src/declarative/graphicsitems/qmlgraphicspixmapcache.cpp282
-rw-r--r--src/declarative/graphicsitems/qmlgraphicspixmapcache_p.h71
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsscalegrid_p_p.h2
6 files changed, 13 insertions, 368 deletions
diff --git a/src/declarative/graphicsitems/graphicsitems.pri b/src/declarative/graphicsitems/graphicsitems.pri
index 15d775c..cf71451 100644
--- a/src/declarative/graphicsitems/graphicsitems.pri
+++ b/src/declarative/graphicsitems/graphicsitems.pri
@@ -39,7 +39,6 @@ HEADERS += \
graphicsitems/qmlgraphicstextedit_p_p.h \
graphicsitems/qmlgraphicstext_p.h \
graphicsitems/qmlgraphicstext_p_p.h \
- graphicsitems/qmlgraphicspixmapcache_p.h \
graphicsitems/qmlgraphicsvisualitemmodel_p.h \
graphicsitems/qmlgraphicslistview_p.h \
graphicsitems/qmlgraphicsgraphicsobjectcontainer_p.h \
@@ -70,7 +69,6 @@ SOURCES += \
graphicsitems/qmlgraphicstextinput.cpp \
graphicsitems/qmlgraphicstext.cpp \
graphicsitems/qmlgraphicstextedit.cpp \
- graphicsitems/qmlgraphicspixmapcache.cpp \
graphicsitems/qmlgraphicsvisualitemmodel.cpp \
graphicsitems/qmlgraphicslistview.cpp \
graphicsitems/qmlgraphicsgraphicsobjectcontainer.cpp \
diff --git a/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp b/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp
index ed39a2b..89bbe91 100644
--- a/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp
@@ -80,7 +80,7 @@ QmlGraphicsBorderImage::~QmlGraphicsBorderImage()
if (d->sciReply)
d->sciReply->deleteLater();
if (d->sciPendingPixmapCache)
- QmlGraphicsPixmapCache::cancelGet(d->sciurl, this);
+ QmlPixmapCache::cancelGet(d->sciurl, this);
}
/*!
\qmlproperty enum BorderImage::status
@@ -160,11 +160,11 @@ void QmlGraphicsBorderImage::setSource(const QUrl &url)
}
if (d->pendingPixmapCache) {
- QmlGraphicsPixmapCache::cancelGet(d->url, this);
+ QmlPixmapCache::cancelGet(d->url, this);
d->pendingPixmapCache = false;
}
if (d->sciPendingPixmapCache) {
- QmlGraphicsPixmapCache::cancelGet(d->sciurl, this);
+ QmlPixmapCache::cancelGet(d->sciurl, this);
d->sciPendingPixmapCache = false;
}
@@ -203,7 +203,7 @@ void QmlGraphicsBorderImage::setSource(const QUrl &url)
this, SLOT(sciRequestFinished()));
}
} else {
- QNetworkReply *reply = QmlGraphicsPixmapCache::get(qmlEngine(this), d->url, &d->pix);
+ QNetworkReply *reply = QmlPixmapCache::get(qmlEngine(this), d->url, &d->pix);
if (reply) {
d->pendingPixmapCache = true;
connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
@@ -320,7 +320,7 @@ void QmlGraphicsBorderImage::setGridScaledImage(const QmlGraphicsGridScaledImage
d->verticalTileMode = sci.verticalTileRule();
d->sciurl = d->url.resolved(QUrl(sci.pixmapUrl()));
- QNetworkReply *reply = QmlGraphicsPixmapCache::get(qmlEngine(this), d->sciurl, &d->pix);
+ QNetworkReply *reply = QmlPixmapCache::get(qmlEngine(this), d->sciurl, &d->pix);
if (reply) {
d->sciPendingPixmapCache = true;
connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
@@ -348,10 +348,10 @@ void QmlGraphicsBorderImage::requestFinished()
if (d->url.path().endsWith(QLatin1String(".sci"))) {
d->sciPendingPixmapCache = false;
- QmlGraphicsPixmapCache::find(d->sciurl, &d->pix);
+ QmlPixmapCache::find(d->sciurl, &d->pix);
} else {
d->pendingPixmapCache = false;
- if (!QmlGraphicsPixmapCache::find(d->url, &d->pix))
+ if (!QmlPixmapCache::find(d->url, &d->pix))
d->status = Error;
}
setImplicitWidth(d->pix.width());
diff --git a/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp b/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp
index 283fb04..e86b53d 100644
--- a/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp
@@ -45,7 +45,7 @@
#include <QNetworkReply>
#include <QFile>
#include <QtDeclarative/qmlengine.h>
-#include <private/qmlgraphicspixmapcache_p.h>
+#include <private/qmlpixmapcache_p.h>
QT_BEGIN_NAMESPACE
@@ -65,7 +65,7 @@ QmlGraphicsImageBase::~QmlGraphicsImageBase()
{
Q_D(QmlGraphicsImageBase);
if (d->pendingPixmapCache)
- QmlGraphicsPixmapCache::cancelGet(d->url, this);
+ QmlPixmapCache::cancelGet(d->url, this);
}
QmlGraphicsImageBase::Status QmlGraphicsImageBase::status() const
@@ -95,7 +95,7 @@ void QmlGraphicsImageBase::setSource(const QUrl &url)
return;
if (d->pendingPixmapCache) {
- QmlGraphicsPixmapCache::cancelGet(d->url, this);
+ QmlPixmapCache::cancelGet(d->url, this);
d->pendingPixmapCache = false;
}
@@ -117,7 +117,7 @@ void QmlGraphicsImageBase::setSource(const QUrl &url)
update();
} else {
d->status = Loading;
- QNetworkReply *reply = QmlGraphicsPixmapCache::get(qmlEngine(this), d->url, &d->pix);
+ QNetworkReply *reply = QmlPixmapCache::get(qmlEngine(this), d->url, &d->pix);
if (reply) {
d->pendingPixmapCache = true;
connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
@@ -147,7 +147,7 @@ void QmlGraphicsImageBase::requestFinished()
d->pendingPixmapCache = false;
- if (!QmlGraphicsPixmapCache::find(d->url, &d->pix))
+ if (!QmlPixmapCache::find(d->url, &d->pix))
d->status = Error;
setImplicitWidth(d->pix.width());
setImplicitHeight(d->pix.height());
diff --git a/src/declarative/graphicsitems/qmlgraphicspixmapcache.cpp b/src/declarative/graphicsitems/qmlgraphicspixmapcache.cpp
deleted file mode 100644
index fdf489c..0000000
--- a/src/declarative/graphicsitems/qmlgraphicspixmapcache.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlgraphicspixmapcache_p.h"
-#include <QImageReader>
-#include <QHash>
-#include <QNetworkReply>
-#include <QPixmapCache>
-#include <private/qfxperf_p_p.h>
-#include <QtDeclarative/qmlengine.h>
-#include <QFile>
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-class QSharedNetworkReply;
-typedef QHash<QString, QSharedNetworkReply *> QmlGraphicsSharedNetworkReplyHash;
-static QmlGraphicsSharedNetworkReplyHash qfxActiveNetworkReplies;
-
-class QSharedNetworkReply
-{
-public:
- QSharedNetworkReply(QNetworkReply *r) : reply(r), refCount(1) {}
- ~QSharedNetworkReply()
- {
- reply->deleteLater();
- }
- QNetworkReply *reply;
- QPixmap pixmap; // ensure reference to pixmap to QPixmapCache does not discard
-
- int refCount;
- void addRef()
- {
- ++refCount;
- }
- void release()
- {
- Q_ASSERT(refCount > 0);
- --refCount;
- if (refCount == 0) {
- QString key = reply->url().toString();
- qfxActiveNetworkReplies.remove(key);
- delete this;
- }
- }
-};
-
-static bool readImage(QIODevice *dev, QPixmap *pixmap)
- {
- QImageReader imgio(dev);
-
-//#define QT_TEST_SCALED_SIZE
-#ifdef QT_TEST_SCALED_SIZE
- /*
- Some mechanism is needed for loading images at a limited size, especially
- for remote images. Loading only thumbnails of remote progressive JPEG
- images can be efficient. (Qt jpeg handler does not do so currently)
- */
-
- QSize limit(60,60);
- QSize sz = imgio.size();
- if (sz.width() > limit.width() || sz.height() > limit.height()) {
- sz.scale(limit,Qt::KeepAspectRatio);
- imgio.setScaledSize(sz);
- }
-#endif
-
- QImage img;
- if (imgio.read(&img)) {
-#ifdef QT_TEST_SCALED_SIZE
- if (!sz.isValid())
- img = img.scaled(limit,Qt::KeepAspectRatio);
-#endif
- *pixmap = QPixmap::fromImage(img);
- return true;
- } else {
- qWarning() << imgio.errorString();
- return false;
- }
- }
-
-/*!
- \internal
- \class QmlGraphicsPixmapCache
- \brief Enacapsultes a pixmap for QmlGraphics items.
-
- This class is NOT reentrant.
- */
-
-static QString toLocalFileOrQrc(const QUrl& url)
-{
- QString r = url.toLocalFile();
- if (r.isEmpty() && url.scheme() == QLatin1String("qrc"))
- r = QLatin1Char(':') + url.path();
- return r;
-}
-
-/*!
- Finds the cached pixmap corresponding to \a url.
- A previous call to get() must have requested the URL,
- and the QNetworkReply must have finished before calling
- this function.
-
- Returns true if the image was loaded without error.
-*/
-bool QmlGraphicsPixmapCache::find(const QUrl& url, QPixmap *pixmap)
-{
-#ifdef Q_ENABLE_PERFORMANCE_LOG
- QmlPerfTimer<QmlPerf::PixmapLoad> perf;
-#endif
-
- QString key = url.toString();
- bool ok = true;
- if (!QPixmapCache::find(key,pixmap)) {
-#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
- QString lf = toLocalFileOrQrc(url);
- if (!lf.isEmpty()) {
- QFile f(lf);
- if (f.open(QIODevice::ReadOnly)) {
- if (!readImage(&f, pixmap)) {
- qWarning() << "Format error loading" << url;
- *pixmap = QPixmap();
- ok = false;
- }
- } else {
- *pixmap = QPixmap();
- ok = false;
- }
- } else
-#endif
- {
- QmlGraphicsSharedNetworkReplyHash::Iterator iter = qfxActiveNetworkReplies.find(key);
- if (iter == qfxActiveNetworkReplies.end()) {
- // API usage error
- qWarning() << "QmlGraphicsPixmapCache: URL not loaded" << url;
- ok = false;
- } else {
- if ((*iter)->reply->error()) {
- qWarning() << "Network error loading" << url << (*iter)->reply->errorString();
- *pixmap = QPixmap();
- ok = false;
- } else if (!readImage((*iter)->reply, pixmap)) {
- qWarning() << "Format error loading" << url;
- *pixmap = QPixmap();
- ok = false;
- } else {
- if ((*iter)->refCount > 1)
- (*iter)->pixmap = *pixmap;
- }
- (*iter)->release();
- }
- }
- QPixmapCache::insert(key, *pixmap);
- } else {
- ok = !pixmap->isNull();
-#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
- if (url.scheme()!=QLatin1String("file"))
-#endif
- // We may be the second finder. Still need to check for active replies.
- {
- QmlGraphicsSharedNetworkReplyHash::Iterator iter = qfxActiveNetworkReplies.find(key);
- if (iter != qfxActiveNetworkReplies.end())
- (*iter)->release();
- }
- }
- return ok;
-}
-
-/*!
- Starts a network request to load \a url.
-
- Returns a QNetworkReply if the image is not immediately available, otherwise
- returns 0. Caller should connect to QNetworkReply::finished() to then call
- find() when the image is available.
-
- The returned QNetworkReply will be deleted when all get() calls are
- matched by a corresponding find() call.
-*/
-QNetworkReply *QmlGraphicsPixmapCache::get(QmlEngine *engine, const QUrl& url, QPixmap *pixmap)
-{
-#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
- QString lf = toLocalFileOrQrc(url);
- if (!lf.isEmpty()) {
- QString key = url.toString();
- if (!QPixmapCache::find(key,pixmap)) {
- QFile f(lf);
- if (f.open(QIODevice::ReadOnly)) {
- if (!readImage(&f, pixmap)) {
- qWarning() << "Format error loading" << url;
- *pixmap = QPixmap();
- }
- } else
- *pixmap = QPixmap();
- QPixmapCache::insert(key, *pixmap);
- }
- return 0;
- }
-#endif
-
- QString key = url.toString();
- if (QPixmapCache::find(key,pixmap)) {
- return 0;
- }
-
- QmlGraphicsSharedNetworkReplyHash::Iterator iter = qfxActiveNetworkReplies.find(key);
- if (iter == qfxActiveNetworkReplies.end()) {
- QNetworkRequest req(url);
- QSharedNetworkReply *item = new QSharedNetworkReply(engine->networkAccessManager()->get(req));
- iter = qfxActiveNetworkReplies.insert(key, item);
- } else {
- (*iter)->addRef();
- }
-
- return (*iter)->reply;
-}
-
-/*!
- Cancels a previous call to get().
-
- May also cancel loading (eg. if no other pending request).
-
- Any connections from the QNetworkReply returned by get() to \a obj will be
- disconnected.
-*/
-void QmlGraphicsPixmapCache::cancelGet(const QUrl& url, QObject* obj)
-{
- QString key = url.toString();
- QmlGraphicsSharedNetworkReplyHash::Iterator iter = qfxActiveNetworkReplies.find(key);
- if (iter == qfxActiveNetworkReplies.end())
- return;
- if (obj)
- QObject::disconnect((*iter)->reply, 0, obj, 0);
- (*iter)->release();
-}
-
-/*!
- This function is mainly for test verification. It returns the number of
- requests that are still unfinished.
-*/
-int QmlGraphicsPixmapCache::pendingRequests()
-{
- return qfxActiveNetworkReplies.count();
-}
-
-QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qmlgraphicspixmapcache_p.h b/src/declarative/graphicsitems/qmlgraphicspixmapcache_p.h
deleted file mode 100644
index 29de98d..0000000
--- a/src/declarative/graphicsitems/qmlgraphicspixmapcache_p.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLGRAPHICSPIXMAPCACHE_H
-#define QMLGRAPHICSPIXMAPCACHE_H
-
-#include <QtCore/QString>
-#include <QtGui/QPixmap>
-#include <QtCore/qurl.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Declarative)
-class QmlEngine;
-class QNetworkReply;
-class Q_DECLARATIVE_EXPORT QmlGraphicsPixmapCache
-{
-public:
- static QNetworkReply *get(QmlEngine *, const QUrl& url, QPixmap *pixmap);
- static void cancelGet(const QUrl& url, QObject* obj);
-
- static bool find(const QUrl& url, QPixmap *pixmap); // url must have been passed to QmlGraphicsPixmapCache::get, and any returned reply finished.
-
- static int pendingRequests(); // mainly for test verification
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMLGRAPHICSPIXMAPCACHE_H
diff --git a/src/declarative/graphicsitems/qmlgraphicsscalegrid_p_p.h b/src/declarative/graphicsitems/qmlgraphicsscalegrid_p_p.h
index b66a5a5..d4ae0a6 100644
--- a/src/declarative/graphicsitems/qmlgraphicsscalegrid_p_p.h
+++ b/src/declarative/graphicsitems/qmlgraphicsscalegrid_p_p.h
@@ -44,7 +44,7 @@
#include <QtCore/QString>
#include <QtCore/QObject>
-#include <private/qmlgraphicspixmapcache_p.h>
+#include <private/qmlpixmapcache_p.h>
#include <QtDeclarative/qml.h>
#include "qmlgraphicsborderimage_p.h"