1
0
mirror of https://github.com/20kdc/OC-KittenOS.git synced 2024-11-08 11:38:07 +11:00
OC-KittenOS/code/apps/app-klogo.lua
20kdc 9caf0115d2 Apparently the previous commit was not enough to sate BMP's hunger for my mind
Take this offering BMP gods, with alpha "support"
2018-04-07 11:53:47 +01:00

89 lines
2.1 KiB
Lua

-- This is released into the public domain.
-- No warranty is provided, implied or otherwise.
local event = require("event")(neo)
local neoux = require("neoux")(event, neo)
local braille = require("braille")
local bmp = require("bmp")
local icecap = neo.requireAccess("x.neo.pub.base", "loadimg")
local file = icecap.open("/logo.bmp", false)
local header = file.read(bmp.headerMinSzBMP)
local palette = ""
local lcBase = bmp.headerMinSzBMP
local palBase = bmp.headerMinSzBMP
local lcWidth = 1
local lc = {}
local lcdq = {}
local queueSize = 4
if os.totalMemory() > (256 * 1024) then
queueSize = 40
end
for i = 1, queueSize do
lcdq[i] = 0
end
local function getLine(y)
if not lc[y] then
local idx = y * lcWidth
file.seek("set", lcBase + idx - 1)
if lcdq[1] then
lc[table.remove(lcdq, 1)] = nil
end
table.insert(lcdq, y)
lc[y] = file.read(lcWidth)
end
return lc[y]
end
local bitmap = bmp.connect(function (i)
if i >= palBase then
local v = palette:byte(i + 1 - palBase)
if v then
return v
end
end
if i >= lcBase then
local ld = getLine(math.floor((i - lcBase) / lcWidth))
i = ((i - lcBase) % lcWidth) + 1
return ld:byte(i) or 0
end
return header:byte(i) or 0
end)
file.seek("set", bitmap.paletteAddress - 1)
palette = file.read(bitmap.paletteCol * 4)
palBase = bitmap.paletteAddress
lcBase = bitmap.dataAddress
lcWidth = bitmap.dsSpan
local running = true
local function decodeRGB(rgb, igp)
if igp and bitmap.bpp > 24 then
rgb = math.floor(rgb / 256)
end
return math.floor(rgb / 65536) % 256, math.floor(rgb / 256) % 256, rgb % 256
end
local bW, bH = math.ceil(bitmap.width / 2), math.ceil(bitmap.height / 4)
neoux.create(bW, bH, nil, neoux.tcwindow(bW, bH, {
braille.new(1, 1, bW, bH, {
selectable = true,
get = function (window, x, y, bg, fg, selected, colour)
if bitmap.ignoresPalette then
return decodeRGB(bitmap.getPixel(x - 1, y - 1, 0), true)
end
return decodeRGB(bitmap.getPalette(bitmap.getPixel(x - 1, y - 1, 0)), false)
end
}, 1)
}, function (w)
w.close()
running = false
end, 0xFFFFFF, 0))
while running do
event.pull()
end