void KisSelectionToolHelper::addSelectionShape(KoShape* shape) { KisView2* view = m_canvas->view(); /** * Mark a shape that it belongs to a shape selection */ if(!shape->userData()) { shape->setUserData(new KisShapeSelectionMarker); } KisUndoAdapter *undoAdapter = view->image()->undoAdapter(); undoAdapter->beginMacro(m_name); if (!view->selection()) { undoAdapter->addCommand(new KisSetEmptyGlobalSelectionCommand(m_image)); } KisSelectionSP selection = view->selection(); KisSelectionTransaction transaction(m_name, m_image->undoAdapter(), selection); transaction.commit(undoAdapter); KUndo2Command *cmd = m_canvas->shapeController()->addShape(shape); undoAdapter->addCommand(cmd); undoAdapter->endMacro(); }
KisImportExportFilter::ConversionStatus KisAnimationImporter::import(QStringList files, int firstFrame, int step) { Q_ASSERT(step > 0); bool batchMode; if (m_d->document) { batchMode= m_d->document->fileBatchMode(); if (!batchMode) { emit m_d->document->statusBarMessage(i18n("Import frames")); emit m_d->document->sigProgress(0); connect(m_d->document, SIGNAL(sigProgressCanceled()), this, SLOT(cancel())); } } else batchMode = false; m_d->image->lock(); KisUndoAdapter *undo = m_d->image->undoAdapter(); undo->beginMacro(kundo2_i18n("Import animation")); QScopedPointer<KisDocument> importDoc(KisPart::instance()->createDocument()); importDoc->setFileBatchMode(true); KisImportExportFilter::ConversionStatus status = KisImportExportFilter::OK; int frame = firstFrame; KisRasterKeyframeChannel *contentChannel = 0; Q_FOREACH(QString file, files) { bool successfullyLoaded = importDoc->openUrl(QUrl::fromLocalFile(file), KisDocument::OPEN_URL_FLAG_DO_NOT_ADD_TO_RECENT_FILES); if (!successfullyLoaded) { status = KisImportExportFilter::InternalError; break; } if (m_d->stop) { status = KisImportExportFilter::ProgressCancelled; break; } if (frame == firstFrame) { const KoColorSpace *cs = importDoc->image()->colorSpace(); KisPaintLayerSP paintLayer = new KisPaintLayer(m_d->image, m_d->image->nextLayerName(), OPACITY_OPAQUE_U8, cs); undo->addCommand(new KisImageLayerAddCommand(m_d->image, paintLayer, m_d->image->rootLayer(), m_d->image->rootLayer()->childCount())); paintLayer->enableAnimation(); contentChannel = qobject_cast<KisRasterKeyframeChannel*>(paintLayer->getKeyframeChannel(KisKeyframeChannel::Content.id())); } if (!batchMode) { emit m_d->document->sigProgress((frame - firstFrame) * 100 / (step * files.size())); } contentChannel->importFrame(frame, importDoc->image()->projection(), NULL); frame += step; }
void KisSelectionToolHelper::selectPixelSelection(KisPixelSelectionSP selection, SelectionAction action) { KisView2* view = m_canvas->view(); if (selection->selectedRect().isEmpty()) { m_canvas->view()->selectionManager()->deselect(); return; } KisUndoAdapter *undoAdapter = view->image()->undoAdapter(); undoAdapter->beginMacro(m_name); bool hasSelection = view->selection(); if (!hasSelection) { undoAdapter->addCommand(new KisSetEmptyGlobalSelectionCommand(m_image)); } KisSelectionTransaction transaction(m_name, m_image->undoAdapter(), view->selection()); KisPixelSelectionSP pixelSelection = view->selection()->getOrCreatePixelSelection(); if (!hasSelection && action == SELECTION_SUBTRACT) { pixelSelection->invert(); } pixelSelection->applySelection(selection, action); QRect dirtyRect = m_image->bounds(); if (hasSelection && action != SELECTION_REPLACE && action != SELECTION_INTERSECT) { dirtyRect = selection->selectedRect(); } view->selection()->updateProjection(dirtyRect); transaction.commit(undoAdapter); undoAdapter->endMacro(); pixelSelection->setDirty(dirtyRect); m_canvas->view()->selectionManager()->selectionChanged(); }