55
QUndoCommand* KisSelectionToolHelper::selectPixelSelection(KisPixelSelectionSP selection, selectionAction action)
55
void KisSelectionToolHelper::selectPixelSelection(KisPixelSelectionSP selection, selectionAction action)
57
KisUndoAdapter *undoAdapter = m_layer->image()->undoAdapter();
58
undoAdapter->beginMacro(m_name);
57
60
bool hasSelection = m_layer->selection();
59
QUndoCommand* selectionCmd = new QUndoCommand(m_name);
62
new KisSetGlobalSelectionCommand(m_image, selectionCmd);
64
new KisSelectionTransaction(m_name, m_image, m_layer->selection(), selectionCmd);
66
KisPixelSelectionSP getOrCreatePixelSelection = m_layer->selection()->getOrCreatePixelSelection();
63
undoAdapter->addCommand(new KisSetGlobalSelectionCommand(m_image));
65
KisSelectionTransaction transaction(m_name, m_image, m_layer->selection());
67
KisPixelSelectionSP pixelSelection = m_layer->selection()->getOrCreatePixelSelection();
68
69
if (! hasSelection || action == SELECTION_REPLACE) {
69
getOrCreatePixelSelection->clear();
70
pixelSelection->clear();
70
71
if (action == SELECTION_SUBTRACT)
71
getOrCreatePixelSelection->invert();
72
pixelSelection->invert();
73
getOrCreatePixelSelection->applySelection(selection, action);
74
pixelSelection->applySelection(selection, action);
76
QRect dirtyRect = m_image->bounds();
75
77
if (hasSelection && action != SELECTION_REPLACE && action != SELECTION_INTERSECT) {
76
QRect rc = selection->selectedRect();
77
getOrCreatePixelSelection->setDirty(rc);
78
m_layer->selection()->updateProjection(rc);
79
m_canvas->view()->selectionManager()->selectionChanged();
81
getOrCreatePixelSelection->setDirty(m_image->bounds());
82
m_layer->selection()->updateProjection(m_image->bounds());
83
m_canvas->view()->selectionManager()->selectionChanged();
78
dirtyRect = selection->selectedRect();
80
m_layer->selection()->updateProjection(dirtyRect);
82
transaction.commit(undoAdapter);
83
undoAdapter->endMacro();
85
pixelSelection->setDirty(dirtyRect);
86
m_canvas->view()->selectionManager()->selectionChanged();
88
89
void KisSelectionToolHelper::addSelectionShape(KoShape* shape)
90
bool hasSelection = m_layer->selection();
92
m_canvas->startMacro(m_name);
95
m_canvas->addCommand(new KisSetGlobalSelectionCommand(m_image, 0));
92
* Mark a shape that it belongs to a shape selection
94
if(!shape->userData()) {
95
shape->setUserData(new KisShapeSelectionMarker);
98
KisUndoAdapter *undoAdapter = m_layer->image()->undoAdapter();
99
undoAdapter->beginMacro(m_name);
101
if (!m_layer->selection()) {
102
undoAdapter->addCommand(new KisSetGlobalSelectionCommand(m_image, 0));
97
105
KisSelectionSP selection = m_layer->selection();
99
if (selection->isDeselected())
100
new KisSelectionTransaction(m_name, m_image, m_layer->selection());
102
KisShapeSelection* shapeSelection;
103
if (!selection->hasShapeSelection()) {
104
shapeSelection = new KisShapeSelection(m_image, selection);
105
selection->setShapeSelection(shapeSelection);
107
shapeSelection = static_cast<KisShapeSelection*>(selection->shapeSelection());
109
KoShapeControllerBase* controller = m_canvas->view()->document()->shapeController();
110
KisShapeController* kiscontroller = dynamic_cast<KisShapeController*>(controller);
112
kiscontroller->prepareAddingSelectionShape();
114
QUndoCommand * cmd = m_canvas->shapeController()->addShape(shape);
115
m_canvas->addCommand(cmd);
117
m_canvas->stopMacro();
106
KisSelectionTransaction transaction(m_name, m_image, selection);
108
transaction.commit(undoAdapter);
110
QUndoCommand *cmd = m_canvas->shapeController()->addShape(shape);
111
undoAdapter->addCommand(cmd);
112
undoAdapter->endMacro();