91 lines
3.2 KiB
Lua
91 lines
3.2 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
|
|
--Lua functions
|
|
local min, max, abs, floor = min, max, abs, floor
|
|
--WoW API / Variables
|
|
local UIParent = UIParent
|
|
|
|
function E:IsEyefinity(width, height)
|
|
if E.global.general.eyefinity and width >= 3840 then
|
|
--HQ resolution
|
|
if width >= 9840 then return 3280 end --WQSXGA
|
|
if width >= 7680 and width < 9840 then return 2560 end --WQXGA
|
|
if width >= 5760 and width < 7680 then return 1920 end --WUXGA & HDTV
|
|
if width >= 5040 and width < 5760 then return 1680 end --WSXGA+
|
|
|
|
--adding height condition here to be sure it work with bezel compensation because WSXGA+ and UXGA/HD+ got approx same width
|
|
if width >= 4800 and width < 5760 and height == 900 then return 1600 end --UXGA & HD+
|
|
|
|
--low resolution screen
|
|
if width >= 4320 and width < 4800 then return 1440 end --WSXGA
|
|
if width >= 4080 and width < 4320 then return 1360 end --WXGA
|
|
if width >= 3840 and width < 4080 then return 1224 end --SXGA & SXGA (UVGA) & WXGA & HDTV
|
|
end
|
|
end
|
|
|
|
function E:UIScale(init)
|
|
local scale = E.global.general.UIScale
|
|
if init then --E.OnInitialize
|
|
--Set variables for pixel scaling
|
|
local pixel, ratio = 1, 768 / E.screenheight
|
|
E.mult = (pixel / scale) - ((pixel - ratio) / scale)
|
|
E.Spacing = (E.PixelMode and 0) or E.mult
|
|
E.Border = ((not E.twoPixelsPlease) and E.PixelMode and E.mult) or E.mult*2
|
|
else --E.Initialize
|
|
UIParent:SetScale(scale)
|
|
|
|
--Check if we are using `E.eyefinity`
|
|
local width, height = E.screenwidth, E.screenheight
|
|
E.eyefinity = E:IsEyefinity(width, height)
|
|
|
|
--Resize E.UIParent if Eyefinity is on.
|
|
local testingEyefinity = false
|
|
if testingEyefinity then
|
|
--Eyefinity Test: Resize the E.UIParent to be smaller than it should be, all objects inside should relocate.
|
|
--Dragging moveable frames outside the box and reloading the UI ensures that they are saving position correctly.
|
|
local uiWidth, uiHeight = UIParent:GetSize()
|
|
width, height = uiWidth - 250, uiHeight - 250
|
|
elseif E.eyefinity then
|
|
--find a new width value of E.UIParent for screen #1.
|
|
local uiHeight = UIParent:GetHeight()
|
|
width, height = E.eyefinity / (height / uiHeight), uiHeight
|
|
else
|
|
width, height = UIParent:GetSize()
|
|
end
|
|
|
|
E.UIParent:SetSize(width, height)
|
|
E.UIParent.origHeight = E.UIParent:GetHeight()
|
|
|
|
--Calculate potential coordinate differences
|
|
E.diffGetLeft = E:Round(abs(UIParent:GetLeft() - E.UIParent:GetLeft()))
|
|
E.diffGetRight = E:Round(abs(UIParent:GetRight() - E.UIParent:GetRight()))
|
|
E.diffGetBottom = E:Round(abs(UIParent:GetBottom() - E.UIParent:GetBottom()))
|
|
E.diffGetTop = E:Round(abs(UIParent:GetTop() - E.UIParent:GetTop()))
|
|
end
|
|
end
|
|
|
|
function E:PixelBestSize()
|
|
return max(0.4, min(1.15, 768 / E.screenheight))
|
|
end
|
|
|
|
function E:PixelScaleChanged(event, skip)
|
|
E:UIScale(true) -- repopulate variables
|
|
E:UIScale() -- setup the scale
|
|
|
|
E:UpdateConfigSize(true) -- reposition config
|
|
|
|
if skip or E.global.general.ignoreScalePopup then return end
|
|
|
|
if event == "UPDATE_FLOATING_CHAT_WINDOWS" then return end
|
|
|
|
if event == "UISCALE_CHANGE" then
|
|
E:Delay(0.5, E.StaticPopup_Show, E, event)
|
|
else
|
|
E:StaticPopup_Show("UISCALE_CHANGE")
|
|
end
|
|
end
|
|
|
|
function E:Scale(x)
|
|
local mult = E.mult
|
|
return mult * floor(x / mult + 0.5)
|
|
end |