DisplaySettings = {} chosenDisplayText = "" ChosenDisplay = {} resolutionText = "" Resolution = {} screenModeText = "" screenModeTooltip = {} stepperScreenModeParams = {} function display_options_logic_init() DisplaySettings.currentDisplayMode = nil DisplaySettings.currentDisplayResolution = nil DisplaySettings.currentDisplayIndex = nil DisplaySettings.showApplyButton = false DisplaySettings.update = function(self) local displayIndex = GetInt("options.display.index") local displayMode = GetInt("options.display.mode") local displayResolution = GetInt("options.display.resolution") local displayCount = GetDisplayCount(displayMode) if not self.currentDisplayMode then self.currentDisplayMode = displayMode self.currentDisplayResolution = displayResolution self.currentDisplayIndex = displayIndex SetInt("options.display.mode", self.currentDisplayMode) stepperScreenModeParams.currentIdx = self.currentDisplayMode + 1 SetInt("options.display.resolution", self.currentDisplayResolution) Resolution.dropDownData.selectedIdx = self.currentDisplayResolution + 1 SetInt("options.display.index", self.currentDisplayIndex) ChosenDisplay.dropDownData.selectedIdx = self.currentDisplayIndex + 1 end self.showApplyButton = displayMode ~= self.currentDisplayMode or displayResolution ~= self.currentDisplayResolution or displayIndex ~= self.currentDisplayIndex if not ChosenDisplay.dropDownData.initialized or not Resolution.dropDownData.initialized then local clampedDisplayIndex = math.min(displayIndex, displayCount - 1) for k in pairs(ChosenDisplay.dropDownData.values) do ChosenDisplay.dropDownData.values[k] = nil end for i=0,displayCount-1 do local displayName = GetDisplayName(i) if displayName == nil or displayName == "" then displayName = "Display #" .. tostring(i + 1) end ChosenDisplay.dropDownData.values[i + 1] = displayName end for k in pairs(Resolution.dropDownData.values) do Resolution.dropDownData.values[k] = nil end if displayMode == 2 then local w,h = GetDisplayResolution(clampedDisplayIndex, 2, 0) Resolution.dropDownData.values[1] = w.."x"..h Resolution.dropDownData.selectedIdx = 1 else local c = GetDisplayResolutionCount(clampedDisplayIndex, displayMode) for i=0,c-1 do local w,h = GetDisplayResolution(clampedDisplayIndex, displayMode, i) Resolution.dropDownData.values[i + 1] = w.."x"..h Resolution.dropDownData.idx[w.."x"..h] = i end table.sort(Resolution.dropDownData.values, function(a,b) return a>b end) for i=1,c do Resolution.dropDownData.indexes[Resolution.dropDownData.idx[Resolution.dropDownData.values[i]]+1] = i end Resolution.dropDownData.selectedIdx = Resolution.dropDownData.indexes[displayResolution+1] if Resolution.dropDownData.selectedIdx == nil then Resolution.dropDownData.selectedIdx = displayResolution + 1 end end local clampedResolutionIdx = math.min(Resolution.dropDownData.selectedIdx, #Resolution.dropDownData.values) if clampedResolutionIdx ~= Resolution.dropDownData.selectedIdx then Resolution.dropDownData.selectedIdx = clampedResolutionIdx SetInt("options.display.resolution", Resolution.dropDownData.selectedIdx - 1) end if clampedDisplayIndex ~= displayIndex then ChosenDisplay.dropDownData.selectedIdx = clampedDisplayIndex + 1 SetInt("options.display.index", ChosenDisplay.dropDownData.selectedIdx - 1) end end end DisplaySettings.resetToCurrent = function(self) if not self.currentDisplayMode then return end SetInt("options.display.mode", self.currentDisplayMode) stepperScreenModeParams.currentIdx = self.currentDisplayMode + 1 SetInt("options.display.resolution", self.currentDisplayResolution) Resolution.dropDownData.selectedIdx = self.currentDisplayResolution + 1 SetInt("options.display.index", self.currentDisplayIndex) ChosenDisplay.dropDownData.selectedIdx = self.currentDisplayIndex + 1 Resolution.dropDownData.initialized = false end Resolution = { } chosenDisplayText = "loc@UI_TEXT_DISPLAY" ChosenDisplay.dropDownData = { isOpened = false, values = {'loc@UI_TEXT_DEFAULT_DISPLAY'}, selectedIdx = GetInt("options.display.index") + 1, initialized = false, wasOpened = false, isClosing = false, wasClosed = true, onSelectionChanged = function(self, idx) SetInt("options.display.index", self.selectedIdx - 1) end, onClosed = function(self) end } screenModeText = "loc@UI_TEXT_MODE" screenModeTooltip = { header = "", description = "" } stepperScreenModeParams = { currentIdx = GetInt("options.display.mode") + 1, allValues = {'loc@UI_BUTTON_FULLSCREEN', 'loc@UI_BUTTON_WINDOW', 'loc@UI_BUTTON_BORDERLESS_WINDOW'}, headers = {"loc@UI_BUTTON_FULLSCREEN", "loc@UI_BUTTON_WINDOW", "loc@UI_BUTTON_BORDERLESS_WINDOW"}, descriptions = { 'loc@UI_TOOLTIP_PLAY_TEARDOWN_FULLSCREEN', 'loc@UI_TOOLTIP_PLAY_TEARDOWN_WINDOWED', "loc@UI_TOOLTIP_PLAY_TEARDOWN_BORDERLESS" }, isCyclic = false, getCurrentValue = function(self) screenModeTooltip.description = self.descriptions[self.currentIdx] screenModeTooltip.header = self.headers[self.currentIdx] return self.allValues[self.currentIdx] end, onNext = function(self) self.currentIdx = self.currentIdx + 1 if self.currentIdx > #self.allValues then self.currentIdx = 1 end SetInt("options.display.mode", self.currentIdx - 1) Resolution.dropDownData.initialized = false -- re-initialize resolution list end, onPrev = function(self) self.currentIdx = self.currentIdx - 1 if self.currentIdx < 1 then self.currentIdx = #self.allValues end SetInt("options.display.mode", self.currentIdx - 1) Resolution.dropDownData.initialized = false -- re-initialize resolution list end, } screenModeTooltip.header = stepperScreenModeParams.headers[stepperScreenModeParams.currentIdx] screenModeTooltip.description = stepperScreenModeParams.descriptions[stepperScreenModeParams.currentIdx] resolutionText = "loc@UI_TEXT_RESOLUTION" Resolution.dropDownData = { isOpened = false, values = {""}, idx = {}, indexes = {}, selectedIdx = 1, wasOpened = false, initialized = false, isClosing = false, wasClosed = true, onSelectionChanged = function(self, idx) SetInt("options.display.resolution", self.idx[self.values[self.selectedIdx]]) end, onClosed = function(self) end } end display_options_logic_init()