mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 02:59:20 +01:00
147 lines
4.6 KiB
Lua
147 lines
4.6 KiB
Lua
|
|
local GUI = require("GUI")
|
|
local screen = require("Screen")
|
|
local paths = require("Paths")
|
|
local system = require("System")
|
|
|
|
local module = {}
|
|
|
|
local workspace, window, localization = table.unpack({...})
|
|
local userSettings = system.getUserSettings()
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
module.name = localization.screen
|
|
module.margin = 0
|
|
module.onTouch = function()
|
|
|
|
-- Screen proxy
|
|
window.contentLayout:addChild(GUI.text(1, 1, 0x2D2D2D, localization.screenPreferredMonitor))
|
|
|
|
local screenComboBox = window.contentLayout:addChild(GUI.comboBox(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0xD2D2D2, 0xA5A5A5))
|
|
|
|
screenComboBox.onItemSelected = function(index)
|
|
userSettings.interfaceScreenAddress = screenComboBox:getItem(index).text
|
|
|
|
screen.clear(0x0)
|
|
screen.update()
|
|
|
|
system.updateScreen()
|
|
system.updateResolution()
|
|
system.updateWallpaper()
|
|
workspace:draw()
|
|
|
|
system.saveUserSettings()
|
|
end
|
|
|
|
do
|
|
local screenAddress = screen.getScreenAddress()
|
|
|
|
-- Filling screen screenComboBox with available addresses & selecting current one
|
|
local index = 1
|
|
|
|
for address in component.list("screen") do
|
|
screenComboBox:addItem(address)
|
|
|
|
if address == screenAddress then
|
|
screenComboBox.selectedItem = index
|
|
end
|
|
|
|
index = index + 1
|
|
end
|
|
|
|
-- Precise mode
|
|
local preciseSwitch = window.contentLayout:addChild(GUI.switchAndLabel(1, 1, 36, 8, 0x66DB80, 0xE1E1E1, 0xFFFFFF, 0xA5A5A5, localization.screenPreciseMode .. ":", component.invoke(screenAddress, "isPrecise"))).switch
|
|
|
|
preciseSwitch.onStateChanged = function()
|
|
component.invoke(screen.getScreenAddress(), "setPrecise", preciseSwitch.state)
|
|
end
|
|
end
|
|
|
|
-- Resolution
|
|
window.contentLayout:addChild(GUI.text(1, 1, 0x2D2D2D, localization.screenResolution))
|
|
local resolutionComboBox = window.contentLayout:addChild(GUI.comboBox(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0xD2D2D2, 0xA5A5A5))
|
|
|
|
local function setResolution(width, height)
|
|
userSettings.interfaceScreenWidth = width
|
|
userSettings.interfaceScreenHeight = height
|
|
|
|
system.updateResolution()
|
|
system.updateWallpaper()
|
|
workspace:draw()
|
|
|
|
system.saveUserSettings()
|
|
end
|
|
|
|
local step = 1 / 6
|
|
for i = 1, step, -step do
|
|
local width, height = screen.getScaledResolution(i)
|
|
resolutionComboBox:addItem(width .. "x" .. height).onTouch = function()
|
|
setResolution(width, height)
|
|
end
|
|
end
|
|
|
|
local layout = window.contentLayout:addChild(GUI.layout(1, 1, 36, 3, 1, 1))
|
|
layout:setDirection(1, 1, GUI.DIRECTION_HORIZONTAL)
|
|
|
|
local widthInput = layout:addChild(GUI.input(1, 1, 16, 3, 0xE1E1E1, 0x696969, 0xA5A5A5, 0xE1E1E1, 0x2D2D2D, "", localization.screenWidth))
|
|
layout:addChild(GUI.text(1, 1, 0x2D2D2D, "x"))
|
|
local heightInput = layout:addChild(GUI.input(1, 1, 17, 3, 0xE1E1E1, 0x696969, 0xA5A5A5, 0xE1E1E1, 0x2D2D2D, "", localization.screenHeight))
|
|
|
|
local maxWidth, maxHeight = screen.getMaxResolution()
|
|
local limit = maxWidth * maxHeight
|
|
local lowerLimit = 25
|
|
local cykaTextBox = window.contentLayout:addChild(GUI.textBox(1, 1, 36, 1, nil, 0x880000, {string.format(localization.screenInvalidResolution, lowerLimit, limit)}, 1, 0, 0, true, true))
|
|
|
|
local autoscalingSwtich = window.contentLayout:addChild(GUI.switchAndLabel(1, 1, 36, 8, 0x66DB80, 0xE1E1E1, 0xFFFFFF, 0xA5A5A5, localization.screenAutoScale .. ":", userSettings.interfaceScreenAutoScale)).switch
|
|
|
|
window.contentLayout:addChild(GUI.textBox(1, 1, 36, 1, nil, 0xA5A5A5, {localization.screenScaleInfo}, 1, 0, 0, true, true))
|
|
|
|
local function updateSwitch()
|
|
widthInput.text = tostring(userSettings.interfaceScreenWidth and userSettings.interfaceScreenWidth or screen.getWidth())
|
|
heightInput.text = tostring(userSettings.interfaceScreenHeight and userSettings.interfaceScreenHeight or screen.getHeight())
|
|
resolutionComboBox.hidden = not autoscalingSwtich.state
|
|
layout.hidden = autoscalingSwtich.state
|
|
end
|
|
|
|
local function updateCykaTextBox()
|
|
local width, height = tonumber(widthInput.text), tonumber(heightInput.text)
|
|
|
|
cykaTextBox.hidden =
|
|
width
|
|
and height
|
|
and width * height <= limit
|
|
and width >= lowerLimit
|
|
and height >= lowerLimit
|
|
|
|
return width, height
|
|
end
|
|
|
|
autoscalingSwtich.onStateChanged = function()
|
|
updateSwitch()
|
|
updateCykaTextBox()
|
|
workspace:draw()
|
|
|
|
userSettings.interfaceScreenAutoScale = autoscalingSwtich.state
|
|
system.saveUserSettings()
|
|
end
|
|
|
|
widthInput.onInputFinished = function()
|
|
local width, height = updateCykaTextBox()
|
|
|
|
if cykaTextBox.hidden then
|
|
setResolution(width, height)
|
|
else
|
|
workspace:draw()
|
|
end
|
|
end
|
|
heightInput.onInputFinished = widthInput.onInputFinished
|
|
|
|
updateSwitch()
|
|
updateCykaTextBox()
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
return module
|