Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLocalStrokeResources.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 */
8
9#include "kis_assert.h"
10#include "kis_debug.h"
11
12namespace {
13class LocalResourcesSource : public KisResourcesInterface::ResourceSourceAdapter
14{
15public:
16 LocalResourcesSource(const QString &resourceType, const QList<KoResourceSP> &cachedResources)
17 : KisResourcesInterface::ResourceSourceAdapter(resourceType)
18 , m_resourceType(resourceType)
19 , m_cachedResources(cachedResources)
20 {
21 }
22protected:
23 QVector<KoResourceSP> resourcesForFilename(const QString &filename) const override {
24 QVector<KoResourceSP> resources;
25 Q_FOREACH(KoResourceSP res, m_cachedResources) {
26 if (res->filename() == filename && res->resourceType().first == m_resourceType) {
27 resources << res;
28 }
29 }
30 return resources;
31 }
32
33 QVector<KoResourceSP> resourcesForName(const QString &name) const override {
34 QVector<KoResourceSP> resources;
35 Q_FOREACH(KoResourceSP res, m_cachedResources) {
36 if (res->name() == name && res->resourceType().first == m_resourceType) {
37 resources << res;
38 }
39 }
40 return resources;
41 }
42
43 QVector<KoResourceSP> resourcesForMD5(const QString &md5) const override {
44 QVector<KoResourceSP> resources;
45 Q_FOREACH(KoResourceSP res, m_cachedResources) {
46 if (res->md5Sum() == md5 && res->resourceType().first == m_resourceType) {
47 resources << res;
48 }
49 }
50 return resources;
51 }
52
53public:
54
55 KoResourceSP fallbackResource() const override {
56 auto it = std::find_if(m_cachedResources.begin(),
57 m_cachedResources.end(),
58 [this] (KoResourceSP res) {
59 return res->resourceType().first == this->m_resourceType;
60 });
61 return it != m_cachedResources.end() ? *it : KoResourceSP();
62 }
63
64private:
65 const QString m_resourceType;
66 const QList<KoResourceSP> &m_cachedResources;
67};
68}
69
71{
72public:
74 : localResources(_localResources)
75 {
76
77 // sanity check that we don't have any null resources
79 localResources.removeAll(KoResourceSP());
80 }
81
82
83 }
85};
86
87
92
97
99{
102 {
103 warnKrita << "Attempted to insert a null resource into the local style resource server";
104 return;
105 }
106 d->localResources.append(resource);
107}
108
110{
112 d->localResources.removeAll(resource);
113}
114
116{
117 Q_D(const KisLocalStrokeResources);
118 return new KisLocalStrokeResources(d->localResources);
119}
120
122{
123 Q_D(const KisLocalStrokeResources);
124 return new LocalResourcesSource(type, d->localResources);
125}
KisLocalStrokeResourcesPrivate(const QList< KoResourceSP > &_localResources)
a KisResourcesInterface-like resources storage for preloaded resources
void addResource(KoResourceSP resource)
ResourceSourceAdapter * createSourceImpl(const QString &type) const override
void removeResource(KoResourceSP resource)
KisLocalStrokeResources * clone() const
a provider-like interface class for accessing resource sources in Krita.
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
#define warnKrita
Definition kis_debug.h:87
QSharedPointer< KoResource > KoResourceSP