Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSharpnessOption Class Reference

#include <KisSharpnessOption.h>

+ Inheritance diagram for KisSharpnessOption:

Public Member Functions

bool alignOutlineToPixels () const
 
void apply (const KisPaintInformation &info, const QPointF &pt, qint32 &x, qint32 &y, qreal &xFraction, qreal &yFraction) const
 
void applyThreshold (KisFixedPaintDeviceSP dab, const KisPaintInformation &info)
 
 KisSharpnessOption (const KisPropertiesConfiguration *setting)
 
- Public Member Functions inherited from KisCurveOption
qreal computeRotationLikeValue (const KisPaintInformation &info, qreal baseValue, bool absoluteAxesFlipped, qreal scalingPartCoeff, bool disableScalingPart) const
 
qreal computeSizeLikeValue (const KisPaintInformation &info, bool useStrengthValue=true) const
 
ValueComponents computeValueComponents (const KisPaintInformation &info, bool useStrengthValue) const
 
bool isChecked () const
 
bool isRandom () const
 
 KisCurveOption (const KisCurveOptionData &data)
 
 KisCurveOption (KisCurveOption &)=delete
 
KisCurveOptionoperator= (KisCurveOption &)=delete
 
qreal strengthMaxValue () const
 
qreal strengthMinValue () const
 
qreal strengthValue () const
 

Private Member Functions

 KisSharpnessOption (const KisSharpnessOptionData &data)
 

Private Attributes

bool m_alignOutlinePixels
 
int m_softness
 

Detailed Description

Definition at line 13 of file KisSharpnessOption.h.

Constructor & Destructor Documentation

◆ KisSharpnessOption() [1/2]

KisSharpnessOption::KisSharpnessOption ( const KisPropertiesConfiguration * setting)

Definition at line 19 of file KisSharpnessOption.cpp.

20 : KisSharpnessOption(kpou::loadOptionData<KisSharpnessOptionData>(setting))
21{
22}
KisSharpnessOption(const KisPropertiesConfiguration *setting)

◆ KisSharpnessOption() [2/2]

KisSharpnessOption::KisSharpnessOption ( const KisSharpnessOptionData & data)
private

Definition at line 24 of file KisSharpnessOption.cpp.

25 : KisCurveOption(data)
26 , m_alignOutlinePixels(data.alignOutlinePixels)
27 , m_softness(data.softness)
28{
29
30}
KisCurveOption(const KisCurveOptionData &data)

Member Function Documentation

◆ alignOutlineToPixels()

bool KisSharpnessOption::alignOutlineToPixels ( ) const

Definition at line 95 of file KisSharpnessOption.cpp.

96{
98}

References m_alignOutlinePixels.

◆ apply()

void KisSharpnessOption::apply ( const KisPaintInformation & info,
const QPointF & pt,
qint32 & x,
qint32 & y,
qreal & xFraction,
qreal & yFraction ) const

First part of the sharpness is the coordinates: in pen mode they are integers without fractions

Definition at line 32 of file KisSharpnessOption.cpp.

33{
34 if (isChecked() && m_alignOutlinePixels && strengthValue() > 0.0) {
35 qreal processedSharpness = computeSizeLikeValue(info);
36
37 if (qFuzzyCompare(processedSharpness, 1.0)) {
38 // pen
39 xFraction = 0.0;
40 yFraction = 0.0;
41 x = qRound(pt.x());
42 y = qRound(pt.y());
43 }
44 else {
45 // something in between
46 qint32 xi = qRound(pt.x());
47 qint32 yi = qRound(pt.y());
48
49 qreal xf = processedSharpness * xi + (1.0 - processedSharpness) * pt.x();
50 qreal yf = processedSharpness * yi + (1.0 - processedSharpness) * pt.y();
51
52 KisPaintOp::splitCoordinate(xf, &x, &xFraction);
53 KisPaintOp::splitCoordinate(yf, &y, &yFraction);
54 }
55 } else {
56 // brush
57 KisPaintOp::splitCoordinate(pt.x(), &x, &xFraction);
58 KisPaintOp::splitCoordinate(pt.y(), &y, &yFraction);
59 }
60}
qreal strengthValue() const
bool isChecked() const
qreal computeSizeLikeValue(const KisPaintInformation &info, bool useStrengthValue=true) const
static bool qFuzzyCompare(half p1, half p2)
static void splitCoordinate(qreal coordinate, qint32 *whole, qreal *fraction)

References KisCurveOption::computeSizeLikeValue(), KisCurveOption::isChecked(), m_alignOutlinePixels, qFuzzyCompare(), KisPaintOp::splitCoordinate(), and KisCurveOption::strengthValue().

◆ applyThreshold()

void KisSharpnessOption::applyThreshold ( KisFixedPaintDeviceSP dab,
const KisPaintInformation & info )

Apply threshold specified by user

Definition at line 62 of file KisSharpnessOption.cpp.

63{
64 if (!isChecked()) return;
65 const KoColorSpace * cs = dab->colorSpace();
66
67 // Set all alpha > opaque/2 to opaque, the rest to transparent.
68 // XXX: Using 4/10 as the 1x1 circle brush paints nothing with 0.5.
69 quint8* dabPointer = dab->data();
70 QRect rc = dab->bounds();
71
72 qreal threshold = computeSizeLikeValue(info);
73
74 quint32 pixelSize = dab->pixelSize();
75 int pixelCount = rc.width() * rc.height();
76
77 quint32 tolerance = quint32(OPACITY_OPAQUE_U8 - (threshold * OPACITY_OPAQUE_U8));
78
79 for (int i = 0; i < pixelCount; i++) {
80 quint8 opacity = cs->opacityU8(dabPointer);
81
82 // Check what pixel goes sharp
83 if (opacity > (tolerance) ) {
84 cs->setOpacity(dabPointer, OPACITY_OPAQUE_U8, 1);
85 } else {
86 // keep original value if in soft range
87 if (opacity <= (100 - m_softness) * tolerance / 100) {
88 cs->setOpacity(dabPointer, OPACITY_TRANSPARENT_U8, 1);
89 }
90 }
91 dabPointer += pixelSize;
92 }
93}
const quint8 OPACITY_TRANSPARENT_U8
const quint8 OPACITY_OPAQUE_U8
const KoColorSpace * colorSpace() const
virtual void setOpacity(quint8 *pixels, quint8 alpha, qint32 nPixels) const =0
virtual quint8 opacityU8(const quint8 *pixel) const =0

References KisFixedPaintDevice::bounds(), KisFixedPaintDevice::colorSpace(), KisCurveOption::computeSizeLikeValue(), KisFixedPaintDevice::data(), KisCurveOption::isChecked(), m_softness, OPACITY_OPAQUE_U8, OPACITY_TRANSPARENT_U8, KoColorSpace::opacityU8(), KisFixedPaintDevice::pixelSize(), and KoColorSpace::setOpacity().

Member Data Documentation

◆ m_alignOutlinePixels

bool KisSharpnessOption::m_alignOutlinePixels
private

Definition at line 33 of file KisSharpnessOption.h.

◆ m_softness

int KisSharpnessOption::m_softness
private

Definition at line 34 of file KisSharpnessOption.h.


The documentation for this class was generated from the following files: