UNPKG

nidza

Version:

Nidza.js is ultimate canvas2d+3d solution (Easy port any webgl or webgl2 script). In context of 3d graphics it is used for GLSL manipulation. Objective is low CPU usage price.

136 lines (113 loc) 3.45 kB
import { NidzaElement } from "./base-component.js"; import { Osc, drawSimpleText, drawRotatedText, drawBorder, drawWithBorder, drawRotatedBorderText } from "./operations.js"; import {Rotator} from "./rotation.js"; export class NidzaTextComponent extends NidzaElement { constructor(arg) { const eArg = { position: arg.position, id: arg.id, canvasDom: arg.canvasDom } super(eArg); this.id = arg.id; this.text = arg.text; this.color = arg.color || 'black'; // Must be optimized with new override draws who setup font // for now i use flag `isActive`. this.font = { isActive: false, fontSize: "30px", fontStyle: "bold", fontName: "serif" }; if (arg.font) { this.font = { isActive: true, fontSize: arg.font.fontSize, fontStyle: arg.font.fontStyle, fontName: arg.font.fontName }; } this.ctx = arg.ctx; this.canvasDom = arg.canvasDom; this.draw = drawSimpleText; this.drawRotatedText = drawRotatedText; this.drawRotatedBorderText = drawRotatedBorderText; this.drawBorder = drawBorder; this.drawWithBorder = drawWithBorder; this.border = { typeOfDraw: 'fill-stroke', isActive: false, fillColor: 'gold', strokeColor: 'red', radius: 10 }; if (arg.border) { this.border = { typeOfDraw: arg.border.typeOfDraw || 'fill-stroke', isActive: true, fillColor: arg.border.fillColor || 'gold', strokeColor: arg.border.strokeColor || 'red', radius: arg.border.radius || 10 }; this.setBorder(this.border); } this.rotation = new Rotator(this.id, this.canvasDom.id); this.rotation.setId(this.id); addEventListener(this.getKey("activate-rotator"), this.activateRotator, false); var newW = 20, newH = 20; if (arg.dimension) { newW = arg.dimension.width || 20; newH = arg.dimension.height || 20; } this.dimension.setReferent(this.canvasDom); this.dimension.elementIdentity = this.id; this.dimension.setDimension(newW, newH); } getKey(action) { return action + this.canvasDom.id; } getFont() { return this.font.fontStyle + " " + this.font.fontSize + " " + this.font.fontName; } setBorder(arg) { if (arg) { this.border = { typeOfDraw: arg.typeOfDraw || 'fill-stroke', isActive: true, fillColor: arg.fillColor || 'gold', strokeColor: arg.strokeColor || 'red', radius: arg.radius || 10 }; } this.border.isActive = true; if (this.rotation && this.rotation.isActive) { this.draw = this.drawRotatedBorderText; } else { this.draw = this.drawWithBorder; } } // Important - overriding is here // flag rotation.isActive indicate activateRotator = () => { if (this.rotation.isActive == false) { this.rotation.isActive = true; if (this.border.isActive) { this.draw = this.drawRotatedBorderText; } else { this.draw = this.drawRotatedText; } } dispatchEvent(new CustomEvent(this.getKey("activate-updater"), { detail: { id: this.elementIdentity, oneDraw: true } })); } }