@@ -30,6 +30,7 @@ CroppedImageSizer::CroppedImageSizer()
30 m_worker(nullptr)
30 m_worker(nullptr)
32 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
32 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
33+ connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::updateImageSize);
35CroppedImageSizer::~CroppedImageSizer()
36CroppedImageSizer::~CroppedImageSizer()
@@ -48,7 +49,7 @@ void CroppedImageSizer::setSource(const QUrl &source)
49 if (source != m_source) {
50 if (source != m_source) {
50 m_source = source;
51 m_source = source;
51− Q_EMIT inputParamsChanged();
52+ Q_EMIT sourceChanged();
@@ -91,18 +92,47 @@ void CroppedImageSizer::setSourceSize(const QSize &size)
94−void CroppedImageSizer::calculateSourceSize()
95+void CroppedImageSizer::setImageSize(const QSize &imageSize)
96− if (m_source.isValid() && m_width > 0 && m_height > 0 && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
97+ if (imageSize != m_imageSize) {
98+ m_imageSize = imageSize;
100+ calculateSourceSize();
104+void CroppedImageSizer::updateImageSize()
97− if (m_worker) {
106+ if (m_worker) {
98− m_worker->abort();
107+ m_worker->abort();
111+ if (m_source.isValid() && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
101 QNetworkRequest request(m_source);
112 QNetworkRequest request(m_source);
102 QNetworkReply *reply = qmlEngine(this)->networkAccessManager()->get(request);
113 QNetworkReply *reply = qmlEngine(this)->networkAccessManager()->get(request);
103 m_worker = new CroppedImageSizerAsyncWorker(this, reply);
114 m_worker = new CroppedImageSizerAsyncWorker(this, reply);
104− } else if (m_sourceSize != QSize(-1, -1)) {
115+ } else {
105− m_sourceSize = QSize(-1, -1);
116+ setSourceSize(QSize(-1, -1));
106− sourceSizeChanged();
117+ }
120+void CroppedImageSizer::calculateSourceSize()
122+ if (m_source.isValid() && m_width > 0 && m_height > 0 && !m_worker) {
123+ if (!m_imageSize.isEmpty()) {
124+ const qreal ar = m_width / m_height;
125+ const qreal ssar = m_imageSize.width() / (qreal)m_imageSize.height();
127+ setSourceSize(QSize(m_width, 0));
129+ setSourceSize(QSize(0, m_height));
132+ qWarning() << "Invalid size for " << m_source << m_imageSize;
133+ setSourceSize(QSize(0, 0));
136+ setSourceSize(QSize(-1, -1));