Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGlobalResourcesInterface.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <QGlobalStatic>
9#include <KisResourceModel.h>
11
12#include <kis_debug.h>
13
14#include <QBasicMutex>
15#include <QMutexLocker>
16
17
18namespace {
19class GlobalResourcesSource : public KisResourcesInterface::ResourceSourceAdapter
20{
21public:
22 GlobalResourcesSource(const QString &resourceType, KisAllResourcesModel *model)
23 : KisResourcesInterface::ResourceSourceAdapter(resourceType)
24 , m_model(model)
25 {}
26
27 ~GlobalResourcesSource() override
28 {
29 }
30protected:
31 QVector<KoResourceSP> resourcesForFilename(const QString &filename) const override {
32 QVector<KoResourceSP> res = m_model->resourcesForFilename(filename);
33 return res;
34 }
35
36 QVector<KoResourceSP> resourcesForName(const QString &name) const override {
37 QVector<KoResourceSP> res = m_model->resourcesForName(name);
38 return res;
39 }
40
41 QVector<KoResourceSP> resourcesForMD5(const QString &md5) const override {
42 QVector<KoResourceSP> res = m_model->resourcesForMD5(md5);
43 return res;
44 }
45public:
46 KoResourceSP fallbackResource() const override {
47 return m_model->rowCount() > 0 ? m_model->resourceForIndex(m_model->index(0, 0)) : KoResourceSP();
48 }
49
50private:
51 KisAllResourcesModel *m_model;
52};
53}
54
56{
57 // TODO: implement general macro like Q_GLOBAL_STATIC()
58
59 static QBasicAtomicInt guard = Q_BASIC_ATOMIC_INITIALIZER(QtGlobalStatic::Uninitialized);
61 static QBasicMutex mutex;
62 int x = guard.loadAcquire();
63 if (Q_UNLIKELY(x >= QtGlobalStatic::Uninitialized)) {
64 QMutexLocker locker(&mutex);
65 if (guard.loadRelaxed() == QtGlobalStatic::Uninitialized) {
66 d.reset(new KisGlobalResourcesInterface());
67 static struct Cleanup {
68 ~Cleanup() {
69 d.reset();
70 guard.storeRelaxed(QtGlobalStatic::Destroyed);
71 }
72 } cleanup;
73 guard.storeRelease(QtGlobalStatic::Initialized);
74 }
75 }
76
77 return d;
78}
79
The KisAllresourcesModel class provides access to the cache database for a particular resource type....
the main resource source in Krita
ResourceSourceAdapter * createSourceImpl(const QString &type) const override
static KisResourcesInterfaceSP instance()
static KisAllResourcesModel * resourceModel(const QString &resourceType)
a provider-like interface class for accessing resource sources in Krita.
ResourceSourceAdapter & source(const QString &type) const
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
static QMutex mutex
QSharedPointer< KoResource > KoResourceSP