Skip to content

Instantly share code, notes, and snippets.

@Meorawr
Last active September 4, 2024 20:11
Show Gist options
  • Save Meorawr/207df7bec6ab21dad0fdfd70efb7bac4 to your computer and use it in GitHub Desktop.
Save Meorawr/207df7bec6ab21dad0fdfd70efb7bac4 to your computer and use it in GitHub Desktop.
local function CreateSliderElement(menuDescription, callback, value, minValue, maxValue, steps, formatters)
local function Initializer(frame)
local slider = frame:AttachTemplate("MinimalSliderWithSteppersTemplate");
slider:Init(value, minValue, maxValue, steps, formatters);
slider:RegisterCallback("OnValueChanged", callback, frame);
slider:SetPoint("TOPLEFT", 0, -1);
slider:SetSize(150, 25);
-- We need a dummy region that's a bit larger than the slider to deal
-- with the right label going out of bounds of the menu, and to also
-- trigger cleanup logic on the slider. See: WoWUIBugs#652.
local function Resetter()
slider:UnregisterCallback("OnValueChanged", frame);
slider:Release();
end
local dummy = frame:AttachFrame("Frame");
dummy:SetScript("OnHide", Resetter);
dummy:SetPoint("TOPLEFT", slider, "TOPLEFT");
dummy:SetPoint("BOTTOMLEFT", slider, "BOTTOMLEFT");
dummy:SetWidth(180);
end
local elementDescription = menuDescription:CreateFrame();
elementDescription:AddInitializer(Initializer);
return elementDescription;
end
MenuUtil.CreateContextMenu(UIParent, function(_, rootDescription)
local menuDescription = rootDescription:CreateButton("Window size");
local callback = print;
local value = 1;
local minValue = 0.8;
local maxValue = 2;
local steps = (maxValue - minValue) * 10;
local formatters = {
[MinimalSliderWithSteppersMixin.Label.Right] = function(v) return string.format("%d%%", Round(v * 100)); end;
};
CreateSliderElement(menuDescription, callback, value, minValue, maxValue, steps, formatters);
end);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment