From 0a25a49e946c1557b05456c02366773b34996a1d Mon Sep 17 00:00:00 2001 From: Seth Kingsley Date: Sun, 18 Nov 2018 06:36:36 -0800 Subject: [PATCH] Assert that ImScoped::TreeNodeEx() is called without ImGuyTreeNodeFlags_NoTreePushOnOpen --- misc/cpp/extract_scoped.rb | 12 ++++++++---- misc/cpp/imgui_scoped.h | 10 +++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/misc/cpp/extract_scoped.rb b/misc/cpp/extract_scoped.rb index 5422036b0..faea36c58 100644 --- a/misc/cpp/extract_scoped.rb +++ b/misc/cpp/extract_scoped.rb @@ -216,18 +216,22 @@ header_file.each_line do |line| end.join('') args = m[:args].map { |argparts| argparts.join('') }.join(',') - print "#{INDENT * 2}#{current_class.class_name}(#{args})#{attrs} { " + print "#{INDENT * 2}#{current_class.class_name}(#{args})#{attrs} {" use_varargs = false if m[:argnames].last == '...' m[:argnames][-1] = 'ap' use_varargs = true - print "va_list ap; va_start(ap, fmt); " + print " va_list ap; va_start(ap, fmt);" end - print "#{current_class.state_var} = " if current_class.state_var + if m[:name] =~ /^TreeNodeEx/ && m[:argnames].include?('flags') + print " IM_ASSERT(!(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen));" + end - print "ImGui::#{m[:name]}" + print " #{current_class.state_var} =" if current_class.state_var + + print " ImGui::#{m[:name]}" print 'V' if use_varargs print "(#{m[:argnames].join(', ')}); " print 'va_end(ap); ' if use_varargs diff --git a/misc/cpp/imgui_scoped.h b/misc/cpp/imgui_scoped.h index 163fb301d..cd872b187 100644 --- a/misc/cpp/imgui_scoped.h +++ b/misc/cpp/imgui_scoped.h @@ -155,9 +155,9 @@ namespace ImScoped { bool IsOpen; - TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0) { IsOpen = ImGui::TreeNodeEx(label, flags); } - TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(4) { va_list ap; va_start(ap, fmt); IsOpen = ImGui::TreeNodeExV(str_id, flags, fmt, ap); va_end(ap); } - TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(4) { va_list ap; va_start(ap, fmt); IsOpen = ImGui::TreeNodeExV(ptr_id, flags, fmt, ap); va_end(ap); } + TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0) { IM_ASSERT(!(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)); IsOpen = ImGui::TreeNodeEx(label, flags); } + TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(4) { va_list ap; va_start(ap, fmt); IM_ASSERT(!(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)); IsOpen = ImGui::TreeNodeExV(str_id, flags, fmt, ap); va_end(ap); } + TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(4) { va_list ap; va_start(ap, fmt); IM_ASSERT(!(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)); IsOpen = ImGui::TreeNodeExV(ptr_id, flags, fmt, ap); va_end(ap); } ~TreeNodeEx() { if (IsOpen) ImGui::TreePop(); } explicit operator bool() const { return IsOpen; } @@ -169,8 +169,8 @@ namespace ImScoped { bool IsOpen; - TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(4) { IsOpen = ImGui::TreeNodeExV(str_id, flags, fmt, args); } - TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(4) { IsOpen = ImGui::TreeNodeExV(ptr_id, flags, fmt, args); } + TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(4) { IM_ASSERT(!(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)); IsOpen = ImGui::TreeNodeExV(str_id, flags, fmt, args); } + TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(4) { IM_ASSERT(!(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)); IsOpen = ImGui::TreeNodeExV(ptr_id, flags, fmt, args); } ~TreeNodeExV() { if (IsOpen) ImGui::TreePop(); } explicit operator bool() const { return IsOpen; }