summaryrefslogtreecommitdiffstats
path: root/src/imports/qtcanvas3d/teximage3d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/qtcanvas3d/teximage3d.cpp')
-rw-r--r--src/imports/qtcanvas3d/teximage3d.cpp77
1 files changed, 46 insertions, 31 deletions
diff --git a/src/imports/qtcanvas3d/teximage3d.cpp b/src/imports/qtcanvas3d/teximage3d.cpp
index f2e1fc8..315b395 100644
--- a/src/imports/qtcanvas3d/teximage3d.cpp
+++ b/src/imports/qtcanvas3d/teximage3d.cpp
@@ -122,7 +122,6 @@ void CanvasTextureImageFactory::notifyLoadedImages()
if (image->imageState() == CanvasTextureImage::LOADING_FINISHED) {
m_loadingImagesList.removeOne(image);
image->emitImageLoaded();
-
} else if (image->imageState() == CanvasTextureImage::LOADING_ERROR) {
m_loadingImagesList.removeOne(image);
image->emitImageLoadingError();
@@ -137,12 +136,14 @@ void CanvasTextureImageFactory::notifyLoadedImages()
QJSValue CanvasTextureImageFactory::newTexImage()
{
CanvasTextureImage *newImg = new CanvasTextureImage(this, m_qmlEngine);
- connect(newImg, &CanvasTextureImage::imageLoadingStarted,
- this, &CanvasTextureImageFactory::handleImageLoadingStarted);
-
return m_qmlEngine->newQObject(newImg);
}
+void CanvasTextureImageFactory::handleImageDestroyed(CanvasTextureImage *image)
+{
+ m_loadingImagesList.removeOne(image);
+}
+
/*!
* \qmltype TextureImage
* \since QtCanvas3D 1.0
@@ -155,9 +156,10 @@ QJSValue CanvasTextureImageFactory::newTexImage()
* \sa TextureImageFactory
*/
CanvasTextureImage::CanvasTextureImage(CanvasTextureImageFactory *parent, QQmlEngine *engine) :
- CanvasAbstractObject(0, parent),
+ CanvasAbstractObject(0, 0),
m_engine(engine),
- m_networkAccessManager(0),
+ m_networkAccessManager(m_engine->networkAccessManager()),
+ m_networkReply(0),
m_state(INITIALIZED),
m_errorString(""),
m_pixelCache(0),
@@ -165,36 +167,44 @@ CanvasTextureImage::CanvasTextureImage(CanvasTextureImageFactory *parent, QQmlEn
m_pixelCacheFlipY(false),
m_parentFactory(parent)
{
- m_networkAccessManager = new QNetworkAccessManager(this);
- QObject::connect(m_networkAccessManager, &QNetworkAccessManager::finished,
- this, &CanvasTextureImage::handleReply);
}
CanvasTextureImage::CanvasTextureImage(const QImage &source,
int width, int height,
- QObject *parent,
+ CanvasTextureImageFactory *parent,
QQmlEngine *engine) :
- CanvasAbstractObject(0, parent),
+ CanvasAbstractObject(0, 0),
m_engine(engine),
- m_networkAccessManager(0),
+ m_networkAccessManager(m_engine->networkAccessManager()),
+ m_networkReply(0),
m_state(INITIALIZED),
m_errorString(""),
m_pixelCache(0),
m_pixelCacheFormat(CanvasContext::NONE),
- m_pixelCacheFlipY(false)
+ m_pixelCacheFlipY(false),
+ m_parentFactory(parent)
{
- m_networkAccessManager = new QNetworkAccessManager(this);
- QObject::connect(m_networkAccessManager, &QNetworkAccessManager::finished,
- this, &CanvasTextureImage::handleReply);
-
m_image = source.scaled(width, height);
setImageState(LOADING_FINISHED);
}
+void CanvasTextureImage::cleanupNetworkReply()
+{
+ if (m_networkReply) {
+ QObject::disconnect(m_networkReply, &QNetworkReply::finished,
+ this, &CanvasTextureImage::handleReply);
+ m_networkReply->abort();
+ m_networkReply->deleteLater();
+ m_networkReply = 0;
+ }
+}
+
CanvasTextureImage::~CanvasTextureImage()
{
- delete m_networkAccessManager;
- delete m_pixelCache;
+ if (!m_parentFactory.isNull())
+ m_parentFactory->handleImageDestroyed(this);
+ cleanupNetworkReply();
+ delete[] m_pixelCache;
}
/*!
@@ -250,10 +260,14 @@ void CanvasTextureImage::load()
return;
setImageState(LOADING);
+ if (!m_parentFactory.isNull())
+ m_parentFactory->handleImageLoadingStarted(this);
emit imageLoadingStarted(this);
QNetworkRequest request(m_source);
- m_networkAccessManager->get(request);
+ m_networkReply = m_networkAccessManager->get(request);
+ QObject::connect(m_networkReply, &QNetworkReply::finished,
+ this, &CanvasTextureImage::handleReply);
}
/*!
@@ -265,18 +279,19 @@ QString CanvasTextureImage::errorString() const
return m_errorString;
}
-void CanvasTextureImage::handleReply(QNetworkReply *reply)
+void CanvasTextureImage::handleReply()
{
- if (reply->error() != QNetworkReply::NoError) {
- m_errorString = reply->errorString();
- emit errorStringChanged(m_errorString);
- setImageState(LOADING_ERROR);
- return;
+ if (m_networkReply) {
+ if (m_networkReply->error() != QNetworkReply::NoError) {
+ m_errorString = m_networkReply->errorString();
+ emit errorStringChanged(m_errorString);
+ setImageState(LOADING_ERROR);
+ } else {
+ m_image.loadFromData(m_networkReply->readAll());
+ setImageState(LOADING_FINISHED);
+ }
+ cleanupNetworkReply();
}
-
- m_image.loadFromData(reply->readAll());
-
- setImageState(LOADING_FINISHED);
}
QImage &CanvasTextureImage::getImage()
@@ -347,7 +362,7 @@ uchar *CanvasTextureImage::convertToFormat(CanvasContext::glEnums format,
return m_pixelCache;
// Destroy the pixel cache
- delete m_pixelCache;
+ delete[] m_pixelCache;
m_pixelCache = 0;
m_pixelCacheFormat = CanvasContext::NONE;