rt-graphic-component/components/packages/EsbButton/ThEsbButton.js
2024-01-04 10:44:03 +08:00

80 lines
2.9 KiB
JavaScript

import { Graphics } from 'pixi.js';
import { JlGraphic, VectorText } from 'jl-graphic';
const esbButtonConsts = {
codeFontSize: 12,
codeColor: 0xffffff,
bodyLineColor: 0xffffff,
bodyLineWidth: 4,
bodyRectLineColor: 0xffffff,
bodyRectLineWidth: 2,
bodyRectWidth: 20,
bodyRectHeight: 20,
bodyCircleRadius: 5,
bodyCircleColor: 0xffffff,
bodyColor: 0x000000,
pressedColor: 0xff0000,
};
class EsbButton extends JlGraphic {
static Type = 'esbButton';
codeGraph = new VectorText('');
circleBody = new Graphics();
rectBody = new Graphics();
lineBody = new Graphics();
constructor() {
super(EsbButton.Type);
this.addChild(this.codeGraph);
this.addChild(this.rectBody);
this.addChild(this.lineBody);
this.addChild(this.circleBody);
this.codeGraph.name = 'esb_code';
}
get datas() {
return this.getDatas();
}
get state() {
return this.getStates();
}
doRepaint() {
const codeGraph = this.codeGraph;
codeGraph.text = this.datas.code;
codeGraph.style.fill = esbButtonConsts.codeColor;
codeGraph.setVectorFontSize(esbButtonConsts.codeFontSize);
codeGraph.anchor.set(0.5);
const codeTransform = this.datas?.childTransforms?.find((item) => item.name === 'esb_code');
if (codeTransform) {
const position = codeTransform?.transform.position;
const rotation = codeTransform?.transform?.rotation;
codeGraph.position.set(position?.x, position?.y);
codeGraph.rotation = rotation || 0;
}
else {
codeGraph.position.set(-30, 0);
}
this.circleBody.clear();
this.circleBody.beginFill(this.state.down
? esbButtonConsts.pressedColor
: esbButtonConsts.bodyCircleColor, 1);
this.circleBody.drawCircle(0, 0, esbButtonConsts.bodyCircleRadius);
this.circleBody.endFill();
this.rectBody.clear();
this.rectBody.beginFill(esbButtonConsts.bodyColor, 0);
this.rectBody.lineStyle(esbButtonConsts.bodyRectLineWidth, this.state.down
? esbButtonConsts.pressedColor
: esbButtonConsts.bodyRectLineColor);
this.rectBody.drawRect(-esbButtonConsts.bodyRectWidth / 2, -esbButtonConsts.bodyRectHeight / 2, esbButtonConsts.bodyRectWidth, esbButtonConsts.bodyRectHeight);
this.rectBody.endFill();
this.lineBody.clear();
const lineY = this.datas.flip
? esbButtonConsts.bodyRectHeight / 2
: -esbButtonConsts.bodyRectHeight / 2;
this.lineBody.lineStyle(esbButtonConsts.bodyLineWidth, this.state.down
? esbButtonConsts.pressedColor
: esbButtonConsts.bodyLineColor);
this.lineBody.moveTo(-esbButtonConsts.bodyRectWidth / 2, lineY);
this.lineBody.lineTo(esbButtonConsts.bodyRectWidth / 2, lineY);
}
}
export { EsbButton };