summaryrefslogtreecommitdiff
path: root/Editor/GUI/EditorWindows.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-11-10 18:46:11 +0800
committerchai <chaifix@163.com>2020-11-10 18:46:11 +0800
commit59e6235113a4d933811aa2cf6fdc8282ce394b9d (patch)
tree12410a230c5339ca88be6842c0dc811d5c6ec0ba /Editor/GUI/EditorWindows.cpp
parentf0807fc44dde14531759306317611bab87c8fccf (diff)
*window
Diffstat (limited to 'Editor/GUI/EditorWindows.cpp')
-rw-r--r--Editor/GUI/EditorWindows.cpp164
1 files changed, 164 insertions, 0 deletions
diff --git a/Editor/GUI/EditorWindows.cpp b/Editor/GUI/EditorWindows.cpp
index e69de29..18f2e3a 100644
--- a/Editor/GUI/EditorWindows.cpp
+++ b/Editor/GUI/EditorWindows.cpp
@@ -0,0 +1,164 @@
+#include "EditorWindows.h"
+#include "WinUtils.h"
+
+static const wchar_t* kContainerWindowClassName = L"GameLabContainerWndClass";
+static const wchar_t* kPopupWindowClassName = L"GameLabPopupWndClass";
+static const wchar_t* kViewportClassName = L"GameLabViewportWndClass";
+static const char* kIsMainWindowMaximized = "IsMainWindowMaximized";
+
+static ATOM s_ContainerWindowClassAtom;
+static ATOM s_PopupWindowClassAtom;
+static ATOM s_GUIViewClassAtom;
+
+void RegisterWindowClasses()
+{
+ s_ContainerWindowClassAtom = winutils::RegisterWindowClass(kContainerWindowClassName, ContainnerWindow::ContainerWndProc, CS_HREDRAW | CS_VREDRAW);
+ s_PopupWindowClassAtom = winutils::RegisterWindowClass(kPopupWindowClassName, ContainnerWindow::ContainerWndProc, CS_HREDRAW | CS_VREDRAW | CS_DROPSHADOW);//CS_HREDRAW宽度(水平)变化时重绘、CS_VREDRAW高度(垂直)变化时重绘
+ s_GUIViewClassAtom = winutils::RegisterWindowClass(kViewportClassName, Viewport::ViewportWndProc, CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS);
+}
+
+LRESULT CALLBACK ContainnerWindow::ContainerWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ long flag = DefWindowProcW(hWnd, message, wParam, lParam);
+ return flag;
+}
+
+ContainnerWindow::ContainnerWindow()
+{
+}
+
+
+ContainnerWindow::~ContainnerWindow()
+{
+
+}
+
+void ContainnerWindow::Init(Rectf pixelRect, int showMode, const Vector2f& minSize, const Vector2f& maxSize)
+{
+ // Aux windows are mac only. on windows they look just like normal utility windows.
+ if (showMode == kShowAuxWindow)
+ showMode = kShowUtility;
+
+ m_ShowMode = static_cast<ShowMode>(showMode);
+ m_IsClosing = false;
+ m_InMenuLoop = false;
+ m_CloseFromScriptDontShutdown = false;
+
+ bool shouldMaximize = false;
+ if (showMode == kShowMainWindow)
+ {
+ //shouldMaximize = s_IsMainWindowMaximized = EditorPrefs::GetBool(kIsMainWindowMaximized, false);
+ //GetRestoredMainWindowDimensions();
+ }
+
+ RECT rect = { 120, 120, 220, 220 };
+ m_InternalRect.x = m_InternalRect.y = m_InternalRect.width = m_InternalRect.height = 0.0f;
+
+ DWORD windowStyle = 0;
+ DWORD extendedStyle = 0;
+ LPCWSTR windowClass = kContainerWindowClassName;
+
+ switch (showMode) {
+ // 容纳GUIPanel的非主窗口
+ case kShowNormalWindow:
+ windowStyle = WS_POPUP | WS_CLIPCHILDREN | WS_THICKFRAME;
+ extendedStyle = WS_EX_TOOLWINDOW;
+ break;
+ // 主窗口,含菜单
+ case kShowMainWindow:
+ windowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_MINIMIZEBOX;
+ extendedStyle = 0;
+ break;
+ case kShowPopupMenu:
+ windowStyle = WS_POPUP | WS_CLIPCHILDREN;
+ extendedStyle = WS_EX_TOOLWINDOW;
+ windowClass = kPopupWindowClassName;
+ break;
+ case kShowNoShadow:
+ windowStyle = WS_POPUP | WS_CLIPCHILDREN;
+ extendedStyle = WS_EX_TOOLWINDOW;
+ break;
+ case kShowUtility:
+ windowStyle = WS_POPUP | WS_CAPTION | WS_THICKFRAME | WS_SYSMENU;
+ extendedStyle = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW;
+ break;
+ default:
+ // ErrorString("Unknown container show mode");
+ break;
+ }
+
+ HWND parentWindow = NULL;
+ if (showMode == kShowMainWindow)
+ {
+ parentWindow = NULL;
+ }
+ else
+ {
+ // parentWindow = GetMainEditorWindow();
+ }
+
+ bool notSizeable = (minSize == maxSize) && (minSize != Vector2f::zero);
+ if (notSizeable)
+ windowStyle &= ~(WS_THICKFRAME);
+
+ AdjustWindowRectEx(&rect, windowStyle, showMode == kShowMainWindow, extendedStyle);
+ int extraX = rect.right - rect.left - 200;
+ int extraY = rect.bottom - rect.top - 200;
+
+ m_MinSize.x = minSize.x + extraX;
+ m_MinSize.y = minSize.y + extraY;
+ m_MaxSize.x = maxSize.x + extraX;
+ m_MaxSize.y = maxSize.y + extraY;
+
+
+ //if (showMode == kShowUtility)
+ // s_ZUtilityWindows.push_back(m_ContainerListNode);
+ // Create window
+ m_Window = CreateWindowExW(
+ extendedStyle,
+ windowClass,
+ L"",
+ windowStyle,
+ rect.left,
+ rect.top,
+ rect.right - rect.left,
+ rect.bottom - rect.top,
+ parentWindow,
+ NULL,
+ winutils::GetInstanceHandle(),
+ NULL
+ );
+ SetWindowLongPtr(m_Window, GWLP_USERDATA, (LONG_PTR)this);
+ //UpdateMaxMaximizedRect();
+
+ if (pixelRect.width > 10 || pixelRect.height > 10)
+ {
+ //SetRect(pixelRect);
+ if (shouldMaximize)
+ SetWindowLong(m_Window, GWL_STYLE, windowStyle | WS_MAXIMIZE);
+ }
+
+
+ if (showMode == kShowMainWindow)
+ {
+ //SetMainEditorWindow(m_Window);
+ //HMENU menu = GetMainMenuHandle();
+ //if (menu)
+ // SetMenu(m_Window, menu);
+ //GetApplication().UpdateMainWindowTitle();
+ //GetApplication().UpdateDocumentEdited();
+ }
+ ShowWindow(m_Window, SW_SHOW);
+
+ //s_ContainerWindows.insert(this);
+
+ //ShowInTaskbarIfNoMainWindow(m_Window);
+
+}
+
+LRESULT CALLBACK Viewport::ViewportWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ long flag = DefWindowProcW(hWnd, message, wParam, lParam);
+ return flag;
+}
+