18 const QPointF &dstImageOffset)
25 void operator() (
const QPolygonF &srcPolygon,
const QPolygonF &dstPolygon) {
26 this->
operator() (srcPolygon, dstPolygon, dstPolygon);
29 void operator() (
const QPolygonF &srcPolygon,
const QPolygonF &dstPolygon,
const QPolygonF &clipDstPolygon) {
30 QRect boundRect = clipDstPolygon.boundingRect().toAlignedRect();
33 for (
int y = boundRect.top(); y <= boundRect.bottom(); y++) {
35 for (
int x = boundRect.left(); x <= boundRect.right(); x++) {
37 QPointF srcPoint(x, y);
38 if (clipDstPolygon.containsPoint(srcPoint, Qt::OddEvenFill)) {
48 QPoint srcPointI = srcPoint.toPoint();
70 QDomDocument doc = parent->ownerDocument();
71 QDomElement e = doc.createElement(tag);
72 parent->appendChild(e);
74 e.setAttribute(
"type",
"gradient-mesh-node");
99 QDomDocument doc = parent->ownerDocument();
100 QDomElement e = doc.createElement(tag);
101 parent->appendChild(e);
103 e.setAttribute(
"type",
"gradient-mesh");
137 const QRectF unitRect(0, 0, 1, 1);
142 if (patch.dstBoundingRect().contains(pt)) {
145 if (unitRect.contains(localPos)) {
147 if (localPointResult) {
148 *localPointResult = localPos;
157 return result.patchIndex();
161 const QPoint &dstQImageOffset,
171 const QRect imageSize = QRect(dstQImageOffset, dstImage->size());
183 transformedPointsLocal);
189 QImage *dstImage)
const
void renderMesh(const QPoint &dstQImageOffset, QImage *dstImage) const
PatchIndex hitTestPatch(const QPointF &pt, QPointF *localPointResult) const
static void renderPatch(const GradientMeshPatch &patch, const QPoint &dstQImageOffset, QImage *dstImage)
std::vector< qreal > m_rows
patch_iterator endPatches()
std::vector< qreal > m_columns
patch_iterator beginPatches()
std::vector< Node > m_nodes
QRectF dstBoundingRect() const
void sampleRegularGridSVG2(QSize &gridSize, QVector< QPointF > &origPoints, QVector< QPointF > &transfPoints, const QPointF &dstStep) const
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
qreal interp(qreal r, qreal a, qreal b)
private functions
QColor lerp(const QColor &c1, const QColor &c2, qreal t)
bool loadValue(const QDomElement &parent, GradientMeshNode *node)
void saveValue(QDomElement *parent, const QString &tag, const GradientMeshNode &node)
QPointF calculateLocalPosSVG2(const std::array< QPointF, 12 > &points, const QPointF &globalPoint)
calculates local (u,v) coordinates of the patch corresponding to globalPoint
bool checkType(const QDomElement &e, const QString &expectedType)
void saveValue(QDomElement *parent, const QString &tag, const QSize &size)
bool findOnlyElement(const QDomElement &parent, const QString &tag, QDomElement *el, QStringList *errorMessages)
bool loadValue(const QDomElement &e, float *v)
std::array< QColor, 4 > colors
QImageGradientOp(const std::array< QColor, 4 > &colors, QImage &dstImage, const QPointF &dstImageOffset)
const std::array< QColor, 4 > & m_colors
void operator()(const QPolygonF &srcPolygon, const QPolygonF &dstPolygon)