1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <gtest/gtest.h>
#include "test_helper.hpp"
#include <QTest>
#include <QQuickItem>
#include "dmaskeffectnode_p.h"
DQUICK_USE_NAMESPACE
class TextureMaterialItem : public QQuickItem
{
public:
TextureMaterialItem()
: QQuickItem()
{
setFlag(ItemHasContents, true);
}
protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override
{
QSGGeometryNode *node = static_cast<QSGGeometryNode *>(oldNode);
if (!node) {
node = new QSGGeometryNode();
auto geo = new QSGGeometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4);
node->setGeometry(geo);
node->setFlag(QSGNode::OwnsGeometry);
auto material = new TextureMaterial();
material->setMaskTexture(TestUtil::simpleTextureThreePart(255));
material->setMaskOffset(QVector2D(0, 0));
material->setMaskScale(QVector2D(1, 1));
material->setSourceScale(QVector2D(1, 1));
material->setTexture(TestUtil::simpleTexture(QColor(100, 100, 100, 255)));
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
}
QSGGeometry::updateTexturedRectGeometry(node->geometry(), boundingRect(), QRectF(0, 0, 1, 1));
node->markDirty(QSGNode::DirtyGeometry);
return node;
}
};
TEST(ut_MaskEffectNode, textureMaterial)
{
TEST_SOFTWARE_SKIP();
TestUtil::registerType<TextureMaterialItem>("TextureMaterialItem");
QuickViewHelper<> helper("qrc:/qml/DMaskEffectNode_TextureMaterial.qml");
ASSERT_TRUE(helper.object);
auto target = findItem<TextureMaterialItem>(helper.object);
ASSERT_TRUE(target);
QImage img = helper.view->grabWindow();
EXPECT_EQ(img.pixelColor(QPoint(50, 30)), QColor(0, 0, 0, 255));
EXPECT_EQ(img.pixelColor(QPoint(50, 60)), QColor(0, 100, 0, 255));
EXPECT_EQ(img.pixelColor(QPoint(50, 90)), QColor(0, 0, 0, 255));
}
class MaskEffectNodeItem : public QQuickItem
{
public:
MaskEffectNodeItem()
: QQuickItem()
{
setFlag(ItemHasContents, true);
}
protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override
{
MaskEffectNode *node = static_cast<MaskEffectNode *>(oldNode);
if (!node) {
node = new MaskEffectNode();
node->setMaskTexture(TestUtil::simpleTextureThreePart(255));
node->setMaskOffset(QVector2D(0, 0));
node->setMaskScale(QVector2D(1, 1));
node->setSourceScale(QVector2D(1, 1));
node->setFiltering(QSGTexture::Linear);
node->setMipmapFiltering(QSGTexture::Linear);
node->setAnisotropyLevel(QSGTexture::Anisotropy2x);
node->setTextureCoordinatesTransform(QSGImageNode::MirrorHorizontally | QSGImageNode::MirrorVertically);
node->setOwnsTexture(false);
node->setTexture(TestUtil::simpleTexture(QColor(100, 100, 100, 255)));
}
node->setRect(this->boundingRect());
node->setSourceRect(node->rect());
return node;
}
};
TEST(ut_MaskEffectNode, properties)
{
TEST_SOFTWARE_SKIP();
TestUtil::registerType<MaskEffectNodeItem>("MaskEffectNodeItem");
QuickViewHelper<> helper("qrc:/qml/DMaskEffectNode.qml");
ASSERT_TRUE(helper.object);
auto target = findItem<MaskEffectNodeItem>(helper.object);
ASSERT_TRUE(target);
QImage img = helper.view->grabWindow();
EXPECT_EQ(img.pixelColor(QPoint(50, 30)), QColor(0, 0, 0, 255));
EXPECT_EQ(img.pixelColor(QPoint(50, 60)), QColor(0, 100, 0, 255));
EXPECT_EQ(img.pixelColor(QPoint(50, 90)), QColor(0, 0, 0, 255));
}
|