on xenial help sign in
Merge
commite65178d2300fcca854ecc653c9bcd55f72a39d6b authorAlbert Astals <albert.astals@canonical.com> dateWed 12 Nov 2014, 13:09 (12 years ago) parent94ab9c2e8a9d98
3 files changed+51−30
plugins/Dash/CroppedImageMinimumSourceSize.qml+6−6 plugins/Dash/croppedimagesizer.cpp+40−23 plugins/Dash/croppedimagesizer.h+5−1
plugins/Dash/CroppedImageMinimumSourceSize.qml+6−6
@@ -21,11 +21,11 @@ Item {
2121 id: root
2222
2323 property string source
24− property alias image: image
25− property alias asynchronous: image.asynchronous
26− property alias verticalAlignment: image.verticalAlignment
27− property alias horizontalAlignment: image.horizontalAlignment
28− property alias fillMode: image.fillMode
24+ property alias image: innerImage
25+ property alias asynchronous: innerImage.asynchronous
26+ property alias verticalAlignment: innerImage.verticalAlignment
27+ property alias horizontalAlignment: innerImage.horizontalAlignment
28+ property alias fillMode: innerImage.fillMode
2929
3030 CroppedImageSizer {
3131 id: sizer
@@ -35,7 +35,7 @@ Item {
3535 }
3636
3737 Image {
38− id: image
38+ id: innerImage
3939 anchors.fill: parent
4040 fillMode: Image.PreserveAspectCrop
4141 sourceSize: sizer.sourceSize.width == 0 && sizer.sourceSize.height == 0 ? undefined : sizer.sourceSize
plugins/Dash/croppedimagesizer.cpp+40−23
@@ -29,6 +29,7 @@ CroppedImageSizer::CroppedImageSizer()
2929 m_sourceSize(QSize(-1, -1))
3030{
3131 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
32+ connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::updateImageSize);
3233}
3334
3435CroppedImageSizer::~CroppedImageSizer()
@@ -47,7 +48,7 @@ void CroppedImageSizer::setSource(const QUrl &source)
4748{
4849 if (source != m_source) {
4950 m_source = source;
50− Q_EMIT inputParamsChanged();
51+ Q_EMIT sourceChanged();
5152 }
5253}
5354
@@ -82,43 +83,59 @@ QSize CroppedImageSizer::sourceSize() const
8283 return m_sourceSize;
8384}
8485
85−void CroppedImageSizer::calculateSourceSize()
86+void CroppedImageSizer::setSourceSize(const QSize &sourceSize)
8687{
87− if (m_source.isValid() && m_width > 0 && m_height > 0 && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
88− if (m_reply) {
89− m_reply->disconnect();
90− m_reply->abort();
91− m_reply->deleteLater();
92− }
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+
103+ if (m_source.isValid() && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
93104 QNetworkRequest request(m_source);
94105 m_reply = qmlEngine(this)->networkAccessManager()->get(request);
95106 connect(m_reply, &QNetworkReply::finished, this, &CroppedImageSizer::requestFinished);
96− } else if (m_sourceSize != QSize(-1, -1)) {
97− m_sourceSize = QSize(-1, -1);
98− sourceSizeChanged();
107+ } else {
108+ setSourceSize(QSize(-1, -1));
99109 }
100110}
101111
102112void CroppedImageSizer::requestFinished()
103113{
104114 QImageReader m_reader(m_reply);
105− const QSize imageSize = m_reader.size();
106− if (imageSize.isValid()) {
107− if (m_height > 0 && imageSize.height() > 0) {
115+ m_imageSize = m_reader.size();
116+
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()) {
108127 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();
110129 if (ar > ssar) {
111− m_sourceSize = QSize(m_width, 0);
130+ setSourceSize(QSize(m_width, 0));
112131 } else {
113− m_sourceSize = QSize(0, m_height);
132+ setSourceSize(QSize(0, m_height));
114133 }
134+ } else {
135+ qWarning() << "Invalid size for " << m_source << m_imageSize << m_reply;
136+ setSourceSize(QSize(0, 0));
115137 }
116138 } else {
117− qWarning() << "Could not find size of" << m_source;
118− m_sourceSize = QSize(0, 0);
139+ setSourceSize(QSize(-1, -1));
119140 }
120− sourceSizeChanged();
121−
122− m_reply->deleteLater();
123− m_reply = nullptr;
124141}
plugins/Dash/croppedimagesizer.h+5−1
@@ -28,7 +28,7 @@ class CroppedImageSizer : public QObject
2828{
2929 Q_OBJECT
3030
31− Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY inputParamsChanged)
31+ Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
3232 Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY inputParamsChanged)
3333 Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY inputParamsChanged)
3434 Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
@@ -47,20 +47,24 @@ public:
4747 void setHeight(qreal height);
4848
4949 QSize sourceSize() const;
50+ void setSourceSize(const QSize &sourceSize);
5051
5152Q_SIGNALS:
5253 void inputParamsChanged();
54+ void sourceChanged();
5355 void sourceSizeChanged();
5456
5557private Q_SLOT:
5658 void calculateSourceSize();
5759 void requestFinished();
60+ void updateImageSize();
5861
5962private:
6063 QUrl m_source;
6164 qreal m_width;
6265 qreal m_height;
6366 QSize m_sourceSize;
67+ QSize m_imageSize;
6468 QNetworkReply *m_reply = nullptr;
6569};
6670