1 /*
2 * This file is part of the KDE project
3 *
4 * Copyright (c) 2016 Spencer Brown <sbrown655@gmail.com>
5 * Copyright (c) 2020 Deif Lou <ginoba@gmail.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10 #include <QDomDocument>
11
12 #include <KoStopGradient.h>
13 #include <KoAbstractGradient.h>
14 #include <KisDitherWidget.h>
15
16 #include "KisGradientMapFilterConfiguration.h"
17
KisGradientMapFilterConfiguration()18 KisGradientMapFilterConfiguration::KisGradientMapFilterConfiguration()
19 : KisFilterConfiguration(defaultName(), defaultVersion())
20 {}
21
KisGradientMapFilterConfiguration(qint32 version)22 KisGradientMapFilterConfiguration::KisGradientMapFilterConfiguration(qint32 version)
23 : KisFilterConfiguration(defaultName(), version)
24 {}
25
gradient() const26 KoAbstractGradientSP KisGradientMapFilterConfiguration::gradient() const
27 {
28 if (version() == 1) {
29 KoAbstractGradient *resourceGradient = KoResourceServerProvider::instance()->gradientServer()->resourceByName(getString("gradientName"));
30 if (resourceGradient) {
31 KoAbstractGradientSP gradient = KoAbstractGradientSP(resourceGradient->clone());
32 gradient->setValid(true);
33 return gradient;
34 } else {
35 qWarning() << "Could not find gradient" << getString("gradientName");
36 }
37 } else if (version() == 2) {
38 QDomDocument document;
39 if (document.setContent(getString("gradientXML", ""))) {
40 const QDomElement gradientElement = document.firstChildElement();
41 if (!gradientElement.isNull()) {
42 const QString gradientType = gradientElement.attribute("type");
43 KoAbstractGradientSP gradient;
44 if (gradientType == "stop") {
45 gradient = KoAbstractGradientSP(KoStopGradient::fromXML(gradientElement).clone());
46 } else if (gradientType == "segment") {
47 gradient = KoAbstractGradientSP(KoSegmentGradient::fromXML(gradientElement).clone());
48 }
49 if (gradient) {
50 gradient->setName(gradientElement.attribute("name", ""));
51 gradient->setValid(true);
52 return gradient;
53 }
54 }
55 }
56 }
57 return defaultGradient();
58 }
59
colorMode() const60 int KisGradientMapFilterConfiguration::colorMode() const
61 {
62 return getInt("colorMode", defaultColorMode());
63 }
64
setGradient(KoAbstractGradientSP newGradient)65 void KisGradientMapFilterConfiguration::setGradient(KoAbstractGradientSP newGradient)
66 {
67 if (!newGradient) {
68 setProperty("gradientXML", "");
69 return;
70 }
71
72 QDomDocument document;
73 QDomElement gradientElement = document.createElement("gradient");
74 gradientElement.setAttribute("name", newGradient->name());
75
76 if (dynamic_cast<KoStopGradient*>(newGradient.data())) {
77 KoStopGradient *gradient = dynamic_cast<KoStopGradient*>(newGradient.data());
78 gradient->toXML(document, gradientElement);
79 } else if (dynamic_cast<KoSegmentGradient*>(newGradient.data())) {
80 KoSegmentGradient *gradient = dynamic_cast<KoSegmentGradient*>(newGradient.data());
81 gradient->toXML(document, gradientElement);
82 }
83
84 document.appendChild(gradientElement);
85 setProperty("gradientXML", document.toString());
86 }
87
setColorMode(int newColorMode)88 void KisGradientMapFilterConfiguration::setColorMode(int newColorMode)
89 {
90 setProperty("colorMode", newColorMode);
91 }
92
setDefaults()93 void KisGradientMapFilterConfiguration::setDefaults()
94 {
95 setGradient(defaultGradient());
96 setColorMode(defaultColorMode());
97 KisDitherWidget::factoryConfiguration(*this, "dither/");
98 }
99