[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