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
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
|