Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_ls_bevel_emboss_filter.cpp File Reference
#include "kis_ls_bevel_emboss_filter.h"
#include <cstdlib>
#include <QBitArray>
#include <KoUpdater.h>
#include <resources/KoPattern.h>
#include <resources/KoAbstractGradient.h>
#include "psd.h"
#include "kis_convolution_kernel.h"
#include "kis_convolution_painter.h"
#include "kis_gaussian_kernel.h"
#include "kis_pixel_selection.h"
#include "kis_fill_painter.h"
#include "kis_gradient_painter.h"
#include "kis_iterator_ng.h"
#include "kis_random_accessor_ng.h"
#include "kis_psd_layer_style.h"
#include "kis_layer_style_filter_environment.h"
#include "kis_ls_utils.h"
#include "gimp_bump_map.h"
#include "kis_transaction.h"
#include "kis_multiple_projection.h"
#include "kis_cached_paint_device.h"

Go to the source code of this file.

Classes

struct  BevelEmbossRectCalculator
 
struct  ContrastOp
 
struct  HighlightsFetchOp
 
struct  ShadowsFetchOp
 

Functions

template<class MapOp >
void mapPixelValues (KisPixelSelectionSP dstSelection, MapOp mapOp, const QRect &applyRect)
 
template<class MapOp >
void mapPixelValues (KisPixelSelectionSP srcSelection, KisPixelSelectionSP dstSelection, MapOp mapOp, const QRect &applyRect)
 
void paintBevelSelection (KisPixelSelectionSP srcSelection, KisPixelSelectionSP dstSelection, const QRect &applyRect, int size, int initialSize, bool invert, KisLayerStyleFilterEnvironment *env)
 

Function Documentation

◆ mapPixelValues() [1/2]

template<class MapOp >
void mapPixelValues ( KisPixelSelectionSP dstSelection,
MapOp mapOp,
const QRect & applyRect )

Definition at line 161 of file kis_ls_bevel_emboss_filter.cpp.

164{
165 static quint8 mapTable[256];
166 static bool mapInitialized = false;
167
168 if (!MapOp::supportsCaching || !mapInitialized) {
169 mapInitialized = true;
170
171 for (int i = 0; i < 256; i++) {
172 mapTable[i] = mapOp(i);
173 }
174 }
175
176 KisSequentialIterator dstIt(dstSelection, applyRect);
177
178 while (dstIt.nextPixel()) {
179 quint8 *dstPtr = dstIt.rawData();
180 *dstPtr = mapTable[*dstPtr];
181 }
182}

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

◆ mapPixelValues() [2/2]

template<class MapOp >
void mapPixelValues ( KisPixelSelectionSP srcSelection,
KisPixelSelectionSP dstSelection,
MapOp mapOp,
const QRect & applyRect )

Definition at line 134 of file kis_ls_bevel_emboss_filter.cpp.

138{
139 static quint8 mapTable[256];
140 static bool mapInitialized = false;
141
142 if (!MapOp::supportsCaching || !mapInitialized) {
143 mapInitialized = true;
144
145 for (int i = 0; i < 256; i++) {
146 mapTable[i] = mapOp(i);
147 }
148 }
149
150 KisSequentialConstIterator srcIt(srcSelection, applyRect);
151 KisSequentialIterator dstIt(dstSelection, applyRect);
152
153 while (srcIt.nextPixel() && dstIt.nextPixel()) {
154 const quint8 *srcPtr = srcIt.rawDataConst();
155 quint8 *dstPtr = dstIt.rawData();
156 *dstPtr = mapTable[*srcPtr];
157 }
158}

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

◆ paintBevelSelection()

void paintBevelSelection ( KisPixelSelectionSP srcSelection,
KisPixelSelectionSP dstSelection,
const QRect & applyRect,
int size,
int initialSize,
bool invert,
KisLayerStyleFilterEnvironment * env )

Definition at line 59 of file kis_ls_bevel_emboss_filter.cpp.

66{
68 KisSelectionSP tmpBaseSelection = s1.selection();
69 KisPixelSelectionSP tmpSelection = tmpBaseSelection->pixelSelection();
70
71 // NOTE: we are not using createCompositionSourceDevice() intentionally,
72 // because the source device doesn't have alpha channel
74 KisPixelSelectionSP fillDevice = s2.selection()->pixelSelection();
75
76 KisPainter gc(dstSelection);
77 gc.setCompositeOpId(COMPOSITE_COPY);
78
79 for (int i = 0; i < size; i++) {
80 const int growSize = initialSize - i - 1;
81
82 quint8 selectedness = invert ?
83 qRound(qreal(size - i - 1) / size * 255.0) :
84 qRound(qreal(i + 1) / size * 255.0);
85 fillDevice->setDefaultPixel(KoColor(&selectedness, fillDevice->colorSpace()));
86
87 tmpSelection->makeCloneFromRough(srcSelection, srcSelection->selectedRect());
88
89 QRect changeRect = KisLsUtils::growSelectionUniform(tmpSelection, growSize, applyRect);
90
91 gc.setSelection(tmpBaseSelection);
92 gc.bitBlt(changeRect.topLeft(), fillDevice, changeRect);
93 }
94}
QPointF s1
QPointF s2
const QString COMPOSITE_COPY
void setDefaultPixel(const KoColor &defPixel)
void makeCloneFromRough(KisPaintDeviceSP src, const QRect &minimalRect)
const KoColorSpace * colorSpace() const
int size(const Forest< T > &forest)
Definition KisForest.h:1232
QRect growSelectionUniform(KisPixelSelectionSP selection, int growSize, const QRect &applyRect)
KisPixelSelectionSP pixelSelection

References KisPainter::bitBlt(), KisLayerStyleFilterEnvironment::cachedSelection(), KisPaintDevice::colorSpace(), COMPOSITE_COPY, KisLsUtils::growSelectionUniform(), KisPaintDevice::makeCloneFromRough(), KisSelection::pixelSelection, s1, s2, KisPixelSelection::selectedRect(), KisPainter::setCompositeOpId(), KisPaintDevice::setDefaultPixel(), and KisPainter::setSelection().