File tree 3 files changed +26
-12
lines changed
3 files changed +26
-12
lines changed Original file line number Diff line number Diff line change 35
35
36
36
/* !
37
37
The name of the icon to display.
38
-
38
+
39
39
\sa source
40
40
*/
41
41
property string name
50
50
*/
51
51
property string source: name ? " image://material/" + name : " "
52
52
53
- property bool valid: source .indexOf (" icon://awesome/" ) == 0
53
+ property bool valid: source .indexOf (" icon://awesome/" ) == 0
54
54
? awesomeIcon .valid : image .status == Image .Ready
55
55
56
56
property url iconDirectory: Qt .resolvedUrl (" icons" )
64
64
id: image
65
65
66
66
visible: ! colorize
67
-
67
+ sourceSize .width : parent .width
68
+ sourceSize .height : parent .height
68
69
source: icon .source
69
70
}
70
71
77
78
cached: true
78
79
visible: image .source != " " && colorize
79
80
opacity: icon .color .a
80
- }
81
+ }
81
82
}
Original file line number Diff line number Diff line change 22
22
#include < qquickimageprovider.h>
23
23
#include < QImage>
24
24
#include < QPainter>
25
+ #include < QSvgRenderer>
26
+
27
+ #include < QDebug>
25
28
26
29
class MaterialIconProvider : public QQuickImageProvider
27
30
{
28
31
public:
29
32
MaterialIconProvider ()
30
- : QQuickImageProvider(QQuickImageProvider::Pixmap )
33
+ : QQuickImageProvider(QQuickImageProvider::Image )
31
34
{
32
35
}
33
36
34
- QPixmap requestPixmap (const QString &id, QSize *size, const QSize &requestedSize)
37
+ QImage requestImage (const QString &id, QSize *size, const QSize &requestedSize)
35
38
{
36
- int width = 100 ;
37
- int height = 50 ;
38
- QImage icon = QImage (" /lib/qt/qml/Material/icons/" + id + " .svg" );
39
+ QString iconPath = " /lib/qt/qml/Material/icons/" + id + " .svg" ;
40
+
41
+ QSvgRenderer renderer;
42
+ if (!renderer.load (iconPath))
43
+ qWarning () << " Unable to load image:" << iconPath;
44
+
45
+ QImage image (requestedSize.width () > 0 ? requestedSize.width () : renderer.defaultSize ().width (),
46
+ requestedSize.height () > 0 ? requestedSize.height () : renderer.defaultSize ().height (),
47
+ QImage::Format_ARGB32_Premultiplied);
48
+ image.fill (Qt::transparent);
39
49
40
50
if (size)
41
- *size = QSize (width, height);
51
+ *size = image.size ();
52
+
53
+ QPainter p (&image);
54
+ renderer.render (&p);
42
55
43
- return QPixmap::fromImage (icon) ;
56
+ return image ;
44
57
}
45
58
};
46
59
Original file line number Diff line number Diff line change 1
1
TEMPLATE = lib
2
2
CONFIG += plugin
3
- QT += qml quick
3
+ QT += qml quick svg
4
4
5
5
TARGET = materialiconprovider
6
6
You can’t perform that action at this time.
0 commit comments