27 : m_d(new
Private(device, color))
53 const QPointF ¢er, qreal radius)
57 const int pixelSize =
m_d->device->pixelSize();
60 const qreal fadedRadius = radius + 1;
61 QRectF boundRect(center.x() - fadedRadius, center.y() - fadedRadius,
62 2 * fadedRadius, 2 * fadedRadius);
71 QRect alignedRect = boundRect.toAlignedRect();
78 QPoint pt(it.
x(), it.
y());
80 qreal value1 = plane1.
value(pt);
81 if (value1 < 0)
continue;
83 qreal value2 = plane2.
value(pt);
84 if (value2 < 0)
continue;
86 qreal value3 = outer.
fadeSq(pt);
87 if (value3 > 1.0)
continue;
92 qreal fadePos = value3;
94 const quint8 srcAlpha = fadePos > 0 ? quint8((1.0 - fadePos) * 255.0) : 255;
97 if (srcAlpha > dstAlpha) {
99 memcpy(it.
rawData(), currentColor.
data(), pixelSize);
108 const int pixelSize =
m_d->device->pixelSize();
111 const qreal fadedRadius = radius + 1;
112 QRectF boundRect(center.x() - fadedRadius, center.y() - fadedRadius,
113 2 * fadedRadius, 2 * fadedRadius);
117 QRect alignedRect = boundRect.toAlignedRect();
123 QPoint pt(it.
x(), it.
y());
125 qreal value3 = outer.
fadeSq(pt);
126 if (value3 > 1.0)
continue;
128 const quint8 srcAlpha = value3 > 0 ? quint8((1.0 - value3) * 255.0) : 255;
131 if (srcAlpha > dstAlpha) {
133 memcpy(it.
rawData(), currentColor.
data(), pixelSize);
139 const QPointF &c2, qreal
r2)
146 const QPointF diff = c2 - c1;
148 const QPointF direction = diff * normDiffInv;
149 const QPointF
p = c1 +
r1 * direction;
150 const QPointF q = c2 +
r2 * direction;
qreal fadeSq(const QPointF &pt) const
qreal value(const QPointF &pt) const
static const qint32 ValidNumberRangeValue
Any number bigger than this or lower than -this is considered invalid.
void fillFullCircle(const QPointF ¢er, qreal radius)
void fillHalfBrushDiff(const QPointF &p1, const QPointF &p2, const QPointF &p3, const QPointF ¢er, qreal radius)
const QScopedPointer< Private > m_d
bool isRectInValidRange(const QRect &rect)
void fillCirclesDiff(const QPointF &c1, qreal r1, const QPointF &c2, qreal r2)
bool isNumberInValidRange(qint32 number)
KisMarkerPainter(KisPaintDeviceSP device, const KoColor &color)
ALWAYS_INLINE quint8 * rawData()
ALWAYS_INLINE int x() const
ALWAYS_INLINE int y() const
virtual quint8 opacityU8(const quint8 *pixel) const =0
void setOpacity(quint8 alpha)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
QVector< QPointF > intersectTwoCircles(const QPointF ¢er1, qreal r1, const QPointF ¢er2, qreal r2)
QRectF cutOffRect(const QRectF &rc, const KisAlgebra2D::RightHalfPlane &p)
Private(KisPaintDeviceSP _device, const KoColor &_color)