examples/declarative/cppextensions/imageprovider/imageprovider.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    40 
    40 
    41 
    41 
    42 #include <qdeclarativeextensionplugin.h>
    42 #include <qdeclarativeextensionplugin.h>
    43 
    43 
    44 #include <qdeclarativeengine.h>
    44 #include <qdeclarativeengine.h>
    45 #include <qdeclarativecontext.h>
       
    46 #include <qdeclarative.h>
    45 #include <qdeclarative.h>
    47 #include <qdeclarativeitem.h>
    46 #include <qdeclarativeitem.h>
    48 #include <qdeclarativeimageprovider.h>
    47 #include <qdeclarativeimageprovider.h>
    49 #include <qdeclarativeview.h>
    48 #include <qdeclarativeview.h>
    50 #include <QImage>
    49 #include <QImage>
    51 #include <QPainter>
    50 #include <QPainter>
    52 
    51 
    53 /*
       
    54    This example illustrates using a QDeclarativeImageProvider to serve
       
    55    images asynchronously.
       
    56 */
       
    57 
       
    58 //![0]
    52 //![0]
    59 class ColorImageProvider : public QDeclarativeImageProvider
    53 class ColorImageProvider : public QDeclarativeImageProvider
    60 {
    54 {
    61 public:
    55 public:
    62     // This is run in a low priority thread.
    56     ColorImageProvider()
    63     QImage request(const QString &id, QSize *size, const QSize &req_size)
    57         : QDeclarativeImageProvider(QDeclarativeImageProvider::Pixmap)
    64     {
    58     {
    65         if (size) *size = QSize(100,50);
    59     }
    66         QImage image(
    60 
    67                 req_size.width() > 0 ? req_size.width() : 100,
    61     QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
    68                 req_size.height() > 0 ? req_size.height() : 50,
    62     {
    69                 QImage::Format_RGB32);
    63         int width = 100;
    70         image.fill(QColor(id).rgba());
    64         int height = 50;
    71         QPainter p(&image);
    65 
    72         QFont f = p.font();
    66         if (size)
    73         f.setPixelSize(30);
    67             *size = QSize(width, height);
    74         p.setFont(f);
    68         QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width,
    75         p.setPen(Qt::black);
    69                        requestedSize.height() > 0 ? requestedSize.height() : height); 
    76         if (req_size.isValid())
    70         pixmap.fill(QColor(id).rgba());
    77             p.scale(req_size.width()/100.0, req_size.height()/50.0);
    71 //![0]
    78         p.drawText(QRectF(0,0,100,50),Qt::AlignCenter,id);
    72 
    79         return image;
    73         // write the color name
       
    74         QPainter painter(&pixmap);
       
    75         QFont f = painter.font();
       
    76         f.setPixelSize(20);
       
    77         painter.setFont(f);
       
    78         painter.setPen(Qt::black);
       
    79         if (requestedSize.isValid())
       
    80             painter.scale(requestedSize.width() / width, requestedSize.height() / height);
       
    81         painter.drawText(QRectF(0, 0, width, height), Qt::AlignCenter, id);
       
    82 
       
    83 //![1]
       
    84         return pixmap;
    80     }
    85     }
    81 };
    86 };
       
    87 //![1]
    82 
    88 
    83 
    89 
    84 class ImageProviderExtensionPlugin : public QDeclarativeExtensionPlugin
    90 class ImageProviderExtensionPlugin : public QDeclarativeExtensionPlugin
    85 {
    91 {
    86     Q_OBJECT
    92     Q_OBJECT
    87 public:
    93 public:
    88     void registerTypes(const char *uri) {
    94     void registerTypes(const char *uri)
       
    95     {
    89         Q_UNUSED(uri);
    96         Q_UNUSED(uri);
    90 
       
    91     }
    97     }
    92 
    98 
    93     void initializeEngine(QDeclarativeEngine *engine, const char *uri) {
    99     void initializeEngine(QDeclarativeEngine *engine, const char *uri)
       
   100     {
    94         Q_UNUSED(uri);
   101         Q_UNUSED(uri);
    95 
       
    96         engine->addImageProvider("colors", new ColorImageProvider);
   102         engine->addImageProvider("colors", new ColorImageProvider);
    97 
       
    98         QStringList dataList;
       
    99         dataList.append("image://colors/red");
       
   100         dataList.append("image://colors/green");
       
   101         dataList.append("image://colors/blue");
       
   102         dataList.append("image://colors/brown");
       
   103         dataList.append("image://colors/orange");
       
   104         dataList.append("image://colors/purple");
       
   105         dataList.append("image://colors/yellow");
       
   106 
       
   107         QDeclarativeContext *ctxt = engine->rootContext();
       
   108         ctxt->setContextProperty("myModel", QVariant::fromValue(dataList));
       
   109     }
   103     }
   110 
   104 
   111 };
   105 };
   112 
   106 
   113 #include "imageprovider.moc"
   107 #include "imageprovider.moc"
   114 
   108 
   115 Q_EXPORT_PLUGIN(ImageProviderExtensionPlugin);
   109 Q_EXPORT_PLUGIN(ImageProviderExtensionPlugin);
   116 //![0]
       
   117 
   110