@@ -29,6 +29,7 @@ CroppedImageSizer::CroppedImageSizer()
29 m_sourceSize(QSize(-1, -1))
29 m_sourceSize(QSize(-1, -1))
31 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
31 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
32+ connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::updateImageSize);
34CroppedImageSizer::~CroppedImageSizer()
35CroppedImageSizer::~CroppedImageSizer()
@@ -47,7 +48,7 @@ void CroppedImageSizer::setSource(const QUrl &source)
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();
@@ -82,43 +83,59 @@ QSize CroppedImageSizer::sourceSize() const
82 return m_sourceSize;
83 return m_sourceSize;
85−void CroppedImageSizer::calculateSourceSize()
86+void CroppedImageSizer::setSourceSize(const QSize &sourceSize)
88+ if (sourceSize != m_sourceSize) {
89+ m_sourceSize = sourceSize;
90+ Q_EMIT sourceSizeChanged();
94+void CroppedImageSizer::updateImageSize()
97+ m_reply->disconnect();
99+ m_reply->deleteLater();
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()) {
89− m_reply->disconnect();
91− m_reply->deleteLater();
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));
102void CroppedImageSizer::requestFinished()
112void CroppedImageSizer::requestFinished()
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();
120+ calculateSourceSize();
123+void CroppedImageSizer::calculateSourceSize()
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));
113− m_sourceSize = QSize(0, m_height);
132+ setSourceSize(QSize(0, m_height));
135+ qWarning() << "Invalid size for " << m_source << m_imageSize << m_reply;
136+ setSourceSize(QSize(0, 0));
117− qWarning() << "Could not find size of" << m_source;
139+ setSourceSize(QSize(-1, -1));
118− m_sourceSize = QSize(0, 0);
120− sourceSizeChanged();
122− m_reply->deleteLater();