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

#include <kis_prescaled_projection.h>

+ Inheritance diagram for KisPrescaledProjection:

Classes

struct  Private
 

Public Slots

void notifyCanvasSizeChanged (const QSize &widgetSize)
 
void notifyCanvasStateChanged (const KisCanvasState &state)
 
void preScale ()
 
void recalculateCache (KisUpdateInfoSP info)
 
void setChannelFlags (const QBitArray &channelFlags)
 
void setDisplayConfig (const KisDisplayConfig &config)
 
void setDisplayFilter (QSharedPointer< KisDisplayFilter > displayFilter)
 
void slotImageSizeChanged (qint32 w, qint32 h)
 
KisUpdateInfoSP updateCache (const QRect &dirtyImageRect)
 
void updateSettings ()
 

Public Member Functions

 KisPrescaledProjection ()
 
QImage prescaledQImage () const
 
void setCoordinatesConverter (KisCoordinatesConverter *coordinatesConverter)
 
void setImage (KisImageWSP image)
 
 ~KisPrescaledProjection () override
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Private Member Functions

void drawUsingBackend (QPainter &gc, KisPPUpdateInfoSP info)
 
void fillInUpdateInformation (const QRect &viewportRect, KisPPUpdateInfoSP info)
 
KisPPUpdateInfoSP getInitialUpdateInformation (const QRect &dirtyImageRect)
 
 KisPrescaledProjection (const KisPrescaledProjection &)
 
KisPrescaledProjection operator= (const KisPrescaledProjection &)
 
void updateScaledImage (KisPPUpdateInfoSP info)
 
void updateViewportSize ()
 
void viewportMoved (const QPointF &offset)
 

Private Attributes

Private *const m_d
 

Friends

class KisPrescaledProjectionTest
 

Additional Inherited Members

- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

KisPrescaledProjection is responsible for keeping around a prescaled QImage representation that is always suitable for painting onto the canvas.

Note: the export macro is only for the unittest.

Definition at line 37 of file kis_prescaled_projection.h.

Constructor & Destructor Documentation

◆ KisPrescaledProjection() [1/2]

KisPrescaledProjection::KisPrescaledProjection ( )

Definition at line 117 of file kis_prescaled_projection.cpp.

118 : QObject(0)
119 , m_d(new Private())
120{
122
123 // we disable building the pyramid with setting its height to 1
124 // XXX: setting it higher than 1 is broken because it's not updated until you show/hide the layer
126
127 connect(KisConfigNotifier::instance(), SIGNAL(configChanged()), SLOT(updateSettings()));
128}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
static KisConfigNotifier * instance()

References connect(), KisConfigNotifier::instance(), m_d, KisPrescaledProjection::Private::projectionBackend, and updateSettings().

◆ ~KisPrescaledProjection()

KisPrescaledProjection::~KisPrescaledProjection ( )
override

Definition at line 130 of file kis_prescaled_projection.cpp.

131{
132 delete m_d->projectionBackend;
133 delete m_d;
134}

References m_d, and KisPrescaledProjection::Private::projectionBackend.

◆ KisPrescaledProjection() [2/2]

KisPrescaledProjection::KisPrescaledProjection ( const KisPrescaledProjection & )
private

Member Function Documentation

◆ drawUsingBackend()

void KisPrescaledProjection::drawUsingBackend ( QPainter & gc,
KisPPUpdateInfoSP info )
private

Actual drawing is done here

Parameters
infoprepared information
gcThe painter we draw on

Definition at line 426 of file kis_prescaled_projection.cpp.

427{
428 if (info->imageRect.isEmpty()) return;
429
430 if (info->transfer == KisPPUpdateInfo::DIRECT) {
432 } else /* if info->transfer == KisPPUpdateInformation::PATCH */ {
434 // prescale the patch because otherwise we'd scale using QPainter, which gives
435 // a crap result compared to QImage's smoothscale
436 patch.preScale(info->viewportRect);
437 patch.drawMe(gc, info->viewportRect, info->renderHints);
438 }
439}
void preScale(const QRectF &dstRect)
void drawMe(QPainter &gc, const QRectF &dstRect, QPainter::RenderHints renderHints)
virtual KisImagePatch getNearestPatch(KisPPUpdateInfoSP info)=0
virtual void drawFromOriginalImage(QPainter &gc, KisPPUpdateInfoSP info)=0

References KisPPUpdateInfo::DIRECT, KisProjectionBackend::drawFromOriginalImage(), KisImagePatch::drawMe(), KisProjectionBackend::getNearestPatch(), m_d, KisImagePatch::preScale(), and KisPrescaledProjection::Private::projectionBackend.

◆ fillInUpdateInformation()

void KisPrescaledProjection::fillInUpdateInformation ( const QRect & viewportRect,
KisPPUpdateInfoSP info )
private

Prepare all the information about rects needed during projection updating.

Parameters
viewportRectthe part of the viewport that has to be updated
infothe structure to be filled in. It's member dirtyImageRect is supposed to have already been set up in the previous step of the update in getInitialUpdateInformation(). Though it is allowed to be null rect.
See also
getInitialUpdateInformation()

To avoid artifacts while scaling we use mechanism like changeRect/needRect for layers. Here we grow the rect to update pixels which depend on the dirty rect (like changeRect), and later we request a bit more pixels for the patch to make the scaling safe (like needRect).

Definition at line 365 of file kis_prescaled_projection.cpp.

367{
368 m_d->coordinatesConverter->imageScale(&info->scaleX, &info->scaleY);
369
370 // first, crop the part of the view rect that is outside of the canvas
371 QRect croppedViewRect = viewportRect.intersected(QRect(QPoint(0, 0), m_d->viewportSize));
372
373 // second, align this rect to the KisImage's pixels and pixels
374 // of projection backend.
375 info->imageRect = m_d->coordinatesConverter->viewportToImage(QRectF(croppedViewRect)).toAlignedRect();
376
384 const int borderSize = BORDER_SIZE(qMax(info->scaleX, info->scaleY));
385 info->imageRect.adjust(-borderSize, -borderSize, borderSize, borderSize);
386
387 info->imageRect = info->imageRect & m_d->image->bounds();
388
389 m_d->projectionBackend->alignSourceRect(info->imageRect, info->scaleX);
390
391 // finally, compute the dirty rect of the canvas
392 info->viewportRect = m_d->coordinatesConverter->imageToViewport(info->imageRect);
393
394 info->borderWidth = 0;
395 if (SCALE_MORE_OR_EQUAL_TO(info->scaleX, info->scaleY, 1.0)) {
396 if (SCALE_LESS_THAN(info->scaleX, info->scaleY, 2.0)) {
397 dbgRender << "smoothBetween100And200Percent" << Qt::endl;
398 info->renderHints = QPainter::SmoothPixmapTransform;
399 info->borderWidth = borderSize;
400 }
401 info->transfer = KisPPUpdateInfo::DIRECT;
402 } else { // <100%
403 info->renderHints = QPainter::SmoothPixmapTransform;
404 info->borderWidth = borderSize;
405 info->transfer = KisPPUpdateInfo::PATCH;
406 }
407
408 dbgRender << "#####################################";
409 dbgRender << ppVar(info->scaleX) << ppVar(info->scaleY);
410 dbgRender << ppVar(info->borderWidth) << ppVar(info->renderHints);
411 dbgRender << ppVar(info->transfer);
412 dbgRender << ppVar(info->dirtyImageRectVar);
413 dbgRender << "Not aligned rect of the canvas (raw):\t" << croppedViewRect;
414 dbgRender << "Update rect in KisImage's pixels:\t" << info->imageRect;
415 dbgRender << "Update rect in canvas' pixels:\t" << info->viewportRect;
416 dbgRender << "#####################################";
417}
void imageScale(qreal *scaleX, qreal *scaleY) const
_Private::Traits< T >::Result viewportToImage(const T &obj) const
_Private::Traits< T >::Result imageToViewport(const T &obj) const
QRect bounds() const override
virtual void alignSourceRect(QRect &rect, qreal scale)
#define SCALE_LESS_THAN(scX, scY, value)
#define SCALE_MORE_OR_EQUAL_TO(scX, scY, value)
#define ppVar(var)
Definition kis_debug.h:155
#define dbgRender
Definition kis_debug.h:55
#define BORDER_SIZE(scale)
KisCoordinatesConverter * coordinatesConverter

References KisProjectionBackend::alignSourceRect(), BORDER_SIZE, KisImage::bounds(), KisPrescaledProjection::Private::coordinatesConverter, dbgRender, KisPPUpdateInfo::DIRECT, KisPrescaledProjection::Private::image, KisCoordinatesConverter::imageScale(), KisCoordinatesConverter::imageToViewport(), m_d, KisPPUpdateInfo::PATCH, ppVar, KisPrescaledProjection::Private::projectionBackend, SCALE_LESS_THAN, SCALE_MORE_OR_EQUAL_TO, KisPrescaledProjection::Private::viewportSize, and KisCoordinatesConverter::viewportToImage().

◆ getInitialUpdateInformation()

KisPPUpdateInfoSP KisPrescaledProjection::getInitialUpdateInformation ( const QRect & dirtyImageRect)
private

This creates an empty update information and fills it with the only parameter: dirtyImageRect This function is supposed to be run in the context of the image threads, so it does no accesses to zoom or any UI specific values. All the needed information for zooming will be fetched in the context of the UI thread in fillInUpdateInformation().

See also
fillInUpdateInformation()

This update information has nothing more than an information about dirty image rect. All the other information used for scaling will be fetched in fillUpdateInformation() later, when we are working in the context of the UI thread

Definition at line 350 of file kis_prescaled_projection.cpp.

351{
360 info->dirtyImageRectVar = dirtyImageRect;
361
362 return info;
363}

◆ notifyCanvasSizeChanged

void KisPrescaledProjection::notifyCanvasSizeChanged ( const QSize & widgetSize)
slot

Checks whether it is needed to resize the prescaled image and updates it. The size is given in canvas widget pixels.

Definition at line 343 of file kis_prescaled_projection.cpp.

References KisPrescaledProjection::Private::canvasSize, m_d, preScale(), and updateViewportSize().

◆ notifyCanvasStateChanged

void KisPrescaledProjection::notifyCanvasStateChanged ( const KisCanvasState & state)
slot

Definition at line 162 of file kis_prescaled_projection.cpp.

163{
164 auto relevantState = RelevantCanvasState::fromCanvasState(state);
165
166 if (m_d->currentRelevantCanvasState == relevantState) return;
167
169 m_d->currentRelevantCanvasState->transformations() != relevantState.transformations()) {
170
172 preScale();
173 } else {
174 const QPointF moveOffset = m_d->currentRelevantCanvasState->viewportOffsetF - relevantState.viewportOffsetF;
175 viewportMoved(-moveOffset);
176 }
177
178 m_d->currentRelevantCanvasState = relevantState;
179}
void viewportMoved(const QPointF &offset)
std::optional< RelevantCanvasState > currentRelevantCanvasState

References KisPrescaledProjection::Private::currentRelevantCanvasState, m_d, preScale(), updateViewportSize(), and viewportMoved().

◆ operator=()

KisPrescaledProjection KisPrescaledProjection::operator= ( const KisPrescaledProjection & )
private

◆ preScale

void KisPrescaledProjection::preScale ( )
slot

Called whenever the zoom level changes or another chunk of the image becomes visible. The currently visible area of the image is complete scaled again.

Definition at line 286 of file kis_prescaled_projection.cpp.

287{
288 if (!m_d->image) return;
289
290 m_d->prescaledQImage.fill(0);
291
292 QRect viewportRect(QPoint(0, 0), m_d->viewportSize);
293 QRect imageRect =
294 m_d->coordinatesConverter->viewportToImage(viewportRect).toAlignedRect();
295
296 QVector<QRect> patches =
298
299 Q_FOREACH (const QRect& rc, patches) {
300 QRect viewportPatch = m_d->coordinatesConverter->imageToViewport(rc).toAlignedRect();
302 fillInUpdateInformation(viewportPatch, info);
303 QPainter gc(&m_d->prescaledQImage);
304 gc.setCompositionMode(QPainter::CompositionMode_Source);
305 drawUsingBackend(gc, info);
306 }
307
308}
void fillInUpdateInformation(const QRect &viewportRect, KisPPUpdateInfoSP info)
KisPPUpdateInfoSP getInitialUpdateInformation(const QRect &dirtyImageRect)
void drawUsingBackend(QPainter &gc, KisPPUpdateInfoSP info)
QVector< QRect > splitRectIntoPatches(const QRect &rc, const QSize &patchSize)

References KisPrescaledProjection::Private::coordinatesConverter, drawUsingBackend(), fillInUpdateInformation(), getInitialUpdateInformation(), KisPrescaledProjection::Private::image, KisCoordinatesConverter::imageToViewport(), m_d, KisPrescaledProjection::Private::prescaledQImage, KritaUtils::splitRectIntoPatches(), KisPrescaledProjection::Private::updatePatchSize, KisPrescaledProjection::Private::viewportSize, and KisCoordinatesConverter::viewportToImage().

◆ prescaledQImage()

QImage KisPrescaledProjection::prescaledQImage ( ) const

Return the prescaled QImage. The prescaled image is exactly as big as the canvas widget in pixels.

Definition at line 144 of file kis_prescaled_projection.cpp.

145{
146 return m_d->prescaledQImage;
147}

References m_d, and KisPrescaledProjection::Private::prescaledQImage.

◆ recalculateCache

void KisPrescaledProjection::recalculateCache ( KisUpdateInfoSP info)
slot

Updates the prescaled cache at current zoom level

Parameters
infoupdate structure returned by updateCache
See also
updateCache

Definition at line 269 of file kis_prescaled_projection.cpp.

270{
271 KisPPUpdateInfoSP ppInfo = dynamic_cast<KisPPUpdateInfo*>(info.data());
272 if(!ppInfo) return;
273
274 QRect rawViewRect =
276 imageToViewport(ppInfo->dirtyImageRectVar).toAlignedRect();
277
278 fillInUpdateInformation(rawViewRect, ppInfo);
279
281
282 if(!info->dirtyViewportRect().isEmpty())
283 updateScaledImage(ppInfo);
284}
void updateScaledImage(KisPPUpdateInfoSP info)
virtual void recalculateCache(KisPPUpdateInfoSP info)=0

References KisPrescaledProjection::Private::coordinatesConverter, KisSharedPtr< T >::data(), fillInUpdateInformation(), m_d, KisPrescaledProjection::Private::projectionBackend, KisProjectionBackend::recalculateCache(), and updateScaledImage().

◆ setChannelFlags

void KisPrescaledProjection::setChannelFlags ( const QBitArray & channelFlags)
slot

Definition at line 315 of file kis_prescaled_projection.cpp.

316{
317 m_d->projectionBackend->setChannelFlags(channelFlags);
318}
virtual void setChannelFlags(const QBitArray &channelFlags)=0

References m_d, KisPrescaledProjection::Private::projectionBackend, and KisProjectionBackend::setChannelFlags().

◆ setCoordinatesConverter()

void KisPrescaledProjection::setCoordinatesConverter ( KisCoordinatesConverter * coordinatesConverter)

Definition at line 149 of file kis_prescaled_projection.cpp.

150{
151 m_d->coordinatesConverter = coordinatesConverter;
152 m_d->currentRelevantCanvasState = RelevantCanvasState::fromCanvasState(KisCanvasState::fromConverter(*coordinatesConverter));
153}
static KisCanvasState fromConverter(const KisCoordinatesConverter &converter)

References KisPrescaledProjection::Private::coordinatesConverter, KisPrescaledProjection::Private::currentRelevantCanvasState, KisCanvasState::fromConverter(), and m_d.

◆ setDisplayConfig

void KisPrescaledProjection::setDisplayConfig ( const KisDisplayConfig & config)
slot

Set the current monitor profile

Definition at line 310 of file kis_prescaled_projection.cpp.

311{
313}
KoColorConversionTransformation::ConversionFlags conversionFlags
const KoColorProfile * profile
KoColorConversionTransformation::Intent intent
virtual void setMonitorProfile(const KoColorProfile *monitorProfile, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)=0

References KisDisplayConfig::conversionFlags, KisDisplayConfig::intent, m_d, KisDisplayConfig::profile, KisPrescaledProjection::Private::projectionBackend, and KisProjectionBackend::setMonitorProfile().

◆ setDisplayFilter

void KisPrescaledProjection::setDisplayFilter ( QSharedPointer< KisDisplayFilter > displayFilter)
slot

Definition at line 320 of file kis_prescaled_projection.cpp.

321{
322 m_d->projectionBackend->setDisplayFilter(displayFilter);
323}
virtual void setDisplayFilter(QSharedPointer< KisDisplayFilter > displayFilter)=0

References m_d, KisPrescaledProjection::Private::projectionBackend, and KisProjectionBackend::setDisplayFilter().

◆ setImage()

void KisPrescaledProjection::setImage ( KisImageWSP image)

Definition at line 137 of file kis_prescaled_projection.cpp.

138{
139 Q_ASSERT(image);
140 m_d->image = image;
142}
virtual void setImage(KisImageWSP image)=0

References KisPrescaledProjection::Private::image, m_d, KisPrescaledProjection::Private::projectionBackend, and KisProjectionBackend::setImage().

◆ slotImageSizeChanged

void KisPrescaledProjection::slotImageSizeChanged ( qint32 w,
qint32 h )
slot

Called whenever the size of the KisImage changes. It is a part of a complex update ritual, when the size of the image changes. This method just resizes the storage for the image cache, it doesn't update any cached data.

Definition at line 240 of file kis_prescaled_projection.cpp.

241{
243 // viewport size is cropped by the size of the image
244 // so we need to update it as well
246}
virtual void setImageSize(qint32 w, qint32 h)=0

References m_d, KisPrescaledProjection::Private::projectionBackend, KisProjectionBackend::setImageSize(), and updateViewportSize().

◆ updateCache

KisUpdateInfoSP KisPrescaledProjection::updateCache ( const QRect & dirtyImageRect)
slot

Retrieves image's data from KisImage object and updates internal cache

Parameters
dirtyImageRectthe rect changed on the image
See also
recalculateCache

We needn't this stuff outside KisImage's area. We're not displaying anything painted outside the image anyway.

Definition at line 248 of file kis_prescaled_projection.cpp.

249{
250 if (!m_d->image) {
251 dbgRender.noquote() << "Calling updateCache without an image:" << kisBacktrace() << Qt::endl;
252 // return invalid info
253 return new KisPPUpdateInfo();
254 }
255
260 QRect croppedImageRect = dirtyImageRect & m_d->image->bounds();
261 if (croppedImageRect.isEmpty()) return new KisPPUpdateInfo();
262
263 KisPPUpdateInfoSP info = getInitialUpdateInformation(croppedImageRect);
264 m_d->projectionBackend->updateCache(croppedImageRect);
265
266 return info;
267}
virtual void updateCache(const QRect &dirtyImageRect)=0
QString kisBacktrace()
Definition kis_debug.cpp:51

References KisImage::bounds(), dbgRender, getInitialUpdateInformation(), KisPrescaledProjection::Private::image, kisBacktrace(), m_d, KisPrescaledProjection::Private::projectionBackend, and KisProjectionBackend::updateCache().

◆ updateScaledImage()

void KisPrescaledProjection::updateScaledImage ( KisPPUpdateInfoSP info)
private

Initiates the process of prescaled image update

Parameters
infoprepared information

Definition at line 419 of file kis_prescaled_projection.cpp.

420{
421 QPainter gc(&m_d->prescaledQImage);
422 gc.setCompositionMode(QPainter::CompositionMode_Source);
423 drawUsingBackend(gc, info);
424}

References drawUsingBackend(), m_d, and KisPrescaledProjection::Private::prescaledQImage.

◆ updateSettings

void KisPrescaledProjection::updateSettings ( )
slot

Called whenever the configuration settings change.

Definition at line 155 of file kis_prescaled_projection.cpp.

156{
157 KisImageConfig imageConfig(false);
158 m_d->updatePatchSize.setWidth(imageConfig.updatePatchWidth());
159 m_d->updatePatchSize.setHeight(imageConfig.updatePatchHeight());
160}

References m_d, KisImageConfig::updatePatchHeight(), KisPrescaledProjection::Private::updatePatchSize, and KisImageConfig::updatePatchWidth().

◆ updateViewportSize()

void KisPrescaledProjection::updateViewportSize ( )
private

Definition at line 326 of file kis_prescaled_projection.cpp.

327{
328 QRect imageRect = m_d->coordinatesConverter->imageRectInWidgetPixels().toAlignedRect();
329 QSizeF minimalSize(qMin(imageRect.width(), m_d->canvasSize.width()),
330 qMin(imageRect.height(), m_d->canvasSize.height()));
331 QRectF minimalRect(QPointF(0,0), minimalSize);
332
333 m_d->viewportSize = m_d->coordinatesConverter->widgetToViewport(minimalRect).toAlignedRect().size();
334
335 if (m_d->prescaledQImage.isNull() ||
336 m_d->prescaledQImage.size() != m_d->viewportSize) {
337
338 m_d->prescaledQImage = QImage(m_d->viewportSize, QImage::Format_ARGB32);
339 m_d->prescaledQImage.fill(0);
340 }
341}
_Private::Traits< T >::Result widgetToViewport(const T &obj) const

References KisPrescaledProjection::Private::canvasSize, KisPrescaledProjection::Private::coordinatesConverter, KisCoordinatesConverter::imageRectInWidgetPixels(), m_d, KisPrescaledProjection::Private::prescaledQImage, KisPrescaledProjection::Private::viewportSize, and KisCoordinatesConverter::widgetToViewport().

◆ viewportMoved()

void KisPrescaledProjection::viewportMoved ( const QPointF & offset)
private

Called whenever the view widget needs to show a different part of the document

We can't optimize anything when offset is float :( Just prescale entire image.

TODO: viewport rects should be cropped by the borders of the image, because it may be requested to read/write outside QImage and copyQImage will not catch it

Definition at line 181 of file kis_prescaled_projection.cpp.

182{
183 // FIXME: \|/
184 if (m_d->prescaledQImage.isNull()) return;
185 if (offset.isNull()) return;
186
187 QPoint alignedOffset = offset.toPoint();
188
189 if(offset != alignedOffset) {
194 dbgRender << "prescaling the entire image because the offset is float";
195 preScale();
196 return;
197 }
198
199 QImage newImage = QImage(m_d->viewportSize, QImage::Format_ARGB32);
200 newImage.fill(0);
201
207 QRect newViewportRect = QRect(QPoint(0,0), m_d->viewportSize);
208 QRect oldViewportRect = newViewportRect.translated(alignedOffset);
209
210 QRegion updateRegion = newViewportRect;
211 QRect savedArea = newViewportRect & oldViewportRect;
212 if(!savedArea.isEmpty()) {
213 copyQImage(alignedOffset.x(), alignedOffset.y(), &newImage, m_d->prescaledQImage);
214 updateRegion -= savedArea;
215 }
216
217 QPainter gc(&newImage);
218 auto rc = updateRegion.begin();
219 while (rc != updateRegion.end()) {
220 QRect rect = *rc;
221 QRect imageRect =
222 m_d->coordinatesConverter->viewportToImage(rect).toAlignedRect();
223 QVector<QRect> patches =
225
226 Q_FOREACH (const QRect& rc, patches) {
227 QRect viewportPatch =
228 m_d->coordinatesConverter->imageToViewport(rc).toAlignedRect();
229
231 fillInUpdateInformation(viewportPatch, info);
232 drawUsingBackend(gc, info);
233 }
234 rc++;
235 }
236
237 m_d->prescaledQImage = newImage;
238}
void copyQImage(qint32 deltaX, qint32 deltaY, QImage *dstImage, const QImage &srcImage)

References KisPrescaledProjection::Private::coordinatesConverter, copyQImage(), dbgRender, drawUsingBackend(), fillInUpdateInformation(), getInitialUpdateInformation(), KisCoordinatesConverter::imageToViewport(), m_d, preScale(), KisPrescaledProjection::Private::prescaledQImage, KritaUtils::splitRectIntoPatches(), KisPrescaledProjection::Private::updatePatchSize, KisPrescaledProjection::Private::viewportSize, and KisCoordinatesConverter::viewportToImage().

Friends And Related Symbol Documentation

◆ KisPrescaledProjectionTest

friend class KisPrescaledProjectionTest
friend

Definition at line 111 of file kis_prescaled_projection.h.

Member Data Documentation

◆ m_d

Private* const KisPrescaledProjection::m_d
private

Definition at line 166 of file kis_prescaled_projection.h.


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