File indexing completed on 2024-06-23 04:27:10
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_brush_import.h" 0008 0009 #include <QCheckBox> 0010 #include <QBuffer> 0011 #include <QSlider> 0012 #include <QApplication> 0013 0014 #include <kpluginfactory.h> 0015 #include <QFileInfo> 0016 0017 #include <KoColorSpace.h> 0018 #include <KoColorSpaceRegistry.h> 0019 #include <KoColorModelStandardIds.h> 0020 0021 #include <KisDocument.h> 0022 0023 #include <kis_transaction.h> 0024 #include <kis_paint_device.h> 0025 #include <kis_image.h> 0026 #include <kis_paint_layer.h> 0027 #include <kis_node.h> 0028 #include <kis_group_layer.h> 0029 0030 #include <kis_gbr_brush.h> 0031 #include <kis_imagepipe_brush.h> 0032 #include <KisAnimatedBrushAnnotation.h> 0033 #include <KisGlobalResourcesInterface.h> 0034 0035 K_PLUGIN_FACTORY_WITH_JSON(KisBrushImportFactory, "krita_brush_import.json", registerPlugin<KisBrushImport>();) 0036 0037 KisBrushImport::KisBrushImport(QObject *parent, const QVariantList &) : KisImportExportFilter(parent) 0038 { 0039 } 0040 0041 KisBrushImport::~KisBrushImport() 0042 { 0043 } 0044 0045 0046 KisImportExportErrorCode KisBrushImport::convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP /*configuration*/) 0047 { 0048 QSharedPointer<KisColorfulBrush> brush; 0049 0050 if (mimeType() == "image/x-gimp-brush") { 0051 brush = toQShared(new KisGbrBrush(filename())); 0052 } 0053 else if (mimeType() == "image/x-gimp-brush-animated") { 0054 brush = toQShared(new KisImagePipeBrush(filename())); 0055 } 0056 else { 0057 return ImportExportCodes::FileFormatIncorrect; 0058 } 0059 0060 if (!brush->loadFromDevice(io, KisGlobalResourcesInterface::instance())) { 0061 return ImportExportCodes::FileFormatIncorrect; 0062 } 0063 0064 if (!brush->valid()) { 0065 return ImportExportCodes::FileFormatIncorrect;; 0066 } 0067 0068 const KoColorSpace *colorSpace = 0; 0069 if (brush->isImageType()) { 0070 colorSpace = KoColorSpaceRegistry::instance()->rgb8(); 0071 brush->setBrushApplication(IMAGESTAMP); 0072 } 0073 else { 0074 colorSpace = KoColorSpaceRegistry::instance()->colorSpace(GrayAColorModelID.id(), Integer8BitsColorDepthID.id(), ""); 0075 } 0076 0077 KisImageSP image = new KisImage(document->createUndoStore(), brush->width(), brush->height(), colorSpace, brush->name()); 0078 image->setProperty("brushspacing", brush->spacing()); 0079 0080 KisImagePipeBrushSP pipeBrush = brush.dynamicCast<KisImagePipeBrush>(); 0081 if (pipeBrush) { 0082 QVector<KisGbrBrushSP> brushes = pipeBrush->brushes(); 0083 for(int i = brushes.size(); i > 0; i--) { 0084 KisGbrBrushSP subbrush = brushes.at(i - 1); 0085 const KoColorSpace *subColorSpace = 0; 0086 if (subbrush->isImageType()) { 0087 subColorSpace = KoColorSpaceRegistry::instance()->rgb8(); 0088 subbrush->setBrushApplication(IMAGESTAMP); 0089 } 0090 else { 0091 subColorSpace = KoColorSpaceRegistry::instance()->colorSpace(GrayAColorModelID.id(), Integer8BitsColorDepthID.id(), ""); 0092 } 0093 KisPaintLayerSP layer = new KisPaintLayer(image, image->nextLayerName(), 255, subColorSpace); 0094 layer->paintDevice()->convertFromQImage(subbrush->brushTipImage(), 0, 0, 0); 0095 image->addNode(layer, image->rootLayer()); 0096 } 0097 KisAnnotationSP ann = new KisAnimatedBrushAnnotation(pipeBrush->parasite()); 0098 image->addAnnotation(ann); 0099 } 0100 else { 0101 KisPaintLayerSP layer = new KisPaintLayer(image, image->nextLayerName(), 255, colorSpace); 0102 layer->paintDevice()->convertFromQImage(brush->brushTipImage(), 0, 0, 0); 0103 image->addNode(layer, image->rootLayer(), 0); 0104 } 0105 0106 document->setCurrentImage(image); 0107 return ImportExportCodes::OK; 0108 0109 } 0110 #include "kis_brush_import.moc"