mirror of
https://github.com/psychopy/psychojs.git
synced 2025-05-12 16:48:10 +00:00
Merge pull request #391 from apitiot/master
added the notion of dependent stimuli to Slider
This commit is contained in:
commit
0da4e6ff66
@ -106,7 +106,7 @@ export class MinimalStim extends PsychObject
|
||||
if (typeof this._pixi === 'undefined')
|
||||
{
|
||||
this.psychoJS.logger.warn('the Pixi.js representation of this stimulus is undefined.');
|
||||
}// throw Object.assign(response, { error: 'the PIXI representation of the stimulus is unavailable'});
|
||||
}
|
||||
else
|
||||
{
|
||||
this.win._rootContainer.addChild(this._pixi);
|
||||
|
@ -359,7 +359,8 @@ export class Window extends PsychObject
|
||||
this._renderer.backgroundColor = this._color.int;
|
||||
}
|
||||
|
||||
// we also change the background color of the body since the dialog popup may be longer than the window's height:
|
||||
// we also change the background color of the body since
|
||||
// the dialog popup may be longer than the window's height:
|
||||
document.body.style.backgroundColor = this._color.hex;
|
||||
|
||||
this._needUpdate = false;
|
||||
@ -378,7 +379,8 @@ export class Window extends PsychObject
|
||||
{
|
||||
this._updateIfNeeded();
|
||||
|
||||
// if a stimuli needs to be updated, we remove it from the window container, update it, then put it back
|
||||
// if a stimuli needs to be updated, we remove it from the window container,
|
||||
// update it, then put it back
|
||||
for (const stimulus of this._drawList)
|
||||
{
|
||||
if (stimulus._needUpdate && typeof stimulus._pixi !== 'undefined')
|
||||
|
@ -923,7 +923,9 @@ export class Form extends util.mix(VisualStim).with(ColorMixin)
|
||||
this._visual.stimuliTotalHeight = stimulusOffset;
|
||||
|
||||
|
||||
// scrollbar:
|
||||
// scrollbar
|
||||
// note: we add this Form as a dependent stimulus such that the Form is redrawn whenever
|
||||
// the slider is updated
|
||||
this._scrollbar = new Slider({
|
||||
win: this._win,
|
||||
name: 'scrollbar',
|
||||
@ -934,6 +936,7 @@ export class Form extends util.mix(VisualStim).with(ColorMixin)
|
||||
size: [this._scrollbarWidth, this._size[1]],
|
||||
style: [Slider.Style.SLIDER],
|
||||
ticks: [0, -this._visual.stimuliTotalHeight / this._size[1]],
|
||||
dependentStims: [this]
|
||||
});
|
||||
this._prevScrollbarMarkerPos = 0;
|
||||
this._scrollbar.setMarkerPos(this._prevScrollbarMarkerPos);
|
||||
@ -968,7 +971,6 @@ export class Form extends util.mix(VisualStim).with(ColorMixin)
|
||||
}
|
||||
this._needUpdate = false;
|
||||
|
||||
|
||||
// calculate the edges of the form and various other sizes, in various units:
|
||||
this._leftEdge = this._pos[0] - this._size[0] / 2.0;
|
||||
this._rightEdge = this._pos[0] + this._size[0] / 2.0;
|
||||
|
@ -59,6 +59,9 @@ import {PsychoJS} from "../core/PsychoJS";
|
||||
* frame flip
|
||||
* @param {boolean} [options.autoLog= false] - whether or not to log
|
||||
*
|
||||
* @param {core.MinimalStim[]} [options.dependentStims = [] ] - the list of dependent stimuli,
|
||||
* which must be updated when this Slider is updated, e.g. a Form.
|
||||
*
|
||||
* @todo check that parameters are valid, e.g. ticks are an array of numbers, etc.
|
||||
* @todo readOnly
|
||||
* @todo complete setters, for instance setTicks should change this._isCategorical
|
||||
@ -66,7 +69,7 @@ import {PsychoJS} from "../core/PsychoJS";
|
||||
*/
|
||||
export class Slider extends util.mix(VisualStim).with(ColorMixin, WindowMixin)
|
||||
{
|
||||
constructor({name, win, pos, size, ori, units, color, markerColor, contrast, opacity, style, ticks, labels, granularity, flip, readOnly, font, bold, italic, fontSize, compact, clipMask, autoDraw, autoLog} = {})
|
||||
constructor({name, win, pos, size, ori, units, color, markerColor, contrast, opacity, style, ticks, labels, granularity, flip, readOnly, font, bold, italic, fontSize, compact, clipMask, autoDraw, autoLog, dependentStims} = {})
|
||||
{
|
||||
super({name, win, units, ori, opacity, pos, size, clipMask, autoDraw, autoLog});
|
||||
|
||||
@ -179,6 +182,14 @@ export class Slider extends util.mix(VisualStim).with(ColorMixin, WindowMixin)
|
||||
this._onChange(true, false)
|
||||
);
|
||||
|
||||
this._addAttribute(
|
||||
'dependentStims',
|
||||
dependentStims,
|
||||
[],
|
||||
this._onChange(false, false)
|
||||
);
|
||||
|
||||
|
||||
|
||||
// slider rating (which might be different from the visible marker rating):
|
||||
this._addAttribute('rating', undefined);
|
||||
@ -607,6 +618,12 @@ export class Slider extends util.mix(VisualStim).with(ColorMixin, WindowMixin)
|
||||
this._pixi.position = this._getPosition_px();
|
||||
|
||||
this._pixi.alpha = this._opacity;
|
||||
|
||||
// make sure that the dependent Stimuli are also updated:
|
||||
for (const dependentStim of this._dependentStims)
|
||||
{
|
||||
dependentStim.draw();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user