void KisSelectAllActionFactory::run(KisView2 *view) { KisProcessingApplicator *ap = beginAction(view, i18n("Select All")); KisImageWSP image = view->image(); if (!image->globalSelection()) { ap->applyCommand(new KisSetEmptyGlobalSelectionCommand(image), KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); } struct SelectAll : public KisTransactionBasedCommand { SelectAll(KisImageSP image) : m_image(image) {} KisImageSP m_image; KUndo2Command* paint() { KisSelectionSP selection = m_image->globalSelection(); KisSelectionTransaction transaction(QString(), m_image->undoAdapter(), selection); selection->getOrCreatePixelSelection()->select(m_image->bounds()); return transaction.endAndTake(); } }; ap->applyCommand(new SelectAll(image), KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); endAction(ap, KisOperationConfiguration(id()).toXML()); }
void KisSelectionToVectorActionFactory::run(KisView2 *view) { KisSelectionSP selection = view->selection(); if (selection->hasShapeSelection() || !selection->outlineCacheValid()) { return; } QPainterPath selectionOutline = selection->outlineCache(); QTransform transform = view->canvasBase()->coordinatesConverter()->imageToDocumentTransform(); KoShape *shape = KoPathShape::createShapeFromPainterPath(transform.map(selectionOutline)); shape->setShapeId(KoPathShapeId); /** * Mark a shape that it belongs to a shape selection */ if(!shape->userData()) { shape->setUserData(new KisShapeSelectionMarker); } KisProcessingApplicator *ap = beginAction(view, i18n("Convert to Vector Selection")); ap->applyCommand(view->canvasBase()->shapeController()->addShape(shape), KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); endAction(ap, KisOperationConfiguration(id()).toXML()); }
void KisReselectActionFactory::run(KisView2 *view) { KUndo2Command *cmd = new KisReselectGlobalSelectionCommand(view->image()); KisProcessingApplicator *ap = beginAction(view, cmd->text()); ap->applyCommand(cmd, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); endAction(ap, KisOperationConfiguration(id()).toXML()); }
void KisCopyMergedActionFactory::run(KisView2 *view) { KisImageWSP image = view->image(); image->barrierLock(); KisPaintDeviceSP dev = image->root()->projection(); ActionHelper::copyFromDevice(view, dev); image->unlock(); KisProcessingApplicator *ap = beginAction(view, i18n("Copy Merged")); endAction(ap, KisOperationConfiguration(id()).toXML()); }
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(); } }