diff --git a/krita/krita.action b/krita/krita.action --- a/krita/krita.action +++ b/krita/krita.action @@ -2267,6 +2267,18 @@ false + + + &New Layer from visible + + New layer from visible + New layer from visible + 1000 + 0 + + false + + duplicatelayer &Duplicate Layer or Mask diff --git a/krita/krita.xmlgui b/krita/krita.xmlgui --- a/krita/krita.xmlgui +++ b/krita/krita.xmlgui @@ -159,6 +159,7 @@ New + diff --git a/libs/ui/kis_node_manager.h b/libs/ui/kis_node_manager.h --- a/libs/ui/kis_node_manager.h +++ b/libs/ui/kis_node_manager.h @@ -153,6 +153,10 @@ */ void copyNodesDirect(KisNodeList nodes, KisNodeSP parent, KisNodeSP aboveThis); + /** + * Create new layer from actually visible + */ + void createFromVisible(); void toggleIsolateActiveNode(); void toggleIsolateMode(bool checked); diff --git a/libs/ui/kis_node_manager.cpp b/libs/ui/kis_node_manager.cpp --- a/libs/ui/kis_node_manager.cpp +++ b/libs/ui/kis_node_manager.cpp @@ -282,6 +282,9 @@ action = actionManager->createAction("select_unlocked_layers"); connect(action, SIGNAL(triggered()), this, SLOT(selectUnlockedNodes())); + action = actionManager->createAction("new_from_visible"); + connect(action, SIGNAL(triggered()), this, SLOT(createFromVisible())); + NEW_LAYER_ACTION("add_new_paint_layer", "KisPaintLayer"); NEW_LAYER_ACTION("add_new_group_layer", "KisGroupLayer"); @@ -496,6 +499,14 @@ } +void KisNodeManager::createFromVisible() +{ + KisPaintDeviceSP projection = new KisPaintDevice(*(m_d->view->image()->projection()), false, 0); + KisPaintLayerSP paintLayer = new KisPaintLayer(m_d->view->image(), "Visible", OPACITY_OPAQUE_U8, projection); + KisNodeCommandsAdapter adapter(m_d->view); + adapter.addNode(paintLayer,m_d->view->image()->root(),m_d->view->image()->root()->lastChild()); +} + KisLayerSP KisNodeManager::createPaintLayer() { KisNodeSP activeNode = this->activeNode();