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

#include <kis_filter_selection_operation.h>

+ Inheritance diagram for KisFilterSelectionOperation:

Public Member Functions

 KisFilterSelectionOperation (const QString &id)
 
void runFilter (KisSelectionFilter *filter, KisViewManager *view, const KisOperationConfiguration &config)
 
- Public Member Functions inherited from KisOperation
QString id () const
 
 KisOperation (const QString &id)
 
virtual void runFromXML (KisViewManager *view, const KisOperationConfiguration &config)
 
virtual ~KisOperation ()
 

Additional Inherited Members

- Protected Member Functions inherited from KisOperation
KisProcessingApplicatorbeginAction (KisViewManager *view, const KUndo2MagicString &actionName)
 
void endAction (KisProcessingApplicator *applicator, const QString &xmlData)
 

Detailed Description

Definition at line 17 of file kis_filter_selection_operation.h.

Constructor & Destructor Documentation

◆ KisFilterSelectionOperation()

KisFilterSelectionOperation::KisFilterSelectionOperation ( const QString & id)
inline

Definition at line 18 of file kis_filter_selection_operation.h.

18: KisOperation(id) {}
KisOperation(const QString &id)

Member Function Documentation

◆ runFilter()

void KisFilterSelectionOperation::runFilter ( KisSelectionFilter * filter,
KisViewManager * view,
const KisOperationConfiguration & config )

Definition at line 22 of file kis_filter_selection_operation.cpp.

23{
24 KisSelectionSP selection = view->selection();
25 if (!selection) return;
26
27 struct FilterSelection : public KisTransactionBasedCommand {
28 FilterSelection(KisImageSP image, KisSelectionSP sel, KisSelectionFilter *filter)
29 : m_image(image), m_sel(sel), m_filter(filter) {}
30 ~FilterSelection() override { delete m_filter;}
31 KisImageSP m_image;
32 KisSelectionSP m_sel;
33 KisSelectionFilter *m_filter;
34
35 KUndo2Command* paint() override {
36 KisPixelSelectionSP mergedSelection = m_sel->pixelSelection();
37 KisTransaction transaction(mergedSelection);
38 QRect processingRect = m_filter->changeRect(mergedSelection->selectedExactRect(), mergedSelection->defaultBounds());
39 m_filter->process(mergedSelection, processingRect);
40 KUndo2Command *savedCommand = transaction.endAndTake();
41 mergedSelection->setDirty(processingRect);
42 if (m_sel->selectedExactRect().isEmpty() || m_sel->pixelSelection()->outline().isEmpty()) {
44 cmd->addCommand(savedCommand);
45 cmd->addCommand(new KisDeselectActiveSelectionCommand(m_sel, m_image));
46 savedCommand = cmd;
47 }
48
49 return savedCommand;
50 }
51 };
52
53 KisProcessingApplicator *ap = beginAction(view, filter->name());
54 ap->applyCommand(new FilterSelection(view->image(), selection, filter),
56 endAction(ap, config.toXML());
57}
KisProcessingApplicator * beginAction(KisViewManager *view, const KUndo2MagicString &actionName)
void endAction(KisProcessingApplicator *applicator, const QString &xmlData)
void setDirty(const QRect &rc)
KisDefaultBoundsBaseSP defaultBounds() const
void applyCommand(KUndo2Command *command, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
virtual QRect changeRect(const QRect &rect, KisDefaultBoundsBaseSP defaultBounds)
virtual KUndo2MagicString name()
virtual void process(KisPixelSelectionSP pixelSelection, const QRect &rect)=0
KisSelectionSP selection()
KisImageWSP image() const
Return the image this view is displaying.
QRect selectedExactRect() const
QVector< QPolygon > outline() const
outline returns the outline of the current selection
void toXML(QDomDocument &, QDomElement &) const override
KisPixelSelectionSP pixelSelection
QRect selectedExactRect() const
Slow, but exact way of determining the rectangle that encloses the selection.

References KisCommandUtils::CompositeCommand::addCommand(), KisProcessingApplicator::applyCommand(), KisOperation::beginAction(), KisSelectionFilter::changeRect(), KisPaintDevice::defaultBounds(), KisOperation::endAction(), KisTransaction::endAndTake(), KisViewManager::image(), KisSelectionFilter::name(), KisStrokeJobData::NORMAL, KisPixelSelection::outline(), KisSelection::pixelSelection, KisSelectionFilter::process(), KisPixelSelection::selectedExactRect(), KisSelection::selectedExactRect(), KisViewManager::selection(), KisStrokeJobData::SEQUENTIAL, KisPaintDevice::setDirty(), and KisPropertiesConfiguration::toXML().


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