summaryrefslogtreecommitdiff
path: root/Data/Libraries
diff options
context:
space:
mode:
Diffstat (limited to 'Data/Libraries')
-rw-r--r--Data/Libraries/GameLab/Editor/Window/ContainerWindow.lua4
-rw-r--r--Data/Libraries/GameLab/Editor/Window/GUIWindow.lua14
-rw-r--r--Data/Libraries/GameLab/Editor/Window/SplitWindow.lua30
3 files changed, 30 insertions, 18 deletions
diff --git a/Data/Libraries/GameLab/Editor/Window/ContainerWindow.lua b/Data/Libraries/GameLab/Editor/Window/ContainerWindow.lua
index 1e75cdc..4b6f1bc 100644
--- a/Data/Libraries/GameLab/Editor/Window/ContainerWindow.lua
+++ b/Data/Libraries/GameLab/Editor/Window/ContainerWindow.lua
@@ -11,8 +11,8 @@ ContainerWindow.Ctor = function(self, position, showMode, min, max)
self.m_RootSplitWindow = Window.SplitWindow.New(Window.ESplitMode.Horizontal)
end
-ContainerWindow.SetTitle = function(self)
- self.m_Native:SetTitle(self)
+ContainerWindow.SetTitle = function(self, title)
+ self.m_Native:SetTitle(title)
end
ContainerWindow.SetIcon = function(self)
diff --git a/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua b/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua
index 51ee128..bbd368e 100644
--- a/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua
+++ b/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua
@@ -1,3 +1,15 @@
+--[[
+GameLab编辑器窗口
+
+窗口层级 触发事件 逻辑窗口 数量 说明
+ContainerWindow 是 [1,n] 有唯一的一个MainWindow,可以有多个其余ShowMode的窗口
+|- SplitWindow 是 1:1 一个ContainerWindow下只有一个root SplitWindow,然后以树形结构嵌套子窗口GUIWindow或SplitWindow
+ |- GUIWindow 是 1:[n,0] 一个SplitWindow下可能有GUIWindow,也可能是SplitWindow
+ |- EditorWindow 是 1:[n,1] 一个GUIWindow下至少有一个EditorWindow
+
+ContinerWindow和GUIWindow是windows事件产生的窗口,SplitWindow和EditorWindow是逻辑窗口,本身不会
+产生输入事件
+]]
local GUIWindow = GameLab.GlobalClass("GameLab.Editor.Window.GUIWindow")
local NativeGUIWindow = GameLab.Editor.Window.Internal.GUIWindow
@@ -38,7 +50,7 @@ GUIWindow.SetContainerWindow = function(self, containerWindow)
end
GUIWindow.AddEditorWindow = function(self)
-
+
end
GUIWindow.SetPosition = function(self, pos)
diff --git a/Data/Libraries/GameLab/Editor/Window/SplitWindow.lua b/Data/Libraries/GameLab/Editor/Window/SplitWindow.lua
index 8f126a9..9a398c2 100644
--- a/Data/Libraries/GameLab/Editor/Window/SplitWindow.lua
+++ b/Data/Libraries/GameLab/Editor/Window/SplitWindow.lua
@@ -3,6 +3,8 @@ local EEventType = GameLab.Events.EEventType
local Math = require "GameLab.Engine.Math"
local GUI = require "GameLab.Engine.GUI"
local inspect = require "inspect"
+local ECursor = GameLab.Editor.Window.ECursor
+local Window = GameLab.Editor.Window
local Rect = Math.Rect
@@ -24,22 +26,21 @@ local SplitState = {
}
-- 抽象的窗口,用来处理布局
-local SplitWindow = GameLab.GlobalClass("GameLab.Editor.Window.SplitWindow")
-
-SplitWindow.Ctor = function(self, mode, splitter)
+local SplitWindow = GameLab.GlobalClass("GameLab.Editor.Window.SplitWindow", function(self, mode, splitter)
+ self.m_ControlID = nil
self.m_ContainerWindow = nil
self.m_SplitMode = mode
self.m_Parent = nil -- 父节点是一个split window或者空
self.m_SubWindows = {} -- 子窗口,可以是SplitWindow或GUIWindow
self.m_Splitter = {}
- self.m_Position = Rect.New()
+ self.m_Position = Rect()
if splitter ~= nil and type(splitter) == "table" then
for _, v in ipairs(splitter) do
- local sp = Splitter.New(v)
+ local sp = Splitter(v)
table.insert(self.m_Splitter, sp)
end
end
-end
+end)
-- 布局,设置GUIWindow的大小
SplitWindow.DoSplit = function(self, event)
@@ -47,12 +48,11 @@ SplitWindow.DoSplit = function(self, event)
self.m_Parent:DoSplit(event)
end
- local id = GUI.GetControlID()
+ self.m_ControlID = GUI.GetControlID()
if event.type == EEventType.MouseDown then
- local bHandled = false
for i, sp in ipairs(self.m_Splitter) do
- local rect = Rect.New()
+ local rect = Rect()
if self.m_SplitMode == ESplitMode.Horizontal then
local x = sp.value * self.m_Position.width + self.m_Position.x - sp.size / 2
local w = sp.size
@@ -70,14 +70,13 @@ SplitWindow.DoSplit = function(self, event)
end
if rect:Contains(event.mousePosition) then
SplitState.currentSplitter = sp
- GUI.SetHotControl(id)
- bHandled = true
+ GUI.SetHotControl(self.m_ControlID)
break
end
end
elseif event.type == EEventType.MouseDrag then
local hot = GUI.GetHotControl()
- if hot == id then
+ if hot == self.m_ControlID then
local splitter = SplitState.currentSplitter
if splitter ~= nil then
local mousePos = event.mousePosition
@@ -93,7 +92,8 @@ SplitWindow.DoSplit = function(self, event)
end
end
elseif event.type == EEventType.MouseUp then
- if GUI.GetHotControl() == id then
+ if GUI.GetHotControl() == self.m_ControlID then
+ GUI.SetHotControl(0)
SplitState.currentSplitter = nil
end
end
@@ -105,7 +105,7 @@ SplitWindow.SetPosition = function(self, position)
for i, subWindow in ipairs(self.m_SubWindows) do
local prev = i > 1 and self.m_Splitter[i-1].value or 0
local next = i <= #self.m_Splitter and self.m_Splitter[i].value or 1
- local pos = Rect.New()
+ local pos = Rect()
pos:CopyFrom(position)
if self.m_SplitMode == ESplitMode.Horizontal then
pos.x = pos.x + prev * position.width
@@ -119,7 +119,7 @@ SplitWindow.SetPosition = function(self, position)
end
SplitWindow.GetPosition = function(self)
- local pos = Rect.New()
+ local pos = Rect()
pos:CopyFrom(self.m_Position)
return pos
end