Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_paintop_registry.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QGlobalStatic>
10
11#include <klocalizedstring.h>
12
13#include <KoGenericRegistry.h>
14#include <KoPluginLoader.h>
15#include <KoColorSpace.h>
17#include <KoCompositeOp.h>
18#include <KoID.h>
19
20
21#include "kis_paint_device.h"
22#include "kis_painter.h"
23#include "kis_debug.h"
24#include "kis_layer.h"
25#include "kis_image.h"
27
28Q_GLOBAL_STATIC(KisPaintOpRegistry, s_registryInstance)
29
33
35{
36 Q_FOREACH (const QString & id, keys()) {
37 delete get(id);
38 }
39 dbgRegistry << "Deleting KisPaintOpRegistry";
40}
41
42
44{
45 KoPluginLoader::instance()->load("Krita/Paintop");
46}
47
49{
50 if (!s_registryInstance.exists()) {
51 dbgRegistry << "initializing KisPaintOpRegistry";
52 s_registryInstance->initRegistry();
53 }
54 return s_registryInstance;
55}
56
57#ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND
58void KisPaintOpRegistry::preinitializePaintOpIfNeeded(const KisPaintOpPresetSP preset)
59{
60 if (!preset) return;
61
62 KisPaintOpFactory *f = value(preset->paintOp().id());
63 f->preinitializePaintOpIfNeeded(preset->settings());
64}
65#endif /* HAVE_THREADED_TEXT_RENDERING_WORKAROUND */
66
67KisPaintOp * KisPaintOpRegistry::paintOp(const QString & id, const KisPaintOpSettingsSP settings, KisPainter * painter, KisNodeSP node, KisImageSP image) const
68{
69 if (painter == 0) {
70 warnKrita << " KisPaintOpRegistry::paintOp painter is null";
71 return 0;
72 }
73
74 Q_ASSERT(settings);
75
76 KisPaintOpFactory* f = value(id);
77 if (f) {
78 KisPaintOp * op = f->createOp(settings, painter, node, image);
79 if (op) {
80 return op;
81 }
82 }
83 warnKrita << "Could not create paintop for factory" << id << "with settings" << settings;
84 return 0;
85}
86
88{
89 if (!preset) return 0;
90 if (!painter) return 0;
91 return paintOp(preset->paintOp().id(), preset->settings(), painter, node, image);
92}
93
95{
96 if (preset) {
97 KisPaintOpFactory* f = value(preset->paintOp().id());
98 if (f) {
99 return f->createInterstrokeDataFactory(preset->settings(), preset->resourcesInterface());
100 }
101 }
102
103 return 0;
104}
105
107{
108 KisPaintOpFactory *f = value(id.id());
109 Q_ASSERT(f);
110 if (f) {
111 KisPaintOpSettingsSP settings = f->createSettings(resourcesInterface);
112 settings->setProperty("paintop", id.id());
113 return settings;
114 }
115 return 0;
116}
117
119{
120 KisPaintOpSettingsSP s = createSettings(id, resourcesInterface);
121 if (s.isNull()) {
122 return KisPaintOpPresetSP();
123 }
124
126 preset->setName(i18n("default"));
127
128 preset->setSettings(s);
129 preset->setPaintOp(id);
130 Q_ASSERT(!preset->paintOp().id().isEmpty());
131 preset->setValid(true);
132 return preset;
133}
134
135QIcon KisPaintOpRegistry::icon(const KoID &id) const
136{
137 KisPaintOpFactory* f = value(id.id());
138
139 if (!f) {
140 dbgRegistry << "No paintop" << id.id() << "";
141 QPixmap p = QPixmap(22, 22);
142 p.fill(Qt::transparent);
143 return QIcon(p);
144 }
145
146 return f->icon();
147}
148
150{
151 QList<KoID> answer;
152 Q_FOREACH (const QString & key, keys()) {
153 answer.append(KoID(key, get(key)->name()));
154 }
155
156 return answer;
157}
158
const Params2D p
Q_GLOBAL_STATIC(KisStoragePluginRegistry, s_instance)
static KisPaintOpRegistry * instance()
QList< KoID > listKeys() const
KisPaintOpSettingsSP createSettings(const KoID &id, KisResourcesInterfaceSP resourcesInterface) const
KisPaintOp * paintOp(const KisPaintOpPresetSP preset, KisPainter *painter, KisNodeSP node, KisImageSP image) const
KisInterstrokeDataFactory * createInterstrokeDataFactory(KisPaintOpPresetSP preset) const
KisPaintOpPresetSP defaultPreset(const KoID &id, KisResourcesInterfaceSP resourcesInterface) const
QIcon icon(const KoID &id) const
bool isNull() const
const KisPaintOpFactory * value(const QString &id) const
KisPaintOpFactory * get(const QString &id) const
Definition KoID.h:30
void load(const QString &serviceType, const PluginsConfig &config=PluginsConfig(), QObject *owner=0, bool cache=true)
static KoPluginLoader * instance()
#define warnKrita
Definition kis_debug.h:87
#define dbgRegistry
Definition kis_debug.h:47
QSharedPointer< KisPaintOpPreset > KisPaintOpPresetSP
Definition kis_types.h:235