Add testing of QPdfWriter output to QPainter lancelot test
Utilizes the native pdf renderer of macOS, so the test is only enabled on that platform. As the PDF generation should be platform independent anyway, this should not matter. Pick-to: 6.2 5.15 Change-Id: I8b6b70562d1f24fdb77795aa7eb5843279aaae85 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
fbd3b00e0b
commit
5e2725772a
55
tests/auto/other/lancelot/scripts/cosmetic.qps
Normal file
55
tests/auto/other/lancelot/scripts/cosmetic.qps
Normal file
@ -0,0 +1,55 @@
|
||||
drawRect 0 0 800 800
|
||||
|
||||
setRenderHint Antialiasing true
|
||||
image_load dome_argb32.png img
|
||||
|
||||
save
|
||||
setBrush springgreen SolidPattern
|
||||
|
||||
begin_block primitives
|
||||
|
||||
setPen black 2 DashLine
|
||||
pen_setCosmetic true
|
||||
drawLine 10 60 60 10
|
||||
drawRect 80 10.0 30 50
|
||||
drawText 130 50 "Foo"
|
||||
drawImage img 160 10 50 50
|
||||
|
||||
pen_setCosmetic false
|
||||
drawLine 10 160 60 110
|
||||
drawRect 80 110.0 30 50
|
||||
drawText 130 150 "Foo"
|
||||
drawImage img 160 110 50 50
|
||||
|
||||
setPen NoPen
|
||||
drawLine 10 260 60 210
|
||||
drawRect 80 210.0 30 50
|
||||
drawText 130 250 "Foo"
|
||||
drawImage img 160 210 50 50
|
||||
|
||||
end_block primitives
|
||||
|
||||
|
||||
translate 250 0
|
||||
rotate 10
|
||||
scale 2.5 1
|
||||
repeat_block primitives
|
||||
|
||||
resetMatrix
|
||||
# Force non-simple pen in Pdf
|
||||
setOpacity 0.5
|
||||
translate 0 400
|
||||
repeat_block primitives
|
||||
|
||||
translate 250 0
|
||||
rotate 10
|
||||
scale 2.5 1
|
||||
repeat_block primitives
|
||||
|
||||
restore
|
||||
setPen blue 4 DotLine
|
||||
setBrush olive SolidPattern
|
||||
pen_setCosmetic true
|
||||
translate 50 720
|
||||
scale 2 2
|
||||
drawRect 0 0 30 30
|
@ -30,6 +30,9 @@
|
||||
#include <qbaselinetest.h>
|
||||
#include <QDir>
|
||||
#include <QPainter>
|
||||
#include <QPdfWriter>
|
||||
#include <QTemporaryFile>
|
||||
#include <QProcess>
|
||||
|
||||
#ifndef QT_NO_OPENGL
|
||||
#include <QOpenGLFramebufferObjectFormat>
|
||||
@ -56,7 +59,8 @@ public:
|
||||
private:
|
||||
enum GraphicsEngine {
|
||||
Raster = 0,
|
||||
OpenGL = 1
|
||||
OpenGL = 1,
|
||||
Pdf = 2
|
||||
};
|
||||
|
||||
void setupTestSuite(const QStringList& blacklist = QStringList());
|
||||
@ -95,6 +99,9 @@ private slots:
|
||||
void testRasterRGBA32FPM_data();
|
||||
void testRasterRGBA32FPM();
|
||||
|
||||
void testPdf_data();
|
||||
void testPdf();
|
||||
|
||||
#ifndef QT_NO_OPENGL
|
||||
void testOpenGL_data();
|
||||
void testOpenGL();
|
||||
@ -267,6 +274,21 @@ void tst_Lancelot::testRasterRGBA32FPM()
|
||||
}
|
||||
|
||||
|
||||
void tst_Lancelot::testPdf_data()
|
||||
{
|
||||
#ifdef Q_OS_MACOS
|
||||
setupTestSuite();
|
||||
#else
|
||||
QSKIP("Pdf testing only implemented for macOS");
|
||||
#endif
|
||||
}
|
||||
|
||||
void tst_Lancelot::testPdf()
|
||||
{
|
||||
runTestSuite(Pdf, QImage::Format_RGB32);
|
||||
}
|
||||
|
||||
|
||||
#ifndef QT_NO_OPENGL
|
||||
bool tst_Lancelot::checkSystemGLSupport()
|
||||
{
|
||||
@ -398,6 +420,28 @@ void tst_Lancelot::runTestSuite(GraphicsEngine engine, QImage::Format format, co
|
||||
paint(&pdv, engine, format, script, QFileInfo(filePath).absoluteFilePath());
|
||||
rendered = fbo.toImage().convertToFormat(format);
|
||||
#endif
|
||||
} else if (engine == Pdf) {
|
||||
QString tempStem(QDir::tempPath() + QLatin1String("/lancelot_XXXXXX_") + qpsFile.chopped(4));
|
||||
|
||||
QTemporaryFile pdfFile(tempStem + QLatin1String(".pdf"));
|
||||
pdfFile.open();
|
||||
QPdfWriter writer(&pdfFile);
|
||||
writer.setPdfVersion(QPdfWriter::PdfVersion_1_6);
|
||||
writer.setResolution(150);
|
||||
paint(&writer, engine, format, script, QFileInfo(filePath).absoluteFilePath());
|
||||
pdfFile.close();
|
||||
|
||||
// Convert pdf to something we can read into a QImage, using macOS' sips utility
|
||||
QTemporaryFile pngFile(tempStem + QLatin1String(".png"));
|
||||
pngFile.open(); // Just create the file name
|
||||
pngFile.close();
|
||||
QProcess proc;
|
||||
const char *rawArgs = "-s format png --cropOffset 20 20 -c 800 800 -o";
|
||||
QStringList argList = QString::fromLatin1(rawArgs).split(QLatin1Char(' '));
|
||||
proc.start(QLatin1String("sips"), argList << pngFile.fileName() << pdfFile.fileName());
|
||||
proc.waitForFinished(2 * 60 * 1000); // May need some time
|
||||
|
||||
rendered = QImage(pngFile.fileName());
|
||||
}
|
||||
|
||||
QBASELINE_TEST(rendered);
|
||||
@ -412,6 +456,9 @@ void tst_Lancelot::paint(QPaintDevice *device, GraphicsEngine engine, QImage::Fo
|
||||
case OpenGL:
|
||||
pcmd.setType(OpenGLBufferType); // version/profile is communicated through the context's format()
|
||||
break;
|
||||
case Pdf:
|
||||
pcmd.setType(PdfType);
|
||||
break;
|
||||
case Raster: // fallthrough
|
||||
default:
|
||||
pcmd.setType(ImageType);
|
||||
|
Loading…
Reference in New Issue
Block a user