More accurate implementation for x and y axis
This commit is contained in:
parent
e69d201e1b
commit
c6a1323214
|
@ -517,20 +517,26 @@ function RootView:on_mouse_released(...)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function resize_child_node(node, axis, value, delta)
|
||||||
|
if node.a.resizable then
|
||||||
|
local view = node.a.active_view
|
||||||
|
view.size[axis] = value
|
||||||
|
elseif node.b.resizable then
|
||||||
|
local view = node.b.active_view
|
||||||
|
view.size[axis] = node.size[axis] - value
|
||||||
|
else
|
||||||
|
node.divider = node.divider + delta / node.size[axis]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function RootView:on_mouse_moved(x, y, dx, dy)
|
function RootView:on_mouse_moved(x, y, dx, dy)
|
||||||
if self.dragged_divider then
|
if self.dragged_divider then
|
||||||
local node = self.dragged_divider
|
local node = self.dragged_divider
|
||||||
if node.type == "hsplit" then
|
if node.type == "hsplit" then
|
||||||
if node.a.resizable then
|
resize_child_node(node, "x", x, dx)
|
||||||
local size = node.a.active_view.size
|
elseif node.type == "vsplit" then
|
||||||
size.x = size.x + dx
|
resize_child_node(node, "y", y, dy)
|
||||||
elseif node.b.resizable then
|
|
||||||
local size = node.b.active_view.size
|
|
||||||
size.x = size.x + dx
|
|
||||||
end
|
|
||||||
node.divider = node.divider + dx / node.size.x
|
|
||||||
else
|
|
||||||
node.divider = node.divider + dy / node.size.y
|
|
||||||
end
|
end
|
||||||
node.divider = common.clamp(node.divider, 0.01, 0.99)
|
node.divider = common.clamp(node.divider, 0.01, 0.99)
|
||||||
return
|
return
|
||||||
|
@ -542,7 +548,11 @@ function RootView:on_mouse_moved(x, y, dx, dy)
|
||||||
local node = self.root_node:get_child_overlapping_point(x, y)
|
local node = self.root_node:get_child_overlapping_point(x, y)
|
||||||
local div = self.root_node:get_divider_overlapping_point(x, y)
|
local div = self.root_node:get_divider_overlapping_point(x, y)
|
||||||
if div then
|
if div then
|
||||||
system.set_cursor(div.type == "hsplit" and "sizeh" or "sizev")
|
local a_is_fixed = div.a.locked and not div.a.resizable
|
||||||
|
local b_is_fixed = div.b.locked and not div.b.resizable
|
||||||
|
if not a_is_fixed and not b_is_fixed then
|
||||||
|
system.set_cursor(div.type == "hsplit" and "sizeh" or "sizev")
|
||||||
|
end
|
||||||
elseif node:get_tab_overlapping_point(x, y) then
|
elseif node:get_tab_overlapping_point(x, y) then
|
||||||
system.set_cursor("arrow")
|
system.set_cursor("arrow")
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue