[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [Calligra] e5c2a51: added action to rasterize a shape layer
From: Sven Langkamp <sven.langkamp () gmail ! com>
Date: 2010-12-07 22:26:31
Message-ID: 20101207222631.7202BA60AE () git ! kde ! org
[Download RAW message or body]
commit e5c2a51681d6f9d22dc528fe05097ae29fbcd1de
branch master
Author: Sven Langkamp <sven.langkamp@gmail.com>
Date: Tue Dec 7 23:25:32 2010 +0100
added action to rasterize a shape layer
diff --git a/krita/krita.rc b/krita/krita.rc
index ba917b0..5df33d9 100644
--- a/krita/krita.rc
+++ b/krita/krita.rc
@@ -102,6 +102,7 @@
<Separator/>
<Action name="merge_layer"/>
<Action name="flatten_layer"/>
+ <Action name="rasterize_layer"/>
<Action name="merge_all_shape_layers"/>
<Action name="flatten_image"/>
</Menu>
diff --git a/krita/ui/kis_layer_manager.cc b/krita/ui/kis_layer_manager.cc
index dfc71fa..a30a5c8 100644
--- a/krita/ui/kis_layer_manager.cc
+++ b/krita/ui/kis_layer_manager.cc
@@ -93,6 +93,7 @@ KisLayerManager::KisLayerManager(KisView2 * view, KisDoc2 * doc)
, m_actLayerVis(false)
, m_imageResizeToLayer(0)
, m_flattenLayer(0)
+ , m_rasterizeLayer(0)
, m_activeLayer(0)
, m_commandsAdapter(new KisNodeCommandsAdapter(m_view))
{
@@ -143,6 +144,10 @@ void KisLayerManager::setup(KActionCollection * actionCollection)
actionCollection->addAction("flatten_layer", m_flattenLayer);
connect(m_flattenLayer, SIGNAL(triggered()), this, SLOT(flattenLayer()));
+ m_rasterizeLayer = new KAction(i18n("Rasterize Layer"), this);
+ actionCollection->addAction("rasterize_layer", m_rasterizeLayer);
+ connect(m_rasterizeLayer, SIGNAL(triggered()), this, SLOT(rasterizeLayer()));
+
m_layerSaveAs = new KAction(KIcon("document-save"), i18n("Save Layer as Image..."), this);
actionCollection->addAction("save_layer_as_image", m_layerSaveAs);
connect(m_layerSaveAs, SIGNAL(triggered()), this, SLOT(saveLayerAsImage()));
@@ -180,6 +185,7 @@ void KisLayerManager::updateGUI()
m_imageFlatten->setEnabled(nlayers > 1);
m_imageMergeLayer->setEnabled(nlayers > 1 && layer && layer->prevSibling());
m_flattenLayer->setEnabled(nlayers > 1 && layer && layer->firstChild());
+ m_rasterizeLayer->setEnabled(enable && layer->inherits("KisShapeLayer"));
m_imageResizeToLayer->setEnabled(activeLayer());
@@ -836,6 +842,32 @@ void KisLayerManager::flattenLayer()
m_view->updateGUI();
}
+void KisLayerManager::rasterizeLayer()
+{
+ KisImageWSP image = m_view->image();
+ if (!image) return;
+
+ KisLayerSP layer = activeLayer();
+ if (!layer) return;
+
+ KisPaintLayerSP paintLayer = new KisPaintLayer(image, layer->name(), layer->opacity());
+ KisPainter gc(paintLayer->paintDevice());
+ QRect rc = layer->projection()->exactBounds();
+ gc.bitBlt(rc.topLeft(), layer->projection(), rc);
+
+ m_commandsAdapter->beginMacro(i18n("Rasterize Layer"));
+ m_commandsAdapter->addNode(paintLayer.data(), layer->parent().data(), layer.data());
+
+ int childCount = layer->childCount();
+ for (int i = 0; i < childCount; i++) {
+ m_commandsAdapter->moveNode(layer->firstChild(), paintLayer, paintLayer->lastChild());
+ }
+ m_commandsAdapter->removeNode(layer);
+ m_commandsAdapter->endMacro();
+ updateGUI();
+}
+
+
void KisLayerManager::layersUpdated()
{
KisLayerSP layer = activeLayer();
diff --git a/krita/ui/kis_layer_manager.h b/krita/ui/kis_layer_manager.h
index 3b1ea7a..0dd49e6 100644
--- a/krita/ui/kis_layer_manager.h
+++ b/krita/ui/kis_layer_manager.h
@@ -95,6 +95,7 @@ public slots:
void flattenImage();
void mergeLayer();
void flattenLayer();
+ void rasterizeLayer();
void layersUpdated();
@@ -139,6 +140,7 @@ private:
bool m_actLayerVis;
KAction *m_imageResizeToLayer;
KAction *m_flattenLayer;
+ KAction *m_rasterizeLayer;
KisLayerSP m_activeLayer;
KisNodeCommandsAdapter* m_commandsAdapter;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic