diff --git a/Frame.lua b/Frame.lua index 5ed139a..f1f5bc4 100644 --- a/Frame.lua +++ b/Frame.lua @@ -190,6 +190,7 @@ function Gladdy:UpdateFrame() end self.frame:SetScale(self.db.frameScale) + self:PixelPerfectScale(false) self.frame:SetWidth(width) self.frame:SetHeight(height) self.frame:ClearAllPoints() diff --git a/Gladdy.lua b/Gladdy.lua index 6923c67..428005a 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -5,6 +5,7 @@ local select = select local pairs = pairs local tinsert = table.insert local tsort = table.sort +local str_lower = string.lower local GetTime = GetTime local CreateFrame = CreateFrame local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME @@ -66,10 +67,20 @@ end Gladdy.events = CreateFrame("Frame") Gladdy.events.registered = {} Gladdy.events:RegisterEvent("PLAYER_LOGIN") +Gladdy.events:RegisterEvent("CVAR_UPDATE") +hooksecurefunc("VideoOptionsFrameOkay_OnClick", function(self, button, down, apply) + if (self:GetName() == "VideoOptionsFrameApply") then + Gladdy:PixelPerfectScale(true) + end +end) Gladdy.events:SetScript("OnEvent", function(self, event, ...) if (event == "PLAYER_LOGIN") then Gladdy:OnInitialize() Gladdy:OnEnable() + elseif (event == "CVAR_UPDATE") then + if (str_lower(select(1, ...)) == "uiscale") then + Gladdy:PixelPerfectScale(true) + end else local func = self.registered[event] @@ -186,6 +197,21 @@ function Gladdy:DeleteUnknownOptions(tbl, refTbl, str) end end +function Gladdy:PixelPerfectScale(update) + local physicalWidth, physicalHeight = GetPhysicalScreenSize() + local perfectUIScale = 768/physicalHeight--768/select(2, strsplit("x",({ GetScreenResolutions()})[GetCurrentResolution()])) + if self.db and self.db.pixelPerfect and self.frame then + self.frame:SetIgnoreParentScale(true) + self.frame:SetScale(perfectUIScale) + --self.db.frameScale = perfectUIScale --(GetCVar("useUiScale") == "1" and 1 + perfectUIScale - GetCVar("UIScale") or perfectUIScale) + if update then + self:UpdateFrame() + end + elseif self.frame then + self.frame:SetIgnoreParentScale(false) + end +end + function Gladdy:OnInitialize() self.dbi = LibStub("AceDB-3.0"):New("GladdyXZ", self.defaults) self.dbi.RegisterCallback(self, "OnProfileChanged", "OnProfileChanged") diff --git a/Options.lua b/Options.lua index e0c7f37..4eec88a 100644 --- a/Options.lua +++ b/Options.lua @@ -50,6 +50,7 @@ Gladdy.defaults = { growUp = false, growDirection = "BOTTOM", frameScale = 1, + pixelPerfect = false, padding = 1, barWidth = 180, bottomMargin = 2, @@ -298,11 +299,18 @@ function Gladdy:SetupOptions() name = L["Frame General"], order = 3, }, + pixelPerfect = { + type = "toggle", + name = L["Pixel Perfect Scale"], + desc = L["Enables Pixel Perfect Scale - disables manual "].. L["Frame scale"], + order = 4, + }, frameScale = { type = "range", name = L["Frame scale"], desc = L["Scale of the frame"], - order = 4, + disabled = function() return Gladdy.db.pixelPerfect end, + order = 5, min = .1, max = 2, step = .01, @@ -311,7 +319,7 @@ function Gladdy:SetupOptions() type = "range", name = L["Frame padding"], desc = L["Padding of the frame"], - order = 5, + order = 6, min = 0, max = 20, step = 1, @@ -320,7 +328,7 @@ function Gladdy:SetupOptions() type = "range", name = L["Frame width"], desc = L["Width of the bars"], - order = 6, + order = 7, min = 10, max = 500, step = 5, @@ -329,7 +337,7 @@ function Gladdy:SetupOptions() type = "range", name = L["Margin"], desc = L["Margin between each button"], - order = 7, + order = 8, min = -200, max = 200, step = 1, @@ -338,7 +346,7 @@ function Gladdy:SetupOptions() type = "color", name = L["Background color"], desc = L["Background Color of the frame"], - order = 8, + order = 9, hasAlpha = true, get = getColorOpt, set = setColorOpt,