Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBezierGradientMeshDetail::QImageGradientOp Struct Reference

Public Member Functions

void operator() (const QPolygonF &srcPolygon, const QPolygonF &dstPolygon)
 
void operator() (const QPolygonF &srcPolygon, const QPolygonF &dstPolygon, const QPolygonF &clipDstPolygon)
 
 QImageGradientOp (const std::array< QColor, 4 > &colors, QImage &dstImage, const QPointF &dstImageOffset)
 

Public Attributes

const std::array< QColor, 4 > & m_colors
 
QImage & m_dstImage
 
QPointF m_dstImageOffset
 
QRect m_dstImageRect
 

Detailed Description

Definition at line 15 of file KisBezierGradientMesh.cpp.

Constructor & Destructor Documentation

◆ QImageGradientOp()

KisBezierGradientMeshDetail::QImageGradientOp::QImageGradientOp ( const std::array< QColor, 4 > & colors,
QImage & dstImage,
const QPointF & dstImageOffset )
inline

Member Function Documentation

◆ operator()() [1/2]

void KisBezierGradientMeshDetail::QImageGradientOp::operator() ( const QPolygonF & srcPolygon,
const QPolygonF & dstPolygon )
inline

Definition at line 25 of file KisBezierGradientMesh.cpp.

25 {
26 this->operator() (srcPolygon, dstPolygon, dstPolygon);
27 }
void operator()(const QPolygonF &srcPolygon, const QPolygonF &dstPolygon)

References operator()().

◆ operator()() [2/2]

void KisBezierGradientMeshDetail::QImageGradientOp::operator() ( const QPolygonF & srcPolygon,
const QPolygonF & dstPolygon,
const QPolygonF & clipDstPolygon )
inline

Definition at line 29 of file KisBezierGradientMesh.cpp.

29 {
30 QRect boundRect = clipDstPolygon.boundingRect().toAlignedRect();
31 KisFourPointInterpolatorBackward interp(srcPolygon, dstPolygon);
32
33 for (int y = boundRect.top(); y <= boundRect.bottom(); y++) {
34 interp.setY(y);
35 for (int x = boundRect.left(); x <= boundRect.right(); x++) {
36
37 QPointF srcPoint(x, y);
38 if (clipDstPolygon.containsPoint(srcPoint, Qt::OddEvenFill)) {
39
40 interp.setX(srcPoint.x());
41 QPointF dstPoint = interp.getValue();
42
43 // about srcPoint/dstPoint hell please see a
44 // comment in PaintDevicePolygonOp::operator() ()
45
46 srcPoint -= m_dstImageOffset;
47
48 QPoint srcPointI = srcPoint.toPoint();
49
50 if (!m_dstImageRect.contains(srcPointI)) continue;
51
52 // TODO: move vertical calculation into the upper loop
53 const QColor c1 = lerp(m_colors[0], m_colors[1], qBound(0.0, dstPoint.x(), 1.0));
54 const QColor c2 = lerp(m_colors[2], m_colors[3], qBound(0.0, dstPoint.x(), 1.0));
55
56 m_dstImage.setPixelColor(srcPointI, lerp(c1, c2, qBound(0.0, dstPoint.y(), 1.0)));
57 }
58 }
59 }
60 }
QPointF dstPoint
qreal interp(qreal r, qreal a, qreal b)
private functions
QColor lerp(const QColor &c1, const QColor &c2, qreal t)

References dstPoint, interp(), KisBezierGradientMeshDetail::lerp(), m_colors, m_dstImage, m_dstImageOffset, and m_dstImageRect.

Member Data Documentation

◆ m_colors

const std::array<QColor, 4>& KisBezierGradientMeshDetail::QImageGradientOp::m_colors

Definition at line 62 of file KisBezierGradientMesh.cpp.

◆ m_dstImage

QImage& KisBezierGradientMeshDetail::QImageGradientOp::m_dstImage

Definition at line 63 of file KisBezierGradientMesh.cpp.

◆ m_dstImageOffset

QPointF KisBezierGradientMeshDetail::QImageGradientOp::m_dstImageOffset

Definition at line 64 of file KisBezierGradientMesh.cpp.

◆ m_dstImageRect

QRect KisBezierGradientMeshDetail::QImageGradientOp::m_dstImageRect

Definition at line 65 of file KisBezierGradientMesh.cpp.


The documentation for this struct was generated from the following file: