2021-04-30 22:24:27 +08:00
|
|
|
import { assert } from 'chai';
|
|
|
|
|
2021-05-05 22:19:24 +08:00
|
|
|
import { addStage, Konva, loadImage } from '../unit/test-utils';
|
2021-04-30 22:24:27 +08:00
|
|
|
|
|
|
|
describe('Blur', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-04-30 22:24:27 +08:00
|
|
|
it('basic blur', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
loadImage('darth-vader.jpg', (imageObj) => {
|
2017-02-24 22:15:33 +08:00
|
|
|
var layer = new Konva.Layer();
|
2021-04-30 22:24:27 +08:00
|
|
|
const darth = new Konva.Image({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 10,
|
|
|
|
y: 10,
|
|
|
|
image: imageObj,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(darth);
|
|
|
|
stage.add(layer);
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
darth.cache();
|
|
|
|
darth.filters([Konva.Filters.Blur]);
|
|
|
|
darth.blurRadius(10);
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
assert.equal(darth.blurRadius(), 10);
|
|
|
|
assert.equal(darth._filterUpToDate, false);
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.draw();
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
assert.equal(darth._filterUpToDate, true);
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
darth.blurRadius(20);
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
assert.equal(darth.blurRadius(), 20);
|
|
|
|
assert.equal(darth._filterUpToDate, false);
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.draw();
|
2013-09-30 02:39:10 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
assert.equal(darth._filterUpToDate, true);
|
2013-09-30 02:00:51 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
done();
|
2021-04-30 22:24:27 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
it('blur group', function () {
|
2014-01-01 05:04:05 +08:00
|
|
|
var stage = addStage();
|
2015-01-27 15:07:51 +08:00
|
|
|
var layer = new Konva.Layer();
|
|
|
|
var group = new Konva.Group({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 100,
|
|
|
|
y: 100,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2014-01-01 05:04:05 +08:00
|
|
|
});
|
2015-01-27 15:07:51 +08:00
|
|
|
var top = new Konva.Circle({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 0,
|
|
|
|
y: -70,
|
|
|
|
radius: 30,
|
|
|
|
fill: 'blue',
|
|
|
|
stroke: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
strokeWidth: 4,
|
2014-01-01 05:04:05 +08:00
|
|
|
});
|
2015-01-27 15:07:51 +08:00
|
|
|
var right = new Konva.Circle({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 70,
|
|
|
|
y: 0,
|
|
|
|
radius: 30,
|
|
|
|
fill: 'blue',
|
|
|
|
stroke: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
strokeWidth: 4,
|
2014-01-01 05:04:05 +08:00
|
|
|
});
|
2015-01-27 15:07:51 +08:00
|
|
|
var bottom = new Konva.Circle({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 0,
|
|
|
|
y: 70,
|
|
|
|
radius: 30,
|
|
|
|
fill: 'blue',
|
|
|
|
stroke: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
strokeWidth: 4,
|
2014-01-01 05:04:05 +08:00
|
|
|
});
|
2015-01-27 15:07:51 +08:00
|
|
|
var left = new Konva.Circle({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: -70,
|
|
|
|
y: 0,
|
|
|
|
radius: 30,
|
|
|
|
fill: 'blue',
|
|
|
|
stroke: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
strokeWidth: 4,
|
2014-01-01 05:04:05 +08:00
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
group.add(top).add(right).add(bottom).add(left);
|
2014-01-01 05:04:05 +08:00
|
|
|
layer.add(group);
|
|
|
|
stage.add(layer);
|
|
|
|
|
2021-05-04 06:09:18 +08:00
|
|
|
group.cache();
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2021-05-04 06:09:18 +08:00
|
|
|
group.offset();
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2015-01-27 15:07:51 +08:00
|
|
|
group.filters([Konva.Filters.Blur]);
|
2014-01-01 05:04:05 +08:00
|
|
|
group.blurRadius(20);
|
|
|
|
|
|
|
|
layer.draw();
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-04-30 22:24:27 +08:00
|
|
|
it('tween blur', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
2014-01-01 05:04:05 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
loadImage('darth-vader.jpg', (imageObj) => {
|
2017-02-24 22:15:33 +08:00
|
|
|
var layer = new Konva.Layer();
|
2021-04-30 22:24:27 +08:00
|
|
|
const darth = new Konva.Image({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 10,
|
|
|
|
y: 10,
|
|
|
|
image: imageObj,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
layer.add(darth);
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
darth.cache();
|
|
|
|
darth.filters([Konva.Filters.Blur]);
|
|
|
|
darth.blurRadius(100);
|
|
|
|
layer.draw();
|
|
|
|
|
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: darth,
|
|
|
|
duration: 2.0,
|
|
|
|
blurRadius: 0,
|
2020-05-08 22:59:35 +08:00
|
|
|
easing: Konva.Easings.EaseInOut,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
darth.on('mouseover', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.play();
|
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
darth.on('mouseout', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.reverse();
|
|
|
|
});
|
|
|
|
|
|
|
|
done();
|
2021-04-30 22:24:27 +08:00
|
|
|
});
|
2014-01-01 05:04:05 +08:00
|
|
|
});
|
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-04-30 22:24:27 +08:00
|
|
|
it('crop blur', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
loadImage('darth-vader.jpg', (imageObj) => {
|
2017-02-24 22:15:33 +08:00
|
|
|
var layer = new Konva.Layer();
|
2021-04-30 22:24:27 +08:00
|
|
|
const darth = new Konva.Image({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 10,
|
|
|
|
y: 10,
|
|
|
|
image: imageObj,
|
|
|
|
crop: { x: 128, y: 48, width: 256, height: 128 },
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2013-09-30 02:00:51 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(darth);
|
|
|
|
stage.add(layer);
|
2013-09-29 23:26:31 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
darth.cache();
|
|
|
|
darth.filters([Konva.Filters.Blur]);
|
|
|
|
darth.blurRadius(10);
|
|
|
|
layer.draw();
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
done();
|
2021-04-30 22:24:27 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-04-30 22:24:27 +08:00
|
|
|
it('crop tween blur', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
loadImage('darth-vader.jpg', (imageObj) => {
|
2017-02-24 22:15:33 +08:00
|
|
|
var layer = new Konva.Layer();
|
2021-04-30 22:24:27 +08:00
|
|
|
const darth = new Konva.Image({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 10,
|
|
|
|
y: 10,
|
|
|
|
image: imageObj,
|
|
|
|
crop: { x: 128, y: 48, width: 256, height: 128 },
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
layer.add(darth);
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
darth.cache();
|
|
|
|
darth.filters([Konva.Filters.Blur]);
|
|
|
|
darth.blurRadius(100);
|
|
|
|
layer.draw();
|
|
|
|
|
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: darth,
|
|
|
|
duration: 2.0,
|
|
|
|
blurRadius: 0,
|
2020-05-08 22:59:35 +08:00
|
|
|
easing: Konva.Easings.EaseInOut,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
darth.on('mouseover', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.play();
|
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
darth.on('mouseout', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.reverse();
|
|
|
|
});
|
|
|
|
|
|
|
|
done();
|
2021-04-30 22:24:27 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-01-09 16:29:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-04-30 22:24:27 +08:00
|
|
|
it('transparency', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
loadImage('darth-vader.jpg', (imageObj) => {
|
2017-02-24 22:15:33 +08:00
|
|
|
var layer = new Konva.Layer();
|
2021-04-30 22:24:27 +08:00
|
|
|
const darth = new Konva.Image({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 10,
|
|
|
|
y: 10,
|
|
|
|
image: imageObj,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
layer.add(darth);
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
darth.cache();
|
|
|
|
darth.filters([Konva.Filters.Blur]);
|
|
|
|
darth.blurRadius(100);
|
|
|
|
layer.draw();
|
|
|
|
|
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: darth,
|
2021-05-04 06:09:18 +08:00
|
|
|
duration: 1,
|
2017-02-24 22:15:33 +08:00
|
|
|
blurRadius: 0,
|
2020-05-08 22:59:35 +08:00
|
|
|
easing: Konva.Easings.EaseInOut,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
darth.on('mouseover', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.play();
|
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
darth.on('mouseout', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.reverse();
|
|
|
|
});
|
|
|
|
|
|
|
|
done();
|
2021-04-30 22:24:27 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-04-30 22:24:27 +08:00
|
|
|
it('blur hit region', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2021-04-30 22:24:27 +08:00
|
|
|
loadImage('lion.png', (imageObj) => {
|
2017-02-24 22:15:33 +08:00
|
|
|
var layer = new Konva.Layer();
|
2021-04-30 22:24:27 +08:00
|
|
|
const darth = new Konva.Image({
|
2017-02-24 22:15:33 +08:00
|
|
|
x: 10,
|
|
|
|
y: 10,
|
|
|
|
image: imageObj,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
//console.log(darth.hasStroke())
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(darth);
|
|
|
|
stage.add(layer);
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
darth.cache();
|
|
|
|
darth.filters([Konva.Filters.Blur]);
|
|
|
|
darth.blurRadius(20);
|
|
|
|
darth.drawHitFromCache(100);
|
|
|
|
layer.draw();
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2019-02-18 04:59:08 +08:00
|
|
|
//console.log(darth._getCanvasCache().hit.getContext().getTrace());
|
2017-02-24 22:15:33 +08:00
|
|
|
|
2019-02-18 04:59:08 +08:00
|
|
|
//assert.equal(darth._getCanvasCache().hit.getContext().getTrace(true), 'save();translate();beginPath();rect();closePath();save();fillStyle;fill();restore();restore();clearRect();getImageData();putImageData();');
|
2014-01-05 17:24:23 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
done();
|
2021-04-30 22:24:27 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
});
|