forked from hkc/cc-stuff
Gracefully handle small terminal
Also fuck it, global terminal size again
This commit is contained in:
parent
062d16ea69
commit
d04eeacb36
|
@ -27,6 +27,36 @@ settings.define("mplayer.colors.status", {
|
|||
default = 0x80EF80, -- #80EF80
|
||||
type = number
|
||||
})
|
||||
|
||||
local tw, th = term.getSize()
|
||||
|
||||
os.queueEvent("dummy")
|
||||
while tw < 20 or th < 10 do
|
||||
local ev = { os.pullEvent() }
|
||||
term.clear()
|
||||
term.setCursorPos(1, 1)
|
||||
printError("Too small: " .. tw .. "x" .. th .. " < 20x10")
|
||||
printError("Q to exit")
|
||||
printError("Y to ignore")
|
||||
|
||||
local setTextScale = term.current().setTextScale
|
||||
if setTextScale ~= nil then
|
||||
printError("S to try rescaling")
|
||||
end
|
||||
printError("I'll wait while you're adding more")
|
||||
|
||||
if ev[1] == "term_resize" then
|
||||
tw, th = term.getSize()
|
||||
elseif ev[1] == "key" and ev[2] == keys.s and setTextScale ~= nil then
|
||||
setTextScale(0.5)
|
||||
elseif ev[1] == "key" and ev[2] == keys.y then
|
||||
break
|
||||
elseif ev[1] == "key" and ev[2] == keys.q then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local drive = peripheral.find("tape_drive")
|
||||
if not drive then
|
||||
printError("No drive found, starting in dummy mode")
|
||||
|
@ -146,7 +176,6 @@ local mplayer = {
|
|||
title = "Help",
|
||||
scroll = 0,
|
||||
render = function(self)
|
||||
local tw, th = term.getSize()
|
||||
for i = 1, th - 3 do
|
||||
local line = help[i + self.screens[1].scroll] or "~"
|
||||
term.setCursorPos(1, i + 1)
|
||||
|
@ -165,7 +194,6 @@ local mplayer = {
|
|||
end
|
||||
end,
|
||||
handleKey = function(self, key, repeating)
|
||||
local _, th = term.getSize()
|
||||
if key == keys.down or key == keys.j then
|
||||
self.screens[1].handleScroll(self, 1)
|
||||
elseif key == keys.up or key == keys.k then
|
||||
|
@ -177,7 +205,6 @@ local mplayer = {
|
|||
end
|
||||
end,
|
||||
handleScroll = function(self, direction, x, y)
|
||||
local _, th = term.getSize()
|
||||
self.screens[1].scroll = math.max(0, math.min(th - 1, self.screens[1].scroll + direction))
|
||||
end,
|
||||
},
|
||||
|
@ -187,7 +214,6 @@ local mplayer = {
|
|||
cursor = 1,
|
||||
textScroll = 0,
|
||||
render = function(self)
|
||||
local tw, th = term.getSize()
|
||||
for i = 1, th - 3 do
|
||||
local song = self.songs[i + self.screens[2].scroll]
|
||||
local isCurrent = (i + self.screens[2].scroll) == self.currentSong
|
||||
|
@ -214,7 +240,6 @@ local mplayer = {
|
|||
end
|
||||
end,
|
||||
handleKey = function(self, key, repeating)
|
||||
local _, th = term.getSize()
|
||||
if key == keys.down or key == keys.j then
|
||||
self.screens[2].handleScroll(self, 1)
|
||||
elseif key == keys.up or key == keys.k then
|
||||
|
@ -231,7 +256,6 @@ local mplayer = {
|
|||
end
|
||||
end,
|
||||
handleScroll = function(self, direction, x, y)
|
||||
local _, th = term.getSize()
|
||||
self.screens[2].cursor = math.max(1, math.min(#self.songs, self.screens[2].cursor + direction))
|
||||
if self.screens[2].scroll + 1 > self.screens[2].cursor then
|
||||
self.screens[2].scroll = self.screens[2].cursor - 1
|
||||
|
@ -252,7 +276,6 @@ local mplayer = {
|
|||
term.write(string.format("opt = %d, scroll = %d", self.screens[3].cursor, self.screens[3].scroll))
|
||||
end,
|
||||
handleKey = function(self, key, repeating)
|
||||
local _, th = term.getSize()
|
||||
if key == keys.down or key == keys.j then
|
||||
self.screens[3].handleScroll(self, 1)
|
||||
elseif key == keys.up or key == keys.k then
|
||||
|
@ -264,7 +287,6 @@ local mplayer = {
|
|||
end
|
||||
end,
|
||||
handleScroll = function(self, direction, x, y)
|
||||
local _, th = term.getSize()
|
||||
self.screens[3].cursor = math.max(1, math.min(20, self.screens[3].cursor + direction))
|
||||
if self.screens[3].scroll + 1 > self.screens[3].cursor then
|
||||
self.screens[3].scroll = self.screens[3].cursor - 1
|
||||
|
@ -293,8 +315,6 @@ term.clear()
|
|||
parallel.waitForAny(
|
||||
function()
|
||||
while true do
|
||||
local tw, th = term.getSize()
|
||||
|
||||
-- Current screen
|
||||
term.setCursorPos(1, 2)
|
||||
mplayer.screens[mplayer.currentScreen].render(mplayer)
|
||||
|
@ -359,7 +379,6 @@ function()
|
|||
local pretty = require("cc.pretty")
|
||||
while true do
|
||||
local _evd = { os.pullEvent() }
|
||||
local tw, th = term.getSize()
|
||||
local ev, evd = table.remove(_evd, 1), _evd
|
||||
if ev == "key" then
|
||||
mplayer.heldKeys[evd[1]] = evd[2]
|
||||
|
@ -408,6 +427,8 @@ function()
|
|||
end
|
||||
cx = cx + #caption
|
||||
end
|
||||
elseif ev == "term_resize" then
|
||||
tw, th = term.getSize()
|
||||
elseif ev == "tape_removed" then
|
||||
mplayer.songs = {}
|
||||
elseif ev == "tape_inserted" then
|
||||
|
|
Loading…
Reference in New Issue