gwenview: test animated document loader with WebP image

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-10-18 18:40:22 +03:00
parent a52db499cd
commit e6bbe6f23a
9 changed files with 8 additions and 14 deletions

View file

@ -64,8 +64,8 @@ void AnimatedDocumentLoadedImpl::init()
emit isAnimatedUpdated(); emit isAnimatedUpdated();
if (!document()->image().isNull()) { if (!document()->image().isNull()) {
// We may reach this point without an image if the first frame got // We may reach this point without an image if the first frame got
// downsampled by LoadingDocumentImpl (unlikely for now because the gif // downsampled by LoadingDocumentImpl (unlikely for now because the
// io handler does not support the QImageIOHandler::ScaledSize option) // handler many not support the QImageIOHandler::ScaledSize option)
emit imageRectUpdated(document()->image().rect()); emit imageRectUpdated(document()->image().rect());
emit loaded(); emit loaded();
} }

View file

@ -173,7 +173,7 @@ public:
bool isEditable() const; bool isEditable() const;
/** /**
* Returns true if the image is animated (eg: gif or mng format) * Returns true if the image is animated (eg: webp format)
*/ */
bool isAnimated() const; bool isAnimated() const;

View file

@ -243,7 +243,7 @@ struct LoadingDocumentImplPrivate
return; return;
} }
/* /*
* QImageReader is not really helpful to detect animated gif: * QImageReader is not really helpful to detect animated images:
* - QImageReader::imageCount() returns 0 * - QImageReader::imageCount() returns 0
* - QImageReader::nextImageDelay() may return something > 0 if the * - QImageReader::nextImageDelay() may return something > 0 if the
* image consists of only one frame but includes a "Graphic * image consists of only one frame but includes a "Graphic
@ -251,7 +251,7 @@ struct LoadingDocumentImplPrivate
* animation) (Bug #185523) * animation) (Bug #185523)
* *
* Decoding the next frame is the only reliable way I found to * Decoding the next frame is the only reliable way I found to
* detect an animated gif * detect an animated images
*/ */
LOG("May be an animated image. delay:" << reader.nextImageDelay()); LOG("May be an animated image. delay:" << reader.nextImageDelay());
QImage nextImage; QImage nextImage;

View file

@ -114,9 +114,6 @@ void DocumentTest::testLoad()
image = image.copy(poiRect); image = image.copy(poiRect);
expectedImage = expectedImage.copy(poiRect); expectedImage = expectedImage.copy(poiRect);
} }
if (fileName == QLatin1String("4frames.gif")) {
QEXPECT_FAIL("", "Wonky GIF handler", Continue);
}
QCOMPARE(image, expectedImage); QCOMPARE(image, expectedImage);
QCOMPARE(QString(doc->format()), QString(expectedFormat)); QCOMPARE(QString(doc->format()), QString(expectedFormat));
} }
@ -165,10 +162,7 @@ void DocumentTest::testLoad_data()
// FIXME: Test svgz // FIXME: Test svgz
// Animated // Animated
testLoad_newRow("4frames.gif", "gif", MimeTypeUtils::KIND_IMAGE, true); testLoad_newRow("butterfly.webp", "webp", MimeTypeUtils::KIND_IMAGE, true);
testLoad_newRow("1frame.gif", "gif", MimeTypeUtils::KIND_IMAGE, false);
testLoad_newRow("185523_1frame_with_graphic_control_extension.gif",
"gif", MimeTypeUtils::KIND_IMAGE, false);
} }
void DocumentTest::testLoadTwoPasses() void DocumentTest::testLoadTwoPasses()
@ -280,7 +274,7 @@ void DocumentTest::testLoadRemote()
void DocumentTest::testLoadAnimated() void DocumentTest::testLoadAnimated()
{ {
KUrl srcUrl = urlForTestFile("40frames.gif"); KUrl srcUrl = urlForTestFile("butterfly.webp");
Document::Ptr doc = DocumentFactory::instance()->load(srcUrl); Document::Ptr doc = DocumentFactory::instance()->load(srcUrl);
QSignalSpy spy(doc.data(), SIGNAL(imageRectUpdated(QRect))); QSignalSpy spy(doc.data(), SIGNAL(imageRectUpdated(QRect)));
doc->startLoadingFullImage(); doc->startLoadingFullImage();
@ -290,7 +284,7 @@ void DocumentTest::testLoadAnimated()
// Test we do not receive imageRectUpdated() until animation is started // Test we do not receive imageRectUpdated() until animation is started
// (the imageRectUpdated() is triggered by the loading of the first image) // (the imageRectUpdated() is triggered by the loading of the first image)
QTest::qWait(1000); QTest::qWait(1000);
QCOMPARE(spy.count(), 0); QCOMPARE(spy.count(), 1);
// Test we now receive some imageRectUpdated() // Test we now receive some imageRectUpdated()
doc->startAnimation(); doc->startAnimation();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB