diff --git a/app/mxwm/startz.js b/app/mxwm/startz.js index f489df6..00f65dd 100644 --- a/app/mxwm/startz.js +++ b/app/mxwm/startz.js @@ -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), diff --git a/app/mxwm/zcom.js b/app/mxwm/zcom.js index 2832ce1..97b0390 100644 --- a/app/mxwm/zcom.js +++ b/app/mxwm/zcom.js @@ -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, diff --git a/app/zterm/package.json b/app/zterm/package.json index a52e76a..5f6d3d7 100644 --- a/app/zterm/package.json +++ b/app/zterm/package.json @@ -1,6 +1,6 @@ { "name": "zterm", - "version": "0.1.0", + "version": "0.1.1", "description": "Zcom Terminal Emulator", "author": "MeexReay", "apps": [ "zterm.js" ] diff --git a/app/zterm/zterm.js b/app/zterm/zterm.js index af34114..8845cb5 100644 --- a/app/zterm/zterm.js +++ b/app/zterm/zterm.js @@ -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) { diff --git a/sys/graphics.js b/sys/graphics.js index 63630f5..45d8808 100644 --- a/sys/graphics.js +++ b/sys/graphics.js @@ -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)