mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-15 15:04:53 +02:00
fix items, map, protocls
This commit is contained in:
124
800OTClient/modules/corelib/ui/tooltip.lua
Normal file
124
800OTClient/modules/corelib/ui/tooltip.lua
Normal file
@@ -0,0 +1,124 @@
|
||||
-- @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 })
|
Reference in New Issue
Block a user