1
0
mirror of https://github.com/psychopy/psychojs.git synced 2025-05-10 10:40:54 +00:00

Merge pull request #550 from lightest/blurFilter_for_imageStim

Blur filter for image stim.
This commit is contained in:
Alain Pitiot 2023-07-18 17:43:28 +02:00 committed by GitHub
commit 888552d24b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -47,10 +47,34 @@ export class ImageStim extends util.mix(VisualStim).with(ColorMixin)
* @param {boolean} [options.autoDraw= false] - whether or not the stimulus should be automatically drawn on every frame flip
* @param {boolean} [options.autoLog= false] - whether or not to log
*/
constructor({ name, win, image, mask, pos, anchor, units, ori, size, color, opacity, contrast, texRes, depth, interpolate, flipHoriz, flipVert, autoDraw, autoLog } = {})
constructor({
name,
win,
image,
mask,
pos,
anchor,
units,
ori,
size,
color,
opacity,
contrast,
texRes,
depth,
interpolate,
flipHoriz,
flipVert,
autoDraw,
autoLog,
blurVal
} = {})
{
super({ name, win, units, ori, opacity, depth, pos, anchor, size, autoDraw, autoLog });
// Holds an instance of PIXI blur filter. Used if blur value is passed.
this._blurFilter = undefined;
this._addAttribute(
"image",
image,
@ -94,6 +118,11 @@ export class ImageStim extends util.mix(VisualStim).with(ColorMixin)
false,
this._onChange(false, false),
);
this._addAttribute(
"blurVal",
blurVal,
0
);
// estimate the bounding box:
this._estimateBoundingBox();
@ -234,6 +263,33 @@ export class ImageStim extends util.mix(VisualStim).with(ColorMixin)
}
}
setBlurVal (blurVal = 0, log = false)
{
this._setAttribute("blurVal", blurVal, log);
if (this._pixi instanceof PIXI.Sprite)
{
if (this._blurFilter === undefined)
{
this._blurFilter = new PIXI.filters.BlurFilter();
this._blurFilter.blur = blurVal;
}
else
{
this._blurFilter.blur = blurVal;
}
// this._pixi might get destroyed and recreated again with no filters.
if (this._pixi.filters instanceof Array && this._pixi.filters.indexOf(this._blurFilter) === -1)
{
this._pixi.filters.push(this._blurFilter);
}
else
{
this._pixi.filters = [this._blurFilter];
}
}
}
/**
* Estimate the bounding box.
*
@ -276,6 +332,7 @@ export class ImageStim extends util.mix(VisualStim).with(ColorMixin)
if (typeof this._pixi !== "undefined")
{
this._pixi.filters = null;
this._pixi.destroy(true);
}
this._pixi = undefined;
@ -359,6 +416,11 @@ export class ImageStim extends util.mix(VisualStim).with(ColorMixin)
this._pixi.position = to_pixiPoint(this.pos, this.units, this.win);
this._pixi.rotation = -this.ori * Math.PI / 180;
if (this._blurVal > 0)
{
this.setBlurVal(this._blurVal);
}
// re-estimate the bounding box, as the texture's width may now be available:
this._estimateBoundingBox();
}