From 0b47bfd08004f0aaf2fed9444ae90f6cac2b0fd3 Mon Sep 17 00:00:00 2001 From: xiaoyu_jie Date: Fri, 30 Jan 2026 16:42:28 +0800 Subject: [PATCH 1/2] Add Chinese localization and improve GLFW handling Localized all UI strings to Chinese in the main window, menubar, properties, and buffer components. Added Chinese font support for ImGui on Windows. Updated CMake and GLFW build logic to prefer system or local sources, falling back to vcpkg or error if not found, and switched to HTTP download for GLFW in CMakeLists.txt. --- CMakeLists.txt | 41 +- cmake/glfw.cmake | 55 ++- src/main_glfw_opengl3.cpp | 11 + src/sources/ims_buffer.cpp | 70 ++-- src/sources/ims_gui_menubar.cpp | 60 +-- src/sources/ims_gui_output.cpp | 4 +- src/sources/ims_gui_properties.cpp | 594 ++++++++++++----------------- src/sources/ims_gui_sidebar.cpp | 116 +++--- src/sources/ims_gui_viewport.cpp | 24 +- src/utils/ims_utils.cpp | 155 ++++---- 10 files changed, 531 insertions(+), 599 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 36c25d4..51b6313 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,13 +22,43 @@ if(Git_FOUND) add_compile_definitions(GIT_SHA1="${GIT_SHA1}") endif() -if (WIN32 OR APPLE) - include(glfw) -else() # Linux - find_package(glfw3 REQUIRED) - set(GLFW_LIBRARIES glfw) +# 从源码构建 GLFW +include(ExternalProject) + +# 尝试使用 HTTP 下载 GLFW 源码,而不是 Git 克隆 +ExternalProject_Add(glfw PREFIX glfw + URL https://github.com/glfw/glfw/archive/refs/tags/3.3.5.zip + URL_HASH SHA256=59977c65188c2a43f2c50a4c6bd8f3a3d31a1761b07c572f40604bcf7123b92d + + UPDATE_COMMAND "" + + CMAKE_ARGS + "-DCMAKE_INSTALL_PREFIX=" + "-DCMAKE_BUILD_TYPE=Release" + "-DGLFW_BUILD_EXAMPLES=OFF" + "-DGLFW_BUILD_TESTS=OFF" + "-DGLFW_BUILD_DOCS=OFF" + "-DUSE_MSVC_RUNTIME_LIBRARY_DLL=OFF" + + CMAKE_CACHE_ARGS + "-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}" + "-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}" + + LOG_DOWNLOAD 1 LOG_UPDATE 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 + ) + +ExternalProject_Get_Property(glfw INSTALL_DIR) +set(GLFW_INCLUDE_DIR ${INSTALL_DIR}/include) +set(GLFW_LIBRARIES + ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glfw3${CMAKE_STATIC_LIBRARY_SUFFIX}) + +if(APPLE) + list(APPEND GLFW_LIBRARIES "-framework Cocoa" "-framework IOKit" "-framework CoreVideo") endif() +set(GLFW_INCLUDE_DIR ${GLFW_INCLUDE_DIR} CACHE STRING "") +set(GLFW_LIBRARIES ${GLFW_LIBRARIES} CACHE STRING "") + find_package(OpenGL REQUIRED) find_package(Threads REQUIRED) @@ -41,6 +71,7 @@ if (WIN32) add_compile_definitions(NOMINMAX) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) add_compile_definitions(_SCL_SECURE_NO_WARNINGS) + add_compile_options(/utf-8) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup") else() find_program(CCACHE_FOUND ccache) diff --git a/cmake/glfw.cmake b/cmake/glfw.cmake index c8704ba..2790522 100644 --- a/cmake/glfw.cmake +++ b/cmake/glfw.cmake @@ -1,39 +1,32 @@ +# 尝试使用系统已安装的 GLFW 库 find_package(GLFW 3.3.5 QUIET) if(GLFW_FOUND) message(STATUS "Found GLFW") else() - message(STATUS "GLFW not found - will build from source") - include(ExternalProject) - - ExternalProject_Add(glfw PREFIX glfw - GIT_REPOSITORY https://github.com/glfw/glfw.git - GIT_TAG 3.3.5 - - UPDATE_COMMAND "" - - CMAKE_ARGS - "-DCMAKE_INSTALL_PREFIX=" - "-DCMAKE_BUILD_TYPE=Release" - "-DGLFW_BUILD_EXAMPLES=OFF" - "-DGLFW_BUILD_TESTS=OFF" - "-DGLFW_BUILD_DOCS=OFF" - "-DUSE_MSVC_RUNTIME_LIBRARY_DLL=OFF" - - CMAKE_CACHE_ARGS - "-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}" - "-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}" - - LOG_DOWNLOAD 1 LOG_UPDATE 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 - ) - - ExternalProject_Get_Property(glfw INSTALL_DIR) - set(GLFW_INCLUDE_DIR ${INSTALL_DIR}/include) - set(GLFW_LIBRARIES - ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glfw3${CMAKE_STATIC_LIBRARY_SUFFIX}) - - if(APPLE) - list(APPEND GLFW_LIBRARIES "-framework Cocoa" "-framework IOKit" "-framework CoreVideo") + message(STATUS "GLFW not found - will use local source") + + # 设置本地 GLFW 源码目录 + set(GLFW_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/third-party/glfw") + + # 检查 GLFW 源码是否存在 + if (EXISTS "${GLFW_SOURCE_DIR}") + # 使用本地 GLFW 源码 + add_subdirectory(${GLFW_SOURCE_DIR}) + set(GLFW_INCLUDE_DIR ${GLFW_SOURCE_DIR}/include) + set(GLFW_LIBRARIES glfw) + message(STATUS "Using local GLFW source") + else() + # 如果本地没有 GLFW 源码,则尝试使用 VCPKG 安装的 GLFW + if (DEFINED ENV{VCPKG_ROOT}) + set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file") + find_package(glfw3 REQUIRED) + set(GLFW_LIBRARIES glfw) + message(STATUS "Using VCPKG GLFW library") + else() + # 如果本地没有 GLFW 源码,也没有 VCPKG,则显示错误消息 + message(FATAL_ERROR "GLFW not found. Please install GLFW or download GLFW source to ${GLFW_SOURCE_DIR}") + endif() endif() endif() diff --git a/src/main_glfw_opengl3.cpp b/src/main_glfw_opengl3.cpp index 51ed034..d86cfd0 100644 --- a/src/main_glfw_opengl3.cpp +++ b/src/main_glfw_opengl3.cpp @@ -76,6 +76,17 @@ int main(int argc, char *argv[]) IMGUI_CHECKVERSION(); ImGui::CreateContext(); + // Add Chinese font support + ImGuiIO& io = ImGui::GetIO(); + // Add Chinese font as default + #ifdef _WIN32 + // Use system Chinese font + io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\simhei.ttf", 14.0f, NULL, io.Fonts->GetGlyphRangesChineseFull()); + #else + // Fallback to default font on non-Windows systems + io.Fonts->AddFontDefault(); + #endif + MainWindowStyle(); ImGui_ImplGlfw_InitForOpenGL(glwindow, true); diff --git a/src/sources/ims_buffer.cpp b/src/sources/ims_buffer.cpp index 0bfe9bd..a909027 100644 --- a/src/sources/ims_buffer.cpp +++ b/src/sources/ims_buffer.cpp @@ -14,11 +14,11 @@ void ImStudio::BufferWindow::drawall() ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.08f, 0.09f, 0.09f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.26f, 0.59f, 0.98f, 0.40f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.86f, 0.86f, 0.86f, 0.50f)); - ImGui::Begin("buffer", &state); + ImGui::Begin("缓冲区", &state); size = ImGui::GetWindowSize(); pos = ImGui::GetWindowPos(); { - // Draw gl cursor when dragging + // 拖动时绘制光标 if (ImGui::IsMouseDown(0)) { ImGui::GetIO().MouseDrawCursor = true; @@ -28,7 +28,7 @@ void ImStudio::BufferWindow::drawall() ImGui::GetIO().MouseDrawCursor = false; } - //HOTKEY: ALT + M - "Add" Context Menu + // 热键: ALT + M - "添加" 上下文菜单 if ((ImGui::IsWindowHovered()) && ((ImGui::IsKeyDown(ImGuiKey_ModAlt) && (ImGui::IsKeyPressed(ImGuiKey_M))) || (ImGui::IsWindowHovered() && ImGui::IsMouseClicked(1)))) @@ -38,67 +38,67 @@ void ImStudio::BufferWindow::drawall() } if (ImGui::BeginPopupContextWindow("bwcontextmenu")) { - if (ImGui::BeginMenu("Add")) + if (ImGui::BeginMenu("添加")) { - if (ImGui::BeginMenu("Primitives")) + if (ImGui::BeginMenu("基础组件")) { - if (ImGui::MenuItem("Button")) + if (ImGui::MenuItem("按钮")) create("button",1); - if (ImGui::MenuItem("Radio Button")) + if (ImGui::MenuItem("单选按钮")) create("radio",1); - if (ImGui::MenuItem("Checkbox")) + if (ImGui::MenuItem("复选框")) create("checkbox",1); - if (ImGui::MenuItem("Text")) + if (ImGui::MenuItem("文本")) create("text",1); - if (ImGui::MenuItem("Bullet")) + if (ImGui::MenuItem("项目符号")) create("bullet",1); - if (ImGui::MenuItem("Arrow")) + if (ImGui::MenuItem("箭头")) create("arrow",1); - if (ImGui::MenuItem("Combo")) + if (ImGui::MenuItem("下拉菜单")) create("combo",1); - if (ImGui::MenuItem("Listbox")) + if (ImGui::MenuItem("列表框")) create("listbox",1); ImGui::EndMenu(); } - if (ImGui::BeginMenu("Data Inputs")) + if (ImGui::BeginMenu("数据输入")) { - if (ImGui::MenuItem("Input Text")) + if (ImGui::MenuItem("文本输入")) create("textinput",1); - if (ImGui::MenuItem("Input Int")) + if (ImGui::MenuItem("整数输入")) create("inputint",1); - if (ImGui::MenuItem("Input Float")) + if (ImGui::MenuItem("浮点数输入")) create("inputfloat",1); - if (ImGui::MenuItem("Input Double")) + if (ImGui::MenuItem("双精度输入")) create("inputdouble",1); - if (ImGui::MenuItem("Input Scientific")) + if (ImGui::MenuItem("科学计数法输入")) create("inputscientific",1); - if (ImGui::MenuItem("Input Float3")) + if (ImGui::MenuItem("三维向量输入")) create("inputfloat3",1); - if (ImGui::MenuItem("Drag Int")) + if (ImGui::MenuItem("拖动整数")) create("dragint",1); - if (ImGui::MenuItem("Drag Int %")) + if (ImGui::MenuItem("拖动整数百分比")) create("dragint100",1); - if (ImGui::MenuItem("Drag Float")) + if (ImGui::MenuItem("拖动浮点数")) create("dragfloat",1); - if (ImGui::MenuItem("Drag Float Small")) + if (ImGui::MenuItem("拖动小浮点数")) create("dragfloatsmall",1); - if (ImGui::MenuItem("Slider Int")) + if (ImGui::MenuItem("滑块整数")) create("sliderint",1); - if (ImGui::MenuItem("Slider Float")) + if (ImGui::MenuItem("滑块浮点数")) create("sliderfloat",1); - if (ImGui::MenuItem("Slider Float Log")) + if (ImGui::MenuItem("对数滑块")) create("sliderfloatlog",1); - if (ImGui::MenuItem("Slider Angle")) + if (ImGui::MenuItem("角度滑块")) create("sliderangle",1); ImGui::EndMenu(); } - if (ImGui::BeginMenu("Color Pickers")) + if (ImGui::BeginMenu("颜色选择器")) { - if (ImGui::MenuItem("Color 1")) + if (ImGui::MenuItem("颜色 1")) create("color1",1); - if (ImGui::MenuItem("Color 2")) + if (ImGui::MenuItem("颜色 2")) create("color2",1); - if (ImGui::MenuItem("Color 3")) + if (ImGui::MenuItem("颜色 3")) create("color3",1); ImGui::EndMenu(); } @@ -175,7 +175,7 @@ void ImStudio::BufferWindow::create(std::string type_, bool atcursor) (getbaseobj(open_child_id)) && (getobj(open_child_id)->child.open))) { - // no child window open + // 没有打开子窗口 Object widget(idgen, type_); if (atcursor) { @@ -185,9 +185,9 @@ void ImStudio::BufferWindow::create(std::string type_, bool atcursor) } else { - // child window open + // 打开子窗口 BaseObject childwidget(idgen, type_, open_child_id); getobj(open_child_id)->child.objects.push_back(childwidget); } - selected_obj_id = idgen; // select the new object + selected_obj_id = idgen; // 选择新对象 } diff --git a/src/sources/ims_gui_menubar.cpp b/src/sources/ims_gui_menubar.cpp index 559be69..7ddbb66 100644 --- a/src/sources/ims_gui_menubar.cpp +++ b/src/sources/ims_gui_menubar.cpp @@ -4,18 +4,18 @@ void ImStudio::GUI::ShowMenubar() { ImGui::SetNextWindowPos(mb_P); ImGui::SetNextWindowSize(mb_S); - ImGui::Begin("Menubar", NULL, + ImGui::Begin("菜单栏", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); - // MENU + // 菜单 if (ImGui::BeginMenuBar()) { - /// menu-file - if (ImGui::BeginMenu("File")) + /// 菜单-文件 + if (ImGui::BeginMenu("文件")) { #ifndef __EMSCRIPTEN__ - if (ImGui::MenuItem("Export to clipboard")) + if (ImGui::MenuItem("导出到剪贴板")) { ImGui::LogToClipboard(); ImGui::LogText("%s", output.c_str()); @@ -23,30 +23,30 @@ void ImStudio::GUI::ShowMenubar() }; #endif - if (ImGui::MenuItem("Exit")) + if (ImGui::MenuItem("退出")) { state = false; }; ImGui::EndMenu(); } - /// menu-edit - if (ImGui::BeginMenu("Edit")) + /// 菜单-编辑 + if (ImGui::BeginMenu("编辑")) { - if (ImGui::BeginMenu("Layout")) + if (ImGui::BeginMenu("布局")) { - ImGui::MenuItem("Compact", NULL, &compact); + ImGui::MenuItem("紧凑", NULL, &compact); ImGui::EndMenu(); } - if (ImGui::BeginMenu("Behavior")) + if (ImGui::BeginMenu("行为")) { - ImGui::MenuItem("Static Mode", NULL, &bw.staticlayout); + ImGui::MenuItem("静态模式", NULL, &bw.staticlayout); ImGui::SameLine(); - utils::HelpMarker("Toggle between static/linear layout and fixed/manual layout"); + utils::HelpMarker("在静态/线性布局和固定/手动布局之间切换"); ImGui::EndMenu(); } - if (ImGui::MenuItem("Reset")) + if (ImGui::MenuItem("重置")) { bw.objects.clear(); bw.selected_obj_id = -1; @@ -58,42 +58,42 @@ void ImStudio::GUI::ShowMenubar() ImGui::EndMenu(); } - /// menu-tools - if (ImGui::BeginMenu("Tools")) + /// 菜单-工具 + if (ImGui::BeginMenu("工具")) { - ImGui::MenuItem("Style Editor", NULL, &child_style); - ImGui::MenuItem("Demo Window", NULL, &child_demo); - ImGui::MenuItem("Metrics", NULL, &child_metrics); - ImGui::MenuItem("Stack Tool", NULL, &child_stack); - ImGui::MenuItem("Color Export", NULL, &child_color); + ImGui::MenuItem("样式编辑器", NULL, &child_style); + ImGui::MenuItem("演示窗口", NULL, &child_demo); + ImGui::MenuItem("指标", NULL, &child_metrics); + ImGui::MenuItem("堆栈工具", NULL, &child_stack); + ImGui::MenuItem("颜色导出", NULL, &child_color); ImGui::EndMenu(); } - if (ImGui::BeginMenu("Help")) + if (ImGui::BeginMenu("帮助")) { - if (ImGui::MenuItem("Resources")) child_resources = true; - if (ImGui::MenuItem("About ImStudio")) child_about = true; + if (ImGui::MenuItem("资源")) child_resources = true; + if (ImGui::MenuItem("关于 ImStudio")) child_about = true; ImGui::EndMenu(); } ImGui::EndMenuBar(); } - // TAB + // 标签 if (!compact) { if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_None)) { - // tab-create - if (ImGui::BeginTabItem("Create")) + // 标签-创建 + if (ImGui::BeginTabItem("创建")) { wksp_output = false; wksp_create = true; ImGui::EndTabItem(); } - // tab-output - if (ImGui::BeginTabItem("Output")) + // 标签-输出 + if (ImGui::BeginTabItem("输出")) { wksp_create = false; wksp_output = true; @@ -106,4 +106,4 @@ void ImStudio::GUI::ShowMenubar() ImGui::End(); -} \ No newline at end of file +} diff --git a/src/sources/ims_gui_output.cpp b/src/sources/ims_gui_output.cpp index d6c4fe7..c6e49d8 100644 --- a/src/sources/ims_gui_output.cpp +++ b/src/sources/ims_gui_output.cpp @@ -8,7 +8,7 @@ void ImStudio::GUI::ShowOutputWorkspace() ImGui::Begin("wksp_output", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar); { #ifdef __EMSCRIPTEN__ - if(ImGui::Button("Copy")){ + if(ImGui::Button("复制")){ ImGui::LogToClipboard(); ImGui::LogText(output.c_str()); ImGui::LogFinish(); @@ -18,4 +18,4 @@ void ImStudio::GUI::ShowOutputWorkspace() ImStudio::GenerateCode(&output, &bw); } ImGui::End(); -} \ No newline at end of file +} diff --git a/src/sources/ims_gui_properties.cpp b/src/sources/ims_gui_properties.cpp index 4b3c34f..58b2e0e 100644 --- a/src/sources/ims_gui_properties.cpp +++ b/src/sources/ims_gui_properties.cpp @@ -4,34 +4,34 @@ void ImStudio::GUI::ShowProperties() { ImGui::SetNextWindowPos(pt_P); ImGui::SetNextWindowSize(pt_S); - ImGui::Begin("Properties", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); + ImGui::Begin("属性", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); { { if (!bw.objects.empty()) { - // array for Properties "object" drop down combo - std::vector prop_objects_arr; // contains identifiers ex: child1::button2 - std::vector idof_prop_objects_arr; // contains id associated with ^ + // 属性"对象"下拉组合框的数组 + std::vector prop_objects_arr; // 包含标识符,例如:child1::button2 + std::vector idof_prop_objects_arr; // 包含与^关联的ID int curr_index = 0; static int selected_index = 0; static BaseObject* selected_obj_ptr = nullptr; static int prev_selected_obj_id = 0; - // static = persistent in loop / between calls + // static = 在循环/调用之间持久化 - for (Object &obj : bw.objects) // Fill both arrays with contents from bw.objects + for (Object &obj : bw.objects) // 用bw.objects的内容填充两个数组 { prop_objects_arr.push_back(const_cast(obj.identifier.c_str())); idof_prop_objects_arr.push_back(obj.id); - if (obj.id == bw.selected_obj_id) // if o is last selected item + if (obj.id == bw.selected_obj_id) // 如果o是最后选择的项目 { - selected_index = curr_index; // select it from prop_objects_arr + selected_index = curr_index; // 从prop_objects_arr中选择它 } curr_index++; - // now do the same if obj is a child window and has children - // we cant use recursion because different types Object vs BaseObject + // 现在如果obj是子窗口并具有子项,则执行相同操作 + // 我们不能使用递归,因为不同类型的Object与BaseObject //////////////////////////////////////////////////////////////////////////////////////////// if (!obj.child.objects.empty()){ for (BaseObject &childobj : obj.child.objects) @@ -48,8 +48,8 @@ void ImStudio::GUI::ShowProperties() //////////////////////////////////////////////////////////////////////////////////////////// } - // Cycle selection through array elements using left/right arrow keys - //HOTKEY: RIGHT ARROW - Cycle selected item forward + // 使用左右箭头键循环选择数组元素 + // 热键: 右箭头 - 向前循环选择项目 if (ImGui::IsKeyPressed(ImGuiKey_RightArrow)) { if (selected_index < prop_objects_arr.size() - 1) @@ -61,7 +61,7 @@ void ImStudio::GUI::ShowProperties() selected_index = 0; } } - //HOTKEY: LEFT ARROW - Cycle selected item backward + // 热键: 左箭头 - 向后循环选择项目 if (ImGui::IsKeyPressed(ImGuiKey_LeftArrow)) { if (selected_index > 0) @@ -74,65 +74,65 @@ void ImStudio::GUI::ShowProperties() } } - ImGui::Combo("Object", &selected_index, prop_objects_arr.data(), prop_objects_arr.size()); + ImGui::Combo("对象", &selected_index, prop_objects_arr.data(), prop_objects_arr.size()); selected_obj_ptr = bw.getbaseobj(idof_prop_objects_arr[selected_index]); bw.selected_obj_id = selected_obj_ptr->id; - // selecting object from properties - // this will be overridden from viewport bufferwindow drag (BaseObject.draw() assigns to active item) - // and vice versa + // 从属性中选择对象 + // 这将被视口缓冲区窗口拖动覆盖(BaseObject.draw()分配给活动项目) + // 反之亦然 - ////////PROP BUFFERS///////// + ////////属性缓冲区///////// static std::string prop_inputbuf_value = "change me"; static std::string prop_inputbuf_label = "##"; ///////////////////////////// if (bw.selected_obj_id != prev_selected_obj_id) { - //reset prop buffers so text input value is not transferred from object to object + // 重置属性缓冲区,以便文本输入值不会从一个对象传递到另一个对象 prop_inputbuf_value = "change me"; prop_inputbuf_label = "##"; } - // Per object property fields + // 每个对象的属性字段 if (selected_obj_ptr->type == "button") { - if (selected_obj_ptr->propinit) prop_inputbuf_value = selected_obj_ptr->value_s; // run after first time + if (selected_obj_ptr->propinit) prop_inputbuf_value = selected_obj_ptr->value_s; // 第一次运行后执行 - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); - //HOTKEY: CTRL + E - Focus on property field + // 热键: CTRL + E - 聚焦到属性字段 if (ImGui::IsKeyDown(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Value", &prop_inputbuf_value); + ImGui::InputText("值", &prop_inputbuf_value); selected_obj_ptr->value_s = prop_inputbuf_value; ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); if (selected_obj_ptr->center_h) ImGui::BeginDisabled(true); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); if (selected_obj_ptr->center_h) ImGui::EndDisabled(); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); ImGui::NewLine(); - ImGui::Checkbox("Auto Resize", &selected_obj_ptr->autoresize); + ImGui::Checkbox("自动调整大小", &selected_obj_ptr->autoresize); if (selected_obj_ptr->autoresize) ImGui::BeginDisabled(true); - ImGui::InputFloat("Size X", &selected_obj_ptr->size.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Size Y", &selected_obj_ptr->size.y, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("大小 X", &selected_obj_ptr->size.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("大小 Y", &selected_obj_ptr->size.y, 1.0f, 10.0f, "%.3f"); if (selected_obj_ptr->autoresize) ImGui::EndDisabled(); - //HOTKEY: DELETE - Delete selected object - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + // 热键: DELETE - 删除选中的对象 + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -150,28 +150,28 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); selected_obj_ptr->label = prop_inputbuf_label; - ImGui::Combo("Value", &cur, items, IM_ARRAYSIZE(items)); + ImGui::Combo("值", &cur, items, IM_ARRAYSIZE(items)); if (cur == 0) selected_obj_ptr->value_b = false; else selected_obj_ptr->value_b = true; ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -189,28 +189,28 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); selected_obj_ptr->label = prop_inputbuf_label; - ImGui::Combo("Value", &cur, items, IM_ARRAYSIZE(items)); + ImGui::Combo("值", &cur, items, IM_ARRAYSIZE(items)); if (cur == 0) selected_obj_ptr->value_b = false; else selected_obj_ptr->value_b = true; ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -224,23 +224,23 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Value", &prop_inputbuf_value); + ImGui::InputText("值", &prop_inputbuf_value); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->value_s = prop_inputbuf_value; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -249,16 +249,16 @@ void ImStudio::GUI::ShowProperties() if (selected_obj_ptr->type == "bullet") { - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -267,16 +267,16 @@ void ImStudio::GUI::ShowProperties() if (selected_obj_ptr->type == "arrow") { - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -287,27 +287,27 @@ void ImStudio::GUI::ShowProperties() if (selected_obj_ptr->propinit) prop_inputbuf_label = selected_obj_ptr->label; - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); selected_obj_ptr->label = prop_inputbuf_label; ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -318,27 +318,27 @@ void ImStudio::GUI::ShowProperties() if (selected_obj_ptr->propinit) prop_inputbuf_label = selected_obj_ptr->label; - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); selected_obj_ptr->label = prop_inputbuf_label; ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -353,27 +353,27 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); - ImGui::InputText("Value", &prop_inputbuf_value); + ImGui::InputText("标签", &prop_inputbuf_label); + ImGui::InputText("值", &prop_inputbuf_value); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; selected_obj_ptr->value_s = prop_inputbuf_value; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -387,25 +387,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -419,25 +419,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -451,25 +451,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -483,25 +483,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -515,25 +515,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -547,25 +547,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -579,25 +579,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -611,25 +611,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -643,25 +643,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -675,25 +675,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -707,25 +707,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -739,25 +739,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -771,25 +771,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -803,23 +803,23 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -833,25 +833,25 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; @@ -865,134 +865,32 @@ void ImStudio::GUI::ShowProperties() } - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); + if (selected_obj_ptr->ischildwidget) ImGui::Text("子控件: True"); + else ImGui::Text("子控件: False"); ImGui::NewLine(); if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl) && (ImGui::IsKeyPressed(ImGuiKey_E))) { ImGui::SetKeyboardFocusHere(); } - ImGui::InputText("Label", &prop_inputbuf_label); + ImGui::InputText("标签", &prop_inputbuf_label); ImGui::NewLine(); - ImGui::InputFloat("Width", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("宽度", &selected_obj_ptr->width, 1.0f, 10.0f, "%.3f"); ImGui::NewLine(); - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); + ImGui::Checkbox("水平居中", &selected_obj_ptr->center_h); + ImGui::InputFloat("位置 X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); + ImGui::InputFloat("位置 Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); + ImGui::Checkbox("拖动锁定", &selected_obj_ptr->locked); selected_obj_ptr->label = prop_inputbuf_label; - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) + if ((ImGui::Button("删除")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) { selected_obj_ptr->del(); if (selected_index != 0) selected_index -= 1; } } - - if (selected_obj_ptr->type == "child") - { - if (bw.getobj(selected_obj_ptr->id)->child.open) ImGui::Text("OPEN"); - else ImGui::Text("CLOSED"); - ImGui::NewLine(); - - ImGui::Checkbox("Border", &bw.getobj(selected_obj_ptr->id)->child.border); - ImGui::NewLine(); - - ImGui::InputFloat("Min X", &bw.getobj(selected_obj_ptr->id)->child.grab1.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Min Y", &bw.getobj(selected_obj_ptr->id)->child.grab1.y, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Max X", &bw.getobj(selected_obj_ptr->id)->child.grab2.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Max Y", &bw.getobj(selected_obj_ptr->id)->child.grab2.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &bw.getobj(selected_obj_ptr->id)->child.locked); - - if (ImGui::Button("Open")) - { - bw.getobj(selected_obj_ptr->id)->child.open = true; - bw.open_child = true; - bw.open_child_id = selected_obj_ptr->id; - } - if (ImGui::Button("Close")) - { - bw.getobj(selected_obj_ptr->id)->child.open = false; - bw.open_child = false; - bw.open_child_id = -1; - } - ImGui::NewLine(); - - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) - { - if (bw.open_child_id == selected_obj_ptr->id) - { - bw.open_child = false; - bw.open_child_id = -1; - } - bw.getobj(selected_obj_ptr->id)->child.open = false; - selected_obj_ptr->del(); - if (selected_index != 0) selected_index -= 1; - } - } - if (selected_obj_ptr->type == "sameline") - { - - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); - ImGui::NewLine(); - - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) - { - selected_obj_ptr->del(); - if (selected_index != 0) selected_index -= 1; - } - } - if (selected_obj_ptr->type == "newline") - { - - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); - ImGui::NewLine(); - - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) - { - selected_obj_ptr->del(); - if (selected_index != 0) selected_index -= 1; - } - } - if (selected_obj_ptr->type == "separator") - { - - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); - ImGui::NewLine(); - - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) - { - selected_obj_ptr->del(); - if (selected_index != 0) selected_index -= 1; - } - } - if (selected_obj_ptr->type == "progressbar") - { - - if (selected_obj_ptr->ischildwidget) ImGui::Text("Child Widget: True"); - else ImGui::Text("Child Widget: False"); - ImGui::NewLine(); - - ImGui::Checkbox("Center Horizontally", &selected_obj_ptr->center_h); - ImGui::InputFloat("Position X", &selected_obj_ptr->pos.x, 1.0f, 10.0f, "%.3f"); - ImGui::InputFloat("Position Y", &selected_obj_ptr->pos.y, 1.0f, 10.0f, "%.3f"); - ImGui::Checkbox("Drag Locked", &selected_obj_ptr->locked); - - if ((ImGui::Button("Delete")) || (ImGui::IsKeyPressed(ImGuiKey_Delete))) - { - selected_obj_ptr->del(); - if (selected_index != 0) selected_index -= 1; - } - } - selected_obj_ptr->propinit = true; - prev_selected_obj_id = selected_obj_ptr->id; } } } - ImGui::End(); -} \ No newline at end of file +} diff --git a/src/sources/ims_gui_sidebar.cpp b/src/sources/ims_gui_sidebar.cpp index cf4b127..8da798f 100644 --- a/src/sources/ims_gui_sidebar.cpp +++ b/src/sources/ims_gui_sidebar.cpp @@ -6,133 +6,133 @@ void ImStudio::GUI::ShowSidebar() ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); ImGui::SetNextWindowSize(sb_S); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4.00f, 5.00f)); - ImGui::Begin("Sidebar", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); + ImGui::Begin("侧边栏", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); - /// content-sidebar + /// 侧边栏内容 { - ImGui::TextDisabled("NOTE"); + ImGui::TextDisabled("注意"); ImGui::SameLine(); utils::HelpMarker - ("THESE ARE NOT THE ONLY WIDGETS IMGUI PROVIDES!\n" - "You can find out more in the Dear ImGui Demo " - "(Tools > Demo Window) and imgui/imgui_demo.cpp"); + ("这些不是 ImGui 提供的唯一控件!\n" + "你可以在 Dear ImGui 演示中找到更多内容 " + "(工具 > 演示窗口)和 imgui/imgui_demo.cpp"); ImGui::Separator(); - //ANCHOR SIDEBAR.PRIMITIVES - ImGui::Text("Primitives"); + // 锚点 SIDEBAR.PRIMITIVES + ImGui::Text("基础组件"); ImGui::Separator(); - if (ImGui::Button("Window")) + if (ImGui::Button("窗口")) { bw.state = true; } - if (ImGui::Button("Button")) + if (ImGui::Button("按钮")) bw.create("button"); - if (ImGui::Button("Radio Button")) + if (ImGui::Button("单选按钮")) bw.create("radio"); - if (ImGui::Button("Checkbox")) + if (ImGui::Button("复选框")) bw.create("checkbox"); - if (ImGui::Button("Text")) + if (ImGui::Button("文本")) bw.create("text"); - if (ImGui::Button("Bullet")) + if (ImGui::Button("项目符号")) bw.create("bullet"); - if (ImGui::Button("Arrow")) + if (ImGui::Button("箭头")) bw.create("arrow"); - if (ImGui::Button("Combo")) + if (ImGui::Button("下拉菜单")) bw.create("combo"); - if (ImGui::Button("Listbox")) + if (ImGui::Button("列表框")) bw.create("listbox"); ImGui::Separator(); - //ANCHOR SIDEBAR.DATAINPUTS - ImGui::Text("Data Inputs"); + // 锚点 SIDEBAR.DATAINPUTS + ImGui::Text("数据输入"); ImGui::Separator(); - if (ImGui::Button("Input Text")) + if (ImGui::Button("文本输入")) bw.create("textinput"); - if (ImGui::Button("Input Int")) + if (ImGui::Button("整数输入")) bw.create("inputint"); ImGui::SameLine(); utils::HelpMarker - ("You can apply arithmetic operators +,*,/ on numerical values.\n" - " e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\n" - "Use +- to subtract."); + ("你可以对数值应用算术运算符 +,*,/。\n" + " 例如:[ 100 ],输入 '*2',结果变为 [ 200 ]\n" + "使用 +- 进行减法。"); - if (ImGui::Button("Input Float")) + if (ImGui::Button("浮点数输入")) bw.create("inputfloat"); - if (ImGui::Button("Input Double")) + if (ImGui::Button("双精度输入")) bw.create("inputdouble"); - if (ImGui::Button("Input Scientific")) + if (ImGui::Button("科学计数法输入")) bw.create("inputscientific"); ImGui::SameLine(); utils::HelpMarker - ("You can input value using the scientific notation,\n" - " e.g. \"1e+8\" becomes \"100000000\"."); + ("你可以使用科学计数法输入值,\n" + " 例如:\"1e+8\" 变为 \"100000000\"。"); - if (ImGui::Button("Input Float3")) + if (ImGui::Button("三维向量输入")) bw.create("inputfloat3"); - if (ImGui::Button("Drag Int")) + if (ImGui::Button("拖动整数")) bw.create("dragint"); ImGui::SameLine(); utils::HelpMarker - ("Click and drag to edit value.\n" - "Hold SHIFT/ALT for faster/slower edit.\n" - "Double-click or CTRL+click to input value."); + ("点击并拖动以编辑值。\n" + "按住 SHIFT/ALT 可加快/减慢编辑速度。\n" + "双击或 CTRL+点击以输入值。"); - if (ImGui::Button("Drag Int %")) + if (ImGui::Button("拖动整数百分比")) bw.create("dragint100"); - if (ImGui::Button("Drag Float")) + if (ImGui::Button("拖动浮点数")) bw.create("dragfloat"); - if (ImGui::Button("Drag Float Small")) + if (ImGui::Button("拖动小浮点数")) bw.create("dragfloatsmall"); - if (ImGui::Button("Slider Int")) + if (ImGui::Button("滑块整数")) bw.create("sliderint"); - ImGui::SameLine(); utils::HelpMarker("CTRL+click to input value."); + ImGui::SameLine(); utils::HelpMarker("CTRL+点击以输入值。"); - if (ImGui::Button("Slider Float")) + if (ImGui::Button("滑块浮点数")) bw.create("sliderfloat"); - if (ImGui::Button("Slider Float Log")) + if (ImGui::Button("对数滑块")) bw.create("sliderfloatlog"); - if (ImGui::Button("Slider Angle")) + if (ImGui::Button("角度滑块")) bw.create("sliderangle"); ImGui::Separator(); - ImGui::Text("Color Pickers"); + ImGui::Text("颜色选择器"); ImGui::Separator(); - if (ImGui::Button("Color 1")) + if (ImGui::Button("颜色 1")) bw.create("color1"); - if (ImGui::Button("Color 2")) + if (ImGui::Button("颜色 2")) bw.create("color2"); - if (ImGui::Button("Color 3")) + if (ImGui::Button("颜色 3")) bw.create("color3"); ImGui::Separator(); - //ANCHOR SIDEBAR.OTHERS - ImGui::Text("Misc"); + // 锚点 SIDEBAR.OTHERS + ImGui::Text("其他"); ImGui::Separator(); if (bw.open_child) @@ -151,8 +151,8 @@ void ImStudio::GUI::ShowSidebar() } } ImGui::SameLine(); utils::HelpMarker - ("Green = Open (Ready to add items). Calling EndChild will close it, " - "and you can't add items to it unless you manually re-open it."); + ("绿色 = 打开(准备添加项目)。调用 EndChild 将关闭它," + " 除非你手动重新打开,否则无法向其添加项目。"); if (ImGui::Button("EndChild")) { @@ -171,31 +171,31 @@ void ImStudio::GUI::ShowSidebar() } ImGui::EndDisabled(); ImGui::SameLine(); utils::HelpMarker - ("Groups are not a feature of ImStudio, but you can probably use " - "a child (without borders) to reproduce similar behavior."); + ("组不是 ImStudio 的功能,但你可以使用" + " 子项(无边框)来重现类似行为。"); - if (ImGui::Button("<< Same Line")) + if (ImGui::Button("<< 同一行")) { bw.create("sameline"); } - if (ImGui::Button("New Line")) + if (ImGui::Button("新行")) { bw.create("newline"); } - if (ImGui::Button("Separator")) + if (ImGui::Button("分隔线")) { bw.create("separator"); } - if (ImGui::Button("Progress Bar")) + if (ImGui::Button("进度条")) { bw.create("progressbar"); } ImGui::Separator(); - ImGui::Checkbox("Static Mode", &bw.staticlayout); + ImGui::Checkbox("静态模式", &bw.staticlayout); if ((ImGui::GetIO().KeyAlt) && (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_F4)))) { @@ -206,4 +206,4 @@ void ImStudio::GUI::ShowSidebar() ImGui::End(); ImGui::PopStyleVar(1); -} \ No newline at end of file +} diff --git a/src/sources/ims_gui_viewport.cpp b/src/sources/ims_gui_viewport.cpp index 020edcb..72007f0 100644 --- a/src/sources/ims_gui_viewport.cpp +++ b/src/sources/ims_gui_viewport.cpp @@ -4,25 +4,25 @@ void ImStudio::GUI::ShowViewport() { ImGui::SetNextWindowPos(vp_P); ImGui::SetNextWindowSize(vp_S); - ImGui::Begin("Viewport", NULL, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBringToFrontOnFocus); + ImGui::Begin("视口", NULL, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBringToFrontOnFocus); - /// content-viewport + /// 视口内容 { utils::DrawGrid(); - ImGui::Text("Buffer Window: %gx%g", bw.size.x, bw.size.y); + ImGui::Text("缓冲区窗口: %gx%g", bw.size.x, bw.size.y); ImGui::SameLine(); - utils::TextCentered("Make sure to lock widgets before interacting with them.", 1); - ImGui::Text("Cursor: %gx%g", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); - ImGui::Text("Objects: %d", static_cast(bw.objects.size())); - if (!bw.objects.empty()) ImGui::Text("Selected: %s", bw.getbaseobj(bw.selected_obj_id)->identifier.c_str()); - ImGui::Text("Performance: %.1f FPS", ImGui::GetIO().Framerate); - utils::HelpMarker("Hotkeys:\nAlt + M - \"Add\" context menu\n"\ - "Left/Right Arrow - Cycle object selection\n"\ - "Ctrl + E - Focus on property field\nDelete - Delete selected object"); + utils::TextCentered("在与控件交互之前,请确保锁定它们。", 1); + ImGui::Text("光标: %gx%g", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); + ImGui::Text("对象: %d", static_cast(bw.objects.size())); + if (!bw.objects.empty()) ImGui::Text("选中: %s", bw.getbaseobj(bw.selected_obj_id)->identifier.c_str()); + ImGui::Text("性能: %.1f FPS", ImGui::GetIO().Framerate); + utils::HelpMarker("热键:\nAlt + M - \"添加\" 上下文菜单\n" + "左右箭头 - 循环选择对象\n" + "Ctrl + E - 聚焦到属性字段\nDelete - 删除选中对象"); bw.drawall(); } ImGui::End(); -} \ No newline at end of file +} diff --git a/src/utils/ims_utils.cpp b/src/utils/ims_utils.cpp index c63b6d4..4b2a853 100644 --- a/src/utils/ims_utils.cpp +++ b/src/utils/ims_utils.cpp @@ -79,7 +79,7 @@ void utils::DrawGrid() void utils::ShowStyleEditorWindow(bool *child_sty) { ImGui::SetNextWindowSize(ImVec2(500,700), ImGuiCond_Once); - if (ImGui::Begin("Style Editor", child_sty, ImGuiWindowFlags_NoCollapse)) + if (ImGui::Begin("样式编辑器", child_sty, ImGuiWindowFlags_NoCollapse)) { ImGui::ShowStyleEditor(); ImGui::End(); @@ -89,7 +89,7 @@ void utils::ShowStyleEditorWindow(bool *child_sty) void utils::ShowColorExportWindow(bool *child_colexp) { - if (ImGui::Begin("Color Export", child_colexp, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse)) + if (ImGui::Begin("颜色导出", child_colexp, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse)) { static ImVec4 color = ImVec4(114.0f / 255.0f, 144.0f / 255.0f, 154.0f / 255.0f, 200.0f / 255.0f); @@ -104,21 +104,21 @@ void utils::ShowColorExportWindow(bool *child_colexp) : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions); - ImGui::Text("Color widget:"); + ImGui::Text("颜色控件:"); ImGui::SameLine(); - HelpMarker("Click on the color square to open a color picker.\n" - "CTRL+click on individual component to input value.\n"); - ImGui::ColorEdit3("MyColor##1", (float *)&color, misc_flags); + HelpMarker("点击颜色方块打开颜色选择器。\n" + "按住 CTRL 点击单个组件输入值。\n"); + ImGui::ColorEdit3("我的颜色##1", (float *)&color, misc_flags); ImGui::SameLine(); - HelpMarker("Right click me to export colors with your preferred format."); + HelpMarker("右键点击我以你喜欢的格式导出颜色。"); - ImGui::Text("Color widget HSV with Alpha:"); - ImGui::ColorEdit4("MyColor##2", (float *)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags); + ImGui::Text("带 Alpha 的 HSV 颜色控件:"); + ImGui::ColorEdit4("我的颜色##2", (float *)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags); - ImGui::Text("Color widget with Float Display:"); - ImGui::ColorEdit4("MyColor##2f", (float *)&color, ImGuiColorEditFlags_Float | misc_flags); + ImGui::Text("带浮点显示的颜色控件:"); + ImGui::ColorEdit4("我的颜色##2f", (float *)&color, ImGuiColorEditFlags_Float | misc_flags); - ImGui::Text("Color picker:"); + ImGui::Text("颜色选择器:"); static bool alpha = true; static bool alpha_bar = true; static bool side_preview = true; @@ -126,18 +126,16 @@ void utils::ShowColorExportWindow(bool *child_colexp) static ImVec4 ref_color_v(1.0f, 0.0f, 1.0f, 0.5f); static int display_mode = 0; static int picker_mode = 2; - ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0"); + ImGui::Combo("显示模式", &display_mode, "自动/当前\0无\0仅 RGB\0仅 HSV\0仅 Hex\0"); ImGui::SameLine(); - HelpMarker("ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, " - "but the user can change it with a right-click.\n\nColorPicker defaults to displaying RGB+HSV+Hex " - "if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions()."); - ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + HelpMarker("如果你不指定显示模式,ColorEdit 默认显示 RGB 输入,但用户可以通过右键更改。\n\n如果你不指定显示模式,ColorPicker 默认显示 RGB+HSV+Hex。\n\n你可以使用 SetColorEditOptions() 更改默认值。"); + ImGui::Combo("选择器模式", &picker_mode, "自动/当前\0色相条 + SV 矩形\0色相轮 + SV 三角形\0"); ImGui::SameLine(); - HelpMarker("User can right-click the picker to change mode."); + HelpMarker("用户可以右键点击选择器更改模式。"); ImGuiColorEditFlags flags = misc_flags; if (!alpha) flags |= - ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() + ImGuiColorEditFlags_NoAlpha; // 如果你调用 ColorPicker3() 而不是 ColorPicker4(),这是默认的 if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar; if (!side_preview) @@ -147,43 +145,43 @@ void utils::ShowColorExportWindow(bool *child_colexp) if (picker_mode == 2) flags |= ImGuiColorEditFlags_PickerHueWheel; if (display_mode == 1) - flags |= ImGuiColorEditFlags_NoInputs; // Disable all RGB/HSV/Hex displays + flags |= ImGuiColorEditFlags_NoInputs; // 禁用所有 RGB/HSV/Hex 显示 if (display_mode == 2) - flags |= ImGuiColorEditFlags_DisplayRGB; // Override display mode + flags |= ImGuiColorEditFlags_DisplayRGB; // 覆盖显示模式 if (display_mode == 3) flags |= ImGuiColorEditFlags_DisplayHSV; if (display_mode == 4) flags |= ImGuiColorEditFlags_DisplayHex; - ImGui::ColorPicker4("MyColor##4", (float *)&color, flags, ref_color ? &ref_color_v.x : NULL); + ImGui::ColorPicker4("我的颜色##4", (float *)&color, flags, ref_color ? &ref_color_v.x : NULL); - ImGui::Text("Set defaults in code:"); + ImGui::Text("在代码中设置默认值:"); ImGui::SameLine(); - HelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\n" - "We don't have Push/Pop functions because you can force options on a per-widget basis if needed," - "and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid" - "encouraging you to persistently save values that aren't forward-compatible."); - if (ImGui::Button("Default: Uint8 + HSV + Hue Bar")) + HelpMarker("SetColorEditOptions() 旨在允许你设置启动时的默认值。\n" + "我们没有 Push/Pop 函数,因为如果需要,你可以在每个控件的基础上强制选项," + "用户可以通过选项菜单更改非强制选项。\n我们没有 getter 是为了避免" + "鼓励你持久保存不向前兼容的值。"); + if (ImGui::Button("默认:Uint8 + HSV + 色相条")) ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_PickerHueBar); - if (ImGui::Button("Default: Float + HDR + Hue Wheel")) + if (ImGui::Button("默认:Float + HDR + 色相轮")) ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel); - // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0) - static ImVec4 color_hsv(0.23f, 1.0f, 1.0f, 1.0f); // Stored as HSV! + // HSV 编码支持(避免 RGB<>HSV 往返和 S==0 或 V==0 时的奇点) + static ImVec4 color_hsv(0.23f, 1.0f, 1.0f, 1.0f); // 存储为 HSV! ImGui::Spacing(); - ImGui::Text("HSV encoded colors"); + ImGui::Text("HSV 编码颜色"); ImGui::SameLine(); HelpMarker( - "By default, colors are given to ColorEdit and ColorPicker in RGB, but ImGuiColorEditFlags_InputHSV" - "allows you to store colors as HSV and pass them to ColorEdit and ColorPicker as HSV. This comes with the" - "added benefit that you can manipulate hue values with the picker even when saturation or value are zero."); - ImGui::Text("Color widget with InputHSV:"); - ImGui::ColorEdit4("HSV shown as RGB##1", (float *)&color_hsv, + "默认情况下,颜色以 RGB 形式提供给 ColorEdit 和 ColorPicker,但 ImGuiColorEditFlags_InputHSV" + "允许你将颜色存储为 HSV 并以 HSV 形式传递给 ColorEdit 和 ColorPicker。这带来了" + "额外的好处,即使在饱和度或值为零时,你也可以使用选择器操作色相值。"); + ImGui::Text("带 InputHSV 的颜色控件:"); + ImGui::ColorEdit4("显示为 RGB 的 HSV##1", (float *)&color_hsv, ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float); - ImGui::ColorEdit4("HSV shown as HSV##1", (float *)&color_hsv, + ImGui::ColorEdit4("显示为 HSV 的 HSV##1", (float *)&color_hsv, ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float); - ImGui::DragFloat4("Raw HSV values", (float *)&color_hsv, 0.01f, 0.0f, 1.0f); + ImGui::DragFloat4("原始 HSV 值", (float *)&color_hsv, 0.01f, 0.0f, 1.0f); ImGui::End(); } } @@ -204,42 +202,42 @@ void utils::ShowResourcesWindow(bool *child_resources) ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(5.00f, 3.00f)); ImGui::SetNextWindowSize(ImVec2(500,600), ImGuiCond_Once); #ifdef __EMSCRIPTEN__ - if (ImGui::Begin("Resources", child_resources, ImGuiWindowFlags_NoCollapse)) + if (ImGui::Begin("资源", child_resources, ImGuiWindowFlags_NoCollapse)) { - ImGui::TextWrapped("Some useful resources for developers using Dear ImGui."); - ImGui::TextWrapped("Keep in mind that the most helpful resource will always be the Dear ImGui Demo (Tools > Demo Window) and imgui/imgui_demo.cpp."); + ImGui::TextWrapped("为使用 Dear ImGui 的开发者提供的一些有用资源。"); + ImGui::TextWrapped("请记住,最有帮助的资源永远是 Dear ImGui 演示(工具 > 演示窗口)和 imgui/imgui_demo.cpp。"); ImGui::Spacing(); ImGui::CollapsingHeader("Dear ImGui", ImGuiTreeNodeFlags_DefaultOpen); { - ImGui::Bullet(); if(ImGui::SmallButton("Dear ImGui Source: github.com/ocornut/imgui")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui");} + ImGui::Bullet(); if(ImGui::SmallButton("Dear ImGui 源码:github.com/ocornut/imgui")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui");} ImGui::Bullet(); if(ImGui::SmallButton("Issues")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues");} ImGui::Bullet(); if(ImGui::SmallButton("Wiki")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/wiki");} - ImGui::Bullet(); if(ImGui::SmallButton("Manual")) {HyperlinkHelper::OpenUrl("https://pthom.github.io/imgui_manual_online");} + ImGui::Bullet(); if(ImGui::SmallButton("手册")) {HyperlinkHelper::OpenUrl("https://pthom.github.io/imgui_manual_online");} ImGui::Bullet(); if(ImGui::SmallButton("discourse.dearimgui.org")) {HyperlinkHelper::OpenUrl("https://discourse.dearimgui.org");} - ImGui::Bullet(); if(ImGui::SmallButton("Discussions")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/discussions");} - ImGui::Bullet(); if(ImGui::SmallButton("How to open an Issue or Pull Request #2261")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/2261");} - ImGui::Bullet(); if(ImGui::SmallButton("Docking")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/wiki/Docking");} - ImGui::Bullet(); if(ImGui::SmallButton("Gallery")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/4451");} - ImGui::Bullet(); if(ImGui::SmallButton("Software using DearImGui")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui");} + ImGui::Bullet(); if(ImGui::SmallButton("讨论")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/discussions");} + ImGui::Bullet(); if(ImGui::SmallButton("如何打开 Issue 或 Pull Request #2261")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/2261");} + ImGui::Bullet(); if(ImGui::SmallButton("停靠")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/wiki/Docking");} + ImGui::Bullet(); if(ImGui::SmallButton("图库")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/4451");} + ImGui::Bullet(); if(ImGui::SmallButton("使用 DearImGui 的软件")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui");} } ImGui::Spacing(); ImGui::PushStyleColor(ImGuiCol_Header, RainbowCol()); - ImGui::CollapsingHeader("Cool Addons", ImGuiTreeNodeFlags_DefaultOpen); + ImGui::CollapsingHeader("酷插件", ImGuiTreeNodeFlags_DefaultOpen); { ImGui::Bullet(); if(ImGui::SmallButton("HankiDesign/awesome-dear-imgui")) {HyperlinkHelper::OpenUrl("https://github.com/HankiDesign/awesome-dear-imgui");} ImGui::Bullet(); if(ImGui::SmallButton("epezent/implot")) {HyperlinkHelper::OpenUrl("https://github.com/epezent/implot");} ImGui::Bullet(); if(ImGui::SmallButton("soufianekhiat/DearWidgets")) {HyperlinkHelper::OpenUrl("https://github.com/soufianekhiat/DearWidgets");} ImGui::Bullet(); if(ImGui::SmallButton("dfranx/ImFileDialog")) {HyperlinkHelper::OpenUrl("https://github.com/dfranx/ImFileDialog");} - ImGui::Bullet(); if(ImGui::SmallButton("Toggle Button")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/1537#issuecomment-355569554");} - ImGui::Bullet(); if(ImGui::SmallButton("Knob")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/942#issuecomment-268369298");} + ImGui::Bullet(); if(ImGui::SmallButton("切换按钮")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/1537#issuecomment-355569554");} + ImGui::Bullet(); if(ImGui::SmallButton("旋钮")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/issues/942#issuecomment-268369298");} ImGui::Bullet(); if(ImGui::SmallButton("Nelarius/imnodes")) {HyperlinkHelper::OpenUrl("https://github.com/Nelarius/imnodes");} ImGui::Bullet(); if(ImGui::SmallButton("thedmd/imgui-node-editor")) {HyperlinkHelper::OpenUrl("https://github.com/thedmd/imgui-node-editor");} ImGui::Bullet(); if(ImGui::SmallButton("aiekick/ImGuiFontStudio")) {HyperlinkHelper::OpenUrl("https://github.com/aiekick/ImGuiFontStudio");} - ImGui::Bullet(); if(ImGui::SmallButton("Add extra keys #2625")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/pull/2625");} + ImGui::Bullet(); if(ImGui::SmallButton("添加额外键 #2625")) {HyperlinkHelper::OpenUrl("https://github.com/ocornut/imgui/pull/2625");} } ImGui::PopStyleColor(1); ImGui::Spacing(); - ImGui::CollapsingHeader("Frameworks", ImGuiTreeNodeFlags_DefaultOpen); + ImGui::CollapsingHeader("框架", ImGuiTreeNodeFlags_DefaultOpen); { ImGui::Bullet(); if(ImGui::SmallButton("pthom/hello_imgui")) {HyperlinkHelper::OpenUrl("https://github.com/pthom/hello_imgui");} ImGui::Bullet(); if(ImGui::SmallButton("JamesBoer/ImFrame")) {HyperlinkHelper::OpenUrl("https://github.com/JamesBoer/ImFrame");} @@ -249,45 +247,45 @@ void utils::ShowResourcesWindow(bool *child_resources) ImGui::End(); } #else - if (ImGui::Begin("Resources", child_resources, ImGuiWindowFlags_NoCollapse)) + if (ImGui::Begin("资源", child_resources, ImGuiWindowFlags_NoCollapse)) { - ImGui::TextWrapped("Some useful resources for developers using Dear ImGui."); - ImGui::TextWrapped("Keep in mind that the most helpful resource will always be the Dear ImGui Demo (Tools > Demo Window) and imgui/imgui_demo.cpp."); + ImGui::TextWrapped("为使用 Dear ImGui 的开发者提供的一些有用资源。"); + ImGui::TextWrapped("请记住,最有帮助的资源永远是 Dear ImGui 演示(工具 > 演示窗口)和 imgui/imgui_demo.cpp。"); ImGui::Spacing(); - ImGui::TextWrapped("Click = Copy to clipboard"); + ImGui::TextWrapped("点击 = 复制到剪贴板"); ImGui::Spacing(); ImGui::CollapsingHeader("Dear ImGui", ImGuiTreeNodeFlags_DefaultOpen); { - ImGui::Bullet(); if(ImGui::SmallButton("Dear ImGui Source: github.com/ocornut/imgui")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("Dear ImGui 源码:github.com/ocornut/imgui")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("Issues")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("Wiki")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/wiki"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Manual")) {ImGui::LogToClipboard(); ImGui::LogText("https://pthom.github.io/imgui_manual_online"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("手册")) {ImGui::LogToClipboard(); ImGui::LogText("https://pthom.github.io/imgui_manual_online"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("discourse.dearimgui.org")) {ImGui::LogToClipboard(); ImGui::LogText("https://discourse.dearimgui.org/"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Discussions")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/discussions"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("How to open an Issue or Pull Request #2261")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/2261"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Docking")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/wiki/Docking"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Gallery")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/4451"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Software using DearImGui")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("讨论")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/discussions"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("如何打开 Issue 或 Pull Request #2261")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/2261"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("停靠")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/wiki/Docking"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("图库")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/4451"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("使用 DearImGui 的软件")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui"); ImGui::LogFinish();} } ImGui::Spacing(); ImGui::PushStyleColor(ImGuiCol_Header, RainbowCol()); - ImGui::CollapsingHeader("Cool Addons", ImGuiTreeNodeFlags_DefaultOpen); + ImGui::CollapsingHeader("酷插件", ImGuiTreeNodeFlags_DefaultOpen); { ImGui::Bullet(); if(ImGui::SmallButton("HankiDesign/awesome-dear-imgui")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/HankiDesign/awesome-dear-imgui"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("issues/useful widgets")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues?q=label%%3A\"useful+widgets\""); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("epezent/implot")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/epezent/implot"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("soufianekhiat/DearWidgets")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/soufianekhiat/DearWidgets"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("dfranx/ImFileDialog")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/dfranx/ImFileDialog"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Toggle Button")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/1537#issuecomment-355569554"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Knob")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/942#issuecomment-268369298"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("切换按钮")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/1537#issuecomment-355569554"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("旋钮")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/issues/942#issuecomment-268369298"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("Nelarius/imnodes")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/Nelarius/imnodes"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("thedmd/imgui-node-editor")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/thedmd/imgui-node-editor"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("aiekick/ImGuiFontStudio")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/aiekick/ImGuiFontStudio"); ImGui::LogFinish();} - ImGui::Bullet(); if(ImGui::SmallButton("Add extra keys #2625")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/pull/2625"); ImGui::LogFinish();} + ImGui::Bullet(); if(ImGui::SmallButton("添加额外键 #2625")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/ocornut/imgui/pull/2625"); ImGui::LogFinish();} } ImGui::PopStyleColor(1); ImGui::Spacing(); - ImGui::CollapsingHeader("Frameworks", ImGuiTreeNodeFlags_DefaultOpen); + ImGui::CollapsingHeader("框架", ImGuiTreeNodeFlags_DefaultOpen); { ImGui::Bullet(); if(ImGui::SmallButton("pthom/hello_imgui")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/pthom/hello_imgui"); ImGui::LogFinish();} ImGui::Bullet(); if(ImGui::SmallButton("JamesBoer/ImFrame")) {ImGui::LogToClipboard(); ImGui::LogText("https://github.com/JamesBoer/ImFrame"); ImGui::LogFinish();} @@ -308,20 +306,21 @@ void utils::ShowAboutWindow(bool *child_about) if (hash.length() > 7) hash = hash.substr(0, 7); - ImGui::OpenPopup("About"); + ImGui::OpenPopup("关于"); ImVec2 center = ImGui::GetMainViewport()->GetCenter(); ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f)); - if (ImGui::BeginPopupModal("About", NULL, ImGuiWindowFlags_AlwaysAutoResize)) + if (ImGui::BeginPopupModal("关于", NULL, ImGuiWindowFlags_AlwaysAutoResize)) { TextCentered("ImStudio"); ImGui::Separator(); - ImGui::Text("Version: %s (%s)", ver.c_str(), hash.c_str()); - ImGui::Text("Source: Raais/ImStudio"); - ImGui::Text("ImGui: 18700 (c71a50d)"); - ImGui::Text("Fmt: 8.0.1 (d141cdb)"); + ImGui::Text("版本:%s (%s)", ver.c_str(), hash.c_str()); + ImGui::Text("源码:Raais/ImStudio"); + ImGui::Text("汉化/CN:noob-xiaoyu/ImStudio-CN"); + ImGui::Text("ImGui:18700 (c71a50d)"); + ImGui::Text("Fmt:8.0.1 (d141cdb)"); ImGui::Separator(); - if (ImGui::Button("Back")) { ImGui::CloseCurrentPopup(); *child_about = false; } + if (ImGui::Button("返回")) { ImGui::CloseCurrentPopup(); *child_about = false; } ImGui::EndPopup(); } @@ -375,4 +374,4 @@ float utils::CenterHorizontal() auto itemWidth = ImGui::GetItemRectSize().x; float PosX = ((windowWidth - itemWidth) * 0.5f); return PosX; -} +} \ No newline at end of file From 3e5405a872f86022d5ff72ead68f1b6d475a1e4a Mon Sep 17 00:00:00 2001 From: xiaoyu_jie <1372448375@qq.com> Date: Sat, 18 Apr 2026 16:51:53 +0800 Subject: [PATCH 2/2] Update windows.yml --- .github/workflows/windows.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 14bbe92..169076b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -41,3 +41,5 @@ jobs: name: Windows Installer path: | build/packages/*.* + +