Files
slate32/sdcard/apps/Home/main.lua
evan b2f58118e1 revert(gui): return text rendering to built-in Font 1
Remove OpenFontRender, embedded Meslo assets, custom-font APIs, and their runtime allocation overhead. Keep the taller status layout and compact card grid, with used RAM, aligned faded WiFi bars, and tighter telemetry rows.
2026-08-02 15:26:40 -04:00

55 lines
1.7 KiB
Lua

local ui = require("ui")
local PAD, GAP = 12, 8
local CARD_SIZE = 1 -- one scale across every card, regardless of label length
local screen
local function card(name, side)
return ui.button{
w = side, h = side,
justify = "center",
on_press = function() sys.launch("/apps/" .. name .. "/main.lua") end,
ui.label(name, {size = CARD_SIZE, fit = side - 16}),
}
end
function init()
local names = {}
for _, name in ipairs(fs.listDirs("/apps")) do
if name ~= "Home" then names[#names + 1] = name end
end
table.sort(names)
local side, cols = ui.cardSide(math.max(#names, 1), PAD, GAP)
-- Rows are filled before ui.box() sees them: the constructor moves a spec's array part
-- into its children, so anything appended afterwards is never laid out.
local rows = {}
for _, name in ipairs(names) do
local row = rows[#rows]
if not row or #row >= cols then
row = {}
rows[#rows + 1] = row
end
row[#row + 1] = card(name, side)
end
-- Centred left to right as a unit, still top aligned: the gaps inside the grid are
-- fixed, so the leftover width belongs beside the block, not to its last column.
local items = {pad = PAD, gap = GAP, w = "fill", align = "center"}
local gridW = cols * side + (cols - 1) * GAP
for _, row in ipairs(rows) do
row.row, row.gap, row.w = true, GAP, gridW
items[#items + 1] = ui.box(row)
end
if #rows == 0 then items[#items + 1] = ui.text("no apps in /apps", {color = ui.theme.muted}) end
screen = ui.screen(ui.box(items))
log.info("home ready")
end
function draw() screen:draw() end
function on_touch_down(x, y) screen:down(x, y) end
function on_touch_up(x, y) screen:up(x, y) end