Changeset View
Changeset View
Standalone View
Standalone View
libs/image/kis_marker_painter.cpp
Show All 38 Lines | 38 | KisMarkerPainter::KisMarkerPainter(KisPaintDeviceSP device, const KoColor &color) | |||
---|---|---|---|---|---|
39 | : m_d(new Private(device, color)) | 39 | : m_d(new Private(device, color)) | ||
40 | { | 40 | { | ||
41 | } | 41 | } | ||
42 | 42 | | |||
43 | KisMarkerPainter::~KisMarkerPainter() | 43 | KisMarkerPainter::~KisMarkerPainter() | ||
44 | { | 44 | { | ||
45 | } | 45 | } | ||
46 | 46 | | |||
47 | | ||||
48 | | ||||
49 | bool KisMarkerPainter::isNumberInValidRange(qint32 number) | ||||
50 | { | ||||
51 | if (number < -ValidNumberRangeValue || number > ValidNumberRangeValue) | ||||
52 | return false; | ||||
53 | return true; | ||||
54 | } | ||||
55 | | ||||
56 | bool KisMarkerPainter::isRectInValidRange(const QRect &rect) | ||||
57 | { | ||||
58 | return isNumberInValidRange(rect.x()) | ||||
59 | && isNumberInValidRange(rect.y()) | ||||
60 | && isNumberInValidRange(rect.width()) | ||||
61 | && isNumberInValidRange(rect.height()); | ||||
62 | } | ||||
63 | | ||||
47 | void KisMarkerPainter::fillHalfBrushDiff(const QPointF &p1, const QPointF &p2, const QPointF &p3, | 64 | void KisMarkerPainter::fillHalfBrushDiff(const QPointF &p1, const QPointF &p2, const QPointF &p3, | ||
48 | const QPointF ¢er, qreal radius) | 65 | const QPointF ¢er, qreal radius) | ||
49 | { | 66 | { | ||
50 | KoColor currentColor(m_d->color); | 67 | KoColor currentColor(m_d->color); | ||
51 | 68 | | |||
52 | const int pixelSize = m_d->device->pixelSize(); | 69 | const int pixelSize = m_d->device->pixelSize(); | ||
53 | const KoColorSpace *cs = m_d->device->colorSpace(); | 70 | const KoColorSpace *cs = m_d->device->colorSpace(); | ||
54 | 71 | | |||
55 | const qreal fadedRadius = radius + 1; | 72 | const qreal fadedRadius = radius + 1; | ||
56 | QRectF boundRect(center.x() - fadedRadius, center.y() - fadedRadius, | 73 | QRectF boundRect(center.x() - fadedRadius, center.y() - fadedRadius, | ||
57 | 2 * fadedRadius, 2 * fadedRadius); | 74 | 2 * fadedRadius, 2 * fadedRadius); | ||
58 | 75 | | |||
59 | KisAlgebra2D::RightHalfPlane plane1(p1, p2); | 76 | KisAlgebra2D::RightHalfPlane plane1(p1, p2); | ||
60 | KisAlgebra2D::RightHalfPlane plane2(p2, p3); | 77 | KisAlgebra2D::RightHalfPlane plane2(p2, p3); | ||
61 | KisAlgebra2D::OuterCircle outer(center, radius); | 78 | KisAlgebra2D::OuterCircle outer(center, radius); | ||
62 | 79 | | |||
63 | boundRect = KisAlgebra2D::cutOffRect(boundRect, plane1); | 80 | boundRect = KisAlgebra2D::cutOffRect(boundRect, plane1); | ||
64 | boundRect = KisAlgebra2D::cutOffRect(boundRect, plane2); | 81 | boundRect = KisAlgebra2D::cutOffRect(boundRect, plane2); | ||
65 | 82 | | |||
66 | KisSequentialIterator it(m_d->device, boundRect.toAlignedRect()); | 83 | QRect alignedRect = boundRect.toAlignedRect(); | ||
84 | | ||||
85 | KIS_SAFE_ASSERT_RECOVER_RETURN(isRectInValidRange(alignedRect)); | ||||
86 | | ||||
87 | KisSequentialIterator it(m_d->device, alignedRect); | ||||
88 | | ||||
67 | while (it.nextPixel()) { | 89 | while (it.nextPixel()) { | ||
68 | QPoint pt(it.x(), it.y()); | 90 | QPoint pt(it.x(), it.y()); | ||
69 | 91 | | |||
70 | qreal value1 = plane1.value(pt); | 92 | qreal value1 = plane1.value(pt); | ||
71 | if (value1 < 0) continue; | 93 | if (value1 < 0) continue; | ||
72 | 94 | | |||
73 | qreal value2 = plane2.value(pt); | 95 | qreal value2 = plane2.value(pt); | ||
74 | if (value2 < 0) continue; | 96 | if (value2 < 0) continue; | ||
Show All 24 Lines | 117 | { | |||
99 | const KoColorSpace *cs = m_d->device->colorSpace(); | 121 | const KoColorSpace *cs = m_d->device->colorSpace(); | ||
100 | 122 | | |||
101 | const qreal fadedRadius = radius + 1; | 123 | const qreal fadedRadius = radius + 1; | ||
102 | QRectF boundRect(center.x() - fadedRadius, center.y() - fadedRadius, | 124 | QRectF boundRect(center.x() - fadedRadius, center.y() - fadedRadius, | ||
103 | 2 * fadedRadius, 2 * fadedRadius); | 125 | 2 * fadedRadius, 2 * fadedRadius); | ||
104 | 126 | | |||
105 | KisAlgebra2D::OuterCircle outer(center, radius); | 127 | KisAlgebra2D::OuterCircle outer(center, radius); | ||
106 | 128 | | |||
107 | KisSequentialIterator it(m_d->device, boundRect.toAlignedRect()); | 129 | QRect alignedRect = boundRect.toAlignedRect(); | ||
130 | | ||||
131 | KIS_SAFE_ASSERT_RECOVER_RETURN(isRectInValidRange(alignedRect)); | ||||
132 | | ||||
133 | KisSequentialIterator it(m_d->device, alignedRect); | ||||
108 | while (it.nextPixel()) { | 134 | while (it.nextPixel()) { | ||
109 | QPoint pt(it.x(), it.y()); | 135 | QPoint pt(it.x(), it.y()); | ||
110 | 136 | | |||
111 | qreal value3 = outer.fadeSq(pt); | 137 | qreal value3 = outer.fadeSq(pt); | ||
112 | if (value3 > 1.0) continue; | 138 | if (value3 > 1.0) continue; | ||
113 | 139 | | |||
114 | const quint8 srcAlpha = value3 > 0 ? quint8((1.0 - value3) * 255.0) : 255; | 140 | const quint8 srcAlpha = value3 > 0 ? quint8((1.0 - value3) * 255.0) : 255; | ||
115 | const quint8 dstAlpha = cs->opacityU8(it.rawData()); | 141 | const quint8 dstAlpha = cs->opacityU8(it.rawData()); | ||
Show All 27 Lines |