File indexing completed on 2024-05-19 04:24:17
0001 /* 0002 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "kis_text_brush_factory.h" 0007 0008 #include <QString> 0009 #include <QFont> 0010 #include <kis_dom_utils.h> 0011 #include "kis_text_brush.h" 0012 #include <KoResourceLoadResult.h> 0013 0014 0015 KoResourceLoadResult KisTextBrushFactory::createBrush(const QDomElement& brushDefinition, KisResourcesInterfaceSP resourcesInterface) 0016 { 0017 std::optional<KisBrushModel::BrushData> data = 0018 createBrushModel(brushDefinition, resourcesInterface); 0019 0020 if (data) { 0021 return createBrush(*data, resourcesInterface); 0022 } 0023 0024 // fallback, should never reach! 0025 return KoResourceSignature(ResourceType::Brushes, "", "", ""); 0026 } 0027 0028 KoResourceLoadResult KisTextBrushFactory::createBrush(const KisBrushModel::BrushData& data, KisResourcesInterfaceSP resourcesInterface) 0029 { 0030 Q_UNUSED(resourcesInterface); 0031 0032 KisTextBrushSP brush = KisTextBrushSP(new KisTextBrush()); 0033 0034 QFont font; 0035 font.fromString(data.textBrush.font); 0036 0037 brush->setText(data.textBrush.text); 0038 brush->setFont(font); 0039 brush->setPipeMode(data.textBrush.usePipeMode); 0040 brush->setSpacing(data.common.spacing); 0041 brush->updateBrush(); 0042 0043 return brush; 0044 } 0045 0046 0047 std::optional<KisBrushModel::BrushData> KisTextBrushFactory::createBrushModel(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface) 0048 { 0049 Q_UNUSED(resourcesInterface); 0050 0051 KisBrushModel::BrushData brush; 0052 0053 brush.type = KisBrushModel::Text; 0054 0055 brush.common.spacing = KisDomUtils::toDouble(element.attribute("spacing", "1.0")); 0056 0057 // TODO: these options are not yet present in the file format for the text brush! 0058 //brush.common.angle = KisDomUtils::toDouble(brushDefinition.attribute("angle", "0.0")); 0059 //brush.common.useAutoSpacing = KisDomUtils::toInt(brushDefinition.attribute("useAutoSpacing", "0")); 0060 //brush.common.autoSpacingCoeff = KisDomUtils::toDouble(brushDefinition.attribute("autoSpacingCoeff", "1.0")); 0061 0062 brush.textBrush.text = element.attribute("text", "The quick brown fox ate your text"); 0063 brush.textBrush.font = element.attribute("font"); 0064 brush.textBrush.usePipeMode = element.attribute("pipe", "false") == "true"; 0065 0066 // TODO: how to get the size of the brush without its creation? lazy evaluation? 0067 // brush.textBrush.baseSize = {66, 77}; 0068 0069 brush.textBrush.scale = 1.0; 0070 0071 return {brush}; 0072 } 0073 0074 void KisTextBrushFactory::toXML(QDomDocument &doc, QDomElement &e, const KisBrushModel::BrushData &model) 0075 { 0076 Q_UNUSED(doc); 0077 0078 e.setAttribute("type", id()); 0079 e.setAttribute("BrushVersion", "2"); 0080 0081 e.setAttribute("spacing", KisDomUtils::toString(model.common.spacing)); 0082 e.setAttribute("text", model.textBrush.text); 0083 e.setAttribute("font", model.textBrush.font); 0084 e.setAttribute("pipe", model.textBrush.usePipeMode ? "true" : "false"); 0085 // TODO: scale is not saved 0086 }