mirror of
https://github.com/psychopy/psychojs.git
synced 2025-05-10 18:50:54 +00:00
properly organized button pt1.
This commit is contained in:
parent
74111a894f
commit
6c85a2056d
@ -7,16 +7,18 @@
|
|||||||
* @license Distributed under the terms of the MIT License
|
* @license Distributed under the terms of the MIT License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { VisualStim } from "./VisualStim.js";
|
||||||
import { Mouse } from "../core/Mouse.js";
|
import { Mouse } from "../core/Mouse.js";
|
||||||
import { TextBox } from "./TextBox.js";
|
import * as PIXI from "pixi.js-legacy";
|
||||||
import * as util from "../util/Util";
|
import * as util from "../util/Util";
|
||||||
|
import { Color } from "../util/Color.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>ButtonStim visual stimulus.</p>
|
* <p>ButtonStim visual stimulus.</p>
|
||||||
*
|
*
|
||||||
* @extends TextBox
|
* @extends VisualStim
|
||||||
*/
|
*/
|
||||||
export class ButtonStim extends TextBox
|
export class ButtonStim extends VisualStim
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @memberOf module:visual
|
* @memberOf module:visual
|
||||||
@ -52,7 +54,7 @@ export class ButtonStim extends TextBox
|
|||||||
padding,
|
padding,
|
||||||
anchor = "center",
|
anchor = "center",
|
||||||
units,
|
units,
|
||||||
color,
|
color = "white",
|
||||||
fillColor = "darkgrey",
|
fillColor = "darkgrey",
|
||||||
borderColor,
|
borderColor,
|
||||||
borderWidth = 0,
|
borderWidth = 0,
|
||||||
@ -73,23 +75,12 @@ export class ButtonStim extends TextBox
|
|||||||
win,
|
win,
|
||||||
name,
|
name,
|
||||||
text,
|
text,
|
||||||
font,
|
|
||||||
pos,
|
pos,
|
||||||
size,
|
size,
|
||||||
padding,
|
|
||||||
anchor,
|
anchor,
|
||||||
units,
|
units,
|
||||||
color,
|
|
||||||
fillColor,
|
|
||||||
borderColor,
|
|
||||||
borderWidth,
|
|
||||||
opacity,
|
opacity,
|
||||||
depth,
|
depth,
|
||||||
letterHeight,
|
|
||||||
multiline,
|
|
||||||
bold,
|
|
||||||
italic,
|
|
||||||
alignment: "center",
|
|
||||||
autoDraw,
|
autoDraw,
|
||||||
autoLog,
|
autoLog,
|
||||||
draggable,
|
draggable,
|
||||||
@ -97,29 +88,21 @@ export class ButtonStim extends TextBox
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.psychoJS.logger.debug("create a new Button with name: ", name);
|
this.psychoJS.logger.debug("create a new Button with name: ", name);
|
||||||
|
|
||||||
this.listener = new Mouse({ name, win, autoLog });
|
this.listener = new Mouse({ name, win, autoLog });
|
||||||
|
|
||||||
this._addAttribute(
|
this._addAttribute("text", text, "");
|
||||||
"wasClicked",
|
this._addAttribute("font", font, "Arial");
|
||||||
false,
|
this._addAttribute("letterHeight", letterHeight, 20);
|
||||||
);
|
this._addAttribute("color", color, "white");
|
||||||
|
this._addAttribute("fillColor", fillColor, "darkgrey");
|
||||||
|
this._addAttribute("borderWidth", borderWidth, 1);
|
||||||
|
this._addAttribute("borderColor", borderColor, "black");
|
||||||
|
this._addAttribute("wasClicked", false, false);
|
||||||
|
|
||||||
// Arrays to store times of clicks on and off
|
// Arrays to store times of clicks on and off
|
||||||
this._addAttribute(
|
this._addAttribute("timesOn", []);
|
||||||
"timesOn",
|
this._addAttribute("timesOff", []);
|
||||||
[],
|
this._addAttribute("numClicks", 0);
|
||||||
);
|
|
||||||
|
|
||||||
this._addAttribute(
|
|
||||||
"timesOff",
|
|
||||||
[],
|
|
||||||
);
|
|
||||||
|
|
||||||
this._addAttribute(
|
|
||||||
"numClicks",
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (this._autoLog)
|
if (this._autoLog)
|
||||||
{
|
{
|
||||||
@ -146,4 +129,79 @@ export class ButtonStim extends TextBox
|
|||||||
{
|
{
|
||||||
return this.listener.isPressedIn(this, [1, 0, 0]);
|
return this.listener.isPressedIn(this, [1, 0, 0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reset()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_composeTextConfig()
|
||||||
|
{
|
||||||
|
const fontSize = Math.round(this._getLengthPix(this._letterHeight));
|
||||||
|
|
||||||
|
return {
|
||||||
|
fontFamily: this._font,
|
||||||
|
fontSize,
|
||||||
|
fill: new Color(this._color).int,
|
||||||
|
align: "center"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateIfNeeded()
|
||||||
|
{
|
||||||
|
if (!this._needUpdate)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._needUpdate = false;
|
||||||
|
|
||||||
|
// update the PIXI representation, if need be:
|
||||||
|
if (this._needPixiUpdate)
|
||||||
|
{
|
||||||
|
this._needPixiUpdate = false;
|
||||||
|
|
||||||
|
if (typeof this._pixi !== "undefined")
|
||||||
|
{
|
||||||
|
this._pixiText.destroy(true);
|
||||||
|
this._pixiGraphics.destroy(true);
|
||||||
|
this._pixi.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
this._pixi = new PIXI.Container();
|
||||||
|
this._pixiGraphics = new PIXI.Graphics();
|
||||||
|
|
||||||
|
const pixiTextConfig = this._composeTextConfig();
|
||||||
|
this._pixiText = new PIXI.Text(this._text, pixiTextConfig);
|
||||||
|
|
||||||
|
this._pixi.addChild(this._pixiGraphics, this._pixiText);
|
||||||
|
this._pixi.interactive = true;
|
||||||
|
|
||||||
|
const fillColor = new Color(this._fillColor);
|
||||||
|
|
||||||
|
this._pixiGraphics.beginFill(fillColor.int, 1);
|
||||||
|
|
||||||
|
if (this._borderWidth > 0)
|
||||||
|
{
|
||||||
|
this._pixiGraphics.lineStyle(this._borderWidth, this._borderColor, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const size_px = util.to_px(this._size, this._units, this._win);
|
||||||
|
|
||||||
|
this._pixiGraphics.drawRect(0, 0, size_px[0], size_px[1]);
|
||||||
|
this._pixiGraphics.endFill();
|
||||||
|
this._pixiGraphics.closePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.anchor = this._anchor;
|
||||||
|
this._pixi.scale.x = this._flipHoriz ? -1 : 1;
|
||||||
|
this._pixi.scale.y = this._flipVert ? 1 : -1;
|
||||||
|
this._pixi.rotation = -this._ori * Math.PI / 180;
|
||||||
|
[this._pixi.x, this._pixi.y] = util.to_px(this._pos, this._units, this._win);
|
||||||
|
|
||||||
|
this._pixi.alpha = this._opacity;
|
||||||
|
this._pixi.zIndex = -this._depth;
|
||||||
|
|
||||||
|
// apply the clip mask:
|
||||||
|
this._pixi.mask = this._clipMask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user