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

#include <kis_onion_skin_cache.h>

Classes

struct  Private
 

Public Member Functions

 KisOnionSkinCache ()
 
KisPaintDeviceSP lodCapableDevice () const
 
KisPaintDeviceSP projection (KisPaintDeviceSP source)
 
void reset ()
 
 ~KisOnionSkinCache ()
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 14 of file kis_onion_skin_cache.h.

Constructor & Destructor Documentation

◆ KisOnionSkinCache()

KisOnionSkinCache::KisOnionSkinCache ( )

Definition at line 57 of file kis_onion_skin_cache.cpp.

58 : m_d(new Private)
59{
60}
const QScopedPointer< Private > m_d

◆ ~KisOnionSkinCache()

KisOnionSkinCache::~KisOnionSkinCache ( )

Definition at line 62 of file kis_onion_skin_cache.cpp.

63{
64}

Member Function Documentation

◆ lodCapableDevice()

KisPaintDeviceSP KisOnionSkinCache::lodCapableDevice ( ) const

Definition at line 127 of file kis_onion_skin_cache.cpp.

128{
129 return m_d->cachedProjection;
130}

References m_d.

◆ projection()

KisPaintDeviceSP KisOnionSkinCache::projection ( KisPaintDeviceSP source)

It might happen that the lod planes has already been generated for all the devices, so we should cold-init them for the onion skins.

Definition at line 66 of file kis_onion_skin_cache.cpp.

67{
69
70 KisPaintDeviceSP cachedProjection;
71
72 QReadLocker readLocker(&m_d->lock);
73 cachedProjection = m_d->cachedProjection;
74
75
76 if (!cachedProjection || !m_d->checkCacheValid(source, compositor)) {
77
78 readLocker.unlock();
79 QWriteLocker writeLocker(&m_d->lock);
80 cachedProjection = m_d->cachedProjection;
81 if (!cachedProjection ||
82 !m_d->checkCacheValid(source, compositor) ||
83 *cachedProjection->colorSpace() != *source->colorSpace()) {
84
85 if (!cachedProjection) {
86 cachedProjection = new KisPaintDevice(source->colorSpace());
87 } else {
88 cachedProjection->setDefaultBounds(new KisDefaultBounds());
89 cachedProjection->clear();
90
91 if (*cachedProjection->colorSpace() != *source->colorSpace()) {
92 cachedProjection->convertTo(source->colorSpace());
93 }
94 }
95
96 const QRect extent = compositor->calculateExtent(source);
97 compositor->composite(source, cachedProjection, extent);
98
99 cachedProjection->setDefaultBounds(source->defaultBounds());
100
106 const int lod = source->defaultBounds()->currentLevelOfDetail();
107 if (lod > 0) {
108 QScopedPointer<KisPaintDevice::LodDataStruct> data(cachedProjection->createLodDataStruct(lod));
109 cachedProjection->updateLodDataStruct(data.data(), extent);
110 cachedProjection->uploadLodDataStruct(data.data());
111 }
112
113 m_d->updateCacheMetrics(source, compositor);
114 m_d->cachedProjection = cachedProjection;
115 }
116 }
117
118 return cachedProjection;
119}
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
QRect calculateExtent(const KisPaintDeviceSP device, int time)
void composite(const KisPaintDeviceSP sourceDevice, KisPaintDeviceSP targetDevice, const QRect &rect)
static KisOnionSkinCompositor * instance()
void uploadLodDataStruct(LodDataStruct *dst)
virtual void clear()
void setDefaultBounds(KisDefaultBoundsBaseSP bounds)
LodDataStruct * createLodDataStruct(int lod)
void updateLodDataStruct(LodDataStruct *dst, const QRect &srcRect)
const KoColorSpace * colorSpace() const
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)

References KisOnionSkinCompositor::calculateExtent(), KisPaintDevice::clear(), KisPaintDevice::colorSpace(), KisOnionSkinCompositor::composite(), KisPaintDevice::convertTo(), KisPaintDevice::createLodDataStruct(), KisOnionSkinCompositor::instance(), m_d, KisPaintDevice::setDefaultBounds(), source(), KisPaintDevice::updateLodDataStruct(), and KisPaintDevice::uploadLodDataStruct().

◆ reset()

void KisOnionSkinCache::reset ( )

Definition at line 121 of file kis_onion_skin_cache.cpp.

122{
123 QWriteLocker writeLocker(&m_d->lock);
124 m_d->cachedProjection = 0;
125}

References m_d.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisOnionSkinCache::m_d
private

Definition at line 27 of file kis_onion_skin_cache.h.


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