tibia-client/modules/corelib/ui/uiresizeborder.lua

133 lines
3.2 KiB
Lua
Raw Normal View History

2012-06-26 00:13:30 +02:00
-- @docclass
UIResizeBorder = extends(UIWidget)
function UIResizeBorder.create()
local resizeborder = UIResizeBorder.internalCreate()
resizeborder:setFocusable(false)
resizeborder.minimum = 0
resizeborder.maximum = 1000
return resizeborder
end
function UIResizeBorder:onSetup()
if self:getWidth() > self:getHeight() then
self.vertical = true
else
self.vertical = false
end
end
function UIResizeBorder:onDestroy()
if self.hovering then
2013-01-25 14:47:51 +01:00
g_mouse.popCursor(self.cursortype)
end
end
function UIResizeBorder:onHoverChange(hovered)
if hovered then
2012-06-26 00:13:30 +02:00
if g_mouse.isCursorChanged() or g_mouse.isPressed() then return end
if self:getWidth() > self:getHeight() then
self.vertical = true
2013-01-25 14:47:51 +01:00
self.cursortype = 'vertical'
else
self.vertical = false
2013-01-25 14:47:51 +01:00
self.cursortype = 'horizontal'
end
2013-01-25 14:47:51 +01:00
g_mouse.pushCursor(self.cursortype)
2012-03-28 21:09:45 +02:00
self.hovering = true
if not self:isPressed() then
2012-06-26 00:13:30 +02:00
g_effects.fadeIn(self)
end
else
2012-03-28 21:09:45 +02:00
if not self:isPressed() and self.hovering then
2013-01-25 14:47:51 +01:00
g_mouse.popCursor(self.cursortype)
2012-06-26 00:13:30 +02:00
g_effects.fadeOut(self)
2012-03-28 21:09:45 +02:00
self.hovering = false
end
end
end
function UIResizeBorder:onMouseMove(mousePos, mouseMoved)
if self:isPressed() then
local parent = self:getParent()
local newSize = 0
if self.vertical then
local delta = mousePos.y - self:getY() - self:getHeight()/2
newSize = math.min(math.max(parent:getHeight() + delta, self.minimum), self.maximum)
parent:setHeight(newSize)
else
local delta = mousePos.x - self:getX() - self:getWidth()/2
newSize = math.min(math.max(parent:getWidth() + delta, self.minimum), self.maximum)
parent:setWidth(newSize)
end
self:checkBoundary(newSize)
return true
end
end
function UIResizeBorder:onMouseRelease(mousePos, mouseButton)
if not self:isHovered() then
2013-01-25 14:47:51 +01:00
g_mouse.popCursor(self.cursortype)
2012-06-26 00:13:30 +02:00
g_effects.fadeOut(self)
2012-03-28 21:09:45 +02:00
self.hovering = false
end
end
function UIResizeBorder:onStyleApply(styleName, styleNode)
for name,value in pairs(styleNode) do
if name == 'maximum' then
self:setMaximum(tonumber(value))
elseif name == 'minimum' then
self:setMinimum(tonumber(value))
end
end
end
2012-06-21 21:31:22 +02:00
function UIResizeBorder:onVisibilityChange(visible)
if visible and self.maximum == self.minimum then
self:hide()
end
end
function UIResizeBorder:setMaximum(maximum)
self.maximum = maximum
self:checkBoundary()
end
function UIResizeBorder:setMinimum(minimum)
self.minimum = minimum
self:checkBoundary()
end
function UIResizeBorder:getMaximum() return self.maximum end
function UIResizeBorder:getMinimum() return self.minimum end
function UIResizeBorder:setParentSize(size)
local parent = self:getParent()
if self.vertical then
parent:setHeight(size)
else
parent:setWidth(size)
2012-06-21 21:31:22 +02:00
end
self:checkBoundary(size)
end
2012-08-18 07:04:01 +02:00
function UIResizeBorder:getParentSize()
2012-08-18 07:04:01 +02:00
local parent = self:getParent()
if self.vertical then
return parent:getHeight()
else
return parent:getWidth()
2012-08-18 07:04:01 +02:00
end
end
function UIResizeBorder:checkBoundary(size)
size = size or self:getParentSize()
if self.maximum == self.minimum and size == self.maximum then
self:hide()
else
self:show()
end
end