mirror of
				https://github.com/ErikasKontenis/SabrehavenServer.git
				synced 2025-10-31 03:56:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- @docclass
 | |
| g_tooltip = {}
 | |
| 
 | |
| -- private variables
 | |
| local toolTipLabel
 | |
| local currentHoveredWidget
 | |
| 
 | |
| -- private functions
 | |
| local function moveToolTip(first)
 | |
|   if not first and (not toolTipLabel:isVisible() or toolTipLabel:getOpacity() < 0.1) then return end
 | |
| 
 | |
|   local pos = g_window.getMousePosition()
 | |
|   local windowSize = g_window.getSize()
 | |
|   local labelSize = toolTipLabel:getSize()
 | |
| 
 | |
|   pos.x = pos.x + 1
 | |
|   pos.y = pos.y + 1
 | |
| 
 | |
|   if windowSize.width - (pos.x + labelSize.width) < 10 then
 | |
|     pos.x = pos.x - labelSize.width - 3
 | |
|   else
 | |
|     pos.x = pos.x + 10
 | |
|   end
 | |
| 
 | |
|   if windowSize.height - (pos.y + labelSize.height) < 10 then
 | |
|     pos.y = pos.y - labelSize.height - 3
 | |
|   else
 | |
|     pos.y = pos.y + 10
 | |
|   end
 | |
| 
 | |
|   toolTipLabel:setPosition(pos)
 | |
| end
 | |
| 
 | |
| local function onWidgetHoverChange(widget, hovered)
 | |
|   if hovered then
 | |
|     if widget.tooltip and not g_mouse.isPressed() then
 | |
|       g_tooltip.display(widget.tooltip)
 | |
|       currentHoveredWidget = widget
 | |
|     end
 | |
|   else
 | |
|     if widget == currentHoveredWidget then
 | |
|       g_tooltip.hide()
 | |
|       currentHoveredWidget = nil
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| local function onWidgetStyleApply(widget, styleName, styleNode)
 | |
|   if styleNode.tooltip then
 | |
|     widget.tooltip = styleNode.tooltip
 | |
|   end
 | |
| end
 | |
| 
 | |
| -- public functions
 | |
| function g_tooltip.init()
 | |
|   connect(UIWidget, {  onStyleApply = onWidgetStyleApply,
 | |
|                        onHoverChange = onWidgetHoverChange})
 | |
| 
 | |
|   addEvent(function()
 | |
|     toolTipLabel = g_ui.createWidget('UILabel', rootWidget)
 | |
|     toolTipLabel:setId('toolTip')
 | |
|     toolTipLabel:setBackgroundColor('#111111cc')
 | |
|     toolTipLabel:setTextAlign(AlignCenter)
 | |
|     toolTipLabel:hide()
 | |
|   end)
 | |
| end
 | |
| 
 | |
| function g_tooltip.terminate()
 | |
|   disconnect(UIWidget, { onStyleApply = onWidgetStyleApply,
 | |
|                          onHoverChange = onWidgetHoverChange })
 | |
| 
 | |
|   currentHoveredWidget = nil
 | |
|   toolTipLabel:destroy()
 | |
|   toolTipLabel = nil
 | |
| 
 | |
|   g_tooltip = nil
 | |
| end
 | |
| 
 | |
| function g_tooltip.display(text)
 | |
|   if text == nil or text:len() == 0 then return end
 | |
|   if not toolTipLabel then return end
 | |
| 
 | |
|   toolTipLabel:setText(text)
 | |
|   toolTipLabel:resizeToText()
 | |
|   toolTipLabel:resize(toolTipLabel:getWidth() + 4, toolTipLabel:getHeight() + 4)
 | |
|   toolTipLabel:show()
 | |
|   toolTipLabel:raise()
 | |
|   toolTipLabel:enable()
 | |
|   g_effects.fadeIn(toolTipLabel, 100)
 | |
|   moveToolTip(true)
 | |
|   
 | |
|   connect(rootWidget, {
 | |
|     onMouseMove = moveToolTip,
 | |
|   })  
 | |
| end
 | |
| 
 | |
| function g_tooltip.hide()
 | |
|   g_effects.fadeOut(toolTipLabel, 100)
 | |
|   
 | |
|   disconnect(rootWidget, {
 | |
|     onMouseMove = moveToolTip,
 | |
|   })  
 | |
| end
 | |
| 
 | |
| 
 | |
| -- @docclass UIWidget @{
 | |
| 
 | |
| -- UIWidget extensions
 | |
| function UIWidget:setTooltip(text)
 | |
|   self.tooltip = text
 | |
| end
 | |
| 
 | |
| function UIWidget:removeTooltip()
 | |
|   self.tooltip = nil
 | |
| end
 | |
| 
 | |
| function UIWidget:getTooltip()
 | |
|   return self.tooltip
 | |
| end
 | |
| 
 | |
| -- @}
 | |
| 
 | |
| g_tooltip.init()
 | |
| connect(g_app, { onTerminate = g_tooltip.terminate })
 | 
