void KisSelectionTest::testInvertSelection() { KisSelectionSP selection = new KisSelection(); KisPixelSelectionSP pixelSelection = selection->getOrCreatePixelSelection(); pixelSelection->select(QRect(20, 20, 20, 20)); QCOMPARE(pixelSelection->selected(30, 30), MAX_SELECTED); QCOMPARE(pixelSelection->selected(0, 0), MIN_SELECTED); QCOMPARE(pixelSelection->selected(512, 512), MIN_SELECTED); pixelSelection->invert(); QCOMPARE(pixelSelection->selected(100, 100), MAX_SELECTED); QCOMPARE(pixelSelection->selected(22, 22), MIN_SELECTED); QCOMPARE(pixelSelection->selected(0, 0), MAX_SELECTED); QCOMPARE(pixelSelection->selected(512, 512), MAX_SELECTED); pixelSelection->convertToQImage(0, 0, 0, 100, 100).save("yyy.png"); // XXX: This should happen automatically selection->updateProjection(); selection->convertToQImage(0, 0, 0, 100, 100).save("zzz.png"); QCOMPARE(selection->selectedExactRect(), QRect(qint32_MIN/2, qint32_MIN/2, qint32_MAX, qint32_MAX)); QCOMPARE(selection->selectedRect(), QRect(qint32_MIN/2, qint32_MIN/2, qint32_MAX, qint32_MAX)); QCOMPARE(selection->selected(100, 100), MAX_SELECTED); QCOMPARE(selection->selected(22, 22), MIN_SELECTED); QCOMPARE(selection->selected(10, 10), MAX_SELECTED); QCOMPARE(selection->selected(0, 0), MAX_SELECTED); QCOMPARE(selection->selected(512, 512), MAX_SELECTED); }
void KisFilterTest::testDifferentSrcAndDst() { const KoColorSpace * cs = KoColorSpaceRegistry::instance()->rgb8(); QImage qimage(QString(FILES_DATA_DIR) + QDir::separator() + "hakonepa.png"); QImage inverted(QString(FILES_DATA_DIR) + QDir::separator() + "inverted_hakonepa.png"); KisPaintDeviceSP src = new KisPaintDevice(cs); KisPaintDeviceSP dst = new KisPaintDevice(cs); KisSelectionSP sel = new KisSelection(new KisSelectionDefaultBounds(src)); sel->getOrCreatePixelSelection()->invert(); // select everything sel->updateProjection(); src->convertFromQImage(qimage, 0, 0, 0); KisFilterSP f = KisFilterRegistry::instance()->value("invert"); Q_ASSERT(f); KisFilterConfiguration * kfc = f->defaultConfiguration(0); Q_ASSERT(kfc); f->process(src, dst, sel, QRect(QPoint(0,0), qimage.size()), kfc); QPoint errpoint; if (!TestUtil::compareQImages(errpoint, inverted, dst->convertToQImage(0, 0, 0, qimage.width(), qimage.height()))) { dst->convertToQImage(0, 0, 0, qimage.width(), qimage.height()).save("filtertest.png"); QFAIL(QString("Failed to create inverted image, first different pixel: %1,%2 ").arg(errpoint.x()).arg(errpoint.y()).toLatin1()); } }
void KisSelectionTest::testUpdatePixelSelection() { KisSelectionSP selection = new KisSelection(); KisPixelSelectionSP pSel = selection->getOrCreatePixelSelection(); pSel->select(QRect(0, 0, 348, 212)); QVERIFY(selection->pixelSelection()->selectedExactRect() == QRect(0, 0, 348, 212)); selection->updateProjection(QRect(0, 0, 348, 212)); for (int i = 0; i < 212; ++i) { for (int j = 0; j < 348; ++j) { QVERIFY(selection->selected(j, i) == MAX_SELECTED); } } }
void KisSelectionTest::testCopy() { KisSelectionSP sel = new KisSelection(); sel->getOrCreatePixelSelection()->select(QRect(10, 10, 200, 200), 128); KisSelectionSP sel2 = new KisSelection(*sel.data()); QCOMPARE(sel2->selectedExactRect(), sel->selectedExactRect()); QPoint errpoint; if (!TestUtil::comparePaintDevices(errpoint, sel, sel2)) { sel2->convertToQImage(0, 0, 0, 200, 200).save("merge_visitor6.png"); QFAIL(QString("Failed to copy selection, first different pixel: %1,%2 ") .arg(errpoint.x()) .arg(errpoint.y()) .toAscii()); } }
void KisSelectionTest::testUpdateSelectionProjection() { KisSelectionSP selection = new KisSelection(); QVERIFY(selection->selectedExactRect().isNull()); // Now fill the layer with some opaque pixels KisFillPainter gc(selection->getOrCreatePixelSelection()); gc.fillRect(QRect(0, 0, 100, 100), KoColor(QColor(0, 0, 0, 0), KoColorSpaceRegistry::instance()->rgb8()), MAX_SELECTED); gc.end(); QVERIFY(selection->pixelSelection()->selectedExactRect() == QRect(0, 0, 100, 100)); selection->updateProjection(); QCOMPARE(selection->pixelSelection()->selectedExactRect(), QRect(0, 0, 100, 100)); QCOMPARE(selection->selectedExactRect(), QRect(0, 0, 100, 100)); }
void KisShapeSelectionTest::testAddChild() { const KoColorSpace * cs = KoColorSpaceRegistry::instance()->rgb8(); KisImageSP image = new KisImage(new KisUndoAdapter(0), 300, 300, cs, "test"); KisSelectionSP selection = new KisSelection(); QVERIFY(selection->hasPixelSelection() == false); QVERIFY(selection->hasShapeSelection() == false); KisPixelSelectionSP pixelSelection = selection->getOrCreatePixelSelection(); pixelSelection->select(QRect(0, 0, 100, 100)); // Selection is using the pixel selection as datamanager so no projection update // needed QCOMPARE(pixelSelection->selected(25, 25), MAX_SELECTED); QCOMPARE(selection->selectedExactRect(), QRect(0, 0, 100, 100)); QRect rect(50, 50, 100, 100); QTransform matrix; matrix.scale(1 / image->xRes(), 1 / image->yRes()); rect = matrix.mapRect(rect); KoPathShape* shape = new KoPathShape(); shape->setShapeId(KoPathShapeId); shape->moveTo(rect.topLeft()); shape->lineTo(rect.topLeft() + QPointF(rect.width(), 0)); shape->lineTo(rect.bottomRight()); shape->lineTo(rect.topLeft() + QPointF(0, rect.height())); shape->close(); shape->normalize(); KisShapeSelection * shapeSelection = new KisShapeSelection(image, selection); selection->setShapeSelection(shapeSelection); shapeSelection->addShape(shape); QCOMPARE(pixelSelection->selected(25, 25), MAX_SELECTED); QCOMPARE(selection->selectedExactRect(), QRect(0, 0, 150, 150)); selection->updateProjection(); }
void KisSelectionTest::testSelectionComponents() { KisSelectionSP selection = new KisSelection(); QVERIFY(selection->hasPixelSelection() == false); QVERIFY(selection->hasShapeSelection() == false); QVERIFY(selection->pixelSelection() == 0); QVERIFY(selection->shapeSelection() == 0); KisPixelSelectionSP pixelSelection = selection->getOrCreatePixelSelection(); QVERIFY(selection->pixelSelection() == pixelSelection); QVERIFY(selection->hasPixelSelection() == true); KisMaskSP mask = new KisTransparencyMask(); mask->select(QRect(0, 0, 100, 100)); QCOMPARE(mask->selection()->selectedRect(), QRect(0,0,128, 128)); QCOMPARE(mask->selection()->selectedExactRect(), QRect(0, 0, 100, 100)); selection = new KisSelection(0, mask); selection->updateProjection(); QVERIFY(selection->hasPixelSelection() == true); QCOMPARE(selection->selectedRect(), QRect(0,0,128, 128)); QCOMPARE(selection->selectedExactRect(), QRect(0, 0, 100, 100)); }
KUndo2Command* paint() { KisSelectionSP selection = m_image->globalSelection(); KisSelectionTransaction transaction(QString(), m_image->undoAdapter(), selection); selection->getOrCreatePixelSelection()->select(m_image->bounds()); return transaction.endAndTake(); }
KisSelectionTransactionData::KisSelectionTransactionData(const QString& name, KisUndoAdapter *undoAdapter, KisSelectionSP selection, KUndo2Command* parent) : KisTransactionData(name, selection->getOrCreatePixelSelection().data(), parent) , m_undoAdapter(undoAdapter) , m_selection(selection) { }