void KisTransformMaskTest::testMaskOnCloneLayer() { QImage refImage(TestUtil::fetchDataFileLazy("test_transform_quality.png")); QRect refRect = refImage.rect(); TestUtil::MaskParent p(refRect); p.layer->paintDevice()->convertFromQImage(refImage, 0); KisPaintLayerSP player = new KisPaintLayer(p.image, "bg", OPACITY_OPAQUE_U8, p.image->colorSpace()); p.image->addNode(player, p.image->root(), KisNodeSP()); KisCloneLayerSP clone = new KisCloneLayer(p.layer, p.image, "clone", OPACITY_OPAQUE_U8); p.image->addNode(clone, p.image->root()); KisTransformMaskSP mask = new KisTransformMask(); p.image->addNode(mask, clone); QTransform transform(-0.177454, -0.805953, -0.00213713, -1.9295, -0.371835, -0.00290463, 3075.05, 2252.32, 7.62371); mask->setTransformParams(KisTransformMaskParamsInterfaceSP( new KisDumbTransformMaskParams(transform))); QVERIFY(doPartialTests("cl", p.image, p.layer, clone, mask)); }
void KisTransformMaskTest::testMaskWithOffset() { TestUtil::ExternalImageChecker chk("mask_with_offset", "transform_mask_updates"); QRect refRect(0,0,512,512); QRect fillRect(400,400,100,100); TestUtil::MaskParent p(refRect); p.layer->paintDevice()->fill(fillRect, KoColor(Qt::red, p.layer->colorSpace())); KisPaintLayerSP player = new KisPaintLayer(p.image, "bg", OPACITY_OPAQUE_U8, p.image->colorSpace()); p.image->addNode(player, p.image->root(), KisNodeSP()); KisTransformMaskSP mask1 = new KisTransformMask(); p.image->addNode(mask1, p.layer); mask1->setName("mask1"); p.layer->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "00_initial_layer_update"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "00X_initial_layer_update"); QTransform transform; transform = QTransform::fromTranslate(-150, 0); mask1->setTransformParams(KisTransformMaskParamsInterfaceSP( new KisDumbTransformMaskParams(transform))); p.layer->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "01_mask1_moved_layer_update"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "01X_mask1_moved_layer_update"); mask1->setY(-150); mask1->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "02_mask1_y_offset"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "02X_mask1_y_offset"); QVERIFY(chk.testPassed()); }
void KisTransformMaskTest::testMaskOnCloneLayerWithOffset() { TestUtil::ExternalImageChecker chk("clone_offset_simple", "transform_mask_updates"); QRect refRect(0,0,512,512); QRect fillRect(400,400,100,100); TestUtil::MaskParent p(refRect); p.layer->paintDevice()->fill(fillRect, KoColor(Qt::red, p.layer->colorSpace())); KisPaintLayerSP player = new KisPaintLayer(p.image, "bg", OPACITY_OPAQUE_U8, p.image->colorSpace()); p.image->addNode(player, p.image->root(), KisNodeSP()); KisCloneLayerSP clone = new KisCloneLayer(p.layer, p.image, "clone", OPACITY_OPAQUE_U8); p.image->addNode(clone, p.image->root()); KisTransformMaskSP mask = new KisTransformMask(); p.image->addNode(mask, clone); QTransform transform(1, 0, 0, 0, 1, 0, 0, -150, 1); mask->setTransformParams(KisTransformMaskParamsInterfaceSP( new KisDumbTransformMaskParams(transform))); p.layer->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "0_initial"); clone->setX(-300); clone->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "1_after_offset"); mask->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "2_after_offset_dirty_mask"); QTest::qWait(4000); chk.checkImage(p.image, "3_delayed_regeneration"); KisPaintDeviceSP previewDevice = mask->buildPreviewDevice(); chk.checkDevice(previewDevice, p.image, "4_preview_device"); QVERIFY(chk.testPassed()); QVERIFY(doPartialTests("clone_offset_complex", p.image, p.layer, clone, mask)); }
void Imagesplit::saveAsImage(QRect imgSize, QString mimeType, QUrl url) { KisImageWSP image = m_view->image(); KisDocument *d = KisPart::instance()->createDocument(); d->prepareForImport(); KisImageWSP dst = new KisImage(d->createUndoStore(), imgSize.width(), imgSize.height(), image->colorSpace(), image->objectName()); dst->setResolution(image->xRes(), image->yRes()); d->setCurrentImage(dst); KisPaintLayer* paintLayer = new KisPaintLayer(dst, dst->nextLayerName(), 255); KisPainter gc(paintLayer->paintDevice()); gc.bitBlt(QPoint(0, 0), image->projection(), imgSize); dst->addNode(paintLayer, KisNodeSP(0)); dst->refreshGraph(); d->setOutputMimeType(mimeType.toLatin1()); d->exportDocument(url); delete d; }
void KisFilterDialog::createMask() { KisEffectMaskSP mask; if (d->node->inherits("KisLayer")) { KisLayer * l = qobject_cast<KisLayer*>(d->node.data()); mask = l->previewMask(); l->removePreviewMask(); d->image->undoAdapter()->addCommand(new KisImageLayerAddCommand(d->image, mask, l, KisNodeSP(0))); mask->setDirty(); close(); accept(); } }
void KisTransformMaskTest::testMultipleMasks() { TestUtil::ExternalImageChecker chk("multiple_masks", "transform_mask_updates"); QRect refRect(0,0,512,512); QRect fillRect(400,400,100,100); TestUtil::MaskParent p(refRect); p.layer->paintDevice()->fill(fillRect, KoColor(Qt::red, p.layer->colorSpace())); KisPaintLayerSP player = new KisPaintLayer(p.image, "bg", OPACITY_OPAQUE_U8, p.image->colorSpace()); p.image->addNode(player, p.image->root(), KisNodeSP()); //KisCloneLayerSP clone = new KisCloneLayer(p.layer, p.image, "clone", OPACITY_OPAQUE_U8); //p.image->addNode(clone, p.image->root()); KisTransformMaskSP mask1 = new KisTransformMask(); p.image->addNode(mask1, p.layer); KisTransformMaskSP mask2 = new KisTransformMask(); p.image->addNode(mask2, p.layer); mask1->setName("mask1"); mask2->setName("mask2"); p.layer->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "00_initial_layer_update"); QTransform transform; transform = QTransform::fromTranslate(-150, 0); mask1->setTransformParams(KisTransformMaskParamsInterfaceSP( new KisDumbTransformMaskParams(transform))); p.layer->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "01_mask1_moved_layer_update"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "01X_mask1_moved_layer_update"); transform = QTransform::fromTranslate(0, -150); mask2->setTransformParams(KisTransformMaskParamsInterfaceSP( new KisDumbTransformMaskParams(transform))); p.layer->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "02_mask2_moved_layer_update"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "02X_mask2_moved_layer_update"); #ifdef CHECK_MASK1_TOGGLE { mask1->setVisible(false); mask1->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "03_mask1_tg_off_refRect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "03X_mask1_tg_off_refRect"); mask1->setVisible(true); mask1->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "04_mask1_tg_on_refRect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "04X_mask1_tg_on_refRect"); mask1->setVisible(false); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "05_mask1_tg_off_default_rect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "05X_mask1_tg_off_default_rect"); mask1->setVisible(true); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "06_mask1_tg_on_default_rect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "06X_mask1_tg_on_default_rect"); } #endif /* CHECK_MASK1_TOGGLE */ #ifdef CHECK_MASK2_TOGGLE { mask2->setVisible(false); mask2->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "07_mask2_tg_off_refRect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "07X_mask2_tg_off_refRect"); mask2->setVisible(true); mask2->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "08_mask2_tg_on_refRect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "08X_mask2_tg_on_refRect"); mask2->setVisible(false); mask2->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "09_mask2_tg_off_default_rect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "09X_mask2_tg_off_default_rect"); mask2->setVisible(true); mask2->setDirty(refRect); p.image->waitForDone(); chk.checkImage(p.image, "10_mask2_tg_on_default_rect"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "10X_mask2_tg_on_default_rect"); } #endif /* CHECK_MASK2_TOGGLE */ #ifdef CHECK_HIDE_ALL { mask1->setVisible(false); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "11.1_hide_both_update_default_mask1"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "11.1X_hide_both_update_default_mask1"); mask2->setVisible(false); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "11.2_hide_both_update_default_mask2"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "11.2X_hide_both_update_default_mask2"); mask1->setVisible(true); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "12_sh_mask1_on"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "12X_sh_mask1_on"); mask1->setVisible(false); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "13_sh_mask1_off"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "13X_sh_mask1_off"); mask2->setVisible(true); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "14_sh_mask2_on"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "14X_sh_mask2_on"); mask2->setVisible(false); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "15_sh_mask2_off"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "15X_sh_mask2_off"); } #endif /* CHECK_HIDE_ALL */ #ifdef CHECK_HIDE_ALL_AFTER_MOVE { transform = QTransform::fromTranslate(50, -150); mask2->setTransformParams(KisTransformMaskParamsInterfaceSP( new KisDumbTransformMaskParams(transform))); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "20_moved_mask2"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "20X_moved_mask2"); } { mask1->setVisible(false); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "21.1_hide_both_update_default_mask1"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "21.1X_hide_both_update_default_mask1"); mask2->setVisible(false); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "21.2_hide_both_update_default_mask2"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "21.2X_hide_both_update_default_mask2"); mask1->setVisible(true); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "22_sh_mask1_on"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "22X_sh_mask1_on"); mask1->setVisible(false); mask1->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "23_sh_mask1_off"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "23X_sh_mask1_off"); mask2->setVisible(true); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "24_sh_mask2_on"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "24X_sh_mask2_on"); mask2->setVisible(false); mask2->setDirty(); p.image->waitForDone(); chk.checkImage(p.image, "25_sh_mask2_off"); QTest::qWait(4000); p.image->waitForDone(); chk.checkImage(p.image, "25X_sh_mask2_off"); } #endif /* CHECK_HIDE_ALL_AFTER_MOVE */ QVERIFY(chk.testPassed()); }