本文整理汇总了C++中KisImageSP::startStroke方法的典型用法代码示例。如果您正苦于以下问题:C++ KisImageSP::startStroke方法的具体用法?C++ KisImageSP::startStroke怎么用?C++ KisImageSP::startStroke使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KisImageSP
的用法示例。
在下文中一共展示了KisImageSP::startStroke方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: KisResourcesSnapshot
QImage utils::StrokeTester::doStroke(bool cancelled,
bool indirectPainting,
bool externalLayer,
bool testUpdates,
bool needQImage)
{
KisImageSP image = utils::createImage(0, m_imageSize);
KoCanvasResourceManager *manager = utils::createResourceManager(image, 0, m_presetFilename);
KisNodeSP currentNode;
for (int i = 0; i < m_numIterations; i++) {
modifyResourceManager(manager, image, i);
KisPainter *painter = new KisPainter();
KisResourcesSnapshotSP resources =
new KisResourcesSnapshot(image,
image->rootLayer()->firstChild(),
image->postExecutionUndoAdapter(),
manager);
if(externalLayer) {
KisNodeSP externalNode = new KisPaintLayer(0, "extlyr", OPACITY_OPAQUE_U8, image->colorSpace());
resources->setCurrentNode(externalNode);
Q_ASSERT(resources->currentNode() == externalNode);
}
initImage(image, resources->currentNode(), i);
KisStrokeStrategy *stroke = createStroke(indirectPainting, resources, painter, image);
m_strokeId = image->startStroke(stroke);
addPaintingJobs(image, resources, painter, i);
if(!cancelled) {
image->endStroke(m_strokeId);
}
else {
image->cancelStroke(m_strokeId);
}
image->waitForDone();
currentNode = resources->currentNode();
}
QImage resultImage;
if(needQImage) {
KisPaintDeviceSP device = testUpdates ?
image->projection() :
currentNode->paintDevice();
resultImage = device->convertToQImage(0, 0, 0, image->width(), image->height());
}
image = 0;
delete manager;
return resultImage;
}
示例2: testCancelledStroke
void KisStrokeStrategyUndoCommandBasedTest::testCancelledStroke()
{
QString result;
KUndo2CommandSP initCommand(new TestingUndoCommand(kundo2_noi18n("init"), result));
KUndo2CommandSP dabCommand(new TestingUndoCommand(kundo2_noi18n("dab"), result));
KUndo2CommandSP finishCommand(new TestingUndoCommand(kundo2_noi18n("finish"), result));
const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8();
KisImageSP image = new KisImage(0, 300, 300, cs, "test", true);
KisStrokeStrategy *strategy =
new KisStrokeStrategyUndoCommandBased(kundo2_noi18n("test"), false,
image->postExecutionUndoAdapter(),
initCommand, finishCommand);
KisStrokeId id = image->startStroke(strategy);
image->addJob(id, new KisStrokeStrategyUndoCommandBased::Data(dabCommand));
QTest::qSleep(500);
image->cancelStroke(id);
image->waitForDone();
SCOMPARE(result.trimmed(), "init_redo dab_redo dab_undo init_undo");
}
示例3: stressTestSequentialCommands
void KisStrokeStrategyUndoCommandBasedTest::stressTestSequentialCommands()
{
const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8();
KisImageSP image = new KisImage(0, 300, 300, cs, "test", true);
QAtomicInt counter;
QAtomicInt hadConcurrency;
KisStrokeStrategy *strategy =
new KisStrokeStrategyUndoCommandBased(kundo2_noi18n("test"), false, 0);
KisStrokeId id = image->startStroke(strategy);
for(int i = 0; i < NUM_JOBS; i++) {
bool isSequential = i % SEQUENTIAL_NTH == 0;
KisStrokeJobData::Sequentiality seq = isSequential ?
KisStrokeJobData::SEQUENTIAL : KisStrokeJobData::CONCURRENT;
KUndo2CommandSP command(new ExclusivenessCheckerCommand(counter,
hadConcurrency,
isSequential));
image->addJob(id,
new KisStrokeStrategyUndoCommandBased::Data(command, seq));
}
image->endStroke(id);
image->waitForDone();
QVERIFY(!counter);
qDebug() << "Concurrency observed:" << hadConcurrency
<< "/" << NUM_CHECKS * NUM_JOBS;
}