From 12c36a35cf43d3453a5745e4464de531674e8e65 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 21 Feb 2023 07:37:24 +0100 Subject: more imgui wrappers --- editor/imgui-raii.cpp | 11 +++++++++++ editor/imgui-raii.hpp | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/editor/imgui-raii.cpp b/editor/imgui-raii.cpp index 05e9edab..458de973 100644 --- a/editor/imgui-raii.cpp +++ b/editor/imgui-raii.cpp @@ -28,6 +28,11 @@ void text(StringView str, ImGuiTextFlags flags) { ImGui::TextEx(str.data(), str. raii_wrapper::raii_wrapper(raii_wrapper::F fn) : dtor{fn} {} raii_wrapper::~raii_wrapper() { if (dtor) dtor(); } raii_wrapper::raii_wrapper(raii_wrapper&& other) noexcept : dtor{other.dtor} { other.dtor = nullptr; } +raii_wrapper& raii_wrapper::operator=(raii_wrapper&& other) noexcept +{ + dtor = std::exchange(other.dtor, nullptr); + return *this; +} raii_wrapper::operator bool() const noexcept { return dtor != nullptr; } raii_wrapper push_style_color(ImGuiCol_ var, const Color4& value) @@ -62,6 +67,12 @@ raii_wrapper tree_node(Containers::StringView name, ImGuiTreeNodeFlags flags) return {}; } +raii_wrapper begin_disabled(bool is_disabled) +{ + ImGui::BeginDisabled(is_disabled); + return {&ImGui::EndDisabled}; +} + raii_wrapper begin_list_box(Containers::StringView name, ImVec2 size) { if (ImGui::BeginListBox(name.data(), size)) diff --git a/editor/imgui-raii.hpp b/editor/imgui-raii.hpp index ba283195..1893ab90 100644 --- a/editor/imgui-raii.hpp +++ b/editor/imgui-raii.hpp @@ -15,7 +15,7 @@ struct raii_wrapper final ~raii_wrapper(); raii_wrapper(const raii_wrapper&) = delete; raii_wrapper& operator=(const raii_wrapper&) = delete; - raii_wrapper& operator=(raii_wrapper&&) = delete; + raii_wrapper& operator=(raii_wrapper&&) noexcept; raii_wrapper(raii_wrapper&& other) noexcept; operator bool() const noexcept; @@ -29,6 +29,7 @@ private: [[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 tree_node(StringView name, ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None); +[[nodiscard]] raii_wrapper begin_disabled(bool is_disabled = true); [[nodiscard]] raii_wrapper push_style_var(ImGuiStyleVar_ var, Vector2 value); [[nodiscard]] raii_wrapper push_style_var(ImGuiStyleVar_ var, float value); -- cgit v1.2.3