262 lines
7.5 KiB
Lua
262 lines
7.5 KiB
Lua
LUI.UIVerticalScrollbar = {}
|
|
LUI.UIVerticalScrollbar.InactiveDelay = 500
|
|
LUI.UIVerticalScrollbar.InactiveDuration = 250
|
|
function OnMouseMove( f1_arg0, f1_arg1 )
|
|
if f1_arg0.scrolling then
|
|
local f1_local0 = f1_arg0:getParent()
|
|
local f1_local1 = f1_local0:getHeight()
|
|
local f1_local2, f1_local3, f1_local4, f1_local5 = f1_local0:getRect()
|
|
local f1_local6, f1_local7 = f1_arg1.root:pixelsToUnits( f1_arg1.x, f1_arg1.y )
|
|
f1_local2, f1_local3 = f1_arg1.root:pixelsToUnits( f1_local2, f1_local3 )
|
|
local f1_local8 = (f1_local7 - f1_local3) / f1_local1
|
|
if f1_local8 < 0 then
|
|
f1_local8 = 0
|
|
elseif f1_local8 > 1 then
|
|
f1_local8 = 1
|
|
end
|
|
if f1_arg0.onMoveFunc then
|
|
f1_arg0.onMoveFunc( f1_local0, f1_local0.verticalList, f1_local8, f1_local0.properties )
|
|
end
|
|
end
|
|
end
|
|
|
|
function MouseMoveEvent( f2_arg0, f2_arg1 )
|
|
f2_arg0:applyElementTransform()
|
|
local f2_local0, f2_local1 = ProjectRootCoordinate( f2_arg1.rootName, f2_arg1.x, f2_arg1.y )
|
|
OnMouseMove( f2_arg0, {
|
|
controller = f2_arg1.controller,
|
|
root = f2_arg1.root,
|
|
x = f2_local0,
|
|
y = f2_local1
|
|
} )
|
|
f2_arg0:undoElementTransform()
|
|
end
|
|
|
|
function ScrollbarMoved( f3_arg0, f3_arg1, f3_arg2 )
|
|
if not f3_arg1 then
|
|
DebugPrint( "Warning: Tried to scroll a scrollbar without a vertical list. Make sure the vertical list was manually added. E.G. scrollBar:setList( <vList> )." )
|
|
return
|
|
elseif not f3_arg2 then
|
|
DebugPrint( "Warning: Tried to scroll a scrollbar without a scroll percentage. This is very bad." )
|
|
return
|
|
end
|
|
local f3_local0 = f3_arg1:getNumChildren()
|
|
local f3_local1 = math.min( math.floor( f3_arg2 * f3_local0 ), f3_local0 - 1 )
|
|
if f3_local1 == f3_arg1.lastFocusIndex then
|
|
return
|
|
end
|
|
f3_arg1.lastFocusIndex = f3_local1
|
|
local f3_local2 = f3_arg1:getFirstChild()
|
|
local f3_local3 = nil
|
|
for f3_local4 = 0, f3_local0 - 1, 1 do
|
|
if f3_local4 == f3_local1 then
|
|
f3_local3 = f3_local2
|
|
end
|
|
f3_local2:processEvent( {
|
|
name = "lose_focus",
|
|
immediate = true
|
|
} )
|
|
f3_local2 = f3_local2:getNextSibling()
|
|
end
|
|
if f3_local3 then
|
|
f3_local3:processEvent( {
|
|
name = "gain_focus",
|
|
immediate = true
|
|
} )
|
|
end
|
|
end
|
|
|
|
function OnMouseDown( f4_arg0, f4_arg1 )
|
|
f4_arg0.scrolling = true
|
|
local f4_local0 = Engine.SetUsingScrollbar
|
|
local f4_local1 = f4_arg1.controller
|
|
if not f4_local1 then
|
|
f4_local1 = Engine.GetFirstActiveController()
|
|
end
|
|
f4_local0( f4_local1, true )
|
|
OnMouseMove( f4_arg0, f4_arg1 )
|
|
f4_local0 = f4_arg0:getParent()
|
|
if f4_local0.verticalList then
|
|
f4_local0.verticalList:processEvent( {
|
|
name = "set_children_ignore_mouse",
|
|
ignore = true,
|
|
immediate = true
|
|
} )
|
|
end
|
|
end
|
|
|
|
function StopScrolling( f5_arg0, f5_arg1 )
|
|
f5_arg0.scrolling = false
|
|
local f5_local0 = Engine.SetUsingScrollbar
|
|
local f5_local1 = f5_arg1.controller
|
|
if not f5_local1 then
|
|
f5_local1 = Engine.GetFirstActiveController()
|
|
end
|
|
f5_local0( f5_local1, false )
|
|
f5_local0 = f5_arg0:getParent()
|
|
if f5_local0.verticalList then
|
|
f5_local0.verticalList:processEvent( {
|
|
name = "set_children_ignore_mouse",
|
|
ignore = false,
|
|
immediate = true
|
|
} )
|
|
end
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.build = function ( f6_arg0, f6_arg1 )
|
|
return LUI.UIVerticalScrollbar.new( f6_arg1.vlist, f6_arg1.bar_width, f6_arg1.active_alpha, f6_arg1.inactive_alpha, f6_arg1.on_move_func, f6_arg1.bar_color, f6_arg1.bg_color, f6_arg1.bar_material, f6_arg1.bg_material )
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.new = function ( f7_arg0, f7_arg1, f7_arg2, f7_arg3, f7_arg4, f7_arg5, f7_arg6, f7_arg7, f7_arg8 )
|
|
if not f7_arg1 then
|
|
f7_arg1 = 20
|
|
end
|
|
if not f7_arg2 then
|
|
f7_arg2 = 1
|
|
end
|
|
if not f7_arg3 then
|
|
f7_arg3 = 1
|
|
end
|
|
if not f7_arg4 then
|
|
f7_arg4 = ScrollbarMoved
|
|
end
|
|
if not f7_arg5 then
|
|
f7_arg5 = {
|
|
red = 0.3,
|
|
green = 0.3,
|
|
blue = 0.3,
|
|
alpha = 1
|
|
}
|
|
end
|
|
if not f7_arg6 then
|
|
f7_arg6 = {
|
|
red = 0.05,
|
|
green = 0.05,
|
|
blue = 0.05,
|
|
alpha = 0.6
|
|
}
|
|
end
|
|
if not f7_arg7 then
|
|
f7_arg7 = "white"
|
|
end
|
|
if not f7_arg8 then
|
|
f7_arg8 = "white"
|
|
end
|
|
local self = LUI.UIElement.new( {
|
|
left = 0,
|
|
top = 0,
|
|
right = f7_arg1,
|
|
bottom = 0,
|
|
leftAnchor = false,
|
|
topAnchor = true,
|
|
rightAnchor = true,
|
|
bottomAnchor = true,
|
|
alpha = f7_arg2
|
|
} )
|
|
self.id = "LUIVerticalScrollbar"
|
|
self:registerAnimationState( "inactive", {
|
|
left = 0,
|
|
right = f7_arg1,
|
|
leftAnchor = false,
|
|
rightAnchor = true,
|
|
alpha = f7_arg3
|
|
} )
|
|
self:registerEventHandler( "list_scroll", LUI.UIVerticalScrollbar.UpdateScrollbar )
|
|
self:registerEventHandler( "focus_changed", LUI.UIVerticalScrollbar.FocusChanged )
|
|
self:registerEventHandler( "inactive", LUI.UIVerticalScrollbar.Inactive )
|
|
self.bgImage = LUI.UIImage.new( {
|
|
leftAnchor = true,
|
|
topAnchor = true,
|
|
rightAnchor = true,
|
|
bottomAnchor = true,
|
|
red = f7_arg6.red,
|
|
green = f7_arg6.green,
|
|
blue = f7_arg6.blue,
|
|
alpha = f7_arg6.alpha,
|
|
material = RegisterMaterial( f7_arg8 )
|
|
} )
|
|
self.bgImage:animateToState( "default" )
|
|
self:addElement( self.bgImage )
|
|
self.scrollButton = LUI.UIButton.new( {
|
|
leftAnchor = true,
|
|
topAnchor = true,
|
|
rightAnchor = true,
|
|
bottomAnchor = true
|
|
} )
|
|
self.buttonImage = LUI.UIImage.new( {
|
|
leftAnchor = true,
|
|
topAnchor = true,
|
|
rightAnchor = true,
|
|
bottomAnchor = false,
|
|
red = f7_arg5.red,
|
|
green = f7_arg5.green,
|
|
blue = f7_arg5.blue,
|
|
alpha = f7_arg5.alpha,
|
|
material = RegisterMaterial( f7_arg7 )
|
|
} )
|
|
self.scrollButton.onMoveFunc = f7_arg4
|
|
self.scrollButton:registerEventHandler( "leftmousedown", OnMouseDown )
|
|
self.scrollButton:registerEventHandler( "leftmouseup", StopScrolling )
|
|
self.scrollButton:addEventHandler( "popup_active", StopScrolling )
|
|
self.scrollButton:addEventHandler( "mousemove", MouseMoveEvent )
|
|
self.scrollButton:addElement( self.buttonImage )
|
|
self:addElement( self.scrollButton )
|
|
self.setList = LUI.UIVerticalScrollbar.SetVerticalList
|
|
self.manualUpdate = LUI.UIVerticalScrollbar.ManualUpdate
|
|
self:setList( f7_arg0 )
|
|
return self
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.UpdateScrollbar = function ( f8_arg0, f8_arg1 )
|
|
if f8_arg0.verticalList and f8_arg1.list == f8_arg0.verticalList then
|
|
f8_arg0.buttonImage:registerAnimationState( "default", {
|
|
top = f8_arg1.scrollHandlePosition,
|
|
bottom = f8_arg1.scrollHandlePosition + f8_arg1.scrollHandleSize,
|
|
topAnchor = true,
|
|
bottomAnchor = false
|
|
} )
|
|
f8_arg0.buttonImage:animateToState( "default" )
|
|
end
|
|
f8_arg0:dispatchEventToChildren( f8_arg1 )
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.FocusChanged = function ( f9_arg0, f9_arg1 )
|
|
f9_arg0:animateToState( "default" )
|
|
if f9_arg0.inactiveTimer then
|
|
f9_arg0.inactiveTimer:close()
|
|
f9_arg0.inactiveTimer:reset()
|
|
f9_arg0:addElement( f9_arg0.inactiveTimer )
|
|
else
|
|
f9_arg0.inactiveTimer = LUI.UITimer.new( LUI.UIVerticalScrollbar.InactiveDelay, "inactive", true )
|
|
f9_arg0:addElement( f9_arg0.inactiveTimer )
|
|
end
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.Inactive = function ( f10_arg0, f10_arg1 )
|
|
f10_arg0:animateToState( "inactive", LUI.UIVerticalScrollbar.InactiveDuration )
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.SetVerticalList = function ( f11_arg0, f11_arg1 )
|
|
f11_arg0.verticalList = f11_arg1
|
|
end
|
|
|
|
LUI.UIVerticalScrollbar.ManualUpdate = function ( f12_arg0, f12_arg1, f12_arg2, f12_arg3, f12_arg4 )
|
|
local f12_local0 = f12_arg0:getHeight()
|
|
local f12_local1 = f12_local0
|
|
local f12_local2 = 0
|
|
if f12_arg3 ~= 0 then
|
|
f12_local1 = math.min( f12_local0, f12_local0 * f12_arg2 / f12_arg3 )
|
|
if f12_arg3 ~= f12_arg2 then
|
|
f12_local2 = LUI.clamp( f12_arg1 / (f12_arg3 - f12_arg2) * (f12_local0 - f12_local1), 0, f12_local0 - f12_local1 )
|
|
end
|
|
end
|
|
f12_arg0.buttonImage:registerAnimationState( "default", {
|
|
top = f12_local2,
|
|
bottom = f12_local2 + f12_local1,
|
|
topAnchor = true,
|
|
bottomAnchor = false
|
|
} )
|
|
f12_arg0.buttonImage:animateToState( "default" )
|
|
end
|
|
|