mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2026-01-06 11:12:40 +01:00
Create scale.lua
This commit is contained in:
parent
010715f1a9
commit
736d3d74c5
86
lib/scale.lua
Normal file
86
lib/scale.lua
Normal file
@ -0,0 +1,86 @@
|
||||
local c = require("component")
|
||||
local gpu, screen = c.gpu, c.screen
|
||||
|
||||
local scale = {}
|
||||
------------------------------------------------------------------------------------------
|
||||
|
||||
--МАСШТАБ МОНИТОРА
|
||||
function scale.set(scale, debug)
|
||||
--Базовая коррекция масштаба, чтобы всякие умники не писали своими погаными ручонками, чего не следует
|
||||
if scale > 1 then
|
||||
scale = 1
|
||||
elseif scale < 0.1 then
|
||||
scale = 0.1
|
||||
end
|
||||
|
||||
--Просчет монитора в псевдопикселях - забей, даже объяснять не буду, работает как часы
|
||||
local function calculateAspect(screens)
|
||||
local abc = 12
|
||||
|
||||
if screens == 2 then
|
||||
abc = 28
|
||||
elseif screens > 2 then
|
||||
abc = 28 + (screens - 2) * 16
|
||||
end
|
||||
|
||||
return abc
|
||||
end
|
||||
|
||||
--Рассчитываем пропорцию монитора в псевдопикселях
|
||||
local xScreens, yScreens = component.screen.getAspectRatio()
|
||||
local xPixels, yPixels = calculateAspect(xScreens), calculateAspect(yScreens)
|
||||
local proportion = xPixels / yPixels
|
||||
|
||||
--Получаем максимально возможное разрешение данной видеокарты
|
||||
local xMax, yMax = gpu.maxResolution()
|
||||
|
||||
--Получаем теоретическое максимальное разрешение монитора с учетом его пропорции, но без учета лимита видеокарты
|
||||
local newWidth, newHeight
|
||||
if proportion >= 1 then
|
||||
newWidth = math.floor(xMax)
|
||||
newHeight = math.floor(newWidth / proportion / 2)
|
||||
else
|
||||
newHeight = math.floor(yMax)
|
||||
newWidth = math.floor(newHeight * proportion * 2)
|
||||
end
|
||||
|
||||
--Получаем оптимальное разрешение для данного монитора с поддержкой видеокарты
|
||||
local optimalNewWidth, optimalNewHeight = newWidth, newHeight
|
||||
|
||||
if optimalNewWidth > xMax then
|
||||
local difference = optimalNewWidth - xMax
|
||||
optimalNewWidth = xMax
|
||||
optimalNewHeight = optimalNewHeight - math.ceil(difference / 2 )
|
||||
end
|
||||
|
||||
if optimalNewHeight > yMax then
|
||||
local difference = optimalNewHeight - yMax
|
||||
optimalNewHeight = yMax
|
||||
optimalNewWidth = optimalNewWidth - difference * 2 - math.ceil(difference / 2)
|
||||
end
|
||||
|
||||
--Корректируем идеальное разрешение по заданному масштабу
|
||||
local finalNewWidth, finalNewHeight = math.floor(optimalNewWidth * scale), math.floor(optimalNewHeight * scale)
|
||||
|
||||
--Выводим инфу, если нужно
|
||||
if debug then
|
||||
print(" ")
|
||||
print("Максимальное разрешение: "..xMax.."x"..yMax)
|
||||
print("Пропорция монитора: "..xPixels.."x"..yPixels)
|
||||
print("Коэффициент пропорции: "..proportion)
|
||||
print(" ")
|
||||
print("Теоретическое разрешение: "..newWidth.."x"..newHeight)
|
||||
print("Оптимизированное разрешение: "..optimalNewWidth.."x"..optimalNewHeight)
|
||||
print(" ")
|
||||
print("Новое разрешение: "..finalNewWidth.."x"..finalNewHeight)
|
||||
print(" ")
|
||||
end
|
||||
|
||||
--Устанавливаем выбранное разрешение
|
||||
gpu.setResolution(finalNewWidth, finalNewHeight)
|
||||
end
|
||||
|
||||
--scale.set(1, true)
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user