Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGradientMapFilterConfiguration.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the KDE project
3 *
4 * SPDX-FileCopyrightText: 2016 Spencer Brown <sbrown655@gmail.com>
5 * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10#include <QDomDocument>
11
13#include <KoStopGradient.h>
14#include <KoAbstractGradient.h>
15#include <KisDitherWidget.h>
16#include <QBuffer>
17#include <KoMD5Generator.h>
18
20
22 : KisFilterConfiguration(defaultName(), defaultVersion(), resourcesInterface)
23{}
24
26 : KisFilterConfiguration(defaultName(), version, resourcesInterface)
27{}
28
32
37
39{
41
42 // only the first version of the filter loaded the gradient by name
43 if (version() == 1) {
45 if (gradient) {
46 resources << gradient;
47 } else {
48 QString md5sum = this->getString("md5sum");
49 QString gradientName = this->getString("gradientName");
50
51 resources << KoResourceSignature(ResourceType::Gradients, md5sum, "", gradientName);
52 }
53 }
54
55 resources << KisDitherWidget::prepareLinkedResources(*this, "dither/", globalResourcesInterface);
56
57 return resources;
58}
59
61{
63
64 // the second version of the filter embeds the gradient
65 if (version() > 1) {
67
68 // TODO: check if it is okay to resave the gradient on loading
69 QBuffer buffer;
70 buffer.open(QBuffer::WriteOnly);
71 gradient->saveToDevice(&buffer);
72
73 resources << KoEmbeddedResource(KoResourceSignature(ResourceType::Gradients, KoMD5Generator::generateHash(buffer.data()), gradient->filename(), gradient->name()), buffer.data());
74 }
75
76 return resources;
77}
78
80{
81 if (version() == 1) {
82
83 QString md5sum = this->getString("md5sum");
84 QString gradientName = this->getString("gradientName");
86
87 KoAbstractGradientSP resourceGradient = source.bestMatch(md5sum, "", gradientName);
88
89 if (resourceGradient) {
91 gradient->setValid(true);
92 return gradient;
93 } else {
94 qWarning() << "Could not find gradient" << getString("md5sum") << getString("gradientName");
95 }
96 } else if (version() == 2) {
97 QDomDocument document;
98 if (document.setContent(getString("gradientXML", ""))) {
99 const QDomElement gradientElement = document.firstChildElement();
100 if (!gradientElement.isNull()) {
101 const QString gradientType = gradientElement.attribute("type");
103 if (gradientType == "stop") {
104 gradient = KoStopGradient::fromXML(gradientElement).clone().dynamicCast<KoAbstractGradient>();
105 } else if (gradientType == "segment") {
106 gradient = KoSegmentGradient::fromXML(gradientElement).clone().dynamicCast<KoAbstractGradient>();
107 }
108 if (gradient) {
109 gradient->setName(gradientElement.attribute("name", ""));
110 gradient->setFilename(gradient->name() + gradient->defaultFileExtension());
111 gradient->setValid(true);
112 return gradient;
113 }
114 }
115 }
116 }
117 return fallbackGradient ? fallbackGradient : defaultGradient(resourcesInterface());
118}
119
121{
122 return getInt("colorMode", defaultColorMode());
123}
124
126{
127 if (!newGradient) {
128 setProperty("gradientXML", "");
129 return;
130 }
131
132 QDomDocument document;
133 QDomElement gradientElement = document.createElement("gradient");
134 gradientElement.setAttribute("name", newGradient->name());
135 gradientElement.setAttribute("md5sum", newGradient->md5Sum());
136
137 if (newGradient.dynamicCast<KoStopGradient>()) {
138 KoStopGradient *gradient = static_cast<KoStopGradient*>(newGradient.data());
139 gradient->toXML(document, gradientElement);
140 } else if (newGradient.dynamicCast<KoSegmentGradient>()) {
141 KoSegmentGradient *gradient = static_cast<KoSegmentGradient*>(newGradient.data());
142 gradient->toXML(document, gradientElement);
143 }
144
145 document.appendChild(gradientElement);
146 setProperty("gradientXML", document.toString());
147}
148
150{
151 setProperty("colorMode", newColorMode);
152}
153
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
static QList< KoResourceLoadResult > prepareLinkedResources(const KisFilterConfiguration &config, const QString &prefix, KisResourcesInterfaceSP resourcesInterface)
static void factoryConfiguration(KisPropertiesConfiguration &config, const QString &prefix="")
virtual KisFilterConfigurationSP clone() const override
QList< KoResourceLoadResult > linkedResources(KisResourcesInterfaceSP globalResourcesInterface) const override
KoAbstractGradientSP gradient(KoAbstractGradientSP fallbackGradient=nullptr) const
QList< KoResourceLoadResult > embeddedResources(KisResourcesInterfaceSP globalResourcesInterface) const override
KisGradientMapFilterConfiguration(KisResourcesInterfaceSP resourcesInterface)
void setGradient(KoAbstractGradientSP newGradient)
static KoAbstractGradientSP defaultGradient(KisResourcesInterfaceSP resourcesInterface)
static QString generateHash(const QString &filename)
generateHash reads the given file and generates a hex-encoded md5sum for the file.
A simple wrapper object for the main information about the resource.
KoResourceSP clone() const override
static KoSegmentGradient fromXML(const QDomElement &elt)
fromXML get a segment gradient from xml.
KoResourceSP clone() const override
static KoStopGradient fromXML(const QDomElement &elt)
fromXML convert a gradient from xml.
KoStopGradientSP toStopGradient(const QGradientStops &gradient)
Convert a QGradientStop list to a KoStopGradientSP.
const QString Gradients
KisResourcesInterfaceSP resourcesInterface
QString getString(const QString &name, const QString &def=QString()) const
virtual void setProperty(const QString &name, const QVariant &value)
int getInt(const QString &name, int def=0) const