62 lines
1.3 KiB
TypeScript
62 lines
1.3 KiB
TypeScript
import ansi from 'sisteransi';
|
|
import { Node, TextNode } from './Node.js';
|
|
|
|
|
|
const TERMINAL_HIGH_BUFFER = '\x1b[?1049h';
|
|
const TERMINAL_LOW_BUFFER = '\x1b[?1049l'
|
|
|
|
class Screen extends Node {
|
|
buffer: ArrayBuffer;
|
|
bufferView: Uint8Array;
|
|
paletteBuffer: ArrayBuffer;
|
|
paletteBufferView: Uint8Array;
|
|
|
|
constructor() {
|
|
super();
|
|
process.stdout.write(TERMINAL_HIGH_BUFFER);
|
|
process.stdout.write(ansi.cursor.hide);
|
|
this.layout(process.stdout.columns, process.stdout.rows);
|
|
}
|
|
|
|
onResize(w: number, h: number) {
|
|
this.buffer = new ArrayBuffer(w * h);
|
|
this.bufferView = new Uint8Array(this.buffer);
|
|
this.paletteBuffer = new ArrayBuffer(w * h);
|
|
this.paletteBufferView = new Uint8Array(this.paletteBuffer);
|
|
}
|
|
|
|
// paletteAt(x: number, y: number) {
|
|
|
|
// }
|
|
|
|
offset(x: number, y: number) {
|
|
return y * this.h + x
|
|
}
|
|
|
|
updateTerminal() {
|
|
process.stdout.write(ansi.cursor.to(0, 0))
|
|
for(let y = 0; y < this.h; y ++) {
|
|
for(let x = 0; x < this.w; x ++) {
|
|
|
|
}
|
|
process.stdout.write('\r\n')
|
|
}
|
|
}
|
|
|
|
render(x: number, y: number): [number, string] {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
destroy() {
|
|
process.stdout.write(TERMINAL_LOW_BUFFER);
|
|
process.stdout.write(ansi.cursor.show);
|
|
}
|
|
}
|
|
|
|
// class Palette {
|
|
|
|
// }
|
|
|
|
|
|
const screen = new Screen();
|
|
screen.append(new TextNode('Test')) |