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

#include <kis_texture_option.h>

Public Member Functions

void apply (KisFixedPaintDeviceSP dab, const QPoint &offset, const KisPaintInformation &info)
 apply combine the texture map with the dab
 
bool applyingGradient () const
 
 KisTextureOption (const KisPropertiesConfiguration *setting, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface, int levelOfDetail, KisBrushTextureFlags flags=None)
 

Static Public Member Functions

static bool applyingGradient (const KisPropertiesConfiguration *settings)
 
static QList< KoResourceLoadResultprepareEmbeddedResources (const KisPropertiesConfigurationSP setting, KisResourcesInterfaceSP resourcesInterface)
 
static QList< KoResourceLoadResultprepareLinkedResources (const KisPropertiesConfigurationSP setting, KisResourcesInterfaceSP resourcesInterface)
 
static bool requiresEffectiveCompositeOp (const KisPropertiesConfiguration *settings)
 

Public Attributes

bool m_enabled {false}
 

Private Member Functions

void applyGradient (KisFixedPaintDeviceSP dab, const QPoint &offset, const KisPaintInformation &info)
 
void applyLightness (KisFixedPaintDeviceSP dab, const QPoint &offset, const KisPaintInformation &info)
 
void fillProperties (const KisPropertiesConfiguration *setting, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
 

Private Attributes

KoCachedGradient m_cachedGradient
 
KisCachedPaintDevice m_cachedPaintDevice
 
KisBrushTextureFlags m_flags
 
KoAbstractGradientSP m_gradient
 
int m_levelOfDetail {0}
 
KisTextureMaskInfoSP m_maskInfo
 
int m_offsetX {0}
 
int m_offsetY {0}
 
KisStrengthOption m_strengthOption
 
KisTextureOptionData::TexturingMode m_texturingMode {KisTextureOptionData::MULTIPLY}
 
bool m_useSoftTexturing {false}
 

Detailed Description

Definition at line 31 of file kis_texture_option.h.

Constructor & Destructor Documentation

◆ KisTextureOption()

KisTextureOption::KisTextureOption ( const KisPropertiesConfiguration * setting,
KisResourcesInterfaceSP resourcesInterface,
KoCanvasResourcesInterfaceSP canvasResourcesInterface,
int levelOfDetail,
KisBrushTextureFlags flags = None )

Definition at line 43 of file kis_texture_option.cpp.

48 : m_gradient(0)
49 , m_levelOfDetail(levelOfDetail)
50 , m_strengthOption(setting)
51 , m_flags(flags)
52{
53 fillProperties(setting, resourcesInterface, canvasResourcesInterface);
54}
void fillProperties(const KisPropertiesConfiguration *setting, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
KisBrushTextureFlags m_flags
KisStrengthOption m_strengthOption
KoAbstractGradientSP m_gradient

References fillProperties().

Member Function Documentation

◆ apply()

void KisTextureOption::apply ( KisFixedPaintDeviceSP dab,
const QPoint & offset,
const KisPaintInformation & info )

apply combine the texture map with the dab

Parameters
dabthe colored, final representation of the dab, after mirroring and everything.
offsetthe position of the dab on the image. used to calculate the position of the mask pattern
infothe paint information

Definition at line 261 of file kis_texture_option.cpp.

262{
263 if (!m_enabled) return;
264 if (!m_maskInfo->isValid()) return;
265
267 applyLightness(dab, offset, info);
268 return;
269 }
271 applyGradient(dab, offset, info);
272 return;
273 }
274
275 QRect rect = dab->bounds();
276 KisPaintDeviceSP mask = m_maskInfo->mask();
277 const QRect maskBounds = m_maskInfo->maskBounds();
278
280 KisPaintDeviceSP maskPatch = g.device();
281
282 int x = offset.x() % maskBounds.width() - m_offsetX;
283 int y = offset.y() % maskBounds.height() - m_offsetY;
284
285 const QRect maskPatchRect = QRect(x, y, rect.width(), rect.height());
286
287 KisFillPainter fillPainter(maskPatch);
288 fillPainter.setCompositeOpId(COMPOSITE_COPY);
289 fillPainter.fillRect(kisGrowRect(maskPatchRect, 1), mask, maskBounds);
290 fillPainter.end();
291
292 // Compute final strength
293 qreal strength = m_strengthOption.apply(info);
294
295 // Select mask compositing op
297 int alphaChannelOffset = -1;
298
299 const QList<KoChannelInfo *> channels = dab->colorSpace()->channels();
300 for (quint32 i = 0; i < dab->pixelSize(); i++) {
301 if (channels[i]->channelType() == KoChannelInfo::ALPHA) {
302 // TODO: check correctness for 16bits!
303 alphaChannelOffset = channels[i]->pos()/* * channels[i]->size()*/;
304 alphaChannelType = channels[i]->channelValueType();
305 break;
306 }
307 }
308
309 KIS_SAFE_ASSERT_RECOVER (alphaChannelOffset >= 0) {
310 alphaChannelOffset = 0;
311 }
312
313 QScopedPointer<KisMaskingBrushCompositeOpBase> compositeOp;
314 QString compositeOpId;
315
316 switch (m_texturingMode) {
317 case KisTextureOptionData::MULTIPLY: compositeOpId = COMPOSITE_MULT; break;
318 case KisTextureOptionData::SUBTRACT: compositeOpId = COMPOSITE_SUBTRACT; break;
319 case KisTextureOptionData::DARKEN: compositeOpId = COMPOSITE_DARKEN; break;
320 case KisTextureOptionData::OVERLAY: compositeOpId = COMPOSITE_OVERLAY; break;
321 case KisTextureOptionData::COLOR_DODGE: compositeOpId = COMPOSITE_DODGE; break;
322 case KisTextureOptionData::COLOR_BURN: compositeOpId = COMPOSITE_BURN; break;
324 case KisTextureOptionData::LINEAR_BURN: compositeOpId = COMPOSITE_LINEAR_BURN; break;
327 case KisTextureOptionData::HEIGHT: compositeOpId = "height"; break;
328 case KisTextureOptionData::LINEAR_HEIGHT: compositeOpId = "linear_height"; break;
329 case KisTextureOptionData::HEIGHT_PHOTOSHOP: compositeOpId = "height_photoshop"; break;
330 case KisTextureOptionData::LINEAR_HEIGHT_PHOTOSHOP: compositeOpId = "linear_height_photoshop"; break;
331 default: return;
332 }
334 compositeOpId, alphaChannelType, dab->pixelSize(),
335 alphaChannelOffset, strength, m_useSoftTexturing));
336
337 // Apply the mask to the dab
338 {
339 quint8 *dabIt = nullptr;
340 KisRandomConstAccessorSP maskPatchIt = maskPatch->createRandomConstAccessorNG();
341
342 qint32 dabY = dab->bounds().y();
343 qint32 maskPatchY = maskPatchRect.y();
344 qint32 rowsRemaining = dab->bounds().height();
345 const qint32 dabRowStride = dab->bounds().width() * dab->pixelSize();
346
347 while (rowsRemaining > 0) {
348 qint32 dabX = dab->bounds().x();
349 qint32 maskPatchX = maskPatchRect.x();
350 const qint32 numContiguousMaskPatchRows = maskPatchIt->numContiguousRows(maskPatchY);
351 const qint32 rows = std::min(rowsRemaining, numContiguousMaskPatchRows);
352 qint32 columnsRemaining = dab->bounds().width();
353
354 while (columnsRemaining > 0) {
355 const qint32 numContiguousMaskPatchColumns = maskPatchIt->numContiguousColumns(maskPatchX);
356 const qint32 columns = std::min(columnsRemaining, numContiguousMaskPatchColumns);
357
358 const qint32 maskPatchRowStride = maskPatchIt->rowStride(maskPatchX, maskPatchY);
359
360 dabIt = dab->data() + (dabY * dab->bounds().width() + dabX) * dab->pixelSize();
361 maskPatchIt->moveTo(maskPatchX, maskPatchY);
362
363 compositeOp->composite(maskPatchIt->rawDataConst(), maskPatchRowStride,
364 dabIt, dabRowStride,
365 columns, rows);
366
367 dabX += columns;
368 maskPatchX += columns;
369 columnsRemaining -= columns;
370
371 }
372
373 dabY += rows;
374 maskPatchY += rows;
375 rowsRemaining -= rows;
376 }
377 }
378}
const QString COMPOSITE_COPY
const QString COMPOSITE_DARKEN
const QString COMPOSITE_OVERLAY
const QString COMPOSITE_DODGE
const QString COMPOSITE_LINEAR_BURN
const QString COMPOSITE_MULT
const QString COMPOSITE_SUBTRACT
const QString COMPOSITE_BURN
const QString COMPOSITE_LINEAR_DODGE
const QString COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP
const QString COMPOSITE_HARD_MIX_PHOTOSHOP
virtual const quint8 * rawDataConst() const =0
const KoColorSpace * colorSpace() const
static KisMaskingBrushCompositeOpBase * createForAlphaSrc(const QString &id, KoChannelInfo::enumChannelValueType channelType, int pixelSize, int alphaOffset)
KisRandomConstAccessorSP createRandomConstAccessorNG() const
virtual qint32 rowStride(qint32 x, qint32 y) const =0
virtual qint32 numContiguousRows(qint32 y) const =0
virtual void moveTo(qint32 x, qint32 y)=0
virtual qint32 numContiguousColumns(qint32 x) const =0
qreal apply(const KisPaintInformation &info) const
KisTextureMaskInfoSP m_maskInfo
KisCachedPaintDevice m_cachedPaintDevice
void applyGradient(KisFixedPaintDeviceSP dab, const QPoint &offset, const KisPaintInformation &info)
void applyLightness(KisFixedPaintDeviceSP dab, const QPoint &offset, const KisPaintInformation &info)
KisTextureOptionData::TexturingMode m_texturingMode
@ ALPHA
The channel represents the opacity of a pixel.
enumChannelValueType
enum to define the value of the channel
@ UINT8
use this for an unsigned integer 8bits channel
QList< KoChannelInfo * > channels
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
T kisGrowRect(const T &rect, U offset)
Definition kis_global.h:186
static KoColorSpaceRegistry * instance()

References KoChannelInfo::ALPHA, KisStandardOption< Data >::apply(), applyGradient(), applyLightness(), KisFixedPaintDevice::bounds(), KoColorSpace::channels, KisTextureOptionData::COLOR_BURN, KisTextureOptionData::COLOR_DODGE, KisFixedPaintDevice::colorSpace(), COMPOSITE_BURN, COMPOSITE_COPY, COMPOSITE_DARKEN, COMPOSITE_DODGE, COMPOSITE_HARD_MIX_PHOTOSHOP, COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP, COMPOSITE_LINEAR_BURN, COMPOSITE_LINEAR_DODGE, COMPOSITE_MULT, COMPOSITE_OVERLAY, COMPOSITE_SUBTRACT, KisMaskingBrushCompositeOpFactory::createForAlphaSrc(), KisPaintDevice::createRandomConstAccessorNG(), KisTextureOptionData::DARKEN, KisFixedPaintDevice::data(), KisCachedPaintDevice::Guard::device(), KisPainter::end(), KisFillPainter::fillRect(), KisTextureOptionData::GRADIENT, KisTextureOptionData::HARD_MIX_PHOTOSHOP, KisTextureOptionData::HARD_MIX_SOFTER_PHOTOSHOP, KisTextureOptionData::HEIGHT, KisTextureOptionData::HEIGHT_PHOTOSHOP, KoColorSpaceRegistry::instance(), KIS_SAFE_ASSERT_RECOVER, kisGrowRect(), KisTextureOptionData::LIGHTNESS, KisTextureOptionData::LINEAR_BURN, KisTextureOptionData::LINEAR_DODGE, KisTextureOptionData::LINEAR_HEIGHT, KisTextureOptionData::LINEAR_HEIGHT_PHOTOSHOP, m_cachedPaintDevice, m_enabled, m_gradient, m_maskInfo, m_offsetX, m_offsetY, m_strengthOption, m_texturingMode, m_useSoftTexturing, KisRandomConstAccessorNG::moveTo(), KisTextureOptionData::MULTIPLY, KisRandomConstAccessorNG::numContiguousColumns(), KisRandomConstAccessorNG::numContiguousRows(), KisTextureOptionData::OVERLAY, KisFixedPaintDevice::pixelSize(), KisBaseConstAccessor::rawDataConst(), KisRandomConstAccessorNG::rowStride(), KisPainter::setCompositeOpId(), KisTextureOptionData::SUBTRACT, and KoChannelInfo::UINT8.

◆ applyGradient()

void KisTextureOption::applyGradient ( KisFixedPaintDeviceSP dab,
const QPoint & offset,
const KisPaintInformation & info )
private

Definition at line 205 of file kis_texture_option.cpp.

205 {
206 if (!m_enabled) return;
207 if (!m_maskInfo->isValid()) return;
208
210
211 KisPaintDeviceSP mask = m_maskInfo->mask();
212 const QRect maskBounds = m_maskInfo->maskBounds();
213 QRect rect = dab->bounds();
214
216 KisPaintDeviceSP fillDevice = g.device();
217
218 int x = offset.x() % maskBounds.width() - m_offsetX;
219 int y = offset.y() % maskBounds.height() - m_offsetY;
220
221 const QRect maskPatchRect = QRect(x, y, rect.width(), rect.height());
222
223 KisFillPainter fillPainter(fillDevice);
224 fillPainter.setCompositeOpId(COMPOSITE_COPY);
225 fillPainter.fillRect(kisGrowRect(maskPatchRect, 1), mask, maskBounds);
226 fillPainter.end();
227
228 qreal pressure = m_strengthOption.apply(info);
229 quint8* dabData = dab->data();
230
231 //for gradient textures...
232 KoMixColorsOp* colorMix = dab->colorSpace()->mixColorsOp();
233 qint16 colorWeights[2];
234 colorWeights[0] = qRound(pressure * 255);
235 colorWeights[1] = 255 - colorWeights[0];
236 quint8* colors[2];
237 m_cachedGradient.setColorSpace(dab->colorSpace()); //Change colorspace here so we don't have to convert each pixel drawn
238
239 KisHLineIteratorSP iter = fillDevice->createHLineIteratorNG(x, y, rect.width());
240 for (int row = 0; row < rect.height(); ++row) {
241 for (int col = 0; col < rect.width(); ++col) {
242
243 const QRgb* maskQRgb = reinterpret_cast<const QRgb*>(iter->oldRawData());
244 qreal gradientvalue = qreal(qGray(*maskQRgb))/255.0;//qreal(*iter->oldRawData()) / 255.0;
245 KoColor paintcolor;
246 paintcolor.setColor(m_cachedGradient.cachedAt(gradientvalue), dab->colorSpace());
247 qreal paintOpacity = paintcolor.opacityF() * (qreal(qAlpha(*maskQRgb)) / 255.0);
248 paintcolor.setOpacity(qMin(paintOpacity, dab->colorSpace()->opacityF(dabData)));
249 colors[0] = paintcolor.data();
250 KoColor dabColor(dabData, dab->colorSpace());
251 colors[1] = dabColor.data();
252 colorMix->mixColors(colors, colorWeights, 2, dabData);
253
254 iter->nextPixel();
255 dabData += dab->pixelSize();
256 }
257 iter->nextRow();
258 }
259}
KisHLineIteratorSP createHLineIteratorNG(qint32 x, qint32 y, qint32 w)
KoCachedGradient m_cachedGradient
void setColorSpace(const KoColorSpace *colorSpace)
const quint8 * cachedAt(qreal t) const
gets the color data at position 0 <= t <= 1
virtual qreal opacityF(const quint8 *pixel) const =0
KoMixColorsOp * mixColorsOp
qreal opacityF() const
Definition KoColor.cpp:345
void setColor(const quint8 *data, const KoColorSpace *colorSpace=0)
Definition KoColor.cpp:186
void setOpacity(quint8 alpha)
Definition KoColor.cpp:333
quint8 * data()
Definition KoColor.h:144
virtual void mixColors(const quint8 *const *colors, const qint16 *weights, int nColors, quint8 *dst, int weightSum=255) const =0
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
unsigned int QRgb

References KisStandardOption< Data >::apply(), KisFixedPaintDevice::bounds(), KoCachedGradient::cachedAt(), KisFixedPaintDevice::colorSpace(), COMPOSITE_COPY, KisPaintDevice::createHLineIteratorNG(), KisFixedPaintDevice::data(), KoColor::data(), KisCachedPaintDevice::Guard::device(), KisPainter::end(), KisFillPainter::fillRect(), KoColorSpaceRegistry::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, kisGrowRect(), m_cachedGradient, m_cachedPaintDevice, m_enabled, m_gradient, m_maskInfo, m_offsetX, m_offsetY, m_strengthOption, KoMixColorsOp::mixColors(), KoColorSpace::mixColorsOp, KoColor::opacityF(), KoColorSpace::opacityF(), KisFixedPaintDevice::pixelSize(), KoColor::setColor(), KoCachedGradient::setColorSpace(), KisPainter::setCompositeOpId(), and KoColor::setOpacity().

◆ applyingGradient() [1/2]

bool KisTextureOption::applyingGradient ( ) const

Definition at line 150 of file kis_texture_option.cpp.

References KisTextureOptionData::GRADIENT, and m_texturingMode.

◆ applyingGradient() [2/2]

bool KisTextureOption::applyingGradient ( const KisPropertiesConfiguration * settings)
static

Definition at line 155 of file kis_texture_option.cpp.

156{
158 data.read(settings);
159
161}
bool read(const KisPropertiesConfiguration *setting)

References KisTextureOptionData::GRADIENT, KisTextureOptionData::read(), and KisTextureOptionData::texturingMode.

◆ applyLightness()

void KisTextureOption::applyLightness ( KisFixedPaintDeviceSP dab,
const QPoint & offset,
const KisPaintInformation & info )
private

Definition at line 172 of file kis_texture_option.cpp.

172 {
173 if (!m_enabled) return;
174 if (!m_maskInfo->isValid()) return;
175
176 KisPaintDeviceSP mask = m_maskInfo->mask();
177
178 const QRect rect = dab->bounds();
179 const QRect maskBounds = m_maskInfo->maskBounds();
180
182 KisPaintDeviceSP fillMaskDevice = g.device();
183
184 int x = offset.x() % maskBounds.width() - m_offsetX;
185 int y = offset.y() % maskBounds.height() - m_offsetY;
186
187 const QRect maskPatchRect = QRect(x, y, rect.width(), rect.height());
188
189 KisFillPainter fillMaskPainter(fillMaskDevice);
190 fillMaskPainter.setCompositeOpId(COMPOSITE_COPY);
191 fillMaskPainter.fillRect(kisGrowRect(maskPatchRect, 1), mask, maskBounds);
192 fillMaskPainter.end();
193
194 qreal pressure = m_strengthOption.apply(info);
195 quint8* dabData = dab->data();
196
197 KisSequentialConstIterator it(fillMaskDevice, QRect(x, y, rect.width(), rect.height()));
198 while (it.nextPixel()) {
199 const QRgb *maskQRgb = reinterpret_cast<const QRgb*>(it.oldRawData());
200 dab->colorSpace()->fillGrayBrushWithColorAndLightnessWithStrength(dabData, maskQRgb, dabData, pressure, 1);
201 dabData += dab->pixelSize();
202 }
203}
virtual void fillGrayBrushWithColorAndLightnessWithStrength(quint8 *dst, const QRgb *brush, quint8 *brushColor, qreal strength, qint32 nPixels) const

References KisStandardOption< Data >::apply(), KisFixedPaintDevice::bounds(), KisFixedPaintDevice::colorSpace(), COMPOSITE_COPY, KisFixedPaintDevice::data(), KisCachedPaintDevice::Guard::device(), KisPainter::end(), KoColorSpace::fillGrayBrushWithColorAndLightnessWithStrength(), KisFillPainter::fillRect(), KoColorSpaceRegistry::instance(), kisGrowRect(), m_cachedPaintDevice, m_enabled, m_maskInfo, m_offsetX, m_offsetY, m_strengthOption, KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::oldRawData(), KisFixedPaintDevice::pixelSize(), and KisPainter::setCompositeOpId().

◆ fillProperties()

void KisTextureOption::fillProperties ( const KisPropertiesConfiguration * setting,
KisResourcesInterfaceSP resourcesInterface,
KoCanvasResourcesInterfaceSP canvasResourcesInterface )
private

Definition at line 56 of file kis_texture_option.cpp.

57{
59 data.read(setting);
60
61 if (data.textureData.isNull()) {
62 m_enabled = false;
63 return;
64 }
65
68
71 }
72
75 }
76
78
79 QString effectiveCompositeOp = COMPOSITE_OVER;
80 bool additionalInvert = false;
81
82 if (canvasResourcesInterface && data.autoInvertOnErase) {
83 effectiveCompositeOp = canvasResourcesInterface->resource(KoCanvasResource::CurrentEffectiveCompositeOp).toString();
84 KIS_SAFE_ASSERT_RECOVER (!effectiveCompositeOp.isEmpty()) {
85 effectiveCompositeOp = COMPOSITE_OVER;
86 }
87 additionalInvert = effectiveCompositeOp == COMPOSITE_ERASE;
88 }
89
91 if (!m_maskInfo->fillProperties(setting, resourcesInterface, additionalInvert)) {
92 warnKrita << "WARNING: Couldn't load the pattern for a stroke (KisTextureProperties)";
93 m_enabled = false;
94 return;
95 }
96
98
99 m_enabled = data.isEnabled;
100 m_offsetX = data.offsetX;
101 m_offsetY = data.offsetY;
102
103 if (m_texturingMode == KisTextureOptionData::GRADIENT && canvasResourcesInterface) {
104 KoAbstractGradientSP gradient = canvasResourcesInterface->resource(KoCanvasResource::CurrentGradient).value<KoAbstractGradientSP>()->cloneAndBakeVariableColors(canvasResourcesInterface);
105 if (gradient) {
106 m_gradient = gradient;
107 m_cachedGradient.setGradient(gradient, 256);
108 }
109 }
110}
@ SupportsGradientMode
@ SupportsLightnessMode
const QString COMPOSITE_OVER
const QString COMPOSITE_ERASE
void setGradient(const KoAbstractGradientSP gradient, qint32 steps, const KoColorSpace *cs)
#define warnKrita
Definition kis_debug.h:87
QSharedPointer< T > toQShared(T *ptr)
KisTextureMaskInfoSP fetchCachedTextureInfo(KisTextureMaskInfoSP info)
static KisTextureMaskInfoCache * instance()
KisEmbeddedTextureData textureData

References KisTextureOptionData::autoInvertOnErase, COMPOSITE_ERASE, COMPOSITE_OVER, KoCanvasResource::CurrentEffectiveCompositeOp, KoCanvasResource::CurrentGradient, KisTextureMaskInfoCache::fetchCachedTextureInfo(), KisTextureOptionData::GRADIENT, KisTextureMaskInfoCache::instance(), KisTextureOptionData::isEnabled, KisEmbeddedTextureData::isNull(), KIS_SAFE_ASSERT_RECOVER, KisTextureOptionData::LIGHTNESS, m_cachedGradient, m_enabled, m_flags, m_gradient, m_levelOfDetail, m_maskInfo, m_offsetX, m_offsetY, m_texturingMode, m_useSoftTexturing, KisTextureOptionData::offsetX, KisTextureOptionData::offsetY, KisTextureOptionData::read(), KoCachedGradient::setGradient(), KisTextureOptionData::SUBTRACT, SupportsGradientMode, SupportsLightnessMode, KisTextureOptionData::textureData, KisTextureOptionData::texturingMode, toQShared(), KisTextureOptionData::useSoftTexturing, and warnKrita.

◆ prepareEmbeddedResources()

QList< KoResourceLoadResult > KisTextureOption::prepareEmbeddedResources ( const KisPropertiesConfigurationSP setting,
KisResourcesInterfaceSP resourcesInterface )
static

We cannot use m_enabled here because it is not initialized at this stage. fillProperties() is not necessary for this call, because it is extremely slow.

Definition at line 112 of file kis_texture_option.cpp.

113{
120
122 data.read(setting.data());
123
124 if (data.isEnabled && !data.textureData.patternBase64.isEmpty()) {
125 patterns << data.textureData.loadLinkedPattern(resourcesInterface);
126 }
127
128 return patterns;
129}
KoResourceLoadResult loadLinkedPattern(KisResourcesInterfaceSP resourcesInterface) const

References KisSharedPtr< T >::data(), KisTextureOptionData::isEnabled, KisEmbeddedTextureData::loadLinkedPattern(), KisEmbeddedTextureData::patternBase64, KisTextureOptionData::read(), and KisTextureOptionData::textureData.

◆ prepareLinkedResources()

QList< KoResourceLoadResult > KisTextureOption::prepareLinkedResources ( const KisPropertiesConfigurationSP setting,
KisResourcesInterfaceSP resourcesInterface )
static

We cannot use m_enabled here because it is not initialized at this stage. fillProperties() is not necessary for this call, because it is extremely slow.

Definition at line 131 of file kis_texture_option.cpp.

132{
139
141 data.read(setting.data());
142
143 if (data.isEnabled && data.textureData.patternBase64.isEmpty()) {
144 patterns << data.textureData.loadLinkedPattern(resourcesInterface);
145 }
146
147 return patterns;
148}

References KisSharedPtr< T >::data(), KisTextureOptionData::isEnabled, KisEmbeddedTextureData::loadLinkedPattern(), KisEmbeddedTextureData::patternBase64, KisTextureOptionData::read(), and KisTextureOptionData::textureData.

◆ requiresEffectiveCompositeOp()

bool KisTextureOption::requiresEffectiveCompositeOp ( const KisPropertiesConfiguration * settings)
static

Definition at line 163 of file kis_texture_option.cpp.

164{
166 data.read(settings);
167
168 return data.isEnabled && data.autoInvertOnErase;
169}

References KisTextureOptionData::autoInvertOnErase, KisTextureOptionData::isEnabled, and KisTextureOptionData::read().

Member Data Documentation

◆ m_cachedGradient

KoCachedGradient KisTextureOption::m_cachedGradient
private

Definition at line 66 of file kis_texture_option.h.

◆ m_cachedPaintDevice

KisCachedPaintDevice KisTextureOption::m_cachedPaintDevice
private

Definition at line 74 of file kis_texture_option.h.

◆ m_enabled

bool KisTextureOption::m_enabled {false}

Definition at line 39 of file kis_texture_option.h.

39{false};

◆ m_flags

KisBrushTextureFlags KisTextureOption::m_flags
private

Definition at line 73 of file kis_texture_option.h.

◆ m_gradient

KoAbstractGradientSP KisTextureOption::m_gradient
private

Definition at line 65 of file kis_texture_option.h.

◆ m_levelOfDetail

int KisTextureOption::m_levelOfDetail {0}
private

Definition at line 68 of file kis_texture_option.h.

68{0};

◆ m_maskInfo

KisTextureMaskInfoSP KisTextureOption::m_maskInfo
private

Definition at line 72 of file kis_texture_option.h.

◆ m_offsetX

int KisTextureOption::m_offsetX {0}
private

Definition at line 61 of file kis_texture_option.h.

61{0};

◆ m_offsetY

int KisTextureOption::m_offsetY {0}
private

Definition at line 62 of file kis_texture_option.h.

62{0};

◆ m_strengthOption

KisStrengthOption KisTextureOption::m_strengthOption
private

Definition at line 71 of file kis_texture_option.h.

◆ m_texturingMode

KisTextureOptionData::TexturingMode KisTextureOption::m_texturingMode {KisTextureOptionData::MULTIPLY}
private

Definition at line 63 of file kis_texture_option.h.

◆ m_useSoftTexturing

bool KisTextureOption::m_useSoftTexturing {false}
private

Definition at line 64 of file kis_texture_option.h.

64{false};

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