Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_brush_registry.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <QString>
9
10#include <QGlobalStatic>
11#include <klocalizedstring.h>
12
13#include <KoPluginLoader.h>
14
15#include <kis_debug.h>
16
17#include "KoResourceServer.h"
21
23
24
28
30{
31 Q_FOREACH (const QString & id, keys()) {
32 delete get(id);
33 }
34 dbgRegistry << "deleting KisBrushRegistry";
35}
36
38{
39 if (!s_instance.exists()) {
40 s_instance->add(new KisAutoBrushFactory());
41 s_instance->add(new KisPredefinedBrushFactory("gbr_brush"));
42 s_instance->add(new KisPredefinedBrushFactory("abr_brush"));
43 s_instance->add(new KisTextBrushFactory());
44 s_instance->add(new KisPredefinedBrushFactory("png_brush"));
45 s_instance->add(new KisPredefinedBrushFactory("svg_brush"));
46 }
47 return s_instance;
48}
49
50
51KoResourceLoadResult KisBrushRegistry::createBrush(const QDomElement& element, KisResourcesInterfaceSP resourcesInterface)
52{
53 QString brushType = element.attribute("type");
54
55 if (brushType.isEmpty()) {
56 return KoResourceSignature(ResourceType::Brushes, "", "unknown", "unknown");
57 }
58
59 KisBrushFactory *factory = get(brushType);
60 if (!factory) {
61 return KoResourceSignature(ResourceType::Brushes, "", "unknown", "unknown");
62 }
63
64 return factory->createBrush(element, resourcesInterface);
65}
66
68{
69 QDomDocument doc;
70 QDomElement element = doc.createElement("brush_definition");
71 toXML(doc, element, data);
72 return createBrush(element, resourcesInterface);
73}
74
75std::optional<KisBrushModel::BrushData> KisBrushRegistry::createBrushModel(const QDomElement& element, KisResourcesInterfaceSP resourcesInterface)
76{
77 QString brushType = element.attribute("type");
78
79 if (brushType.isEmpty()) {
80 return std::nullopt;
81 }
82
83 KisBrushFactory *factory = get(brushType);
84
85 if (!factory) {
86 return std::nullopt;
87 }
88
89 return factory->createBrushModel(element, resourcesInterface);
90}
91
92void KisBrushRegistry::toXML(QDomDocument &doc, QDomElement &element, const KisBrushModel::BrushData &model)
93{
94 QString brushType;
95
96 if (model.type == KisBrushModel::Auto) {
97 brushType = "auto_brush";
98 } else if (model.type == KisBrushModel::Text) {
99 brushType = "kis_text_brush";
100 } else {
101 brushType = model.predefinedBrush.subtype;
102 }
103
104 KIS_SAFE_ASSERT_RECOVER_RETURN(!brushType.isEmpty());
105
106 KisBrushFactory *factory = get(brushType);
108
109 factory->toXML(doc, element, model);
110}
Q_GLOBAL_STATIC(KisStoragePluginRegistry, s_instance)
virtual KoResourceLoadResult createBrush(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)=0
virtual std::optional< KisBrushModel::BrushData > createBrushModel(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)=0
virtual void toXML(QDomDocument &doc, QDomElement &element, const KisBrushModel::BrushData &model)=0
static KisBrushRegistry * instance()
KoResourceLoadResult createBrush(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)
void toXML(QDomDocument &doc, QDomElement &element, const KisBrushModel::BrushData &model)
std::optional< KisBrushModel::BrushData > createBrushModel(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)
KisBrushFactory * get(const QString &id) const
A simple wrapper object for the main information about the resource.
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
#define dbgRegistry
Definition kis_debug.h:47
const QString Brushes
PredefinedBrushData predefinedBrush