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 <x> <y> <w> <h> [color]\n - Uses current brush if no color given",
|
||||
"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_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)
|
||||
{
|
||||
|
@ -183,6 +183,7 @@ private:
|
||||
void command_drawTiledPixmap(QRegularExpressionMatch re);
|
||||
void command_fillRect(QRegularExpressionMatch re);
|
||||
void command_fillRectF(QRegularExpressionMatch re);
|
||||
void command_drawPixmapFragments(QRegularExpressionMatch re);
|
||||
|
||||
// paths
|
||||
void command_path_addEllipse(QRegularExpressionMatch re);
|
||||
|
Loading…
Reference in New Issue
Block a user