Skip to content

Commit

Permalink
Add circularNavigation property for selector (#136)
Browse files Browse the repository at this point in the history
+
* Set focus to the selector when using the mouse wheel
* Set the selector to be topScrollable when hovering over it
only if enableScroll property is enabled
  • Loading branch information
xLive authored Feb 25, 2024
1 parent b549bf2 commit c91c3ed
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
13 changes: 9 additions & 4 deletions Core/selector.lua
Original file line number Diff line number Diff line change
Expand Up @@ -405,20 +405,25 @@ end
---------------------OnMouseScrollAction------------------------
----------------------------------------------------------------
dgsOnMouseScrollAction["dgs-dxselector"] = function(dgsEle,isWheelDown)
if dgsElementData[dgsEle].enableScroll and MouseData.focused == dgsEle then
if dgsElementData[dgsEle].enableScroll then
if MouseData.focused ~= dgsEle then
dgsFocus(dgsEle)
end
local itemData = dgsElementData[dgsEle].itemData
local currentItem = dgsElementData[dgsEle].select
local isReversed = dgsElementData[dgsEle].isReversed
local itemIndex = mathClamp(currentItem+(isWheelDown and 1 or -1)*(isReversed and -1 or 1),1,#itemData)
dgsSelectorSetSelectedItem(dgsEle,itemIndex-itemIndex%1)
local itemCount = #itemData
local itemIndex = currentItem+(isWheelDown and 1 or -1)*(isReversed and -1 or 1)
itemIndex = dgsElementData[dgsEle].circularNavigation and (itemIndex < 1 and itemCount or itemIndex > itemCount and 1) or mathClamp(itemIndex-itemIndex%1,1,itemCount)
dgsSelectorSetSelectedItem(dgsEle,itemIndex)
end
end

----------------------------------------------------------------
--------------------------Renderer------------------------------
----------------------------------------------------------------
dgsRenderer["dgs-dxselector"] = function(source,x,y,w,h,mx,my,cx,cy,enabledInherited,enabledSelf,eleData,parentAlpha,isPostGUI,rndtgt)
if MouseData.hit == source and MouseData.focused == source then
if MouseData.hit == source and eleData.enableScroll then
MouseData.topScrollable = source
end

Expand Down
6 changes: 4 additions & 2 deletions client.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1485,7 +1485,8 @@ function onClientMouseTriggered(button)
else
dgsElementData[selector].quickLeapState = 0
end
dgsSelectorSetSelectedItem(selector,mathCeil(mathClamp(currentItem-offsetItem,1,itemCount)))
local itemIndex = dgsElementData[selector].circularNavigation and (currentItem-offsetItem-1)%itemCount+1 or mathClamp(currentItem-offsetItem,1,itemCount)
dgsSelectorSetSelectedItem(selector,itemIndex-itemIndex%1)
end
elseif MouseData.selectorEnterData == 3 then
local itemData = dgsElementData[selector].itemData
Expand All @@ -1499,7 +1500,8 @@ function onClientMouseTriggered(button)
else
dgsElementData[selector].quickLeapState = 0
end
dgsSelectorSetSelectedItem(selector,mathFloor(mathClamp(currentItem+offsetItem,1,itemCount)))
local itemIndex = dgsElementData[selector].circularNavigation and (currentItem+offsetItem-1)%itemCount+1 or mathClamp(currentItem+offsetItem,1,itemCount)
dgsSelectorSetSelectedItem(selector,itemIndex-itemIndex%1)
end
end
end
Expand Down

0 comments on commit c91c3ed

Please sign in to comment.