Update EtcProvider example to support configurable base url.
authorMichael Brasser <michael.brasser@live.com>
Wed, 27 Mar 2013 01:29:10 +0000 (20:29 -0500)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 2 Apr 2013 08:29:34 +0000 (10:29 +0200)
Change-Id: Idb047bc7bf2c9f1c62c4749cb416bdf267e66e17
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
examples/quick/textureprovider/etcprovider.cpp
examples/quick/textureprovider/etcprovider.h
examples/quick/textureprovider/main.cpp

index 507965c..52c2c17 100644 (file)
@@ -44,6 +44,7 @@
 #include <QFile>
 #include <QDebug>
 #include <qopenglfunctions.h>
+#include <qqmlfile.h>
 
 //#define ETC_DEBUG
 
@@ -168,10 +169,14 @@ QQuickTextureFactory *EtcProvider::requestTexture(const QString &id, QSize *size
     size->setHeight(0);
     size->setWidth(0);
 
-    // resolve paths relative to qrc file
-    QFile file(QLatin1String(":/textureprovider/") + id);
+    QUrl url = QUrl(id);
+    if (url.isRelative() && !m_baseUrl.isEmpty())
+        url = m_baseUrl.resolved(url);
+    QString path = QQmlFile::urlToLocalFileOrQrc(url);
+
+    QFile file(path);
 #ifdef ETC_DEBUG
-    qDebug() << "requestTexture opening file: " << id;
+    qDebug() << "requestTexture opening file: " << path;
 #endif
     if (file.open(QIODevice::ReadOnly)) {
         ret = new QEtcTextureFactory;
@@ -200,3 +205,8 @@ QQuickTextureFactory *EtcProvider::requestTexture(const QString &id, QSize *size
 
     return ret;
 }
+
+void EtcProvider::setBaseUrl(const QUrl &base)
+{
+    m_baseUrl = base;
+}
index 24570e9..b7f2f3d 100644 (file)
@@ -45,6 +45,7 @@
 #include <qopengl.h>
 #include <QQuickImageProvider>
 #include <QtQuick/QSGTexture>
+#include <QUrl>
 
 class EtcProvider : public QQuickImageProvider
 {
@@ -54,6 +55,11 @@ public:
     {}
 
     QQuickTextureFactory *requestTexture(const QString &id, QSize *size, const QSize &requestedSize);
+
+    void setBaseUrl(const QUrl &base);
+
+private:
+    QUrl m_baseUrl;
 };
 
 class EtcTexture : public QSGTexture
index d9d4fb0..6397de8 100644 (file)
@@ -48,7 +48,9 @@ int main(int argc, char* argv[])
     QGuiApplication app(argc,argv);
     QQuickView view;
 
-    view.engine()->addImageProvider("etc", new EtcProvider());
+    EtcProvider *provider = new EtcProvider();
+    provider->setBaseUrl(QUrl("qrc:///textureprovider/"));
+    view.engine()->addImageProvider("etc", provider);
 
     view.setSource(QUrl("qrc:///textureprovider/textureprovider.qml"));
     view.show();