Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_brush_import.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "kis_brush_import.h"
8
9#include <QCheckBox>
10#include <QBuffer>
11#include <QSlider>
12#include <QApplication>
13
14#include <kpluginfactory.h>
15
16#include <KoColorSpace.h>
19
20#include <KisDocument.h>
21
22#include <kis_transaction.h>
23#include <kis_paint_device.h>
24#include <kis_image.h>
25#include <kis_paint_layer.h>
26#include <kis_node.h>
27#include <kis_group_layer.h>
28
29#include <kis_gbr_brush.h>
30#include <kis_imagepipe_brush.h>
33
34K_PLUGIN_FACTORY_WITH_JSON(KisBrushImportFactory, "krita_brush_import.json", registerPlugin<KisBrushImport>();)
35
36KisBrushImport::KisBrushImport(QObject *parent, const QVariantList &) : KisImportExportFilter(parent)
37{
38}
39
43
44
46{
48
49 if (mimeType() == "image/x-gimp-brush") {
50 brush = toQShared(new KisGbrBrush(filename()));
51 }
52 else if (mimeType() == "image/x-gimp-brush-animated") {
53 brush = toQShared(new KisImagePipeBrush(filename()));
54 }
55 else {
57 }
58
59 if (!brush->loadFromDevice(io, KisGlobalResourcesInterface::instance())) {
61 }
62
63 if (!brush->valid()) {
65 }
66
67 const KoColorSpace *colorSpace = 0;
68 if (brush->isImageType()) {
69 colorSpace = KoColorSpaceRegistry::instance()->rgb8();
70 brush->setBrushApplication(IMAGESTAMP);
71 }
72 else {
74 }
75
76 KisImageSP image = new KisImage(document->createUndoStore(), brush->width(), brush->height(), colorSpace, brush->name());
77 image->setProperty("brushspacing", brush->spacing());
78
79 KisImagePipeBrushSP pipeBrush = brush.dynamicCast<KisImagePipeBrush>();
80 if (pipeBrush) {
81 QVector<KisGbrBrushSP> brushes = pipeBrush->brushes();
82 for(int i = brushes.size(); i > 0; i--) {
83 KisGbrBrushSP subbrush = brushes.at(i - 1);
84 const KoColorSpace *subColorSpace = 0;
85 if (subbrush->isImageType()) {
86 subColorSpace = KoColorSpaceRegistry::instance()->rgb8();
87 subbrush->setBrushApplication(IMAGESTAMP);
88 }
89 else {
91 }
92 KisPaintLayerSP layer = new KisPaintLayer(image, image->nextLayerName(), 255, subColorSpace);
93 layer->paintDevice()->convertFromQImage(subbrush->brushTipImage(), 0, 0, 0);
94 image->addNode(layer, image->rootLayer());
95 }
96 KisAnnotationSP ann = new KisAnimatedBrushAnnotation(pipeBrush->parasite());
97 image->addAnnotation(ann);
98 }
99 else {
100 KisPaintLayerSP layer = new KisPaintLayer(image, image->nextLayerName(), 255, colorSpace);
101 layer->paintDevice()->convertFromQImage(brush->brushTipImage(), 0, 0, 0);
102 image->addNode(layer, image->rootLayer(), 0);
103 }
104
105 document->setCurrentImage(image);
107
108}
109#include "kis_brush_import.moc"
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
KisImportExportErrorCode convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration=0) override
KisBrushImport(QObject *parent, const QVariantList &)
~KisBrushImport() override
static KisResourcesInterfaceSP instance()
void addAnnotation(KisAnnotationSP annotation)
KisGroupLayerSP rootLayer() const
QString nextLayerName(const QString &baseName="") const
Definition kis_image.cc:715
The base class for import and export filters.
void convertFromQImage(const QImage &image, const KoColorProfile *profile, qint32 offsetX=0, qint32 offsetY=0)
QString id() const
Definition KoID.cpp:63
K_PLUGIN_FACTORY_WITH_JSON(KritaASCCDLFactory, "kritaasccdl.json", registerPlugin< KritaASCCDL >();) KritaASCCDL
@ IMAGESTAMP
Definition kis_brush.h:40
QSharedPointer< T > toQShared(T *ptr)
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
KisPaintDeviceSP paintDevice
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())