File indexing completed on 2025-02-02 04:22:09
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org> 0003 * SPDX-FileCopyrightText: 2008 Sven Langkamp <sven.langkamp@gmail.com> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "kis_brush_option.h" 0009 0010 #include <QDomDocument> 0011 #include <QDomElement> 0012 0013 #include "kis_properties_configuration.h" 0014 #include <KisPaintopSettingsIds.h> 0015 #include <kis_brush.h> 0016 0017 #include <KoCanvasResourcesInterface.h> 0018 #include <KoCanvasResourcesIds.h> 0019 #include <KoAbstractGradient.h> 0020 #include <KoResourceLoadResult.h> 0021 0022 void KisBrushOptionProperties::writeOptionSettingImpl(KisPropertiesConfiguration *setting) const 0023 { 0024 if (!m_brush) return; 0025 0026 QDomDocument d; 0027 QDomElement e = d.createElement("Brush"); 0028 m_brush->toXML(d, e); 0029 d.appendChild(e); 0030 setting->setProperty("brush_definition", d.toString()); 0031 } 0032 0033 QDomElement getBrushXMLElement(const KisPropertiesConfiguration *setting) 0034 { 0035 QDomElement element; 0036 0037 QString brushDefinition = setting->getString("brush_definition"); 0038 0039 if (!brushDefinition.isEmpty()) { 0040 QDomDocument d; 0041 d.setContent(brushDefinition, false); 0042 element = d.firstChildElement("Brush"); 0043 } 0044 0045 return element; 0046 } 0047 0048 void KisBrushOptionProperties::readOptionSettingResourceImpl(const KisPropertiesConfiguration *setting, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface) 0049 { 0050 QDomElement element = getBrushXMLElement(setting); 0051 if (!element.isNull()) { 0052 m_brush = KisBrush::fromXML(element, resourcesInterface); 0053 if (m_brush && m_brush->applyingGradient() && canvasResourcesInterface) { 0054 KoAbstractGradientSP gradient = canvasResourcesInterface->resource(KoCanvasResource::CurrentGradient).value<KoAbstractGradientSP>()->cloneAndBakeVariableColors(canvasResourcesInterface); 0055 m_brush->setGradient(gradient); 0056 } 0057 } 0058 } 0059 0060 QList<KoResourceLoadResult> KisBrushOptionProperties::prepareLinkedResourcesImpl(const KisPropertiesConfiguration *settings, KisResourcesInterfaceSP resourcesInterface) const 0061 { 0062 QList<KoResourceLoadResult> resources; 0063 QDomElement element = getBrushXMLElement(settings); 0064 if (element.isNull()) return resources; 0065 0066 KoResourceLoadResult result = KisBrush::fromXMLLoadResult(element, resourcesInterface); 0067 0068 KoResourceSP resource = result.resource(); 0069 if (!resource || !resource->isEphemeral()) { 0070 resources << result; 0071 } 0072 0073 return resources; 0074 } 0075 0076 QList<KoResourceLoadResult> KisBrushOptionProperties::prepareEmbeddedResourcesImpl(const KisPropertiesConfiguration *settings, KisResourcesInterfaceSP resourcesInterface) const 0077 { 0078 Q_UNUSED(settings); 0079 Q_UNUSED(resourcesInterface); 0080 return {}; 0081 } 0082 0083 enumBrushApplication KisBrushOptionProperties::brushApplication(const KisPropertiesConfiguration *settings, KisResourcesInterfaceSP resourcesInterface) 0084 { 0085 QList<KoResourceSP> resources; 0086 0087 QDomElement element = getBrushXMLElement(settings); 0088 if (element.isNull()) return ALPHAMASK; 0089 0090 KisBrushSP brush = KisBrush::fromXML(element, resourcesInterface); 0091 0092 return brush ? brush->brushApplication() : ALPHAMASK; 0093 } 0094 0095 #ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND 0096 0097 #include "kis_text_brush_factory.h" 0098 0099 bool KisBrushOptionProperties::isTextBrush(const KisPropertiesConfiguration *setting) 0100 { 0101 static QString textBrushId = KisTextBrushFactory().id(); 0102 0103 QDomElement element = getBrushXMLElement(setting); 0104 QString brushType = element.attribute("type"); 0105 0106 return brushType == textBrushId; 0107 } 0108 0109 #endif /* HAVE_THREADED_TEXT_RENDERING_WORKAROUND */ 0110 0111 KisBrushSP KisBrushOptionProperties::brush() const 0112 { 0113 return m_brush; 0114 } 0115 0116 void KisBrushOptionProperties::setBrush(KisBrushSP brush) 0117 { 0118 m_brush = brush; 0119 }