mxwm zcom implementation

This commit is contained in:
MeexReay 2025-03-22 01:53:17 +03:00
parent 6c6cc99013
commit 1479a4dfbb
3 changed files with 116 additions and 0 deletions

8
app/mxwm/package.json Normal file
View File

@ -0,0 +1,8 @@
{
"name": "mxwm",
"version": "0.1.0",
"description": "Mega eXtreme Window Manager",
"author": "MeexReay",
"apps": [ "zcom.js", "startz.js" ],
"configs": []
}

20
app/mxwm/startz.js Normal file
View File

@ -0,0 +1,20 @@
eval(readFile("/app/zcom.js"))
async function main(args) {
enableGraphics()
window.mxwm_windows = []
let ctx = getGraphics()
while (true) {
ctx.fillStyle = "black"
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height)
for (const win of window.mxwm_windows) {
ctx.drawImage(win.canvas, win.x, win.y);
}
}
disableGraphics()
}

88
app/mxwm/zcom.js Normal file
View File

@ -0,0 +1,88 @@
function hasGraphicsImplementation() {
return true
}
/** returns wid and context */
function createWindow(options) {
let canvas = document.createElement("canvas")
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": Date.now().toString() + Math.round(Math.random() * 100).toString(),
"on_signal": options["on_signal"] || options["callback"] || (o => {})
}
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 ]
}
}
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
}
}
}
function signalWindow(wid, signal) {
if (!("mxwm_windows" in window)) {
window.mxwm_windows = [ ]
}
for (const win of window.mxwm_windows) {
if (win["wid"] == wid) {
win.on_signal(signal)
}
}
}
function closeWindow(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
}