Skip to content

Commit 6e779d6

Browse files
Merge pull request #397 from FlyAndNotDown/master
Feat: New Web Based UI Framework
2 parents 8fd0106 + b881d4c commit 6e779d6

File tree

2,184 files changed

+1516
-11169
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,184 files changed

+1516
-11169
lines changed

CMake/Common.cmake

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,9 @@ add_definitions(-DCOMPILER_GCC=$<IF:$<CXX_COMPILER_ID:GNU>,1,0>)
3131

3232
add_definitions(-DBUILD_EDITOR=$<BOOL:BUILD_EDITOR>)
3333

34-
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
35-
string(REGEX REPLACE ".*MacOSX([0-9]+\\.[0-9]+).*" "\\1" MACOS_SDK_VERSION ${CMAKE_OSX_SYSROOT})
36-
add_definitions(-DMACOS_SDK_VERSION=${MACOS_SDK_VERSION})
37-
endif ()
38-
3934
if (${MSVC})
4035
add_compile_options(/bigobj)
4136
add_definitions(-D_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1)
37+
add_definitions(-DWIN32_LEAN_AND_MEAN)
4238
add_definitions(-DNOMINMAX=1)
4339
endif ()

Editor/CMakeLists.txt

Lines changed: 83 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
set(CMAKE_PREFIX_PATH ${QT_LIB_PREFIX})
22
find_package(
33
Qt6 ${QT_VERSION}
4-
COMPONENTS Core Gui Widgets Quick
4+
COMPONENTS Core Gui Widgets Quick WebEngineWidgets
55
REQUIRED
66
)
77

88
qt_standard_project_setup(REQUIRES ${QT_VERSION})
99

10+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
11+
set(PLATFORM_EXECUTABLE_HINT MACOSX_BUNDLE)
12+
endif ()
13+
1014
file(GLOB_RECURSE SOURCES Src/*.cpp)
11-
qt_add_executable(Editor ${SOURCES})
15+
qt_add_executable(Editor ${PLATFORM_EXECUTABLE_HINT} ${SOURCES})
1216
target_include_directories(Editor PRIVATE Include)
13-
target_link_libraries(Editor PRIVATE Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick)
17+
target_include_directories(Editor PRIVATE ${CPP_HTTP_LIB_SOURCE_DIR})
18+
target_link_libraries(Editor PRIVATE Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick Qt6::WebEngineWidgets)
1419

1520
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
1621
set(PLATFORM_DEP_TARGET RHI-DirectX12 RHI-Vulkan)
@@ -21,10 +26,26 @@ add_dependencies(Editor ${PLATFORM_DEP_TARGET})
2126

2227
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
2328
set(QT_WIN_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX}/bin/windeployqt.exe)
24-
set(QT_BUILDIN_QML_DIRECTORY ${QT_LIB_PREFIX}/qml)
2529
add_custom_command(
2630
TARGET Editor POST_BUILD
27-
COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} $<TARGET_FILE:Editor> --qmldir ${QT_BUILDIN_QML_DIRECTORY} --verbose 0
31+
# ++ QT 6.9.1 Temporal Fix Start
32+
# #see https://bugreports.qt.io/browse/QTBUG-137542
33+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_devtools_resources.pak ${QT_LIB_PREFIX}/resources/qtwebengine_devtools_resources.debug.pak
34+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_resources.pak ${QT_LIB_PREFIX}/resources/qtwebengine_resources.debug.pak
35+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_resources_100p.pak ${QT_LIB_PREFIX}/resources/qtwebengine_resources_100p.debug.pak
36+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_resources_200p.pak ${QT_LIB_PREFIX}/resources/qtwebengine_resources_200p.debug.pak
37+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_devtools_resources.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/qtwebengine_devtools_resources.pak
38+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_resources.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/qtwebengine_resources.pak
39+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_resources_100p.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/qtwebengine_resources_100p.pak
40+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX}/resources/qtwebengine_resources_200p.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/qtwebengine_resources_200p.pak
41+
# -- QT 6.9.1 Temporal Fix End
42+
COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} $<TARGET_FILE:Editor>
43+
)
44+
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
45+
set(QT_MAC_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX}/bin/macdeployqt)
46+
add_custom_command(
47+
TARGET Editor POST_BUILD
48+
COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Editor.app $<IF:$<CONFIG:Debug>,-no-strip,>
2849
)
2950
endif ()
3051

@@ -47,38 +68,65 @@ AddResourcesCopyCommand(
4768
)
4869
# ---- end shaders -----------------------------------------------------------------------------------
4970

71+
# ---- begin web project -----------------------------------------------------------------------------
72+
set(NODEJS_HOME ${3RD_SOURCE_DIR}/Nodejs-${CMAKE_SYSTEM_NAME}-${NODEJS_VERSION})
73+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
74+
set(NODEJS_PATH ${NODEJS_HOME})
75+
set(NPM_EXECUTABLE npm.cmd)
76+
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
77+
set(NODEJS_BIN_PATH ${NODEJS_HOME}/bin)
78+
set(NODEJS_MODULES_PATH ${NODEJS_HOME}/lib/node_modules)
79+
file(REMOVE ${NODEJS_BIN_PATH}/corepack)
80+
file(REMOVE ${NODEJS_BIN_PATH}/npm)
81+
file(REMOVE ${NODEJS_BIN_PATH}/npx)
82+
execute_process(
83+
COMMAND ln -s ${NODEJS_MODULES_PATH} ${NODEJS_BIN_PATH}/node_modules
84+
RESULT_VARIABLE LINK_RESULT
85+
OUTPUT_VARIABLE LINK_OUTPUT
86+
ERROR_VARIABLE LINK_ERROR
87+
)
88+
execute_process(
89+
COMMAND ln -s ${NODEJS_MODULES_PATH}/npm/bin/npm ${NODEJS_BIN_PATH}/npm
90+
RESULT_VARIABLE LINK_RESULT
91+
OUTPUT_VARIABLE LINK_OUTPUT
92+
ERROR_VARIABLE LINK_ERROR
93+
)
94+
execute_process(
95+
COMMAND ln -s ${NODEJS_MODULES_PATH}/npm/bin/npx ${NODEJS_BIN_PATH}/npx
96+
RESULT_VARIABLE LINK_RESULT
97+
OUTPUT_VARIABLE LINK_OUTPUT
98+
ERROR_VARIABLE LINK_ERROR
99+
)
100+
set(NODEJS_PATH "$ENV{PATH}:${NODEJS_BIN_PATH}")
101+
set(NPM_EXECUTABLE npm)
102+
else ()
103+
message(FATAL_ERROR "Unsupported OS")
104+
endif ()
50105

51-
# ---- begin qml -------------------------------------------------------------------------------------
52-
set(EDITOR_QML_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/Qml)
53-
set(EDITOR_RESOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/Resource)
54-
get_filename_component(EDITOR_RESOURCE_ROOT_ABSOLUTE ${EDITOR_RESOURCE_ROOT} ABSOLUTE)
55-
56-
file(GLOB QML_SOURCES ${EDITOR_QML_ROOT}/*.qml)
57-
58-
list(
59-
APPEND SINGLETON_QML_SOURCES
60-
ETheme.qml)
61-
target_compile_definitions(Editor PRIVATE -DSINGLETON_QML_SOURCES="${SINGLETON_QML_SOURCES}")
62-
63-
# QML only support placed in root dir
64-
foreach (QML_SOURCE ${QML_SOURCES})
65-
get_filename_component(ALIAS ${QML_SOURCE} NAME)
66-
set_source_files_properties(${QML_SOURCE} PROPERTIES QT_RESOURCE_ALIAS ${ALIAS})
67-
if (${ALIAS} IN_LIST SINGLETON_QML_SOURCES)
68-
set_source_files_properties(${QML_SOURCE} PROPERTIES QT_QML_SINGLETON_TYPE true)
69-
endif ()
70-
endforeach ()
106+
message("Perform web project npm install......")
107+
execute_process(
108+
COMMAND ${CMAKE_COMMAND} -E env PATH=${NODEJS_PATH} ${NPM_EXECUTABLE} install --no-fund --registry=https://registry.npmmirror.com
109+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Web
110+
RESULT_VARIABLE NPM_INSTALL_RESULT
111+
OUTPUT_VARIABLE NPM_INSTALL_OUTPUT
112+
ERROR_VARIABLE NPM_INSTALL_ERROR
113+
)
114+
if (${NPM_INSTALL_RESULT} STREQUAL "0")
115+
message(${NPM_INSTALL_OUTPUT})
116+
else ()
117+
message(FATAL_ERROR ${NPM_INSTALL_ERROR})
118+
endif ()
71119

72-
add_custom_command(
73-
TARGET Editor POST_BUILD
74-
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${EDITOR_RESOURCE_ROOT_ABSOLUTE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../Resource
120+
add_custom_target(
121+
Editor.Web
122+
COMMAND ${CMAKE_COMMAND} -E env PATH=${NODEJS_PATH} ${NPM_EXECUTABLE} run build
123+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Web
124+
VERBATIM
75125
)
126+
add_dependencies(Editor Editor.Web)
76127

77-
qt_add_qml_module(
78-
Editor
79-
NO_CACHEGEN
80-
URI editor
81-
QML_FILES ${QML_SOURCES}
82-
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Generated/QmlModule
128+
add_custom_command(
129+
TARGET Editor.Web POST_BUILD
130+
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist $<TARGET_FILE_DIR:Editor>/Web
83131
)
84-
# ---- end qml ---------------------------------------------------------------------------------------
132+
# ---- end web project -------------------------------------------------------------------------------

Editor/Include/Editor/QmlEngine.h

Lines changed: 0 additions & 37 deletions
This file was deleted.

Editor/Include/Editor/WebUIServer.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// Created by johnk on 2025/8/8.
3+
//
4+
5+
#pragma once
6+
7+
#include <httplib.h>
8+
9+
#include <Common/Concurrent.h>
10+
#include <Common/Memory.h>
11+
12+
namespace Editor {
13+
class WebUIServer {
14+
public:
15+
static WebUIServer& Get();
16+
17+
void Start();
18+
void Stop();
19+
20+
private:
21+
Common::UniquePtr<Common::NamedThread> serverThread;
22+
Common::UniquePtr<httplib::Server> server;
23+
};
24+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
//
2-
// Created by johnk on 2024/6/23.
2+
// Created by johnk on 2025/8/3.
33
//
44

55
#pragma once
66

7-
#include <Editor/Widget/QmlWidget.h>
7+
#include <Editor/Widget/WebWidget.h>
88

99
namespace Editor {
10-
class ProjectHub final : public QmlWidget {
10+
class ProjectHub final : public WebWidget {
1111
Q_OBJECT
1212

1313
public:
14-
ProjectHub();
14+
explicit ProjectHub(QWidget* inParent = nullptr);
1515
};
1616
}

Editor/Include/Editor/Widget/QmlWidget.h

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// Created by johnk on 2025/8/9.
3+
//
4+
5+
#pragma once
6+
7+
#include <QWebEngineView>
8+
9+
namespace Editor {
10+
class WebWidget : public QWebEngineView {
11+
Q_OBJECT
12+
13+
public:
14+
explicit WebWidget(QWidget* inParent = nullptr);
15+
~WebWidget() override;
16+
17+
void Load(const std::string& inUrl);
18+
};
19+
}

Editor/Include/Editor/Widget/WidgetSamples.h

Lines changed: 0 additions & 16 deletions
This file was deleted.

Editor/Qml/EButton.qml

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)