38 log(LogLevel::INFO,
"# %s", commandLine.c_str());
40 m_history.push_back(commandLine);
43 auto tokens = splitString(commandLine);
44 if (tokens.empty())
return;
46 std::string cmdName = tokens[0];
47 if (m_commands.find(cmdName) != m_commands.end()) {
48 tokens.erase(tokens.begin());
49 m_commands[cmdName](tokens);
51 log(LogLevel::ERROR,
"Unknown command: '%s'", cmdName.c_str());
98 ImGui::SetNextWindowPos(ImVec2(0, 0));
99 ImGui::SetNextWindowSize(ImVec2(ImGui::GetIO().DisplaySize.x, 350));
100 ImGui::SetNextWindowBgAlpha(0.85f);
101 ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
104 ImGuiWindowFlags flags = isEditorMode ? 0 : (ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings);
106 if (ImGui::Begin(
"Console", p_open, flags)) {
108 const float footerHeight = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing();
109 ImGui::BeginChild(
"ScrollingRegion", ImVec2(0, -footerHeight),
false, ImGuiWindowFlags_HorizontalScrollbar);
112 std::lock_guard<std::mutex> lock(m_mutex);
113 for (
const auto& item : m_logs) {
114 ImVec4 color = ImVec4(1,1,1,1);
115 if (item.level == LogLevel::ERROR || item.level == LogLevel::CRITICAL) color = ImVec4(1.0f, 0.4f, 0.4f, 1.0f);
116 else if (item.level == LogLevel::WARNING) color = ImVec4(1.0f, 0.8f, 0.0f, 1.0f);
118 ImGui::PushStyleColor(ImGuiCol_Text, color);
119 ImGui::TextUnformatted(item.text.c_str());
120 ImGui::PopStyleColor();
124 if (m_scrollToBottom || (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()))
125 ImGui::SetScrollHereY(1.0f);
126 m_scrollToBottom =
false;
130 bool reclaimFocus =
false;
132 ImGuiInputTextFlags inputFlags = ImGuiInputTextFlags_EnterReturnsTrue |
133 ImGuiInputTextFlags_CallbackHistory |
134 ImGuiInputTextFlags_CallbackCompletion;
136 if (ImGui::InputText(
"##ConsoleInput", m_inputBuf, IM_ARRAYSIZE(m_inputBuf), inputFlags, &TextEditCallbackStub, (
void*)
this)) {
138 strcpy(m_inputBuf,
"");
142 ImGui::SetItemDefaultFocus();
143 if (reclaimFocus || (!isEditorMode && ImGui::IsWindowAppearing()))
144 ImGui::SetKeyboardFocusHere(-1);
148 if (!isEditorMode) ImGui::PopStyleVar();