KisNodeSP KisKraLoader::loadNodes(const KoXmlElement& element, KisImageWSP image, KisNodeSP parent) { KoXmlNode node = element.firstChild(); KoXmlNode child; if (!node.isNull()) { if (node.isElement()) { if (node.nodeName().toUpper() == LAYERS.toUpper() || node.nodeName().toUpper() == MASKS.toUpper()) { for (child = node.lastChild(); !child.isNull(); child = child.previousSibling()) { KisNodeSP node = loadNode(child.toElement(), image, parent); if (node) { image->nextLayerName(); // Make sure the nameserver is current with the number of nodes. image->addNode(node, parent); if (node->inherits("KisLayer") && child.childNodesCount() > 0) { loadNodes(child.toElement(), image, node); } } } } } } return parent; }
void KisPasteActionFactory::run(KisView2 *view) { KisImageWSP image = view->image(); //figure out where to position the clip // XXX: Fix this for internal points & zoom! (BSAR) QWidget * w = view->canvas(); QPoint center = QPoint(w->width() / 2, w->height() / 2); QPoint bottomright = QPoint(w->width(), w->height()); if (bottomright.x() > image->width()) center.setX(image->width() / 2); if (bottomright.y() > image->height()) center.setY(image->height() / 2); const KoCanvasBase* canvasBase = view->canvasBase(); const KoViewConverter* viewConverter = view->canvasBase()->viewConverter(); KisPaintDeviceSP clip = KisClipboard::instance()->clip( QPoint( viewConverter->viewToDocumentX(canvasBase->canvasController()->canvasOffsetX()) + center.x(), viewConverter->viewToDocumentY(canvasBase->canvasController()->canvasOffsetY()) + center.y())); if (clip) { // Pasted layer content could be outside image bounds and invisible, if that is the case move content into the bounds QRect exactBounds = clip->exactBounds(); if (!exactBounds.isEmpty() && !exactBounds.intersects(image->bounds())) { clip->setX(clip->x() - exactBounds.x()); clip->setY(clip->y() - exactBounds.y()); } KisPaintLayer *newLayer = new KisPaintLayer(image.data(), image->nextLayerName() + i18n("(pasted)"), OPACITY_OPAQUE_U8, clip); KisNodeSP aboveNode = view->activeLayer(); KisNodeSP parentNode = aboveNode ? aboveNode->parent() : image->root(); KUndo2Command *cmd = new KisImageLayerAddCommand(image, newLayer, parentNode, aboveNode); KisProcessingApplicator *ap = beginAction(view, cmd->text()); ap->applyCommand(cmd, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::NORMAL); endAction(ap, KisOperationConfiguration(id()).toXML()); } else { #ifdef __GNUC__ #warning "Add saving of XML data for Paste of shapes" #endif view->canvasBase()->toolProxy()->paste(); } }
void KisPasteActionFactory::run(KisViewManager *view) { KisImageWSP image = view->image(); if (!image) return; KisPaintDeviceSP clip = KisClipboard::instance()->clip(image->bounds(), true); if (clip) { KisPaintLayer *newLayer = new KisPaintLayer(image.data(), image->nextLayerName() + i18n("(pasted)"), OPACITY_OPAQUE_U8, clip); KisNodeSP aboveNode = view->activeLayer(); KisNodeSP parentNode = aboveNode ? aboveNode->parent() : image->root(); KUndo2Command *cmd = new KisImageLayerAddCommand(image, newLayer, parentNode, aboveNode); KisProcessingApplicator *ap = beginAction(view, cmd->text()); ap->applyCommand(cmd, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::NORMAL); endAction(ap, KisOperationConfiguration(id()).toXML()); } else { // XXX: "Add saving of XML data for Paste of shapes" view->canvasBase()->toolProxy()->paste(); } }
void Imagesplit::saveAsImage(QRect imgSize, QString mimeType, QUrl url) { KisImageWSP image = m_view->image(); KisDocument *d = KisPart::instance()->createDocument(); d->prepareForImport(); KisImageWSP dst = new KisImage(d->createUndoStore(), imgSize.width(), imgSize.height(), image->colorSpace(), image->objectName()); dst->setResolution(image->xRes(), image->yRes()); d->setCurrentImage(dst); KisPaintLayer* paintLayer = new KisPaintLayer(dst, dst->nextLayerName(), 255); KisPainter gc(paintLayer->paintDevice()); gc.bitBlt(QPoint(0, 0), image->projection(), imgSize); dst->addNode(paintLayer, KisNodeSP(0)); dst->refreshGraph(); d->setOutputMimeType(mimeType.toLatin1()); d->exportDocument(url); delete d; }