Skip to content

Commit 2009a58

Browse files
committed
Properly scale images
1 parent 2b3090c commit 2009a58

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

modules/Material/Icon.qml

+5-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Item {
3535

3636
/*!
3737
The name of the icon to display.
38-
38+
3939
\sa source
4040
*/
4141
property string name
@@ -50,7 +50,7 @@ Item {
5050
*/
5151
property string source: name ? "image://material/" + name : ""
5252

53-
property bool valid: source.indexOf("icon://awesome/") == 0
53+
property bool valid: source.indexOf("icon://awesome/") == 0
5454
? awesomeIcon.valid : image.status == Image.Ready
5555

5656
property url iconDirectory: Qt.resolvedUrl("icons")
@@ -64,7 +64,8 @@ Item {
6464
id: image
6565

6666
visible: !colorize
67-
67+
sourceSize.width: parent.width
68+
sourceSize.height: parent.height
6869
source: icon.source
6970
}
7071

@@ -77,5 +78,5 @@ Item {
7778
cached: true
7879
visible: image.source != "" && colorize
7980
opacity: icon.color.a
80-
}
81+
}
8182
}

plugins/materialiconprovider.cpp

+20-7
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,38 @@
2222
#include <qquickimageprovider.h>
2323
#include <QImage>
2424
#include <QPainter>
25+
#include <QSvgRenderer>
26+
27+
#include <QDebug>
2528

2629
class MaterialIconProvider : public QQuickImageProvider
2730
{
2831
public:
2932
MaterialIconProvider()
30-
: QQuickImageProvider(QQuickImageProvider::Pixmap)
33+
: QQuickImageProvider(QQuickImageProvider::Image)
3134
{
3235
}
3336

34-
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
37+
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)
3538
{
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);
3949

4050
if (size)
41-
*size = QSize(width, height);
51+
*size = image.size();
52+
53+
QPainter p(&image);
54+
renderer.render(&p);
4255

43-
return QPixmap::fromImage(icon);
56+
return image;
4457
}
4558
};
4659

plugins/plugins.pro

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
TEMPLATE = lib
22
CONFIG += plugin
3-
QT += qml quick
3+
QT += qml quick svg
44

55
TARGET = materialiconprovider
66

0 commit comments

Comments
 (0)