diff --git a/neo/sys/imgui_savestyle.cpp b/neo/sys/imgui_savestyle.cpp index 18dc8469..45fba142 100644 --- a/neo/sys/imgui_savestyle.cpp +++ b/neo/sys/imgui_savestyle.cpp @@ -4,7 +4,7 @@ * * Hosted at https://github.com/DanielGibson/Snippets/ * - * Written for/tested with Dear ImGui v1.90.6 + * Written for/tested with Dear ImGui v1.90.8 (incl. Docking Branch) * * If anything changes in struct ImGuiStyle or enum ImGuiCol_, this code should detect it * during compilation and give (hopefully) helpful errors with static_assert() (always check and @@ -73,12 +73,15 @@ namespace DG { #undef warnPrintf // TODO: maybe use your own logging system instead of fprintf() to stderr -//#define warnPrintf(...) fprintf( stderr, "Warning: " __VA_ARGS__ ) +#define warnPrintf(...) fprintf( stderr, "Warning: " __VA_ARGS__ ) -// DG: adjustment for dhewm3: -#include "framework/Common.h" -#undef strncmp // No, I don't want to use idStr::Cmpn() in this file. -#define warnPrintf(...) common->Warning( __VA_ARGS__ ) +#ifdef IMGUI_HAS_DOCK + // some members of struct ImGuiStyle and enum ImGuiCol_ only exist in the Docking branch.. + #define DGIMST_ENABLE_IF_DOCKING(x) x +#else + // .. so disable them in the regular branch + #define DGIMST_ENABLE_IF_DOCKING(x) +#endif // Note: The trick I'm using with these #defines below is called "X Macro" // see https://en.wikipedia.org/wiki/X_macro (except I'm not calling the "entries" X, @@ -128,6 +131,7 @@ namespace DG { D3_IMATTR_VEC2( SeparatorTextPadding ) \ D3_IMATTR_VEC2( DisplayWindowPadding ) \ D3_IMATTR_VEC2( DisplaySafeAreaPadding ) \ + DGIMST_ENABLE_IF_DOCKING( D3_IMATTR_FLOAT( DockingSeparatorSize ) ) \ D3_IMATTR_FLOAT( MouseCursorScale ) \ D3_IMATTR_BOOL( AntiAliasedLines ) \ D3_IMATTR_BOOL( AntiAliasedLinesUseTex ) \ @@ -187,6 +191,8 @@ namespace DG { D3_IMSTYLE_COLOR( TabActive ) \ D3_IMSTYLE_COLOR( TabUnfocused ) \ D3_IMSTYLE_COLOR( TabUnfocusedActive ) \ + DGIMST_ENABLE_IF_DOCKING( D3_IMSTYLE_COLOR( DockingPreview ) ) \ + DGIMST_ENABLE_IF_DOCKING( D3_IMSTYLE_COLOR( DockingEmptyBg ) ) \ D3_IMSTYLE_COLOR( PlotLines ) \ D3_IMSTYLE_COLOR( PlotLinesHovered ) \ D3_IMSTYLE_COLOR( PlotHistogram ) \ @@ -320,8 +326,8 @@ bool ReadImGuiStyle( ImGuiStyle& s, const char* filename ) { FILE* f = DG_IMSAVESTYLE_FOPEN( filename, "r" ); // TODO: "rt" on Windows? if ( f == nullptr ) { - // DG: shut up this warning, user don't *have* to write their own style - //warnPrintf( "Couldn't open '%s' for reading\n", filename ); + // Note: Turns out that printing warning here is annoying, there's nothing wrong with the + // user not having saved a style yet.. just return false, the caller can log if appropriate return false; } @@ -501,13 +507,29 @@ ImGuiTextBuffer WriteImGuiStyleToCode( const ImGuiStyle& s, const ImGuiStyle* re // check correctness of the X macro tables above (detect when something is added/removed/renamed in struct ImGuiStyle or enum ImGuiCol_) namespace { -#define D3_IMSTYLE_COLOR(C) + 1 -// "0 D3_IMSTYLE_COLORS" is expanded to 0 + 1 + 1 ... for each D3_IMSTYLE_COLOR entry -// => it should have the same value as the ImGuiCol_COUNT constant -static_assert( ImGuiCol_COUNT == 0 D3_IMSTYLE_COLORS, - "something was added or removed in enum ImGuiCol_ => adjust D3_IMSTYLE_COLORS table above" ); +// recreate enum ImGuiCol_ from the D3_IMSTYLE_COLORS table to compare its members +// so we can easily detect when (and where) one is added +enum D3CHECK_ImguiCol_ { + +#define D3_IMSTYLE_COLOR( NAME ) D3CHECK_ImGuiCol_ ## NAME , + + D3_IMSTYLE_COLORS + #undef D3_IMSTYLE_COLOR + D3CHECK_ImGuiCol_COUNT +}; + +#define D3_IMSTYLE_COLOR( NAME ) \ + static_assert( (int) D3CHECK_ImGuiCol_ ## NAME == (int) ImGuiCol_ ## NAME, "Wrong value for ImGuiCol_" #NAME " - probably something was added to enum ImGuiCol_ before it? => => adjust D3_IMSTYLE_COLORS table above" ); + +D3_IMSTYLE_COLORS + +#undef D3_IMSTYLE_COLOR + +// if the following is the only failing static_assert, the new color was probably added to the end +static_assert( (int)D3CHECK_ImGuiCol_COUNT == (int)ImGuiCol_COUNT, "something was added or removed in enum ImGuiCol_ => adjust D3_IMSTYLE_COLORS table above" ); + // recreate struct ImGuiStyle from the tables above and see if they're identical // (this struct is only used for the static assertions below) struct D3_ImGuiStyle_Check {