diff --git a/src/ui/MxcAnimatedImage.cpp b/src/ui/MxcAnimatedImage.cpp index 3c82c614..f88f820d 100644 --- a/src/ui/MxcAnimatedImage.cpp +++ b/src/ui/MxcAnimatedImage.cpp @@ -91,6 +91,10 @@ MxcAnimatedImage::startDownload() "Playing movie with size: {}, {}", buffer.bytesAvailable(), buffer.isOpen()); movie.setFormat(mimeType); movie.setDevice(&buffer); + movie.setScaledSize(this->size().toSize()); + if (buffer.bytesAvailable() < + 4LL * 1024 * 1024 * 1024) // cache images smaller than 4MB in RAM + movie.setCacheMode(QMovie::CacheAll); if (play_) movie.start(); else @@ -158,17 +162,17 @@ MxcAnimatedImage::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeD // n->setTexture(nullptr); auto img = movie.currentImage(); + n->setSourceRect(img.rect()); if (!img.isNull()) - n->setTexture(window()->createTextureFromImage(img)); + n->setTexture(window()->createTextureFromImage(std::move(img))); else { delete n; return nullptr; } - n->setSourceRect(img.rect()); n->setRect(QRect(0, 0, width(), height())); - n->setFiltering(QSGTexture::Linear); - n->setMipmapFiltering(QSGTexture::Linear); + n->setFiltering(QSGTexture::Nearest); + n->setMipmapFiltering(QSGTexture::None); return n; }