summaryrefslogtreecommitdiffhomepage
path: root/editor
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-03-19 11:01:14 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-03-19 11:02:04 +0100
commit1eef324dc9ffcd0bc115b283a038cc175f64deb5 (patch)
tree104b76f9e8d246b246322b97ce6a9c25b05cb260 /editor
parentaadd93718a851ac36a6eefbfec273c81ebf7cc14 (diff)
editor, main: assert StringView null termination
Diffstat (limited to 'editor')
-rw-r--r--editor/imgui-raii.cpp16
-rw-r--r--editor/imgui-raii.hpp2
-rw-r--r--editor/inspect.cpp4
3 files changed, 16 insertions, 6 deletions
diff --git a/editor/imgui-raii.cpp b/editor/imgui-raii.cpp
index e499f21c..c348eea6 100644
--- a/editor/imgui-raii.cpp
+++ b/editor/imgui-raii.cpp
@@ -1,4 +1,5 @@
#include "imgui-raii.hpp"
+#include "compat/assert.hpp"
#include <Corrade/Containers/StringView.h>
#include <Magnum/Magnum.h>
#include <Magnum/Math/Color.h>
@@ -23,7 +24,10 @@ font_saver::font_saver(float size) : font_saver{*ImGui::GetCurrentContext(), siz
style_saver::style_saver() : style{ImGui::GetStyle()} {}
style_saver::~style_saver() { ImGui::GetStyle() = style; }
-void text(StringView str, ImGuiTextFlags flags) { ImGui::TextEx(str.data(), str.data() + str.size(), flags); }
+void text(StringView str, ImGuiTextFlags flags)
+{
+ ImGui::TextEx(str.data(), str.data() + str.size(), flags);
+}
raii_wrapper::raii_wrapper(raii_wrapper::F fn) : dtor{fn} {}
raii_wrapper::~raii_wrapper() { if (dtor) dtor(); }
@@ -61,6 +65,7 @@ raii_wrapper push_style_var(ImGuiStyleVar_ var, Vector2 value)
raii_wrapper tree_node(Containers::StringView name, ImGuiTreeNodeFlags flags)
{
+ fm_assert(name.flags() & StringViewFlag::NullTerminated);
if (ImGui::TreeNodeEx(name.data(), flags))
return {&ImGui::TreePop};
else
@@ -75,6 +80,8 @@ raii_wrapper begin_disabled(bool is_disabled)
raii_wrapper begin_combo(StringView name, StringView preview, ImGuiComboFlags flags)
{
+ fm_assert(name.flags() & StringViewFlag::NullTerminated);
+ fm_assert(preview.flags() & StringViewFlag::NullTerminated);
if (ImGui::BeginCombo(name.data(), preview.data(), flags))
return {&ImGui::EndCombo};
else
@@ -83,6 +90,7 @@ raii_wrapper begin_combo(StringView name, StringView preview, ImGuiComboFlags fl
raii_wrapper begin_popup(StringView name, ImGuiWindowFlags flags)
{
+ fm_assert(name.flags() & StringViewFlag::NullTerminated);
if (ImGui::BeginPopup(name.data(), flags))
return {&ImGui::EndPopup};
else
@@ -91,15 +99,17 @@ raii_wrapper begin_popup(StringView name, ImGuiWindowFlags flags)
raii_wrapper begin_list_box(Containers::StringView name, ImVec2 size)
{
+ fm_assert(name.flags() & StringViewFlag::NullTerminated);
if (ImGui::BeginListBox(name.data(), size))
return {&ImGui::EndListBox};
else
return {};
}
-raii_wrapper begin_table(const char* id, int ncols, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
+raii_wrapper begin_table(StringView id, int ncols, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
{
- if (ImGui::BeginTable(id, ncols, flags, outer_size, inner_width))
+ fm_assert(id.flags() & StringViewFlag::NullTerminated);
+ if (ImGui::BeginTable(id.data(), ncols, flags, outer_size, inner_width))
return {&ImGui::EndTable};
else
return {};
diff --git a/editor/imgui-raii.hpp b/editor/imgui-raii.hpp
index 9888b70b..05f4239d 100644
--- a/editor/imgui-raii.hpp
+++ b/editor/imgui-raii.hpp
@@ -27,7 +27,7 @@ private:
[[nodiscard]] raii_wrapper begin_main_menu();
[[nodiscard]] raii_wrapper begin_menu(StringView name, bool enabled = true);
[[nodiscard]] raii_wrapper begin_list_box(StringView name, ImVec2 size = {});
-[[nodiscard]] raii_wrapper begin_table(const char* id, int ncols, ImGuiTableFlags flags = 0, const ImVec2& outer_size = {}, float inner_width = 0);
+[[nodiscard]] raii_wrapper begin_table(StringView id, int ncols, ImGuiTableFlags flags = 0, const ImVec2& outer_size = {}, float inner_width = 0);
[[nodiscard]] raii_wrapper tree_node(StringView name, ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None);
[[nodiscard]] raii_wrapper begin_disabled(bool is_disabled = true);
[[nodiscard]] raii_wrapper begin_combo(StringView name, StringView preview, ImGuiComboFlags flags = 0);
diff --git a/editor/inspect.cpp b/editor/inspect.cpp
index 0609c4be..df286391 100644
--- a/editor/inspect.cpp
+++ b/editor/inspect.cpp
@@ -108,12 +108,12 @@ bool do_inspect_field(void* datum, const erased_accessor& accessor, field_repr r
case field_repr::cbx: {
if constexpr(std::is_integral_v<T>)
{
- const char* preview = "<invalid>";
+ StringView preview = "<invalid>"_s;
const auto old_value = (size_t)static_cast<std::make_unsigned_t<T>>(value);
for (const auto& [str, x] : list)
if (x == old_value)
{
- preview = str.data();
+ preview = str;
break;
}
if (auto b = begin_combo(label, preview))