Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPasteActionFactory Struct Reference

#include <KisPasteActionFactories.h>

+ Inheritance diagram for KisPasteActionFactory:

Public Types

enum  Flag { None = 0x0 , PasteAtCursor = 0x1 , ForceNewLayer = 0x2 }
 
- Public Types inherited from KisOperation
enum  Flag { Normal = 0x0 , ReadOnly = 0x1 }
 

Public Member Functions

 KisPasteActionFactory ()
 
void run (Flags flags, KisViewManager *view)
 
void runFromXML (KisViewManager *view, const KisOperationConfiguration &config) override
 
- Public Member Functions inherited from KisOperation
QString id () const
 
 KisOperation (const QString &id)
 
virtual ~KisOperation ()
 

Additional Inherited Members

- Protected Member Functions inherited from KisOperation
KisProcessingApplicator * beginAction (KisViewManager *view, const KUndo2MagicString &actionName, Flags flags=Normal)
 
void endAction (KisProcessingApplicator *applicator, const QString &xmlData)
 

Detailed Description

Definition at line 14 of file KisPasteActionFactories.h.

Member Enumeration Documentation

◆ Flag

Enumerator
None 
PasteAtCursor 
ForceNewLayer 

Definition at line 15 of file KisPasteActionFactories.h.

Constructor & Destructor Documentation

◆ KisPasteActionFactory()

KisPasteActionFactory::KisPasteActionFactory ( )
inline

Definition at line 22 of file KisPasteActionFactories.h.

22: KisOperation("paste-ui-action") {}
KisOperation(const QString &id)

Member Function Documentation

◆ run()

void KisPasteActionFactory::run ( Flags flags,
KisViewManager * view )

TODO: we are relying on a sticky translated string from KisImageLayerAddCommand change the string after Krita 5.2.5

Definition at line 210 of file KisPasteActionFactories.cpp.

211{
212 const bool pasteAtCursorPosition = flags.testFlag(PasteAtCursor);
213
214 KisImageSP image = view->image();
215 if (!image) return;
216
217 const QPointF docPos = view->canvasBase()->canvasController()->currentCursorPosition();
218
219 // Activate the current tool's paste functionality
220 if (view->canvasBase()->toolProxy()->paste()) {
221 // XXX: "Add saving of XML data for Paste of shapes"
222 return;
223 }
224
225 // Paste shapes
226 if (tryPasteShapes(flags, view)) {
227 return;
228 }
229
230 // If no shapes, check for layers
231 if (KisClipboard::instance()->hasLayers()) {
232 const std::optional<QPoint> preferredClipCenter = pasteAtCursorPosition
233 ? std::make_optional(view->canvasBase()->coordinatesConverter()->documentToImage(docPos).toPoint())
234 : std::nullopt;
235
236 if (view->selection()) {
239 KisProcessingApplicator *ap = beginAction(view, kundo2_i18n("Add Layer"));
240 KUndo2Command *deselectCmd = new KisDeselectActiveSelectionCommand(view->selection(), image);
241 ap->applyCommand(deselectCmd);
242 view->nodeManager()->pasteLayersFromClipboard(preferredClipCenter,
243 ap);
244 endAction(ap, KisOperationConfiguration(id()).toXML());
245 } else {
246 view->nodeManager()->pasteLayersFromClipboard(preferredClipCenter);
247 }
248
249 return;
250 }
251
253 if (clipImage) {
254 KisPaintDeviceSP clip = new KisPaintDevice(*clipImage->projection());
255
256 if (pasteAtCursorPosition) {
257 const QPoint imagePos = view->canvasBase()->coordinatesConverter()->documentToImage(docPos).toPoint();
258 KisToolUtils::recenterClip(clip, imagePos);
259 }
260
262 bool renamePastedLayers = KisConfig(true).renamePastedLayers();
263 QString pastedLayerName = renamePastedLayers ? image->nextLayerName() + " " + i18n("(pasted)") :
264 image->nextLayerName();
265 KisPaintLayerSP newLayer = new KisPaintLayer(image.data(),
266 pastedLayerName,
268 KisNodeSP aboveNode = view->activeLayer();
269 KisNodeSP parentNode = aboveNode ? aboveNode->parent() : image->root();
270
271 const QRect rc = clip->extent();
272 KisPainter::copyAreaOptimized(rc.topLeft(), clip, newLayer->paintDevice(), rc);
273
274 KUndo2Command *cmd = new KisImageLayerAddCommand(image, newLayer, parentNode, aboveNode);
275 KisProcessingApplicator *ap = beginAction(view, cmd->text());
277
278 if (view->selection()) {
279 KUndo2Command *deselectCmd = new KisDeselectActiveSelectionCommand(view->selection(), image);
281 }
282
283 if (KisConfig(true).activateTransformToolAfterPaste()) {
284 KUndo2Command *transformToolCmd = new KisTransformToolActivationCommand(view);
286 }
287
288 endAction(ap, KisOperationConfiguration(id()).toXML());
289 }
290}
const quint8 OPACITY_OPAQUE_U8
KUndo2MagicString text() const
KisCoordinatesConverter * coordinatesConverter
KisToolProxy toolProxy
static KisClipboard * instance()
KisImageSP clipImageFromBoardContents(bool showPopup, int overridePasteBehaviour, QPair< bool, PasteFormatBehaviour > source={false, PasteFormatBehaviour::PASTE_FORMAT_ASK}) const
bool renamePastedLayers(bool defaultValue=false) const
_Private::Traits< T >::Result documentToImage(const T &obj) const
The command for adding a layer.
QString nextLayerName(const QString &baseName="") const
Definition kis_image.cc:741
KisPaintDeviceSP projection() const
static void adaptClipToImageColorSpace(KisPaintDeviceSP dev, KisImageSP image)
void pasteLayersFromClipboard(std::optional< QPoint > preferredClipCenter=std::nullopt, KisProcessingApplicator *applicator=nullptr)
void endAction(KisProcessingApplicator *applicator, const QString &xmlData)
KisProcessingApplicator * beginAction(KisViewManager *view, const KUndo2MagicString &actionName, Flags flags=Normal)
QRect extent() const
static void copyAreaOptimized(const QPoint &dstPt, KisPaintDeviceSP src, KisPaintDeviceSP dst, const QRect &originalSrcRect)
void applyCommand(KUndo2Command *command, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
KisCanvas2 * canvasBase() const
Return the canvas base class.
KisSelectionSP selection()
KisLayerSP activeLayer()
Convenience method to get at the active layer.
KisNodeManager * nodeManager() const
The node manager handles everything about nodes.
KisImageWSP image() const
Return the image this view is displaying.
KoCanvasController * canvasController() const
virtual QPointF currentCursorPosition() const =0
bool paste()
Forwarded to the current KoToolBase.
KUndo2MagicString kundo2_i18n(const char *text)
void recenterClip(KisPaintDeviceSP clip, const QPoint &newCenter)
KisNodeWSP parent
Definition kis_node.cpp:86
KisPaintDeviceSP paintDevice

References KisViewManager::activeLayer(), KisImportCatcher::adaptClipToImageColorSpace(), KisProcessingApplicator::applyCommand(), KisStrokeJobData::BARRIER, KisOperation::beginAction(), KisViewManager::canvasBase(), KoCanvasBase::canvasController(), KisClipboard::clipImageFromBoardContents(), KisCanvas2::coordinatesConverter, KisPainter::copyAreaOptimized(), KoCanvasController::currentCursorPosition(), KisSharedPtr< T >::data(), KisCoordinatesConverter::documentToImage(), KisOperation::endAction(), KisPaintDevice::extent(), KisViewManager::image(), KisClipboard::instance(), kundo2_i18n(), KisImage::nextLayerName(), KisViewManager::nodeManager(), KisStrokeJobData::NORMAL, OPACITY_OPAQUE_U8, KisPaintLayer::paintDevice, KisNode::parent, KoToolProxy::paste(), PasteAtCursor, KisNodeManager::pasteLayersFromClipboard(), KisImage::projection(), KisToolUtils::recenterClip(), KisConfig::renamePastedLayers(), KisNodeFacade::root, KisViewManager::selection(), KisStrokeJobData::SEQUENTIAL, KUndo2Command::text(), and KisCanvas2::toolProxy.

◆ runFromXML()

void KisPasteActionFactory::runFromXML ( KisViewManager * view,
const KisOperationConfiguration & config )
inlineoverridevirtual

Reimplemented from KisOperation.

Definition at line 24 of file KisPasteActionFactories.h.

24 {
25 Flags flags;
26 flags.setFlag(PasteAtCursor, config.getBool("paste-at-cursor-position", false));
27 flags.setFlag(ForceNewLayer, config.getBool("force-new-layer", false));
28 run(flags, view);
29 }
void run(Flags flags, KisViewManager *view)
bool getBool(const QString &name, bool def=false) const

References KisPropertiesConfiguration::getBool().


The documentation for this struct was generated from the following files: