summaryrefslogtreecommitdiffhomepage
path: root/editor
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-11-10 11:40:30 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-11-10 11:40:30 +0100
commit2a59c1b43f0818e0f8e8ab4d11d9046426148338 (patch)
tree9da59a0c707852917c14b64bd519ceb236fb2e45 /editor
parent86c1bc8b9b5d8ad5fbfef85f34658c1da73baa1f (diff)
editor, main: add fmtlib dependency
snprintf in imgui code is slow.
Diffstat (limited to 'editor')
-rw-r--r--editor/CMakeLists.txt2
-rw-r--r--editor/imgui-raii.hpp15
-rw-r--r--editor/imgui.cpp14
3 files changed, 21 insertions, 10 deletions
diff --git a/editor/CMakeLists.txt b/editor/CMakeLists.txt
index 0ce1773a..77a2a73e 100644
--- a/editor/CMakeLists.txt
+++ b/editor/CMakeLists.txt
@@ -9,7 +9,7 @@ else()
set_property(SOURCE "${res}" APPEND PROPERTY COMPILE_OPTIONS "-w")
endif()
-link_libraries(MagnumIntegration::ImGui)
+link_libraries(MagnumIntegration::ImGui fmt::fmt)
add_executable(${self} "${sources}" "${res}" "../loader/loader-impl.cpp")
target_link_libraries(${self} ${PROJECT_NAME}-main)
diff --git a/editor/imgui-raii.hpp b/editor/imgui-raii.hpp
index ab317095..5920e7d9 100644
--- a/editor/imgui-raii.hpp
+++ b/editor/imgui-raii.hpp
@@ -2,9 +2,8 @@
#include <Corrade/Containers/StringView.h>
#include <Magnum/Math/Color.h>
-#ifndef __CLION_IDE__zz
#include <imgui.h>
-#endif
+#include <imgui_internal.h>
namespace floormat::imgui {
@@ -82,4 +81,16 @@ struct raii_wrapper final
return {[]{ ImGui::PopStyleColor(); }};
}
+[[maybe_unused]] static inline void text(const char* str, std::size_t len, ImGuiTextFlags_ flags = ImGuiTextFlags_NoWidthForLargeClippedText)
+{
+ ImGui::TextEx(str, str + len, flags);
+}
+
+template<std::size_t N>
+[[maybe_unused]] static inline void text(const char (&buf)[N], ImGuiTextFlags_ flags = ImGuiTextFlags_NoWidthForLargeClippedText)
+{
+ static_assert(N > 0);
+ ImGui::TextEx(buf, buf + N - 1, flags);
+}
+
} // namespace floormat::imgui
diff --git a/editor/imgui.cpp b/editor/imgui.cpp
index 84827ba3..b29c4f6c 100644
--- a/editor/imgui.cpp
+++ b/editor/imgui.cpp
@@ -1,6 +1,7 @@
#include "app.hpp"
#include "floormat/main.hpp"
#include "src/tile-atlas.hpp"
+#include "compat/format.hpp"
#include <Magnum/GL/Renderer.h>
#include "imgui-raii.hpp"
@@ -104,11 +105,11 @@ static void draw_editor_pane_atlas(tile_editor& ed, StringView name, const std::
if (ed.is_atlas_selected(atlas))
{
ImGui::SameLine();
- ImGui::Text(" (selected)");
+ text(" (selected)");
}
- std::snprintf(buf, sizeof(buf), "%zu", N);
+ const auto len = snformat(buf, FMT_COMPILE("{:d}"), N);
ImGui::SameLine(window_width - ImGui::CalcTextSize(buf).x - style.FramePadding.x - 4);
- ImGui::Text("%s", buf);
+ text(buf, len);
};
if (const auto flags = ImGuiTreeNodeFlags_(ImGuiTreeNodeFlags_SpanFullWidth | ImGuiTreeNodeFlags_Framed);
auto b = tree_node(name.data(), flags))
@@ -123,7 +124,6 @@ static void draw_editor_pane_atlas(tile_editor& ed, StringView name, const std::
for (std::size_t i = 0; i < N; i++)
{
const bool selected = ed.is_tile_selected(atlas, i);
-
if (i > 0 && i % per_row == 0)
ImGui::NewLine();
@@ -134,7 +134,7 @@ static void draw_editor_pane_atlas(tile_editor& ed, StringView name, const std::
perm_selected ? push_style_color(ImGuiCol_ButtonHovered, color_perm_selected) : raii_wrapper{},
};
- std::snprintf(buf, sizeof(buf), "##item_%zu", i);
+ snformat(buf, FMT_COMPILE("##item_{}"), i);
const auto uv = atlas->texcoords_for_id(i);
constexpr ImVec2 size_2 = { TILE_SIZE[0]*.5f, TILE_SIZE[1]*.5f };
ImGui::ImageButton(buf, (void*)&atlas->texture(), size_2,
@@ -193,7 +193,7 @@ void app::draw_fps()
const auto frame_time = M->smoothed_dt();
char buf[16];
const double hz = frame_time > 1e-6f ? (int)std::round(10./(double)frame_time + .05) * .1 : 9999;
- snprintf(buf, sizeof(buf), "%.1f FPS", hz);
+ snformat(buf, FMT_COMPILE("{:.1f} FPS"), hz);
const ImVec2 size = ImGui::CalcTextSize(buf);
ImDrawList& draw = *ImGui::GetForegroundDrawList();
draw.AddText({M->window_size()[0] - size.x - 4, 3}, ImGui::ColorConvertFloat4ToU32({0, 1, 0, 1}), buf);
@@ -208,7 +208,7 @@ void app::draw_tile_under_cursor()
const auto coord = *cursor.tile;
const auto chunk = coord.chunk();
const auto local = coord.local();
- snprintf(buf, sizeof(buf), "%hd:%hd - %hhu:%hhu", chunk.x, chunk.y, local.x, local.y);
+ snformat(buf, FMT_COMPILE("{}:{} - {}:{}"), chunk.x, chunk.y, local.x, local.y);
const auto size = ImGui::CalcTextSize(buf);
const auto window_size = M->window_size();