poshlostios/app/mxwm/zcom.js
2025-05-25 03:19:03 +03:00

113 lines
2.7 KiB
JavaScript

function hasGraphicsImplementation() {
return true
}
/** returns wid and context */
function createWindow(options) {
console.log("create", options)
let canvas = document.createElement("canvas")
let wid = Date.now().toString() + Math.round(Math.random() * 100).toString()
let win = {
"title": options["title"],
"x": options["x"] || 0,
"y": options["y"] || 0,
"width": options["width"] || options["w"] || 200,
"height": options["height"] || options["h"] || 200,
"wid": wid,
"onsignal": options["onsignal"] || (o => {}),
"onkeydown": options["onkeydown"] || (o => {}),
"onkeyup": options["onkeyup"] || (o => {}),
"onmousedown": options["onmousedown"] || (o => {}),
"onmouseup": options["onmouseup"] || (o => {}),
"onmousemove": options["onmousemove"] || ((x,y) => {}),
"onresize": options["onresize"] || ((x,y) => {}),
"onupdate": options["onupdate"] || (() => {}),
"decorated": "decorated" in options ? options["decorated"] : true,
"selectable": "selectable" in options ? options["selectable"] : true,
"closable": "closable" in options ? options["closable"] : true,
"movable": "movable" in options ? options["movable"] : true,
"resizable": "resizable" in options ? options["resizable"] : true,
}
canvas.width = win["width"].toString()
canvas.height = win["height"].toString()
let context = canvas.getContext("2d")
win["canvas"] = canvas
win["context"] = context
if ("mxwm_windows" in window) {
window.mxwm_windows.push(win)
} else {
window.mxwm_windows = [ win ]
}
return [wid, context]
}
function moveWindow(wid, x, y, w, h) {
if (!("mxwm_windows" in window)) {
window.mxwm_windows = [ ]
}
for (const win of window.mxwm_windows) {
if (win["wid"] == wid) {
win.x = x
win.y = y
win.width = w
win.height = h
win.canvas.width = w
win.canvas.height = h
win.onresize(w, h)
break
}
}
}
function signalWindow(wid, signal) {
if (!("mxwm_windows" in window)) {
window.mxwm_windows = [ ]
}
for (const win of window.mxwm_windows) {
if (win["wid"] == wid) {
win.onsignal(signal)
}
}
}
function closeWindow(wid) {
console.log("remove", wid)
if (!("mxwm_windows" in window)) {
window.mxwm_windows = [ ]
}
window.mxwm_windows = window.mxwm_windows.filter(o => o.wid != wid)
}
function getWindow(wid) {
if (!("mxwm_windows" in window)) {
window.mxwm_windows = [ ]
}
for (const win of window.mxwm_windows) {
if (win["wid"] == wid) {
return win
}
}
return null
}
function listWindows() {
if (!("mxwm_windows" in window)) {
window.mxwm_windows = [ ]
}
return window.mxwm_windows
}