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( )." ) 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