Krita Source Code Documentation
Loading...
Searching...
No Matches
KoShapeBulkActionLock.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef KOSHAPEBULKACTIONLOCK_H
8#define KOSHAPEBULKACTIONLOCK_H
9
10#include "kritaflake_export.h"
11
12#include <KisAdaptedLock.h>
13#include <QList>
14#include <QRect>
15
16class KoShape;
18
19class KRITAFLAKE_EXPORT KoShapeBulkActionLockAdapter {
20public:
21 using Update = std::pair<KoShape*, QRectF>;
22 using UpdatesList = std::vector<Update>;
23public:
25 void lock();
26 void unlock();
27
28 UpdatesList takeFinalUpdatesList();
29
30private:
31 void tryAddBulkInterfaceShape(KoShape *shape);
32 void addBulkInterfaceDependees(const QList<KoShape*> dependees);
33
34private:
37 std::unordered_map<KoShape*, QRectF> m_finalUpdates;
38};
39
40class KRITAFLAKE_EXPORT KoShapeBulkActionLock : protected KisAdaptedLock<KoShapeBulkActionLockAdapter>
41{
42public:
44 using BaseClass::BaseClass;
45
46 template <typename T, typename = std::enable_if_t<std::is_base_of_v<KoShape, T>>>
48 : BaseClass(QList<KoShape*>{shape})
49 {}
50
52
53 using BaseClass::Update;
54 using BaseClass::UpdatesList;
55
56 using BaseClass::lock;
57
58 [[nodiscard]] UpdatesList unlock() {
59 BaseClass::unlock();
61 }
62
63 using BaseClass::owns_lock;
64 using BaseClass::swap;
65 using BaseClass::release;
66 using BaseClass::operator bool;
67
68 static void bulkShapesUpdate(const UpdatesList &updates);
69};
70
71#endif /* KOSHAPEBULKACTIONLOCK_H */
QList< KoShapeBulkActionInterface * > m_bulkInterfaceShapes
std::pair< KoShape *, QRectF > Update
std::unordered_map< KoShape *, QRectF > m_finalUpdates
Interface for bulk actions on shapes.