malwoden
Version:
   
122 lines • 4.98 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ButtonWidget = exports.HoverState = void 0;
var struct_1 = require("../struct");
var terminal_1 = require("../terminal");
var widget_1 = require("./widget");
var Calc = require("../calc");
var draw_borders_1 = require("./util/draw-borders");
var HoverState;
(function (HoverState) {
HoverState[HoverState["None"] = 0] = "None";
HoverState[HoverState["Hover"] = 1] = "Hover";
HoverState[HoverState["Down"] = 2] = "Down";
})(HoverState = exports.HoverState || (exports.HoverState = {}));
var ButtonWidget = /** @class */ (function (_super) {
__extends(ButtonWidget, _super);
function ButtonWidget(config) {
var _this = _super.call(this, config) || this;
_this.state = __assign({ foreColor: terminal_1.Color.White, hoverColor: terminal_1.Color.DarkGray, downColor: terminal_1.Color.Black, backColor: terminal_1.Color.Black, padding: 0 }, config.initialState);
return _this;
}
ButtonWidget.prototype.getPadding = function () {
var _a;
return (_a = this.state.padding) !== null && _a !== void 0 ? _a : 0;
};
ButtonWidget.prototype.getBounds = function () {
return struct_1.Rect.FromWidthHeight(this.absoluteOrigin, this.getPadding() * 2 + this.state.text.length, this.getPadding() * 2 + 1);
};
ButtonWidget.prototype.getMouseStateFromMouseHandler = function (mouseHandler, terminal) {
if (!mouseHandler || !terminal)
return HoverState.None;
var mousePos = mouseHandler.getPos();
var terminalPos = terminal.windowToTilePoint(mousePos);
var mouseDown = mouseHandler.isMouseDown();
if (this.getBounds().contains(terminalPos)) {
if (mouseDown) {
return HoverState.Down;
}
else {
return HoverState.Hover;
}
}
else {
return HoverState.None;
}
};
ButtonWidget.prototype.getBackColor = function (mouseState) {
if (mouseState === HoverState.None) {
return this.state.backColor;
}
if (mouseState === HoverState.Hover) {
return this.state.hoverColor;
}
if (mouseState === HoverState.Down) {
return this.state.downColor;
}
};
ButtonWidget.prototype.onMouseClick = function (event) {
if (!this.terminal || !this.state.onClick)
return false;
var tilePos = this.terminal.windowToTilePoint(event);
if (this.getBounds().contains(tilePos)) {
this.state.onClick();
return true;
}
return false;
};
ButtonWidget.prototype.onDraw = function () {
if (!this.terminal)
return;
var bounds = this.getBounds();
var hoverState = this.getMouseStateFromMouseHandler(this.mouseHandler, this.terminal);
var backColor = this.getBackColor(hoverState);
var g = terminal_1.Glyph.fromCharCode(terminal_1.CharCode.space, this.state.foreColor, backColor);
for (var y = bounds.v1.y; y <= bounds.v2.y; y++) {
for (var x = bounds.v1.x; x <= bounds.v2.x; x++) {
this.terminal.drawGlyph({ x: x, y: y }, g);
}
}
this.terminal.writeAt(Calc.Vector.add(bounds.v1, {
x: this.getPadding(),
y: this.getPadding(),
}), this.state.text, this.state.foreColor, backColor);
// Draw borders
if (this.getPadding() > 0 && this.state.borderStyle) {
draw_borders_1.drawBorder({
terminal: this.terminal,
style: this.state.borderStyle,
foreColor: this.state.foreColor,
backColor: backColor,
bounds: this.getBounds(),
});
}
};
return ButtonWidget;
}(widget_1.Widget));
exports.ButtonWidget = ButtonWidget;
//# sourceMappingURL=button-widget.js.map