Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLsUtils Namespace Reference

Namespaces

namespace  Private
 

Classes

struct  LodWrapper
 

Functions

void adjustRange (KisPixelSelectionSP selection, const QRect &applyRect, const int range)
 
void applyContourCorrection (KisPixelSelectionSP selection, const QRect &applyRect, const quint8 *lookup_table, bool antiAliased, bool edgeHidden)
 
void applyFinalSelection (const QString &projectionId, KisSelectionSP baseSelection, KisPaintDeviceSP srcDevice, KisMultipleProjection *dst, const QRect &, const QRect &dstRect, const psd_layer_effects_context *, const psd_layer_effects_shadow_base *config, KisResourcesInterfaceSP resourcesInterface, const KisLayerStyleFilterEnvironment *env)
 
void applyGaussianWithTransaction (KisPixelSelectionSP selection, const QRect &applyRect, qreal radius)
 
void applyNoise (KisPixelSelectionSP selection, const QRect &applyRect, int noise, const psd_layer_effects_context *context, KisLayerStyleFilterEnvironment *env)
 
bool checkEffectEnabled (const psd_layer_effects_shadow_base *config, KisMultipleProjection *dst)
 
void fillOverlayDevice (KisPaintDeviceSP fillDevice, const QRect &applyRect, const psd_layer_effects_overlay_base *config, KisResourcesInterfaceSP resourcesInterface, KisLayerStyleFilterEnvironment *env)
 
void fillPattern (KisPaintDeviceSP fillDevice, const QRect &applyRect, KisLayerStyleFilterEnvironment *env, int scale, KoPatternSP pattern, int horizontalPhase, int verticalPhase, bool alignWithLayer)
 
void findEdge (KisPixelSelectionSP selection, const QRect &applyRect, const bool edgeHidden)
 
QRect growRectFromRadius (const QRect &rc, int radius)
 
QRect growSelectionUniform (KisPixelSelectionSP selection, int growSize, const QRect &applyRect)
 
void knockOutSelection (KisPixelSelectionSP selection, KisPixelSelectionSP knockOutSelection, const QRect &srcRect, const QRect &dstRect, const QRect &totalNeedRect, const bool knockOutInverted)
 
void selectionFromAlphaChannel (KisPaintDeviceSP srcDevice, KisSelectionSP dstSelection, const QRect &srcRect)
 

Variables

static const int FULL_PERCENT_RANGE = 100
 
const int noiseNeedBorder = 8
 

Function Documentation

◆ adjustRange()

void KisLsUtils::adjustRange ( KisPixelSelectionSP selection,
const QRect & applyRect,
const int range )

Definition at line 282 of file kis_ls_utils.cpp.

283 {
284 KIS_ASSERT_RECOVER_RETURN(range >= 1 && range <= 100);
285
286 quint8 rangeTable[256];
287 for(int i = 0; i < 256; i ++) {
288 quint8 value = i * 100 / range;
289 rangeTable[i] = qMin(value, quint8(255));
290 }
291
292 KisSequentialIterator dstIt(selection, applyRect);
293
294 while (dstIt.nextPixel()) {
295 quint8 *pixelPtr = dstIt.rawData();
296 *pixelPtr = rangeTable[*pixelPtr];
297 }
298 }
float value(const T *src, size_t ch)
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75

References KIS_ASSERT_RECOVER_RETURN, KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData(), and value().

◆ applyContourCorrection()

void KisLsUtils::applyContourCorrection ( KisPixelSelectionSP selection,
const QRect & applyRect,
const quint8 * lookup_table,
bool antiAliased,
bool edgeHidden )

Definition at line 300 of file kis_ls_utils.cpp.

305 {
306 quint8 contour[PSD_LOOKUP_TABLE_SIZE] = {
307 0x00, 0x0b, 0x16, 0x21, 0x2c, 0x37, 0x42, 0x4d, 0x58, 0x63, 0x6e, 0x79, 0x84, 0x8f, 0x9a, 0xa5,
308 0xb0, 0xbb, 0xc6, 0xd1, 0xdc, 0xf2, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
309 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
310 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
311 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
312 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
313 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
314 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
315 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
316 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
317 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
318 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
319 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
320 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
321 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
322 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
323
324 if (edgeHidden) {
325 if (antiAliased) {
326 for (int i = 0; i < PSD_LOOKUP_TABLE_SIZE; i++) {
327 contour[i] = contour[i] * lookup_table[i] >> 8;
328 }
329 } else {
330 for (int i = 0; i < PSD_LOOKUP_TABLE_SIZE; i++) {
331 contour[i] = contour[i] * lookup_table[(int)((int)(i / 2.55) * 2.55 + 0.5)] >> 8;
332 }
333 }
334 } else {
335 if (antiAliased) {
336 for (int i = 0; i < PSD_LOOKUP_TABLE_SIZE; i++) {
337 contour[i] = lookup_table[i];
338 }
339 } else {
340 for (int i = 0; i < PSD_LOOKUP_TABLE_SIZE; i++) {
341 contour[i] = lookup_table[(int)((int)(i / 2.55) * 2.55 + 0.5)];
342 }
343 }
344 }
345
346 KisSequentialIterator dstIt(selection, applyRect);
347 while (dstIt.nextPixel()) {
348 quint8 *pixelPtr = dstIt.rawData();
349 *pixelPtr = contour[*pixelPtr];
350 }
351 }
#define PSD_LOOKUP_TABLE_SIZE
Definition psd.h:220

References KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), PSD_LOOKUP_TABLE_SIZE, and KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData().

◆ applyFinalSelection()

void KisLsUtils::applyFinalSelection ( const QString & projectionId,
KisSelectionSP baseSelection,
KisPaintDeviceSP srcDevice,
KisMultipleProjection * dst,
const QRect & ,
const QRect & dstRect,
const psd_layer_effects_context * ,
const psd_layer_effects_shadow_base * config,
KisResourcesInterfaceSP resourcesInterface,
const KisLayerStyleFilterEnvironment * env )

Definition at line 538 of file kis_ls_utils.cpp.

548 {
549 const KoColor effectColor(config->color(), srcDevice->colorSpace());
550
551 const QRect effectRect(dstRect);
552 const QString compositeOp = config->blendMode();
553 const quint8 opacityU8 = quint8(qRound(255.0 / 100.0 * config->opacity()));
554 KisPaintDeviceSP dstDevice = dst->getProjection(projectionId, compositeOp, opacityU8, QBitArray(), srcDevice);
555
556 if (config->fillType() == psd_fill_solid_color) {
557 KisFillPainter gc(dstDevice);
558 gc.setCompositeOpId(COMPOSITE_COPY);
559 gc.setSelection(baseSelection);
560 gc.fillSelection(effectRect, effectColor);
561 gc.end();
562
563 } else if (config->fillType() == psd_fill_gradient) {
564 if (!config->gradient(resourcesInterface)) {
565 warnKrita << "KisLsUtils::applyFinalSelection: Gradient object is null! Skipping...";
566 return;
567 }
568
569 QVector<KoColor> table(256);
570 Private::getGradientTable(config->gradient(resourcesInterface).data(), &table, dstDevice->colorSpace());
571
572 Private::applyGradient(dstDevice, baseSelection->pixelSelection(),
573 effectRect, table,
574 true, config->jitter(), env);
575 }
576
577 //dstDevice->convertToQImage(0, QRect(0,0,300,300)).save("6_device_shadow.png");
578 }
const QString COMPOSITE_COPY
KisPaintDeviceSP getProjection(const QString &id, const QString &compositeOpId, quint8 opacity, const QBitArray &channelFlags, KisPaintDeviceSP prototype)
const KoColorSpace * colorSpace() const
qint32 opacity() const
Definition psd.h:281
QString blendMode() const
Definition psd.h:266
KoColor color() const
Definition psd.h:271
qint32 jitter() const
Definition psd.h:356
KoAbstractGradientSP gradient(KisResourcesInterfaceSP resourcesInterface) const
Definition psd.h:365
psd_fill_type fillType() const
Definition psd.h:341
#define warnKrita
Definition kis_debug.h:87
@ psd_fill_solid_color
Definition psd.h:124
@ psd_fill_gradient
Definition psd.h:125
KisPixelSelectionSP pixelSelection

References KisLsUtils::Private::applyGradient(), psd_layer_effects_shadow_base::blendMode(), psd_layer_effects_shadow_base::color(), KisPaintDevice::colorSpace(), COMPOSITE_COPY, KisPainter::end(), KisFillPainter::fillSelection(), psd_layer_effects_shadow_base::fillType(), KisLsUtils::Private::getGradientTable(), KisMultipleProjection::getProjection(), psd_layer_effects_shadow_base::gradient(), psd_layer_effects_shadow_base::jitter(), psd_layer_effects_shadow_base::opacity(), KisSelection::pixelSelection, psd_fill_gradient, psd_fill_solid_color, KisPainter::setCompositeOpId(), KisPainter::setSelection(), and warnKrita.

◆ applyGaussianWithTransaction()

void KisLsUtils::applyGaussianWithTransaction ( KisPixelSelectionSP selection,
const QRect & applyRect,
qreal radius )

Definition at line 102 of file kis_ls_utils.cpp.

105 {
106 KisGaussianKernel::applyGaussian(selection, applyRect,
107 radius, radius,
108 QBitArray(), 0, true,
110 }
static void applyGaussian(KisPaintDeviceSP device, const QRect &rect, qreal xRadius, qreal yRadius, const QBitArray &channelFlags, KoUpdater *updater, bool createTransaction=false, KisConvolutionBorderOp borderOp=BORDER_REPEAT)

References KisGaussianKernel::applyGaussian(), and BORDER_IGNORE.

◆ applyNoise()

void KisLsUtils::applyNoise ( KisPixelSelectionSP selection,
const QRect & applyRect,
int noise,
const psd_layer_effects_context * context,
KisLayerStyleFilterEnvironment * env )

Definition at line 235 of file kis_ls_utils.cpp.

240 {
241 Q_UNUSED(context);
242
243 const QRect overlayRect = kisGrowRect(applyRect, noiseNeedBorder);
244
245 KisPixelSelectionSP randomSelection = env->cachedRandomSelection(overlayRect);
246
247
249 KisPixelSelectionSP randomOverlay = s1.selection()->pixelSelection();
250
251 KisSequentialConstIterator noiseIt(randomSelection, overlayRect);
252 KisSequentialConstIterator srcIt(selection, overlayRect);
253 KisRandomAccessorSP dstIt = randomOverlay->createRandomAccessorNG();
254
255 while (noiseIt.nextPixel() && srcIt.nextPixel()) {
256 int itX = noiseIt.x();
257 int itY = noiseIt.y();
258
259 int x = itX + (*noiseIt.rawDataConst() >> 4) - 8;
260 int y = itY + (*noiseIt.rawDataConst() & 0x0F) - 8;
261 x = (x + itX) >> 1;
262 y = (y + itY) >> 1;
263
264 dstIt->moveTo(x, y);
265
266 quint8 dstAlpha = *dstIt->rawData();
267 quint8 srcAlpha = *srcIt.rawDataConst();
268
269 int value = qMin(255, dstAlpha + srcAlpha);
270
271 *dstIt->rawData() = value;
272 }
273
274 KisPainter gc(selection);
275 gc.setOpacityF(qreal(noise) / 100.0);
276 gc.setCompositeOpId(COMPOSITE_COPY);
277 gc.bitBlt(applyRect.topLeft(), randomOverlay, applyRect);
278 }
QPointF s1
virtual quint8 * rawData()=0
KisRandomAccessorSP createRandomAccessorNG()
virtual void moveTo(qint32 x, qint32 y)=0
T kisGrowRect(const T &rect, U offset)
Definition kis_global.h:186

References KisPainter::bitBlt(), KisLayerStyleFilterEnvironment::cachedRandomSelection, KisLayerStyleFilterEnvironment::cachedSelection(), COMPOSITE_COPY, KisPaintDevice::createRandomAccessorNG(), kisGrowRect(), KisRandomConstAccessorNG::moveTo(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), noiseNeedBorder, KisBaseAccessor::rawData(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawDataConst(), s1, KisPainter::setCompositeOpId(), KisPainter::setOpacityF(), value(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::x(), and KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::y().

◆ checkEffectEnabled()

bool KisLsUtils::checkEffectEnabled ( const psd_layer_effects_shadow_base * config,
KisMultipleProjection * dst )

Definition at line 580 of file kis_ls_utils.cpp.

581 {
582 bool result = config->effectEnabled();
583
584 if (!result) {
585 dst->freeAllProjections();
586 }
587
588 return result;
589 }
bool effectEnabled() const
Definition psd.h:261

References psd_layer_effects_shadow_base::effectEnabled(), and KisMultipleProjection::freeAllProjections().

◆ fillOverlayDevice()

void KisLsUtils::fillOverlayDevice ( KisPaintDeviceSP fillDevice,
const QRect & applyRect,
const psd_layer_effects_overlay_base * config,
KisResourcesInterfaceSP resourcesInterface,
KisLayerStyleFilterEnvironment * env )

Definition at line 405 of file kis_ls_utils.cpp.

410 {
411 if (config->fillType() == psd_fill_solid_color) {
412 KoColor color(config->color(), fillDevice->colorSpace());
413 fillDevice->setDefaultPixel(color);
414
415 } else if (config->fillType() == psd_fill_pattern) {
416 KoPatternSP pattern = config->pattern(resourcesInterface);
417
419
420 if (pattern->hasAlpha()) {
421 pattern = env->cachedFlattenedPattern(pattern);
422 }
423
424 fillPattern(fillDevice, applyRect, env,
425 config->scale(), pattern,
426 config->horizontalPhase(),
427 config->verticalPhase(),
428 config->alignWithLayer());
429 } else if (config->fillType() == psd_fill_gradient) {
430 const QRect boundsRect = config->alignWithLayer() ?
431 env->layerBounds() : env->defaultBounds();
432
433 QPoint center = boundsRect.center();
434 center += QPoint(boundsRect.width() * config->gradientXOffset() / 100,
435 boundsRect.height() * config->gradientYOffset() / 100);
436
437 int width = (boundsRect.width() * config->scale() + 100) / 200;
438 int height = (boundsRect.height() * config->scale() + 100) / 200;
439
440 /* copy paste from libpsd */
441
442 int angle = config->angle();
443 int corner_angle = (int)(atan((qreal)boundsRect.height() / boundsRect.width()) * 180 / M_PI + 0.5);
444 int sign_x = 1;
445 int sign_y = 1;
446
447
448 if(angle < 0) {
449 angle += 360;
450 }
451
452 if (angle >= 90 && angle < 180) {
453 angle = 180 - angle;
454 sign_x = -1;
455 } else if (angle >= 180 && angle < 270) {
456 angle = angle - 180;
457 sign_x = -1;
458 sign_y = -1;
459 } else if (angle >= 270 && angle <= 360) {
460 angle = 360 - angle;
461 sign_y = -1;
462 }
463
464 int radius_x = 0;
465 int radius_y = 0;
466
467 if (angle <= corner_angle) {
468 radius_x = width;
469 radius_y = (int)(radius_x * tan(kisDegreesToRadians(qreal(angle))) + 0.5);
470 } else {
471 radius_y = height;
472 radius_x = (int)(radius_y / tan(kisDegreesToRadians(qreal(angle))) + 0.5);
473 }
474
475 int radius_corner = (int)(std::sqrt((qreal)(radius_x * radius_x + radius_y * radius_y)) + 0.5);
476
477 /* end of copy paste from libpsd */
478
479 KisGradientPainter gc(fillDevice);
480 gc.setGradient(config->gradient(resourcesInterface));
481 QPointF gradStart;
482 QPointF gradEnd;
485
486 QPoint rectangularOffset(sign_x * radius_x, -sign_y * radius_y);
487
488
489 switch(config->style())
490 {
492 gc.setGradientShape(KisGradientPainter::GradientShapeLinear);
494 gradStart = center - rectangularOffset;
495 gradEnd = center + rectangularOffset;
496 break;
497
499 gc.setGradientShape(KisGradientPainter::GradientShapeRadial);
501 gradStart = center;
502 gradEnd = center + QPointF(radius_corner, 0);
503 break;
504
506 gc.setGradientShape(KisGradientPainter::GradientShapeConical);
508 gradStart = center;
509 gradEnd = center + rectangularOffset;
510 break;
511
513 gc.setGradientShape(KisGradientPainter::GradientShapeLinear);
515 gradStart = center - rectangularOffset;
516 gradEnd = center;
517 break;
518
522 gradStart = center - rectangularOffset;
523 gradEnd = center + rectangularOffset;
524 break;
525 default:
526 qFatal("Gradient Overlay: unknown switch case!");
527 break;
528 }
529
530 gc.paintGradient(gradStart, gradEnd,
531 repeat, 0.0,
532 config->reverse(),
533 applyRect,
534 config->dither());
535 }
536 }
void setDefaultPixel(const KoColor &defPixel)
qint32 angle() const
Definition psd.h:286
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
T kisDegreesToRadians(T degrees)
Definition kis_global.h:176
#define M_PI
Definition kis_global.h:111
void fillPattern(KisPaintDeviceSP fillDevice, const QRect &applyRect, KisLayerStyleFilterEnvironment *env, int scale, KoPatternSP pattern, int horizontalPhase, int verticalPhase, bool alignWithLayer)
@ psd_gradient_style_linear
Definition psd.h:102
@ psd_gradient_style_reflected
Definition psd.h:105
@ psd_gradient_style_angle
Definition psd.h:104
@ psd_gradient_style_radial
Definition psd.h:103
@ psd_gradient_style_diamond
Definition psd.h:106
@ psd_fill_pattern
Definition psd.h:126
KoPatternSP pattern(KisResourcesInterfaceSP resourcesInterface) const
Definition psd.h:1061
int gradientXOffset() const
Definition psd.h:1047
int gradientYOffset() const
Definition psd.h:1052
int horizontalPhase() const
Definition psd.h:1067
bool alignWithLayer() const
Definition psd.h:1027
psd_gradient_style style() const
Definition psd.h:1042

References psd_layer_effects_overlay_base::alignWithLayer(), psd_layer_effects_shadow_base::angle(), KisLayerStyleFilterEnvironment::cachedFlattenedPattern, psd_layer_effects_shadow_base::color(), KisPaintDevice::colorSpace(), KisLayerStyleFilterEnvironment::defaultBounds(), psd_layer_effects_overlay_base::dither(), fillPattern(), psd_layer_effects_shadow_base::fillType(), psd_layer_effects_shadow_base::gradient(), KisGradientPainter::GradientRepeatAlternate, KisGradientPainter::GradientRepeatNone, KisGradientPainter::GradientShapeBiLinear, KisGradientPainter::GradientShapeConical, KisGradientPainter::GradientShapeLinear, KisGradientPainter::GradientShapeRadial, psd_layer_effects_overlay_base::gradientXOffset(), psd_layer_effects_overlay_base::gradientYOffset(), psd_layer_effects_overlay_base::horizontalPhase(), KIS_SAFE_ASSERT_RECOVER_RETURN, kisDegreesToRadians(), KisLayerStyleFilterEnvironment::layerBounds(), M_PI, KisGradientPainter::paintGradient(), psd_layer_effects_overlay_base::pattern(), psd_fill_gradient, psd_fill_pattern, psd_fill_solid_color, psd_gradient_style_angle, psd_gradient_style_diamond, psd_gradient_style_linear, psd_gradient_style_radial, psd_gradient_style_reflected, psd_layer_effects_overlay_base::reverse(), psd_layer_effects_overlay_base::scale(), KisPaintDevice::setDefaultPixel(), KisPainter::setGradient(), KisGradientPainter::setGradientShape(), psd_layer_effects_overlay_base::style(), and psd_layer_effects_overlay_base::verticalPhase().

◆ fillPattern()

void KisLsUtils::fillPattern ( KisPaintDeviceSP fillDevice,
const QRect & applyRect,
KisLayerStyleFilterEnvironment * env,
int scale,
KoPatternSP pattern,
int horizontalPhase,
int verticalPhase,
bool alignWithLayer )

Definition at line 370 of file kis_ls_utils.cpp.

378 {
380
381 QSize psize(pattern->width(), pattern->height());
382
383 QPoint patternOffset(qreal(psize.width()) * horizontalPhase / 100,
384 qreal(psize.height()) * verticalPhase / 100);
385
386 const QRect boundsRect = alignWithLayer ?
387 env->layerBounds() : env->defaultBounds();
388
389 patternOffset -= boundsRect.topLeft();
390
391 patternOffset.rx() %= psize.width();
392 patternOffset.ry() %= psize.height();
393
394 QRect fillRect = applyRect | applyRect.translated(patternOffset);
395
396 KisFillPainter gc(fillDevice);
397 QTransform transform;
398 transform.translate(-patternOffset.x(), -patternOffset.y());
399 qreal scaleNorm = qreal(scale*0.01);
400 transform.scale(scaleNorm, scaleNorm);
401 gc.fillRectNoCompose(fillRect, pattern, transform);
402 gc.end();
403 }

References KisLayerStyleFilterEnvironment::defaultBounds(), KisPainter::end(), KisFillPainter::fillRectNoCompose(), KIS_SAFE_ASSERT_RECOVER_RETURN, and KisLayerStyleFilterEnvironment::layerBounds().

◆ findEdge()

void KisLsUtils::findEdge ( KisPixelSelectionSP selection,
const QRect & applyRect,
const bool edgeHidden )

Definition at line 74 of file kis_ls_utils.cpp.

75 {
76 KisSequentialIterator dstIt(selection, applyRect);
77
78 if (edgeHidden) {
79 while(dstIt.nextPixel()) {
80 quint8 *pixelPtr = dstIt.rawData();
81
82 *pixelPtr =
83 (*pixelPtr < 24) ?
84 *pixelPtr * 10 : 0xFF;
85
86 }
87 } else {
88 while(dstIt.nextPixel()) {
89 quint8 *pixelPtr = dstIt.rawData();
90 *pixelPtr = 0xFF;
91
92 }
93 }
94 }

References KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), and KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData().

◆ growRectFromRadius()

QRect KisLsUtils::growRectFromRadius ( const QRect & rc,
int radius )

Definition at line 96 of file kis_ls_utils.cpp.

97 {
98 int halfSize = KisGaussianKernel::kernelSizeFromRadius(radius) / 2;
99 return rc.adjusted(-halfSize, -halfSize, halfSize, halfSize);
100 }
static int kernelSizeFromRadius(qreal radius)

References KisGaussianKernel::kernelSizeFromRadius().

◆ growSelectionUniform()

QRect KisLsUtils::growSelectionUniform ( KisPixelSelectionSP selection,
int growSize,
const QRect & applyRect )

Definition at line 37 of file kis_ls_utils.cpp.

38 {
39 QRect changeRect = applyRect;
40
41 if (growSize > 0) {
42 KisGrowSelectionFilter filter(growSize, growSize);
43 changeRect = filter.changeRect(applyRect, selection->defaultBounds());
44 filter.process(selection, applyRect);
45 } else if (growSize < 0) {
46 KisShrinkSelectionFilter filter(qAbs(growSize), qAbs(growSize), false);
47 changeRect = filter.changeRect(applyRect, selection->defaultBounds());
48 filter.process(selection, applyRect);
49 }
50
51 return changeRect;
52 }
KisDefaultBoundsBaseSP defaultBounds() const

References KisGrowSelectionFilter::changeRect(), KisShrinkSelectionFilter::changeRect(), KisPaintDevice::defaultBounds(), KisGrowSelectionFilter::process(), and KisShrinkSelectionFilter::process().

◆ knockOutSelection()

void KisLsUtils::knockOutSelection ( KisPixelSelectionSP selection,
KisPixelSelectionSP knockOutSelection,
const QRect & srcRect,
const QRect & dstRect,
const QRect & totalNeedRect,
const bool knockOutInverted )

Definition at line 353 of file kis_ls_utils.cpp.

359 {
360 KIS_ASSERT_RECOVER_RETURN(knockOutSelection);
361
362 QRect knockOutRect = !knockOutInverted ? srcRect : totalNeedRect;
363 knockOutRect &= dstRect;
364
365 KisPainter gc(selection);
366 gc.setCompositeOpId(COMPOSITE_ERASE);
367 gc.bitBlt(knockOutRect.topLeft(), knockOutSelection, knockOutRect);
368 }
const QString COMPOSITE_ERASE

References KisPainter::bitBlt(), COMPOSITE_ERASE, KIS_ASSERT_RECOVER_RETURN, knockOutSelection(), and KisPainter::setCompositeOpId().

◆ selectionFromAlphaChannel()

KRITAIMAGE_EXPORT void KisLsUtils::selectionFromAlphaChannel ( KisPaintDeviceSP srcDevice,
KisSelectionSP dstSelection,
const QRect & srcRect )

Definition at line 54 of file kis_ls_utils.cpp.

57 {
58 const KoColorSpace *cs = srcDevice->colorSpace();
59
60
61 KisPixelSelectionSP selection = dstSelection->pixelSelection();
62
63 KisSequentialConstIterator srcIt(srcDevice, srcRect);
64 KisSequentialIterator dstIt(selection, srcRect);
65
66 while (srcIt.nextPixel() && dstIt.nextPixel()) {
67 quint8 *dstPtr = dstIt.rawData();
68 const quint8* srcPtr = srcIt.rawDataConst();
69 *dstPtr = cs->opacityU8(srcPtr);
70 }
71
72 }
virtual quint8 opacityU8(const quint8 *pixel) const =0

References KisPaintDevice::colorSpace(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), KoColorSpace::opacityU8(), KisSelection::pixelSelection, KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData(), and KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawDataConst().

Variable Documentation

◆ FULL_PERCENT_RANGE

const int KisLsUtils::FULL_PERCENT_RANGE = 100
static

Definition at line 40 of file kis_ls_utils.h.

◆ noiseNeedBorder

const int KisLsUtils::noiseNeedBorder = 8

Definition at line 233 of file kis_ls_utils.cpp.