1-- @docclass
2UIResizeBorder = extends(UIWidget, "UIResizeBorder")
3
4function UIResizeBorder.create()
5 local resizeborder = UIResizeBorder.internalCreate()
6 resizeborder:setFocusable(false)
7 resizeborder.minimum = 0
8 resizeborder.maximum = 1000
9 return resizeborder
10end
11
12function UIResizeBorder:onSetup()
13 if self:getWidth() > self:getHeight() then
14 self.vertical = true
15 else
16 self.vertical = false
17 end
18end
19
20function UIResizeBorder:onDestroy()
21 if self.hovering then
22 g_mouse.popCursor(self.cursortype)
23 end
24end
25
26function UIResizeBorder:onHoverChange(hovered)
27 if hovered then
28 if g_mouse.isCursorChanged() or g_mouse.isPressed() then return end
29 if self:getWidth() > self:getHeight() then
30 self.vertical = true
31 self.cursortype = 'vertical'
32 else
33 self.vertical = false
34 self.cursortype = 'horizontal'
35 end
36 g_mouse.pushCursor(self.cursortype)
37 self.hovering = true
38 if not self:isPressed() then
39 g_effects.fadeIn(self)
40 end
41 else
42 if not self:isPressed() and self.hovering then
43 g_mouse.popCursor(self.cursortype)
44 g_effects.fadeOut(self)
45 self.hovering = false
46 end
47 end
48end
49
50function UIResizeBorder:onMouseMove(mousePos, mouseMoved)
51 if self:isPressed() then
52 local parent = self:getParent()
53 local newSize = 0
54 if self.vertical then
55 local delta = mousePos.y - self:getY() - self:getHeight()/2
56 newSize = math.min(math.max(parent:getHeight() + delta, self.minimum), self.maximum)
57 parent:setHeight(newSize)
58 else
59 local delta = mousePos.x - self:getX() - self:getWidth()/2
60 newSize = math.min(math.max(parent:getWidth() + delta, self.minimum), self.maximum)
61 parent:setWidth(newSize)
62 end
63
64 self:checkBoundary(newSize)
65 return true
66 end
67end
68
69function UIResizeBorder:onMouseRelease(mousePos, mouseButton)
70 if not self:isHovered() then
71 g_mouse.popCursor(self.cursortype)
72 g_effects.fadeOut(self)
73 self.hovering = false
74 end
75end
76
77function UIResizeBorder:onStyleApply(styleName, styleNode)
78 for name,value in pairs(styleNode) do
79 if name == 'maximum' then
80 self:setMaximum(tonumber(value))
81 elseif name == 'minimum' then
82 self:setMinimum(tonumber(value))
83 end
84 end
85end
86
87function UIResizeBorder:onVisibilityChange(visible)
88 if visible and self.maximum == self.minimum then
89 self:hide()
90 end
91end
92
93function UIResizeBorder:setMaximum(maximum)
94 self.maximum = maximum
95 self:checkBoundary()
96end
97
98function UIResizeBorder:setMinimum(minimum)
99 self.minimum = minimum
100 self:checkBoundary()
101end
102
103function UIResizeBorder:getMaximum() return self.maximum end
104function UIResizeBorder:getMinimum() return self.minimum end
105
106function UIResizeBorder:setParentSize(size)
107 local parent = self:getParent()
108 if self.vertical then
109 parent:setHeight(size)
110 else
111 parent:setWidth(size)
112 end
113 self:checkBoundary(size)
114end
115
116function UIResizeBorder:getParentSize()
117 local parent = self:getParent()
118 if self.vertical then
119 return parent:getHeight()
120 else
121 return parent:getWidth()
122 end
123end
124
125function UIResizeBorder:checkBoundary(size)
126 size = size or self:getParentSize()
127 if self.maximum == self.minimum and size == self.maximum then
128 self:hide()
129 else
130 self:show()
131 end
132end
133