360 lines
12 KiB
C++
360 lines
12 KiB
C++
#include "CppUnitTest.h"
|
|
#include <QGuiApplication>
|
|
#include <QtWidgets/QApplication>
|
|
#include "ElementRendererTest.h"
|
|
#include "Renderer/Painting/ElementStyle.h"
|
|
#include "Renderer/Painting/MaterialStyleFill.h"
|
|
#include "Editor/util/SvgFileLoader.h"
|
|
|
|
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
|
using namespace Renderer;
|
|
|
|
namespace UnitTest
|
|
{
|
|
void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg);
|
|
|
|
TEST_CLASS(ElementRendererFillTest)
|
|
{
|
|
private:
|
|
char* argv[1];
|
|
int argc;
|
|
QPainterPath path;
|
|
public:
|
|
ElementRendererFillTest() :argv{ (char*)"" }, argc(1)
|
|
{
|
|
QQuickSvgParser::parsePathDataFast("M100,100C-.5,100,0,100.5,0,0L40,.07C40,59.5,39.5,60,100,60Z",
|
|
path);
|
|
QTransform transform;
|
|
//transform.scale(10, 10);
|
|
path = transform.map(path);
|
|
}
|
|
|
|
TEST_METHOD_INITIALIZE(initialize)
|
|
{
|
|
qInstallMessageHandler(messageHandler);
|
|
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
|
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
|
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
|
}
|
|
TEST_METHOD(TestFillPlain)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class Style : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleFill>(std::make_shared<FillPlain>(Material(QColor(255,255,0))))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestFillPlainAndStrokeRadialGradient)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class Style : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleFill>(
|
|
std::make_shared<FillPlain>(Material(QColor(255,255,0))))),
|
|
BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(10, StrokeType::kBothSides, StrokeEndType::kRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
};
|
|
|
|
TEST_CLASS(ElementRendererStokeTypeTest)
|
|
{
|
|
private:
|
|
char* argv[1];
|
|
int argc;
|
|
QPainterPath path;
|
|
public:
|
|
ElementRendererStokeTypeTest() :argv{ (char*)"" }, argc(1)
|
|
{
|
|
QQuickSvgParser::parsePathDataFast("M292.82,107.78s0,0,0,0,0,3.59,0,7.62c0,3.85,0,5.78.06,6.43a19.94,19.94,0,0,0,2.87,7.58,15.85,15.85,0,0,0,6.61,6.23A14.75,14.75,0,0,0,310,137a11.69,11.69,0,0,0,7.59-2.92,11,11,0,0,0,3.2-6.84c.15-1.27.58-4.84-1.79-7.64a8.54,8.54,0,0,0-3.56-2.44c-1.32-.52-3.32-1.31-5.06-.33a5.41,5.41,0,0,0-2.14,3,3.48,3.48,0,0,0-.16,2.71c.78,1.86,3.36,2.14,3.47,2.15", path);
|
|
QTransform transform;
|
|
transform.scale(10, 10);
|
|
path = transform.map(path);
|
|
}
|
|
|
|
TEST_METHOD_INITIALIZE(initialize)
|
|
{
|
|
qInstallMessageHandler(messageHandler);
|
|
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
|
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
|
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
|
}
|
|
TEST_METHOD(TestBothSidesRound)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kBothSides, StrokeEndType::kRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestBothSidesFlat)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kBothSides, StrokeEndType::kFlat,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestLeftSideRound)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kLeftSide, StrokeEndType::kRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestLeftSideFlat)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kLeftSide, StrokeEndType::kFlat,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestRightSideFlatRound)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(80, StrokeType::kRightSide, StrokeEndType::kFlatRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestBothSidesClosed)
|
|
{
|
|
QPainterPath testPath;
|
|
SvgFileLoader().loadSvgFile("../../svg/4_L0.svg", testPath);
|
|
testPath = QTransform::fromScale(5, 5).map(testPath);
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(10, StrokeType::kLeftSide, StrokeEndType::kClosed,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, testPath);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestAcuteAngle)
|
|
{
|
|
QPainterPath testPath;
|
|
testPath.moveTo(50, 50);
|
|
testPath.lineTo(300, 300);
|
|
testPath.lineTo(300, 50);
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(20, StrokeType::kRightSide, StrokeEndType::kRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, testPath);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestGradientWidth)
|
|
{
|
|
/*QPainterPath testPath;
|
|
testPath.moveTo(50, 50);
|
|
testPath.cubicTo(50, 200, 200, 300, 300, 300);*/
|
|
QPainterPath testPath;
|
|
SvgFileLoader().loadSvgFile("../../svg/3_2.svg", testPath);
|
|
testPath = QTransform::fromScale(3, 3).map(testPath);
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.40, Material{QColor(58,64,151)}},
|
|
{0.80, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(255,255,255)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(80, StrokeType::kLeftSide, StrokeEndType::kFlatRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false), std::map<float, float>{ {0,1}, {0.95, 0.8},{1,0}})) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, testPath);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
};
|
|
|
|
TEST_CLASS(ElementRendererStokeMaterialTest)
|
|
{
|
|
private:
|
|
char* argv[1];
|
|
int argc;
|
|
QPainterPath path;
|
|
public:
|
|
ElementRendererStokeMaterialTest() :argv{ (char*)"" }, argc(1)
|
|
{
|
|
QQuickSvgParser::parsePathDataFast("M292.82,107.78s0,0,0,0,0,3.59,0,7.62c0,3.85,0,5.78.06,6.43a19.94,19.94,0,0,0,2.87,7.58,15.85,15.85,0,0,0,6.61,6.23A14.75,14.75,0,0,0,310,137a11.69,11.69,0,0,0,7.59-2.92,11,11,0,0,0,3.2-6.84c.15-1.27.58-4.84-1.79-7.64a8.54,8.54,0,0,0-3.56-2.44c-1.32-.52-3.32-1.31-5.06-.33a5.41,5.41,0,0,0-2.14,3,3.48,3.48,0,0,0-.16,2.71c.78,1.86,3.36,2.14,3.47,2.15", path);
|
|
QTransform transform;
|
|
transform.scale(10, 10);
|
|
path = transform.map(path);
|
|
}
|
|
TEST_METHOD(TestStrokePlain)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokePlain : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kBothSides, StrokeEndType::kRound,
|
|
std::make_shared<StrokePlain>(QColor(255,255,255),1,1))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestStrokeRadialGradient1)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.20, Material{QColor(255,255,255)}},
|
|
{0.60, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kBothSides, StrokeEndType::kRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, false))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
TEST_METHOD(TestStrokeRadialGradient2)
|
|
{
|
|
QApplication a(argc, argv);
|
|
class StyleStrokeRadialGradient : public Renderer::ElementStyle
|
|
{
|
|
virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override
|
|
{
|
|
std::map<float, Material> materialMap = {
|
|
{0.00, Material{QColor(255,255,255)}},
|
|
{0.50, Material{QColor(165,176,207)}},
|
|
{1.00, Material{QColor(58,64,151)}}
|
|
};
|
|
return { BaseStyle(std::make_shared<TransformStyle>(),
|
|
std::make_shared<MaterialStyleStroke>(30, StrokeType::kBothSides, StrokeEndType::kRound,
|
|
std::make_shared<StrokeRadialGradient>(materialMap, true))) };
|
|
}
|
|
} style;
|
|
TestGLWidget w(style, path);
|
|
w.show();
|
|
a.exec();
|
|
}
|
|
};
|
|
|
|
}
|