[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/krita/ui/flake
From: Cyrille Berger <cyb () lepi ! org>
Date: 2009-09-01 22:35:41
Message-ID: 1251844541.692172.7676.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1018602 by berger:
Duplicate the shapes.
For some reason, the shapes are also, somewhat, added to the original layer.
CCBUG:205645
M +67 -8 kis_shape_layer.cc
M +4 -0 kis_shape_layer.h
--- trunk/koffice/krita/ui/flake/kis_shape_layer.cc #1018601:1018602
@@ -1,6 +1,7 @@
/*
* Copyright (c) 2006-2008 Boudewijn Rempt <boud@valdyas.org>
* Copyright (c) 2007 Thomas Zander <zander@kde.org>
+ * Copyright (c) 2009 Cyrille Berger <cberger@cberger.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -70,6 +71,10 @@
#include <kis_painter.h>
#include "kis_node_visitor.h"
#include "kis_effect_mask.h"
+#include <KoShapeOdfSaveHelper.h>
+#include <KoDrag.h>
+#include <KoOdf.h>
+#include <KoOdfPaste.h>
class KisShapeLayer::Private
{
@@ -92,12 +97,73 @@
, m_d(new Private())
{
KoShapeContainer::setParent(parent);
+ initShapeLayer(controller);
+}
+
+
+
+class KisShapeLayerShapePaste : public KoOdfPaste
+{
+ public:
+ KisShapeLayerShapePaste(KisShapeLayer* _container, KoShapeControllerBase* \
_controller) : m_container(_container), m_controller(_controller) {} + virtual \
~KisShapeLayerShapePaste() {} + virtual bool process(const KoXmlElement & body, \
KoOdfReadStore & odfStore) + {
+ KoOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store());
+ KoShapeLoadingContext context(loadingContext, m_controller->dataCenterMap());
+ KoXmlElement child;
+ forEachElement(child, body) {
+ KoShape * shape = KoShapeRegistry::instance()->createShapeFromOdf(child, \
context); + if (shape) {
+ m_container->addChild(shape);
+ }
+ }
+ return true;
+ }
+ private:
+ KisShapeLayer* m_container;
+ KoShapeControllerBase* m_controller;
+};
+
+
+KisShapeLayer::KisShapeLayer(const KisShapeLayer& _rhs) : KisExternalLayer(_rhs), \
m_d(new Private()) +{
+ KoShapeContainer::setParent(_rhs.KoShapeContainer::parent());
+ initShapeLayer(_rhs.m_d->controller);
+
+ KoShapeOdfSaveHelper saveHelper(_rhs.childShapes());
+ KoDrag drag;
+ drag.setOdf(KoOdf::mimeType(KoOdf::Text), saveHelper);
+ QMimeData* mimeData = drag.mimeData();
+
+ Q_ASSERT(mimeData->hasFormat(KoOdf::mimeType(KoOdf::Text)));
+
+ KisShapeLayerShapePaste paste(this, m_d->controller);
+ bool success = paste.paste(KoOdf::Text, mimeData);
+ Q_ASSERT(success);
+
+/* KisShapeLayer* rhs = const_cast<KisShapeLayer*>(&_rhs);
+ foreach(KoShape* shape, childShapes())
+ {
+ rhs->removeChild(shape);
+ }*/
+}
+
+KisShapeLayer::~KisShapeLayer()
+{
+ delete m_d->converter;
+ delete m_d->canvas;
+ delete m_d;
+}
+
+void KisShapeLayer::initShapeLayer(KoShapeControllerBase* controller)
+{
setShapeId(KIS_SHAPE_LAYER_ID);
m_d->converter = new KisImageViewConverter(image());
m_d->x = 0;
m_d->y = 0;
- m_d->projection = new KisPaintDevice(img->colorSpace());
+ m_d->projection = new KisPaintDevice(image()->colorSpace());
m_d->canvas = new KisShapeLayerCanvas(this, m_d->converter);
m_d->canvas->setProjection(m_d->projection);
m_d->controller = controller;
@@ -105,13 +171,6 @@
connect(m_d->canvas->shapeManager(), SIGNAL(selectionChanged()), this, \
SLOT(selectionChanged())); }
-KisShapeLayer::~KisShapeLayer()
-{
- delete m_d->converter;
- delete m_d->canvas;
- delete m_d;
-}
-
bool KisShapeLayer::allowAsChild(KisNodeSP node) const
{
if (node->inherits("KisMask"))
--- trunk/koffice/krita/ui/flake/kis_shape_layer.h #1018601:1018602
@@ -56,7 +56,11 @@
public:
KisShapeLayer(KoShapeContainer * parent, KoShapeControllerBase* shapeController, \
KisImageSP img, const QString &name, quint8 opacity); + KisShapeLayer(const \
KisShapeLayer& _rhs); virtual ~KisShapeLayer();
+private:
+ void initShapeLayer(KoShapeControllerBase* controller);
+public:
KisNodeSP clone() const {
return KisNodeSP(new KisShapeLayer(*this));
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic