mirror of
https://github.com/Insality/druid
synced 2025-09-27 18:12:21 +02:00
Fix scroll events while animating
Fix slider issue with negative distance Add bunch of new functions to grid More accurate progress bar scaling with 9-slice images
This commit is contained in:
@@ -76,15 +76,29 @@ end
|
||||
|
||||
local function set_bar_to(self, set_to, is_silent)
|
||||
local prev_value = self.last_value
|
||||
local other_side = self.key == const.SIDE.X and const.SIDE.Y or const.SIDE.X
|
||||
self.last_value = set_to
|
||||
|
||||
local total_width = set_to * self.max_size
|
||||
local total_width = set_to * self.max_size[self.key]
|
||||
|
||||
local scale = math.min(total_width / self.slice_size, 1)
|
||||
local size = math.max(total_width, self.slice_size)
|
||||
local scale = 1
|
||||
if self.slice_size[self.key] > 0 then
|
||||
scale = math.min(total_width / self.slice_size[self.key], 1)
|
||||
end
|
||||
local size = math.max(total_width, self.slice_size[self.key])
|
||||
|
||||
do -- Scale other side
|
||||
-- Decrease other side of progress bar to match the oppotize slice_size
|
||||
local minimal_size = self.size[other_side] - self.slice_size[other_side]
|
||||
local maximum_size = self.size[other_side]
|
||||
local scale_diff = (maximum_size - minimal_size) / maximum_size
|
||||
local other_scale = 1 - (scale_diff * (1 - scale))
|
||||
self.scale[other_side] = other_scale
|
||||
end
|
||||
|
||||
self.scale[self.key] = scale
|
||||
gui.set_scale(self.node, self.scale)
|
||||
|
||||
self.size[self.key] = size
|
||||
gui.set_size(self.node, self.size)
|
||||
|
||||
@@ -125,15 +139,15 @@ function Progress.init(self, node, key, init_value)
|
||||
self.node = self:get_node(node)
|
||||
self.scale = gui.get_scale(self.node)
|
||||
self.size = gui.get_size(self.node)
|
||||
self.max_size = self.size[self.key]
|
||||
self.max_size = gui.get_size(self.node)
|
||||
self.slice = gui.get_slice9(self.node)
|
||||
self.last_value = self._init_value
|
||||
|
||||
if self.key == const.SIDE.X then
|
||||
self.slice_size = self.slice.x + self.slice.z
|
||||
else
|
||||
self.slice_size = self.slice.y + self.slice.w
|
||||
end
|
||||
self.slice_size = vmath.vector3(
|
||||
self.slice.x + self.slice.z,
|
||||
self.slice.y + self.slice.w,
|
||||
0
|
||||
)
|
||||
|
||||
self.on_change = Event()
|
||||
|
||||
@@ -146,6 +160,12 @@ function Progress.on_layout_change(self)
|
||||
end
|
||||
|
||||
|
||||
function Progress.on_remove(self)
|
||||
-- Return default size
|
||||
gui.set_size(self.node, self.max_size)
|
||||
end
|
||||
|
||||
|
||||
function Progress.update(self, dt)
|
||||
if self.target then
|
||||
local prev_value = self.last_value
|
||||
@@ -231,7 +251,7 @@ end
|
||||
-- @tparam vector3 max_size The new node maximum (full) size
|
||||
-- @treturn Progress @{Progress}
|
||||
function Progress.set_max_size(self, max_size)
|
||||
self.max_size = max_size[self.key]
|
||||
self.max_size[self.key] = max_size[self.key]
|
||||
self:set_to(self.last_value)
|
||||
return self
|
||||
end
|
||||
|
Reference in New Issue
Block a user