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

#include <kis_sync_lod_cache_stroke_strategy.h>

+ Inheritance diagram for KisSyncLodCacheStrokeStrategy:

Classes

struct  Private
 

Public Member Functions

 KisSyncLodCacheStrokeStrategy (KisImageWSP image, bool forgettable)
 
 ~KisSyncLodCacheStrokeStrategy () override
 
- Public Member Functions inherited from KisRunnableBasedStrokeStrategy
void doStrokeCallback (KisStrokeJobData *data) override
 
 KisRunnableBasedStrokeStrategy (const KisRunnableBasedStrokeStrategy &rhs)
 
 KisRunnableBasedStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
KisRunnableStrokeJobsInterfacerunnableJobsInterface () const
 
 ~KisRunnableBasedStrokeStrategy ()
 
- Public Member Functions inherited from KisSimpleStrokeStrategy
virtual void cancelStrokeCallback ()
 
KisStrokeJobDatacreateCancelData () override
 
KisStrokeJobStrategycreateCancelStrategy () override
 
KisStrokeJobStrategycreateDabStrategy () override
 
KisStrokeJobDatacreateFinishData () override
 
KisStrokeJobStrategycreateFinishStrategy () override
 
KisStrokeJobDatacreateInitData () override
 
KisStrokeJobStrategycreateInitStrategy () override
 
KisStrokeJobDatacreateResumeData () override
 
KisStrokeJobStrategycreateResumeStrategy () override
 
KisStrokeJobDatacreateSuspendData () override
 
KisStrokeJobStrategycreateSuspendStrategy () override
 
virtual void finishStrokeCallback ()
 
 KisSimpleStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
virtual void resumeStrokeCallback ()
 
virtual void suspendStrokeCallback ()
 
- Public Member Functions inherited from KisStrokeStrategy
qreal balancingRatioOverride () const
 
bool canForgetAboutMe () const
 
bool clearsRedoOnStart () const
 
virtual KisStrokeStrategycreateLodClone (int levelOfDetail)
 
KisLodPreferences currentLodPreferences () const
 
bool forceLodModeIfPossible () const
 
QString id () const
 
bool isAsynchronouslyCancellable () const
 
bool isExclusive () const
 
 KisStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
KUndo2MagicString name () const
 
bool needsExplicitCancel () const
 
virtual void notifyUserEndedStroke ()
 
virtual void notifyUserStartedStroke ()
 
bool requestsOtherStrokesToEnd () const
 
void setForceLodModeIfPossible (bool forceLodModeIfPossible)
 
void setMutatedJobsInterface (KisStrokesQueueMutatedJobInterface *mutatedJobsInterface, KisStrokeId strokeId)
 
bool supportsWrapAroundMode () const
 
virtual void tryCancelCurrentStrokeJobAsync ()
 tryCancelCurrentStrokeJobAsync is called by the strokes queue when the stroke is being cancelled. The stroke strategy may or may not handle this request and cancel the currently running long action.
 
virtual ~KisStrokeStrategy ()
 

Static Public Member Functions

static QList< KisStrokeJobData * > createJobsData (KisImageWSP image)
 
static void createJobsData (QVector< KisStrokeJobData * > &jobs, KisNodeSP imageRoot, KisUpdatesFacade *updatesFacade, int levelOfDetail, KisPaintDeviceList extraDevices={})
 
- Static Public Member Functions inherited from KisSimpleStrokeStrategy
static QLatin1String jobTypeToString (JobType type)
 

Private Member Functions

void initStrokeCallback () override
 

Private Attributes

const QScopedPointer< Privatem_d
 

Additional Inherited Members

- Public Types inherited from KisSimpleStrokeStrategy
enum  JobType {
  JOB_INIT = 0 , JOB_CANCEL , JOB_FINISH , JOB_DOSTROKE ,
  JOB_SUSPEND , JOB_RESUME , NJOBS
}
 
- Protected Member Functions inherited from KisSimpleStrokeStrategy
void enableJob (JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
 
 KisSimpleStrokeStrategy (const KisSimpleStrokeStrategy &rhs)
 
- Protected Member Functions inherited from KisStrokeStrategy
void addMutatedJob (KisStrokeJobData *data)
 
void addMutatedJobs (const QVector< KisStrokeJobData * > list)
 
 KisStrokeStrategy (const KisStrokeStrategy &rhs)
 
void setAsynchronouslyCancellable (bool value)
 
void setBalancingRatioOverride (qreal value)
 
void setCanForgetAboutMe (bool value)
 
void setClearsRedoOnStart (bool value)
 
void setExclusive (bool value)
 
void setNeedsExplicitCancel (bool value)
 
void setRequestsOtherStrokesToEnd (bool value)
 
void setSupportsWrapAroundMode (bool value)
 

Detailed Description

Definition at line 17 of file kis_sync_lod_cache_stroke_strategy.h.

Constructor & Destructor Documentation

◆ KisSyncLodCacheStrokeStrategy()

KisSyncLodCacheStrokeStrategy::KisSyncLodCacheStrokeStrategy ( KisImageWSP image,
bool forgettable )

We shouldn't start syncing before all the updates are done. Otherwise we might get artifacts!

Definition at line 21 of file kis_sync_lod_cache_stroke_strategy.cpp.

22 : KisRunnableBasedStrokeStrategy(QLatin1String("SyncLodCacheStroke"), kundo2_i18n("Instant Preview")),
23 m_d(new Private)
24{
25 m_d->image = image;
26
33
36 setCanForgetAboutMe(forgettable);
37}
KisRunnableBasedStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
void enableJob(JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
void setClearsRedoOnStart(bool value)
void setRequestsOtherStrokesToEnd(bool value)
void setCanForgetAboutMe(bool value)
KUndo2MagicString kundo2_i18n(const char *text)

References KisStrokeJobData::BARRIER, KisSimpleStrokeStrategy::enableJob(), KisStrokeJobData::EXCLUSIVE, KisSimpleStrokeStrategy::JOB_DOSTROKE, KisSimpleStrokeStrategy::JOB_INIT, m_d, KisStrokeStrategy::setCanForgetAboutMe(), KisStrokeStrategy::setClearsRedoOnStart(), and KisStrokeStrategy::setRequestsOtherStrokesToEnd().

◆ ~KisSyncLodCacheStrokeStrategy()

KisSyncLodCacheStrokeStrategy::~KisSyncLodCacheStrokeStrategy ( )
override

Definition at line 39 of file kis_sync_lod_cache_stroke_strategy.cpp.

40{
41}

Member Function Documentation

◆ createJobsData() [1/2]

QList< KisStrokeJobData * > KisSyncLodCacheStrokeStrategy::createJobsData ( KisImageWSP image)
static

Definition at line 50 of file kis_sync_lod_cache_stroke_strategy.cpp.

51{
52 // all the jobs are populates in the init job
53 return {};
54}

◆ createJobsData() [2/2]

void KisSyncLodCacheStrokeStrategy::createJobsData ( QVector< KisStrokeJobData * > & jobs,
KisNodeSP imageRoot,
KisUpdatesFacade * updatesFacade,
int levelOfDetail,
KisPaintDeviceList extraDevices = {} )
static

Definition at line 56 of file kis_sync_lod_cache_stroke_strategy.cpp.

57{
61
62 using SharedData = QHash<KisPaintDeviceSP, QSharedPointer<KisPaintDevice::LodDataStruct>>;
63 using SharedDataSP = QSharedPointer<SharedData>;
64
65 SharedDataSP sharedData(new SharedData());
66
67 KisPaintDeviceList deviceList = extraDevices;
68
69 recursiveApplyNodes(imageRoot,
70 [&deviceList](KisNodeSP node) {
71 deviceList << node->getLodCapableDevices();
72 });
73
75
76 KritaUtils::addJobBarrierNoCancel(jobs, [updatesFacade] () {
77 updatesFacade->blockUpdates();
78 });
79
80 KritaUtils::addJobBarrier(jobs, [sharedData, deviceList, levelOfDetail] () mutable {
81 Q_FOREACH (KisPaintDeviceSP device, deviceList) {
82 sharedData->insert(device, toQShared(device->createLodDataStruct(levelOfDetail)));
83 }
84 });
85
86 KritaUtils::addJobSequential(jobs, [](){});
87
88 Q_FOREACH (KisPaintDeviceSP device, deviceList) {
89 KisRegion region = device->regionForLodSyncing();
91
92 Q_FOREACH (const QRect &rc, rects) {
93 KritaUtils::addJobConcurrent(jobs, [sharedData, device, rc] () mutable {
94 KIS_ASSERT(sharedData->contains(device));
95
96 KisPaintDevice::LodDataStruct *data = sharedData->value(device).data();
97 device->updateLodDataStruct(data, rc);
98 });
99 }
100 }
101
102 KritaUtils::addJobSequential(jobs, [](){});
103
104 recursiveApplyNodes(imageRoot,
105 [&jobs](KisNodeSP node) {
106 KritaUtils::addJobConcurrent(jobs, [node] () mutable {
107 node->syncLodCache();
108 });
109 });
110
111 KritaUtils::addJobSequential(jobs, [sharedData] () mutable {
112 auto it = sharedData->begin();
113 auto end = sharedData->end();
114
115 for (; it != end; ++it) {
116 KisPaintDeviceSP dev = it.key();
117 dev->uploadLodDataStruct(it.value().data());
118 }
119 });
120
121 KritaUtils::addJobSequentialNoCancel(jobs, [updatesFacade] () {
122 updatesFacade->unblockUpdates();
123 });
124}
void uploadLodDataStruct(LodDataStruct *dst)
KisRegion regionForLodSyncing() const
LodDataStruct * createLodDataStruct(int lod)
void updateLodDataStruct(LodDataStruct *dst, const QRect &srcRect)
virtual void blockUpdates()=0
virtual void unblockUpdates()=0
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
QSharedPointer< T > toQShared(T *ptr)
void recursiveApplyNodes(NodePointer node, Functor func)
void addJobSequentialNoCancel(QVector< Job * > &jobs, Func func)
void addJobConcurrent(QVector< Job * > &jobs, Func func)
void addJobSequential(QVector< Job * > &jobs, Func func)
void makeContainerUnique(C &container)
void addJobBarrier(QVector< Job * > &jobs, Func func)
QVector< QRect > splitRegionIntoPatches(const KisRegion &region, const QSize &patchSize)
void addJobBarrierNoCancel(QVector< Job * > &jobs, Func func)
QSize optimalPatchSize()
virtual KisPaintDeviceList getLodCapableDevices() const
Definition kis_node.cpp:682
virtual void syncLodCache()
Definition kis_node.cpp:677

References KritaUtils::addJobBarrier(), KritaUtils::addJobBarrierNoCancel(), KritaUtils::addJobConcurrent(), KritaUtils::addJobSequential(), KritaUtils::addJobSequentialNoCancel(), KisUpdatesFacade::blockUpdates(), KisPaintDevice::createLodDataStruct(), KisNode::getLodCapableDevices(), KIS_ASSERT, KritaUtils::makeContainerUnique(), KritaUtils::optimalPatchSize(), KisLayerUtils::recursiveApplyNodes(), KisPaintDevice::regionForLodSyncing(), KritaUtils::splitRegionIntoPatches(), KisNode::syncLodCache(), toQShared(), KisUpdatesFacade::unblockUpdates(), KisPaintDevice::updateLodDataStruct(), and KisPaintDevice::uploadLodDataStruct().

◆ initStrokeCallback()

void KisSyncLodCacheStrokeStrategy::initStrokeCallback ( )
overrideprivatevirtual

Reimplemented from KisSimpleStrokeStrategy.

Definition at line 43 of file kis_sync_lod_cache_stroke_strategy.cpp.

44{
46 createJobsData(jobs, m_d->image->root(), m_d->image.data(), m_d->image->currentLevelOfDetail());
47 addMutatedJobs(jobs);
48}
void addMutatedJobs(const QVector< KisStrokeJobData * > list)
static QList< KisStrokeJobData * > createJobsData(KisImageWSP image)

References KisStrokeStrategy::addMutatedJobs(), createJobsData(), and m_d.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisSyncLodCacheStrokeStrategy::m_d
private

Definition at line 32 of file kis_sync_lod_cache_stroke_strategy.h.


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