Lancelot: add drawPixmapFragment test
Task-number: QTBUG-111416 Pick-to: 6.5 Change-Id: Ife91bbc0bf09e3fcc5c4d8dc06e352eadee1b810 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
parent
e13b57d06a
commit
d57ff481fc
65
tests/baseline/painting/scripts/pixmapfragments.qps
Normal file
65
tests/baseline/painting/scripts/pixmapfragments.qps
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Version: 1
|
||||||
|
# CheckVsReference: 1% (0 0 690 580)
|
||||||
|
|
||||||
|
|
||||||
|
setRenderHint Antialiasing
|
||||||
|
|
||||||
|
setPen #00ff00
|
||||||
|
|
||||||
|
pixmap_load dome_argb32.png the_pixmap
|
||||||
|
begin_block draw_stuff
|
||||||
|
save
|
||||||
|
drawPixmapFragments the_pixmap 1 50 50 25 25 60 60 1 1 0 1
|
||||||
|
drawPixmapFragments the_pixmap 1 150 50 25 25 60 60 1 1 0 0.5
|
||||||
|
drawPixmapFragments the_pixmap 1 250 50 25 25 60 60 1 1 30 1
|
||||||
|
drawPixmapFragments the_pixmap 1 350 50 25 25 60 60 1.5 1 0 1
|
||||||
|
drawPixmapFragments the_pixmap 1 450 50 25 25 60 60 1 1.5 0 1
|
||||||
|
drawPixmapFragments the_pixmap 2 550 50 25 25 40 40 0.5 0.5 -45 1 600 50 25 25 40 40 0.7 0.7 45 1
|
||||||
|
restore
|
||||||
|
end_block
|
||||||
|
|
||||||
|
|
||||||
|
translate 0 120
|
||||||
|
pixmap_load dome_rgb32.png the_pixmap
|
||||||
|
repeat_block draw_stuff
|
||||||
|
|
||||||
|
translate 0 120
|
||||||
|
pixmap_load dome_indexed.png the_pixmap
|
||||||
|
repeat_block draw_stuff
|
||||||
|
|
||||||
|
translate 0 120
|
||||||
|
pixmap_load dome_indexed_mask.png the_pixmap
|
||||||
|
repeat_block draw_stuff
|
||||||
|
|
||||||
|
translate 0 120
|
||||||
|
pixmap_load dome_mono.png the_pixmap
|
||||||
|
repeat_block draw_stuff
|
||||||
|
|
||||||
|
|
||||||
|
resetMatrix
|
||||||
|
translate 700 60
|
||||||
|
setPen black
|
||||||
|
drawText 0 0 "32 bit w/alpha"
|
||||||
|
translate 0 120
|
||||||
|
drawText 0 0 "32 bit w/o alpha"
|
||||||
|
translate 0 120
|
||||||
|
drawText 0 0 "8 bit indexed"
|
||||||
|
translate 0 120
|
||||||
|
drawText 0 0 "8 bit indexed w/mask"
|
||||||
|
translate 0 120
|
||||||
|
drawText 0 0 "1 bit"
|
||||||
|
|
||||||
|
resetMatrix
|
||||||
|
translate 25 600
|
||||||
|
drawText 0 0 "simple"
|
||||||
|
translate 100 0
|
||||||
|
drawText 0 0 "opacity"
|
||||||
|
translate 100 0
|
||||||
|
drawText 0 0 "rotation"
|
||||||
|
translate 100 0
|
||||||
|
drawText 0 0 "scale x"
|
||||||
|
translate 100 0
|
||||||
|
drawText 0 0 "scale y"
|
||||||
|
translate 100 0
|
||||||
|
drawText 0 0 "two fragments"
|
||||||
|
translate 100 0
|
@ -469,6 +469,20 @@ void PaintCommands::staticInit()
|
|||||||
"^fillRectF\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s*(\\w*)?$",
|
"^fillRectF\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s*(\\w*)?$",
|
||||||
"fillRectF <x> <y> <w> <h> [color]\n - Uses current brush if no color given",
|
"fillRectF <x> <y> <w> <h> [color]\n - Uses current brush if no color given",
|
||||||
"fillRectF 10.5 10.5 20.2 20.2 blue");
|
"fillRectF 10.5 10.5 20.2 20.2 blue");
|
||||||
|
DECL_PAINTCOMMAND("drawPixmapFragments", command_drawPixmapFragments,
|
||||||
|
"^drawPixmapFragments\\s+([\\w.:\\/]*)"
|
||||||
|
"\\s+(-?\\w*)"
|
||||||
|
"\\s+(-?[.\\w]*)\\s*(-?[.\\w]*)"
|
||||||
|
"\\s+(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)"
|
||||||
|
"\\s+(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)"
|
||||||
|
"\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?"
|
||||||
|
"\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?"
|
||||||
|
"\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?$",
|
||||||
|
"drawPixmapFragments <image filename> <count>"
|
||||||
|
" <centerx0> <centery0> <x0> <y0> <w0> <h0> <sx0> <sy0> <r0> <o0>"
|
||||||
|
" <centerx1> <centery1> <x1> <y1> <w1> ..."
|
||||||
|
"\n - where count is 1 or 2, and followed by centerPos, sourceRect, scaleX, scaleY, rotation, opacity <count> times",
|
||||||
|
"drawPixmapFragments :/images/sign.png 1 50 50 10 10 60 60 10 10 30 1");
|
||||||
|
|
||||||
DECL_PAINTCOMMANDSECTION("painterPaths");
|
DECL_PAINTCOMMANDSECTION("painterPaths");
|
||||||
DECL_PAINTCOMMAND("path_moveTo", command_path_moveTo,
|
DECL_PAINTCOMMAND("path_moveTo", command_path_moveTo,
|
||||||
@ -1452,6 +1466,93 @@ void PaintCommands::command_fillRectF(QRegularExpressionMatch re)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PaintCommands::command_drawPixmapFragments(QRegularExpressionMatch re)
|
||||||
|
{
|
||||||
|
QPixmap pm;
|
||||||
|
pm = m_pixmapMap[re.captured(1)]; // try cache first
|
||||||
|
if (pm.isNull())
|
||||||
|
pm = image_load<QPixmap>(re.captured(1));
|
||||||
|
if (pm.isNull()) {
|
||||||
|
QFileInfo fi(m_filepath);
|
||||||
|
QDir dir = fi.absoluteDir();
|
||||||
|
dir.cdUp();
|
||||||
|
dir.cd("images");
|
||||||
|
QString fileName = dir.absolutePath() + QLatin1Char('/') + re.captured(1);
|
||||||
|
pm = QPixmap(fileName);
|
||||||
|
if (pm.isNull() && !fileName.endsWith(".png")) {
|
||||||
|
fileName.append(".png");
|
||||||
|
pm = QPixmap(fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pm.isNull()) {
|
||||||
|
fprintf(stderr, "ERROR(drawPixmapFragments): failed to load pixmap: '%s'\n",
|
||||||
|
qPrintable(re.captured(1)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = convertToInt(re.captured(2));
|
||||||
|
|
||||||
|
struct Fragment {
|
||||||
|
double posx;
|
||||||
|
double posy;
|
||||||
|
double srcx;
|
||||||
|
double srcy;
|
||||||
|
double srcw;
|
||||||
|
double srch;
|
||||||
|
double sx;
|
||||||
|
double sy;
|
||||||
|
double rotation;
|
||||||
|
double opacity;
|
||||||
|
};
|
||||||
|
|
||||||
|
QList<Fragment> fragments;
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
int captureIndexStart = 3 + i * 10;
|
||||||
|
if (re.hasCaptured(captureIndexStart)) {
|
||||||
|
Fragment f;
|
||||||
|
f.posx = convertToDouble(re.captured(captureIndexStart));
|
||||||
|
f.posy = convertToDouble(re.captured(captureIndexStart + 1));
|
||||||
|
f.srcx = convertToDouble(re.captured(captureIndexStart + 2));
|
||||||
|
f.srcx = convertToDouble(re.captured(captureIndexStart + 3));
|
||||||
|
f.srcw = convertToDouble(re.captured(captureIndexStart + 4));
|
||||||
|
f.srch = convertToDouble(re.captured(captureIndexStart + 5));
|
||||||
|
f.sx = convertToDouble(re.captured(captureIndexStart + 6));
|
||||||
|
f.sy = convertToDouble(re.captured(captureIndexStart + 7));
|
||||||
|
f.rotation = convertToDouble(re.captured(captureIndexStart + 8));
|
||||||
|
f.opacity = convertToDouble(re.captured(captureIndexStart + 9));
|
||||||
|
fragments.append(f);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_verboseMode) {
|
||||||
|
printf(" -(lance) drawPixmapFragments('%s' count=%d ",
|
||||||
|
qPrintable(re.captured(1)), int(fragments.count()));
|
||||||
|
for (int i = 0; i < fragments.count(); ++i) {
|
||||||
|
printf("pos=(%.2f, %.2f) srcrect=(%.2f %.2f %.2f %.2f) scale=(%.2f %.2f) rotation=%.2f opacity=%.2f ",
|
||||||
|
fragments[i].posx, fragments[i].posy,
|
||||||
|
fragments[i].srcx, fragments[i].srcy, fragments[i].srcw, fragments[i].srch,
|
||||||
|
fragments[i].sx, fragments[i].sy,
|
||||||
|
fragments[i].rotation,
|
||||||
|
fragments[i].opacity);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPainter::PixmapFragment> pixmapFragments;
|
||||||
|
for (int i = 0; i < fragments.count(); ++i) {
|
||||||
|
pixmapFragments.append(
|
||||||
|
QPainter::PixmapFragment::create(QPointF(fragments[i].posx, fragments[i].posy),
|
||||||
|
QRectF(fragments[i].srcx, fragments[i].srcy, fragments[i].srcw, fragments[i].srch),
|
||||||
|
fragments[i].sx, fragments[i].sy,
|
||||||
|
fragments[i].rotation,
|
||||||
|
fragments[i].opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
m_painter->drawPixmapFragments(pixmapFragments.constData(), pixmapFragments.count(), pm);
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************************************************/
|
/***************************************************************************************************/
|
||||||
void PaintCommands::command_noop(QRegularExpressionMatch)
|
void PaintCommands::command_noop(QRegularExpressionMatch)
|
||||||
{
|
{
|
||||||
|
@ -183,6 +183,7 @@ private:
|
|||||||
void command_drawTiledPixmap(QRegularExpressionMatch re);
|
void command_drawTiledPixmap(QRegularExpressionMatch re);
|
||||||
void command_fillRect(QRegularExpressionMatch re);
|
void command_fillRect(QRegularExpressionMatch re);
|
||||||
void command_fillRectF(QRegularExpressionMatch re);
|
void command_fillRectF(QRegularExpressionMatch re);
|
||||||
|
void command_drawPixmapFragments(QRegularExpressionMatch re);
|
||||||
|
|
||||||
// paths
|
// paths
|
||||||
void command_path_addEllipse(QRegularExpressionMatch re);
|
void command_path_addEllipse(QRegularExpressionMatch re);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user