2023-10-18 13:44:49 +00:00
|
|
|
class BBTimelineCanvas {
|
|
|
|
constructor(parentEl, el) {
|
|
|
|
const a = this;
|
|
|
|
|
|
|
|
a.Parent = parentEl;
|
|
|
|
a.Container = el;
|
|
|
|
a.CTX = a.Container.getContext("2d");
|
|
|
|
|
|
|
|
a.ClientRectangle = { X: 0, Y: 0, W: 0, H: 0 };
|
|
|
|
|
|
|
|
a.initialiseComponents();
|
|
|
|
}
|
|
|
|
|
|
|
|
initialiseComponents() {
|
|
|
|
const a = this;
|
|
|
|
|
|
|
|
a.Container.style.width = a.Parent.Size.W + "px";
|
|
|
|
a.Container.style.height = a.Parent.Size.H + "px";
|
|
|
|
a.Container.style.position = 'absolute';
|
|
|
|
a.Container.style.border = 'none';
|
|
|
|
|
|
|
|
a.CTX.canvas.width = a.Parent.Size.W;
|
|
|
|
a.CTX.canvas.height = a.Parent.Size.H;
|
|
|
|
|
|
|
|
a.Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-10-19 23:22:29 +00:00
|
|
|
Clear() {
|
|
|
|
const a = this;
|
|
|
|
|
|
|
|
a.CTX.clearRect(0, 0, a.CTX.canvas.width, a.CTX.canvas.height);
|
|
|
|
}
|
|
|
|
|
|
|
|
Invalidate() {
|
|
|
|
// placeholder
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-10-18 13:44:49 +00:00
|
|
|
drawText(x, y, label, font, foreColour, align) {
|
|
|
|
const a = this;
|
|
|
|
|
|
|
|
a.CTX.font = font;
|
|
|
|
a.CTX.fillStyle = foreColour;
|
|
|
|
|
|
|
|
const size = a.measureText(font, label);
|
|
|
|
|
|
|
|
switch (align) {
|
|
|
|
case "center":
|
|
|
|
x = (x - size.OffsetLeft);
|
|
|
|
break;
|
|
|
|
case "right":
|
|
|
|
x = (x - size.Width);
|
|
|
|
break;
|
|
|
|
case "left":
|
|
|
|
default:
|
|
|
|
// do nothing
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
a.CTX.fillText(label, x, (y + size.Height));
|
|
|
|
|
|
|
|
return size;
|
|
|
|
}
|
|
|
|
|
|
|
|
drawRectangle(rectangle, colour) {
|
|
|
|
const a = this;
|
|
|
|
|
|
|
|
a.CTX.beginPath();
|
|
|
|
a.CTX.rect(rectangle.X, rectangle.Y, rectangle.W, rectangle.H);
|
|
|
|
//a.ctx.fillStyle = 'yellow';
|
|
|
|
//a.ctx.fill();
|
|
|
|
a.CTX.lineWidth = 1;
|
|
|
|
a.CTX.strokeStyle = colour;
|
|
|
|
a.CTX.stroke();
|
|
|
|
}
|
|
|
|
|
|
|
|
half(value) {
|
|
|
|
return (value / 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
measureText(font, value) {
|
|
|
|
const a = this;
|
|
|
|
|
|
|
|
a.CTX.font = font;
|
|
|
|
const size = a.CTX.measureText(value);
|
|
|
|
|
|
|
|
return {
|
|
|
|
Width: size.width,
|
|
|
|
Height: size.fontBoundingBoxAscent,
|
|
|
|
OffsetLeft: a.half(size.width),
|
|
|
|
OffsetTop: a.half(size.fontBoundingBoxAscent)
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|