Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_text_brush_factory.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <QFont>
9#include <kis_dom_utils.h>
10#include "kis_text_brush.h"
12
13
14KoResourceLoadResult KisTextBrushFactory::createBrush(const QDomElement& brushDefinition, KisResourcesInterfaceSP resourcesInterface)
15{
16 std::optional<KisBrushModel::BrushData> data =
17 createBrushModel(brushDefinition, resourcesInterface);
18
19 if (data) {
20 return createBrush(*data, resourcesInterface);
21 }
22
23 // fallback, should never reach!
25}
26
28{
29 Q_UNUSED(resourcesInterface);
30
32
33 QFont font;
34 font.fromString(data.textBrush.font);
35
36 brush->setText(data.textBrush.text);
37 brush->setFont(font);
38 brush->setPipeMode(data.textBrush.usePipeMode);
39 brush->setSpacing(data.common.spacing);
40 brush->updateBrush();
41
42 return brush;
43}
44
45
46std::optional<KisBrushModel::BrushData> KisTextBrushFactory::createBrushModel(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)
47{
48 Q_UNUSED(resourcesInterface);
49
51
53
54 brush.common.spacing = KisDomUtils::toDouble(element.attribute("spacing", "1.0"));
55
56 // TODO: these options are not yet present in the file format for the text brush!
57 //brush.common.angle = KisDomUtils::toDouble(brushDefinition.attribute("angle", "0.0"));
58 //brush.common.useAutoSpacing = KisDomUtils::toInt(brushDefinition.attribute("useAutoSpacing", "0"));
59 //brush.common.autoSpacingCoeff = KisDomUtils::toDouble(brushDefinition.attribute("autoSpacingCoeff", "1.0"));
60
61 brush.textBrush.text = element.attribute("text", "The quick brown fox ate your text");
62 brush.textBrush.font = element.attribute("font");
63 brush.textBrush.usePipeMode = element.attribute("pipe", "false") == "true";
64
65 // TODO: how to get the size of the brush without its creation? lazy evaluation?
66 // brush.textBrush.baseSize = {66, 77};
67
68 brush.textBrush.scale = 1.0;
69
70 return {brush};
71}
72
73void KisTextBrushFactory::toXML(QDomDocument &doc, QDomElement &e, const KisBrushModel::BrushData &model)
74{
75 Q_UNUSED(doc);
76
77 e.setAttribute("type", id());
78 e.setAttribute("BrushVersion", "2");
79
80 e.setAttribute("spacing", KisDomUtils::toString(model.common.spacing));
81 e.setAttribute("text", model.textBrush.text);
82 e.setAttribute("font", model.textBrush.font);
83 e.setAttribute("pipe", model.textBrush.usePipeMode ? "true" : "false");
84 // TODO: scale is not saved
85}
void toXML(QDomDocument &doc, QDomElement &element, const KisBrushModel::BrushData &model) override
std::optional< KisBrushModel::BrushData > createBrushModel(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface) override
KoResourceLoadResult createBrush(const QDomElement &brushDefinition, KisResourcesInterfaceSP resourcesInterface) override
A simple wrapper object for the main information about the resource.
QSharedPointer< KisTextBrush > KisTextBrushSP
double toDouble(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)
const QString Brushes