Files
imgui-luau/tools/test/scripts/t_dock.luau
T

48 lines
2.1 KiB
Luau

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local G = require(ReplicatedStorage:WaitForChild("ImGui"))
local ImGui, ImVec2 = G.ImGui, G.ImVec2
ImGui.CreateContext()
local io = ImGui.GetIO()
io.ConfigFlags = bit32.bor(io.ConfigFlags, G.ImGuiConfigFlags.DockingEnable)
G.ImGui_ImplRoblox.Init()
local frame = 0
local dockspace_id
local winA, winB, winC
RunService.Stepped:Connect(function()
frame += 1
G.ImGui_ImplRoblox.NewFrame()
ImGui.NewFrame()
dockspace_id = ImGui.DockSpaceOverViewport(0, nil, 0)
if frame == 2 then
ImGui.DockBuilderRemoveNode(dockspace_id)
ImGui.DockBuilderAddNode(dockspace_id, bit32.bor(G.ImGuiDockNodeFlags.DockSpace))
ImGui.DockBuilderSetNodeSize(dockspace_id, ImGui.GetMainViewport().Size)
local left, right = ImGui.DockBuilderSplitNode(dockspace_id, G.ImGuiDir.Left, 0.3)
ImGui.DockBuilderDockWindow("A", left)
ImGui.DockBuilderDockWindow("B", right)
ImGui.DockBuilderDockWindow("C", right)
ImGui.DockBuilderFinish(dockspace_id)
print("split", left, right)
end
for _, n in ipairs({"A", "B", "C"}) do
if ImGui.Begin(n) then ImGui.Text("window " .. n) end
ImGui.End()
end
if frame == 30 then
local g = ImGui.GetCurrentContext()
local a, b, c = ImGui.FindWindowByName("A"), ImGui.FindWindowByName("B"), ImGui.FindWindowByName("C")
print("A node", a.DockNode and a.DockNode.ID, "B node", b.DockNode and b.DockNode.ID, "C node", c.DockNode and c.DockNode.ID)
assert(a.DockNode ~= nil and b.DockNode ~= nil, "windows must be docked")
assert(a.DockNode ~= b.DockNode, "A and B in different nodes")
assert(b.DockNode == c.DockNode, "B and C share a node")
assert(b.DockNode.TabBar ~= nil and b.DockNode.TabBar.Tabs.Size == 2, "B/C tab bar with 2 tabs")
local ini = ImGui.SaveIniSettingsToMemory()
print(ini)
assert(ini:find("%[Docking%]%[Data%]"), "docking ini section")
print("DOCK OK")
end
ImGui.Render()
G.ImGui_ImplRoblox.RenderDrawData(ImGui.GetDrawData())
end)