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 |