Krita Source Code Documentation
Loading...
Searching...
No Matches
KisHoldUIUpdatesCommand.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2019 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <algorithm>
11#include "krita_utils.h"
12#include "kis_paintop_utils.h"
17
18
20 : KisCommandUtils::FlipFlopCommand(state),
21 m_updatesFacade(updatesFacade),
22 m_batchUpdateStarted(new bool(false))
23{
24}
25
35
37{
39
40 const QRect totalRect =
42 std::accumulate(totalDirtyRects.begin(), totalDirtyRects.end(), QRect(), std::bit_or<QRect>());
43
44 totalDirtyRects =
46 totalDirtyRects,
48
51
52 KisUpdatesFacade *updatesFacade = m_updatesFacade;
53 QSharedPointer<bool> batchUpdateStarted = m_batchUpdateStarted;
54
56 Q_FOREACH (const QRect &rc, totalDirtyRects) {
57 KritaUtils::addJobConcurrent(jobsData, [updatesFacade, rc] () {
58 updatesFacade->notifyUIUpdateCompleted(rc);
59 });
60 }
61
62 KritaUtils::addJobBarrier(jobsData, [updatesFacade, batchUpdateStarted] () {
63 updatesFacade->notifyBatchUpdateEnded();
64 *batchUpdateStarted = false;
65 });
66
68}
KisHoldUIUpdatesCommand(KisUpdatesFacade *updatesFacade, State state)
QSharedPointer< bool > m_batchUpdateStarted
virtual void addRunnableJobs(const QVector< KisRunnableStrokeJobDataBase * > &list)=0
virtual void notifyBatchUpdateStarted()=0
virtual void notifyBatchUpdateEnded()=0
virtual void disableUIUpdates()=0
virtual void notifyUIUpdateCompleted(const QRect &rc)=0
virtual QRect bounds() const =0
virtual QVector< QRect > enableUIUpdates()=0
QVector< QRect > splitAndFilterDabRect(const QRect &totalRect, const QVector< QRect > &dabRects, int idealPatchSize)
void addJobConcurrent(QVector< Job * > &jobs, Func func)
void addJobBarrier(QVector< Job * > &jobs, Func func)
QSize optimalPatchSize()