You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.5 KiB

local _, addon = ...
--Linear Scroll For Gamepad Control
local LinearScrollUpdater = CreateFrame("Frame");
addon.LinearScrollUpdater = LinearScrollUpdater;
LinearScrollUpdater:Hide();
LinearScrollUpdater.value = 0;
LinearScrollUpdater.distancePerSecond = 0;
LinearScrollUpdater.multiplier = 1;
LinearScrollUpdater:SetScript("OnUpdate", function(self, elapsed)
local newValue = self.value + self.distancePerSecond * self.multiplier * elapsed;
self.slider:SetValue(newValue);
self.value = newValue;
if newValue >= self.maxValue or newValue <= 0 then
self:Stop();
end
if self.accelerate then
self.multiplier = self.multiplier + elapsed;
if self.multiplier > 3 then
self.multiplier = 3;
end
end
end);
function LinearScrollUpdater:Start(scrollFrame, distancePerSecond, accelerate)
self:Hide();
local scrollBar = scrollFrame.scrollBar;
if not scrollBar then
return
end
self.slider = scrollBar;
self.multiplier = 1;
self.accelerate = accelerate;
self.value = scrollBar:GetValue();
self.distancePerSecond = distancePerSecond;
self.minValue, self.maxValue = scrollBar:GetMinMaxValues();
self:Show();
self.isActive = true;
return not(self.value == self.maxValue or self.value == self.minValue)
end
function LinearScrollUpdater:Stop()
if self.isActive then
self.isActive = nil;
self:Hide();
return true
end
end