iw6-lui/lui/luiverticalscrollbar.dec.lua
2024-09-12 17:25:45 +02:00

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