lazy-widgets
Version:
Typescript retained mode GUI for the HTML canvas API
79 lines • 2.68 kB
JavaScript
import { ClickState } from "./ClickState.js";
/**
* A class that mixes multiple {@link GenericClickHelper} instances into one.
* Useful if you want a widget to be both clickable by a pointer and by the
* enter key
*
* @category Helper
*/
export class CompoundClickHelper {
constructor(clickHelpers) {
this.clickHelpers = clickHelpers;
}
get lastClickState() {
let highestState = ClickState.Released;
for (const clickHelper of this.clickHelpers) {
if (clickHelper.lastClickState > highestState) {
highestState = clickHelper.lastClickState;
}
}
return highestState;
}
get clickState() {
let highestState = ClickState.Released;
for (const clickHelper of this.clickHelpers) {
if (clickHelper.clickState > highestState) {
highestState = clickHelper.clickState;
}
}
return highestState;
}
/**
* See {@link BaseClickHelper#clickStateChanged}.
*
* Note that this does not check if the combined state has changed, it only
* check if any of the states in {@link CompoundClickHelper#clickHelpers}
* has changed, meaning that this can be true while
* {@link CompoundClickHelper#clickState} is equal to
* {@link CompoundClickHelper#lastClickState}. To check whether the combined
* state changed, compare the aforementioned values. This is the default
* behaviour so that clicks aren't dropped.
*/
get clickStateChanged() {
for (const clickHelper of this.clickHelpers) {
if (clickHelper.clickStateChanged) {
return true;
}
}
return false;
}
/**
* Similar to {@link BaseClickHelper#wasClick}, except that the wasClick
* property for each click helper is only true if the
* {@link BaseClickHelper#clickStateChanged} property is also true.
*/
get wasClick() {
for (const clickHelper of this.clickHelpers) {
if (clickHelper.wasClick && clickHelper.clickStateChanged) {
return true;
}
}
return false;
}
/** Resets each click helper instance being mixed. */
reset() {
for (const clickHelper of this.clickHelpers) {
clickHelper.reset();
}
}
/**
* Unsets the {@link BaseClickHelper#clickStateChanged} flag in each click
* helper instance being mixed.
*/
doneProcessing() {
for (const clickHelper of this.clickHelpers) {
clickHelper.doneProcessing();
}
}
}
//# sourceMappingURL=CompoundClickHelper.js.map