add scroll to zterm

This commit is contained in:
MeexReay 2025-05-25 20:21:26 +03:00
parent cede5caa21
commit 44869b61ed
5 changed files with 53 additions and 7 deletions

View File

@ -257,11 +257,25 @@ async function onMouseMove(ctx, x, y) {
}
}
async function onMouseWheel(ctx, x, y, z) {
for (let window of listWindows()) {
if (isMouseInside(window)) {
selected_window = window["wid"]
}
}
if (selected_window != null) {
let window = getWindow(selected_window)
window.onmousewheel(y,x,z)
}
}
async function main(args) {
let ctx = null
enableGraphics({
"onmousemove": (x, y) => onMouseMove(ctx, x, y),
"onmousewheel": (x, y, z) => onMouseWheel(ctx, x, y, z),
"onmousedown": (btn) => onMouseDown(ctx, btn),
"onmouseup": (btn) => onMouseUp(ctx, btn),
"onkeydown": (key) => onKeyDown(ctx, key),

View File

@ -25,6 +25,7 @@ function createWindow(options) {
"onmouseup": options["onmouseup"] || (o => {}),
"onmousemove": options["onmousemove"] || ((x,y) => {}),
"onresize": options["onresize"] || ((x,y) => {}),
"onmousewheel": options["onmousewheel"] || options["onwheel"] || options["onscroll"] || ((y,x,z) => {}),
"onupdate": options["onupdate"] || (() => {}),
"decorated": "decorated" in options ? options["decorated"] : true,
"selectable": "selectable" in options ? options["selectable"] : true,

View File

@ -1,6 +1,6 @@
{
"name": "zterm",
"version": "0.1.0",
"version": "0.1.1",
"description": "Zcom Terminal Emulator",
"author": "MeexReay",
"apps": [ "zterm.js" ]

View File

@ -7,8 +7,11 @@ let stdin_disable = true
let ctx = null
let wid = null
const CHAR_WIDTH = 7
const CHAR_HEIGHT = 14
let char_width = 7
let char_height = 14
let text_scroll = 0
const TERMINAL_COLORS = [
"BLACK",
"DARK_BLUE", "DARK_GREEN", "DARK_CYAN", "DARK_RED", "DARK_MAGENTA", "DARK_YELLOW", "DARK_WHITE",
@ -24,11 +27,11 @@ async function draw() {
ctx.fillStyle = "black"
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height)
ctx.font = "14px terminus";
ctx.font = char_height+"px terminus";
ctx.textBaseline = "middle";
ctx.textAlign = "left";
let y = ctx.canvas.height - 12
let y = ctx.canvas.height - char_height / 2 - 5 + text_scroll
for (let line of text.split("\n").reverse()) {
let x = 5
let buffer = ""
@ -70,7 +73,7 @@ async function draw() {
ctx.fillStyle = color_before;
ctx.fillText(buffer, x, y);
color_before = color
x += buffer.length * CHAR_WIDTH
x += buffer.length * char_width
buffer = ""
}
@ -80,7 +83,7 @@ async function draw() {
ctx.fillStyle = color_before;
ctx.fillText(buffer, x, y);
y -= CHAR_HEIGHT
y -= char_height
}
}
@ -209,6 +212,7 @@ let ctrlKey = false
let shiftKey = false
async function onKeyDown(key) {
text_scroll = 0
if (!stdin_disable) {
if (key == "Enter") {
stdin_text += "\n"
@ -234,6 +238,23 @@ async function onKeyDown(key) {
draw()
}
async function onMouseWheel(y) {
console.log(y)
if (ctrlKey) {
if (y < 0) {
char_height *= 1.05
char_width *= 1.05
} else {
char_height /= 1.05
char_width /= 1.05
}
} else {
text_scroll -= y * 0.5
}
draw()
}
async function onKeyUp(key) {
if (key == "Alt") {
altKey = false
@ -256,6 +277,7 @@ async function main(args) {
"y": 50,
"onkeydown": onKeyDown,
"onkeyup": onKeyUp,
"onmousewheel": onMouseWheel,
"onresize": (w,h) => draw(),
"onsignal": (s) => {
if (s == 9) {

View File

@ -19,6 +19,15 @@ function enableGraphics(options={}) {
event.preventDefault()
})
if ("onmousewheel" in options) {
graphics_canvas.onwheel = e => {
options.onmousewheel(e.deltaX, e.deltaY, e.deltaZ)
if (e.ctrlKey == true) {
e.preventDefault();
}
}
}
if ("onmousemove" in options) {
graphics_canvas.onmousemove = e => {
options.onmousemove(e.x, e.y)