mirror of https://github.com/teverse/teverse
improvements to docking system
This commit is contained in:
parent
f4218db73b
commit
2e903a223c
create
|
@ -5,6 +5,8 @@ controller.dockDictionary = {}
|
|||
controller.bottomDock = {}
|
||||
controller.rightDock = {}
|
||||
|
||||
local luaHelpers = require("tevgit:create/helpers.lua")
|
||||
|
||||
-- direction: up, down, left or right
|
||||
local function renderHelper(parent, direction, pos)
|
||||
local frame = controller.ui.create("guiFrame", parent, {
|
||||
|
@ -51,7 +53,12 @@ controller.renderDockLocationHelpers = function()
|
|||
if #controller.bottomDock == 0 then
|
||||
renderHelper(helpers, "down", guiCoord(0.5, -20, 0.9, -20))
|
||||
else
|
||||
|
||||
for i,v in pairs(controller.bottomDock) do
|
||||
renderHelper(helpers, "down", guiCoord(0, v.absolutePosition.y + 20, 0.9, -20))
|
||||
if i == #controller.bottomDock then
|
||||
renderHelper(helpers, "down", guiCoord(0, v.absolutePosition.y + v.absoluteSize.y - 40, 0.9, -20))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if #controller.rightDock == 0 then
|
||||
|
@ -73,37 +80,55 @@ controller.undockWindow = function(window)
|
|||
controller.dockDictionary[window] = nil
|
||||
if dockDic then
|
||||
if dockDic == 0 then
|
||||
local foundi = 0
|
||||
for i,v in pairs(controller.bottomDock) do
|
||||
if v == window then
|
||||
table.remove(controller.bottomDock, i)
|
||||
controller.bottomDock[i] = nil
|
||||
foundi = i
|
||||
|
||||
local scale = 1
|
||||
|
||||
|
||||
elseif i > foundi then
|
||||
controller.bottomDock[i-1] = v
|
||||
controller.bottomDock[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local scale = 1
|
||||
if #controller.rightDock > 0 then
|
||||
scale = 0.8
|
||||
end
|
||||
|
||||
for i,v in pairs(controller.bottomDock) do
|
||||
|
||||
for i,v in pairs(controller.bottomDock) do
|
||||
engine.tween:begin(v, 0.1, {
|
||||
size = guiCoord(scale*(1/#controller.bottomDock), 0, 0.2, 0),
|
||||
position = guiCoord(scale*((i-1) * (1/#controller.bottomDock)), 0, 0.8, 0)
|
||||
}, "inOutQuad")
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
elseif dockDic == 1 then
|
||||
|
||||
local foundi = 0
|
||||
for i,v in pairs(controller.rightDock) do
|
||||
if v == window then
|
||||
table.remove(controller.rightDock, i)
|
||||
for i,v in pairs(controller.rightDock) do
|
||||
controller.rightDock[i] = nil
|
||||
foundi = i
|
||||
|
||||
|
||||
|
||||
elseif i > foundi then
|
||||
controller.rightDock[i-1] = v
|
||||
controller.rightDock[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
for i,v in pairs(controller.rightDock) do
|
||||
engine.tween:begin(v, 0.1, {
|
||||
size = guiCoord(0.2, 0, 1/#controller.rightDock, i == 1 and -83 or 0),
|
||||
position = guiCoord(0.8,0,(i-1) * (1/#controller.rightDock), i == 1 and 83 or 0)
|
||||
}, "inOutQuad")
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -112,7 +137,23 @@ controller.dockWindow = function(window, dock, pos)
|
|||
controller.undockWindow(window)
|
||||
if dock == controller.bottomDock then
|
||||
controller.dockDictionary[window] = 0
|
||||
table.insert(controller.bottomDock, window)
|
||||
--table.insert(controller.bottomDock, window)
|
||||
local newIndex = (pos and pos or 0 / (1/#controller.bottomDock+1)) + 1
|
||||
if newIndex ~= math.floor(newIndex) then
|
||||
newIndex = #controller.bottomDock + 1
|
||||
end
|
||||
if pos and #controller.bottomDock > 0 and newIndex <= #controller.bottomDock then
|
||||
for i = #controller.bottomDock, 1, -1 do
|
||||
if i >= newIndex then
|
||||
controller.bottomDock[i+1] = controller.bottomDock[i]
|
||||
end
|
||||
if i == newIndex then
|
||||
controller.bottomDock[i] = window
|
||||
end
|
||||
end
|
||||
else
|
||||
controller.bottomDock[#controller.bottomDock+1] = window
|
||||
end
|
||||
|
||||
local scale = 1
|
||||
if #controller.rightDock > 0 then
|
||||
|
@ -127,7 +168,24 @@ controller.dockWindow = function(window, dock, pos)
|
|||
end
|
||||
elseif dock == controller.rightDock then
|
||||
controller.dockDictionary[window] = 1
|
||||
table.insert(controller.rightDock, window)
|
||||
--table.insert(controller.rightDock, window)
|
||||
local newIndex = (pos and pos or 0 / (1/#controller.rightDock+1)) + 1
|
||||
if newIndex ~= math.floor(newIndex) then
|
||||
newIndex = #controller.rightDock + 1
|
||||
end
|
||||
if pos and #controller.rightDock > 0 and newIndex <= #controller.rightDock then
|
||||
for i = #controller.rightDock, 1, -1 do
|
||||
if i >= newIndex then
|
||||
controller.rightDock[i+1] = controller.rightDock[i]
|
||||
end
|
||||
if i == newIndex then
|
||||
controller.rightDock[i] = window
|
||||
end
|
||||
end
|
||||
else
|
||||
controller.rightDock[#controller.rightDock+1] = window
|
||||
end
|
||||
|
||||
for i,v in pairs(controller.rightDock) do
|
||||
engine.tween:begin(v, 0.1, {
|
||||
size = guiCoord(0.2, 0, 1/#controller.rightDock, i == 1 and -83 or 0),
|
||||
|
@ -143,6 +201,8 @@ controller.beginWindowDrag = function(window)
|
|||
controller.undockWindow(window)
|
||||
local offset = window.absolutePosition - engine.input.mousePosition
|
||||
local startAlpha = window.alpha
|
||||
local startZ = window.zIndex
|
||||
window.zIndex = 99
|
||||
|
||||
window.alpha = startAlpha*0.5;
|
||||
local helpers = controller.renderDockLocationHelpers()
|
||||
|
@ -154,13 +214,14 @@ controller.beginWindowDrag = function(window)
|
|||
local newpos = engine.input.mousePosition + offset
|
||||
window.position = guiCoord(0, newpos.x, 0, newpos.y)
|
||||
|
||||
if engine.input.mousePosition.y >= engine.input.screenSize.y * 0.75 then
|
||||
helpers.outline.size = guiCoord(1, 0, 0.2, 0)
|
||||
helpers.outline.position = guiCoord(0, 0, 0.8, 0)
|
||||
if engine.input.mousePosition.y >= engine.input.screenSize.y * 0.75 and
|
||||
engine.input.mousePosition.x < engine.input.screenSize.x * 0.75 then
|
||||
helpers.outline.size = guiCoord(1/(#controller.bottomDock+1), 0, 0.2, 0)
|
||||
helpers.outline.position = guiCoord(luaHelpers.roundToMultiple(engine.input.mousePosition.x/engine.input.screenSize.x, 1/(#controller.bottomDock+1)), 0, 0.8, 0)
|
||||
helpers.outline.visible = true
|
||||
elseif engine.input.mousePosition.x >= engine.input.screenSize.x * 0.75 then
|
||||
helpers.outline.size = guiCoord(0.2, 0, 1, 0)
|
||||
helpers.outline.position = guiCoord(0.8, 0, 0, 0)
|
||||
helpers.outline.size = guiCoord(0.2, 0, 1/(#controller.rightDock+1), 0)
|
||||
helpers.outline.position = guiCoord(0.8, 0, luaHelpers.roundToMultiple(engine.input.mousePosition.y/engine.input.screenSize.y, 1/(#controller.rightDock+1)), 0)
|
||||
helpers.outline.visible = true
|
||||
else
|
||||
helpers.outline.visible = false
|
||||
|
@ -169,13 +230,15 @@ controller.beginWindowDrag = function(window)
|
|||
wait()
|
||||
end
|
||||
helpers:destroy()
|
||||
if engine.input.mousePosition.y >= engine.input.screenSize.y * 0.75 then
|
||||
controller.dockWindow(window, controller.bottomDock)
|
||||
if engine.input.mousePosition.y >= engine.input.screenSize.y * 0.75 and
|
||||
engine.input.mousePosition.x < engine.input.screenSize.x * 0.75 then
|
||||
controller.dockWindow(window, controller.bottomDock, luaHelpers.roundToMultiple(engine.input.mousePosition.x/engine.input.screenSize.x, 1/(#controller.bottomDock+1)))
|
||||
elseif engine.input.mousePosition.x >= engine.input.screenSize.x * 0.75 then
|
||||
controller.dockWindow(window, controller.rightDock)
|
||||
controller.dockWindow(window, controller.rightDock, luaHelpers.roundToMultiple(engine.input.mousePosition.y/engine.input.screenSize.y, 1/(#controller.rightDock+1)))
|
||||
end
|
||||
|
||||
window.alpha = startAlpha
|
||||
window.zIndex = startZ
|
||||
end
|
||||
|
||||
return controller
|
|
@ -19,6 +19,7 @@ function controller.createUI(workshop)
|
|||
controller.window = uiController.createWindow(workshop.interface, guiCoord(1, -300, 1, -400), guiCoord(0, 250, 0, 400), "Properties")
|
||||
controller.window.visible = true
|
||||
|
||||
controller.window2 = uiController.createWindow(workshop.interface, guiCoord(0.3, -300, 1, -400), guiCoord(0, 250, 0, 250), "Test Window")
|
||||
|
||||
dockController.dockWindow(controller.window, dockController.rightDock)
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
local controller = {}
|
||||
|
||||
local toolSettings = require("tevgit:create/controllers/toolSettings.lua")
|
||||
|
||||
function controller.roundToMultiple(number, multiple)
|
||||
if multiple == 0 then
|
||||
return number
|
||||
|
@ -17,6 +15,7 @@ function controller.roundVectorToMultiple(vec, multiple)
|
|||
end
|
||||
|
||||
function controller.roundVectorWithToolSettings(vec)
|
||||
local toolSettings = require("tevgit:create/controllers/toolSettings.lua")
|
||||
local multiple = toolSettings.gridStep
|
||||
vec.x = toolSettings.axis[1][2] and controller.roundToMultiple(vec.x, multiple) or vec.x
|
||||
vec.y = toolSettings.axis[2][2] and controller.roundToMultiple(vec.y, multiple) or vec.y
|
||||
|
|
Loading…
Reference in New Issue