on xenial help sign in
Merge
e65178dAlbert Astals
plugins/Dash/CroppedImageMinimumSourceSize.qml+6−6
@@ -21,11 +21,11 @@ Item {
21 id: root
21 id: root
22
22
23 property string source
23 property string source
24− property alias image: image
24+ property alias image: innerImage
25− property alias asynchronous: image.asynchronous
25+ property alias asynchronous: innerImage.asynchronous
26− property alias verticalAlignment: image.verticalAlignment
26+ property alias verticalAlignment: innerImage.verticalAlignment
27− property alias horizontalAlignment: image.horizontalAlignment
27+ property alias horizontalAlignment: innerImage.horizontalAlignment
28− property alias fillMode: image.fillMode
28+ property alias fillMode: innerImage.fillMode
29
29
30 CroppedImageSizer {
30 CroppedImageSizer {
31 id: sizer
31 id: sizer
@@ -35,7 +35,7 @@ Item {
35 }
35 }
36
36
37 Image {
37 Image {
38− id: image
38+ id: innerImage
39 anchors.fill: parent
39 anchors.fill: parent
40 fillMode: Image.PreserveAspectCrop
40 fillMode: Image.PreserveAspectCrop
41 sourceSize: sizer.sourceSize.width == 0 && sizer.sourceSize.height == 0 ? undefined : sizer.sourceSize
41 sourceSize: sizer.sourceSize.width == 0 && sizer.sourceSize.height == 0 ? undefined : sizer.sourceSize
plugins/Dash/croppedimagesizer.cpp+40−23
@@ -29,6 +29,7 @@ CroppedImageSizer::CroppedImageSizer()
29 m_sourceSize(QSize(-1, -1))
29 m_sourceSize(QSize(-1, -1))
30{
30{
31 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
31 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
32+ connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::updateImageSize);
32}
33}
33
34
34CroppedImageSizer::~CroppedImageSizer()
35CroppedImageSizer::~CroppedImageSizer()
@@ -47,7 +48,7 @@ void CroppedImageSizer::setSource(const QUrl &source)
47{
48{
48 if (source != m_source) {
49 if (source != m_source) {
49 m_source = source;
50 m_source = source;
50− Q_EMIT inputParamsChanged();
51+ Q_EMIT sourceChanged();
51 }
52 }
52}
53}
53
54
@@ -82,43 +83,59 @@ QSize CroppedImageSizer::sourceSize() const
82 return m_sourceSize;
83 return m_sourceSize;
83}
84}
84
85
85−void CroppedImageSizer::calculateSourceSize()
86+void CroppedImageSizer::setSourceSize(const QSize &sourceSize)
86{
87{
88+ if (sourceSize != m_sourceSize) {
89+ m_sourceSize = sourceSize;
90+ Q_EMIT sourceSizeChanged();
91+ }
92+}
93+
94+void CroppedImageSizer::updateImageSize()
95+{
96+ if (m_reply) {
97+ m_reply->disconnect();
98+ m_reply->abort();
99+ m_reply->deleteLater();
100+ m_reply = nullptr;
101+ }
102+
87− if (m_source.isValid() && m_width > 0 && m_height > 0 && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
103+ if (m_source.isValid() && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
88− if (m_reply) {
89− m_reply->disconnect();
90− m_reply->abort();
91− m_reply->deleteLater();
92− }
93 QNetworkRequest request(m_source);
104 QNetworkRequest request(m_source);
94 m_reply = qmlEngine(this)->networkAccessManager()->get(request);
105 m_reply = qmlEngine(this)->networkAccessManager()->get(request);
95 connect(m_reply, &QNetworkReply::finished, this, &CroppedImageSizer::requestFinished);
106 connect(m_reply, &QNetworkReply::finished, this, &CroppedImageSizer::requestFinished);
96− } else if (m_sourceSize != QSize(-1, -1)) {
107+ } else {
97− m_sourceSize = QSize(-1, -1);
108+ setSourceSize(QSize(-1, -1));
98− sourceSizeChanged();
99 }
109 }
100}
110}
101
111
102void CroppedImageSizer::requestFinished()
112void CroppedImageSizer::requestFinished()
103{
113{
104 QImageReader m_reader(m_reply);
114 QImageReader m_reader(m_reply);
105− const QSize imageSize = m_reader.size();
115+ m_imageSize = m_reader.size();
106− if (imageSize.isValid()) {
116+
107− if (m_height > 0 && imageSize.height() > 0) {
117+ m_reply->deleteLater();
118+ m_reply = nullptr;
119+
120+ calculateSourceSize();
121+}
122+
123+void CroppedImageSizer::calculateSourceSize()
124+{
125+ if (m_source.isValid() && m_width > 0 && m_height > 0 && !m_reply) {
126+ if (!m_imageSize.isEmpty()) {
108 const qreal ar = m_width / m_height;
127 const qreal ar = m_width / m_height;
109− const qreal ssar = imageSize.width() / (qreal)imageSize.height();
128+ const qreal ssar = m_imageSize.width() / (qreal)m_imageSize.height();
110 if (ar > ssar) {
129 if (ar > ssar) {
111− m_sourceSize = QSize(m_width, 0);
130+ setSourceSize(QSize(m_width, 0));
112 } else {
131 } else {
113− m_sourceSize = QSize(0, m_height);
132+ setSourceSize(QSize(0, m_height));
114 }
133 }
134+ } else {
135+ qWarning() << "Invalid size for " << m_source << m_imageSize << m_reply;
136+ setSourceSize(QSize(0, 0));
115 }
137 }
116 } else {
138 } else {
117− qWarning() << "Could not find size of" << m_source;
139+ setSourceSize(QSize(-1, -1));
118− m_sourceSize = QSize(0, 0);
119 }
140 }
120− sourceSizeChanged();
121−
122− m_reply->deleteLater();
123− m_reply = nullptr;
124}
141}
plugins/Dash/croppedimagesizer.h+5−1
@@ -28,7 +28,7 @@ class CroppedImageSizer : public QObject
28{
28{
29 Q_OBJECT
29 Q_OBJECT
30
30
31− Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY inputParamsChanged)
31+ Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
32 Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY inputParamsChanged)
32 Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY inputParamsChanged)
33 Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY inputParamsChanged)
33 Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY inputParamsChanged)
34 Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
34 Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
@@ -47,20 +47,24 @@ public:
47 void setHeight(qreal height);
47 void setHeight(qreal height);
48
48
49 QSize sourceSize() const;
49 QSize sourceSize() const;
50+ void setSourceSize(const QSize &sourceSize);
50
51
51Q_SIGNALS:
52Q_SIGNALS:
52 void inputParamsChanged();
53 void inputParamsChanged();
54+ void sourceChanged();
53 void sourceSizeChanged();
55 void sourceSizeChanged();
54
56
55private Q_SLOT:
57private Q_SLOT:
56 void calculateSourceSize();
58 void calculateSourceSize();
57 void requestFinished();
59 void requestFinished();
60+ void updateImageSize();
58
61
59private:
62private:
60 QUrl m_source;
63 QUrl m_source;
61 qreal m_width;
64 qreal m_width;
62 qreal m_height;
65 qreal m_height;
63 QSize m_sourceSize;
66 QSize m_sourceSize;
67+ QSize m_imageSize;
64 QNetworkReply *m_reply = nullptr;
68 QNetworkReply *m_reply = nullptr;
65};
69};
66
70