diff --git a/backends/imgui_impl_opengl3.cpp b/backends/imgui_impl_opengl3.cpp index 3037e3be..ebb83c4a 100644 --- a/backends/imgui_impl_opengl3.cpp +++ b/backends/imgui_impl_opengl3.cpp @@ -531,6 +531,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) #endif glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); + (void)bd; // Not all compilation paths use this } bool ImGui_ImplOpenGL3_CreateFontsTexture() diff --git a/backends/imgui_impl_sdl.cpp b/backends/imgui_impl_sdl.cpp index 096485b4..f5677646 100644 --- a/backends/imgui_impl_sdl.cpp +++ b/backends/imgui_impl_sdl.cpp @@ -60,7 +60,11 @@ #include "TargetConditionals.h" #endif -#define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE (SDL_VERSION_ATLEAST(2,0,4) && !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS)) +#if SDL_VERSION_ATLEAST(2,0,4) && !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS) +#define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE 1 +#else +#define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE 0 +#endif #define SDL_HAS_MOUSE_FOCUS_CLICKTHROUGH SDL_VERSION_ATLEAST(2,0,5) #define SDL_HAS_VULKAN SDL_VERSION_ATLEAST(2,0,6) @@ -168,10 +172,10 @@ static bool ImGui_ImplSDL2_Init(SDL_Window* window) // Check and store if we are on a SDL backend that supports global mouse position // ("wayland" and "rpi" don't support it, but we chose to use a white-list instead of a black-list) - const char* sdl_backend = SDL_GetCurrentVideoDriver(); - const char* global_mouse_whitelist[] = { "windows", "cocoa", "x11", "DIVE", "VMAN" }; bool mouse_can_use_global_state = false; #if SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE + const char* sdl_backend = SDL_GetCurrentVideoDriver(); + const char* global_mouse_whitelist[] = { "windows", "cocoa", "x11", "DIVE", "VMAN" }; for (int n = 0; n < IM_ARRAYSIZE(global_mouse_whitelist); n++) if (strncmp(sdl_backend, global_mouse_whitelist[n], strlen(global_mouse_whitelist[n])) == 0) mouse_can_use_global_state = true; diff --git a/examples/example_emscripten_opengl3/Makefile b/examples/example_emscripten_opengl3/Makefile index ff28ef5c..8a84cd1e 100644 --- a/examples/example_emscripten_opengl3/Makefile +++ b/examples/example_emscripten_opengl3/Makefile @@ -23,15 +23,18 @@ SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) UNAME_S := $(shell uname -s) +CPPFLAGS = +LDFLAGS = +EMS = ##--------------------------------------------------------------------- ## EMSCRIPTEN OPTIONS ##--------------------------------------------------------------------- -EMS += -s USE_SDL=2 -s WASM=1 -EMS += -s ALLOW_MEMORY_GROWTH=1 -EMS += -s DISABLE_EXCEPTION_CATCHING=1 -s NO_EXIT_RUNTIME=0 -EMS += -s ASSERTIONS=1 +# ("EMS" options gets added to both CPPFLAGS and LDFLAGS, whereas some options are for linker only) +EMS += -s USE_SDL=2 +EMS += -s DISABLE_EXCEPTION_CATCHING=1 +LDFLAGS += -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=0 -s ASSERTIONS=1 # Uncomment next line to fix possible rendering bugs with Emscripten version older then 1.39.0 (https://github.com/ocornut/imgui/issues/2877) #EMS += -s BINARYEN_TRAP_MODE=clamp @@ -43,7 +46,8 @@ EMS += -s ASSERTIONS=1 # (Default value is 0. Set to 1 to enable file-system and include the misc/fonts/ folder as part of the build.) USE_FILE_SYSTEM ?= 0 ifeq ($(USE_FILE_SYSTEM), 0) -EMS += -s NO_FILESYSTEM=1 -DIMGUI_DISABLE_FILE_FUNCTIONS +LDFLAGS += -s NO_FILESYSTEM=1 +CPPFLAGS += -DIMGUI_DISABLE_FILE_FUNCTIONS endif ifeq ($(USE_FILE_SYSTEM), 1) LDFLAGS += --no-heap-copy --preload-file ../../misc/fonts@/fonts @@ -53,12 +57,10 @@ endif ## FINAL BUILD FLAGS ##--------------------------------------------------------------------- -CPPFLAGS = -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends +CPPFLAGS += -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends #CPPFLAGS += -g -CPPFLAGS += -Wall -Wformat -Os -CPPFLAGS += $(EMS) -LIBS += $(EMS) -LDFLAGS += --shell-file shell_minimal.html +CPPFLAGS += -Wall -Wformat -Os $(EMS) +LDFLAGS += --shell-file shell_minimal.html $(EMS) ##--------------------------------------------------------------------- ## BUILD RULES @@ -86,7 +88,7 @@ serve: all python3 -m http.server -d $(WEB_DIR) $(EXE): $(OBJS) $(WEB_DIR) - $(CXX) -o $@ $(OBJS) $(LIBS) $(LDFLAGS) + $(CXX) -o $@ $(OBJS) $(LDFLAGS) clean: rm -rf $(OBJS) $(WEB_DIR) diff --git a/examples/example_emscripten_wgpu/Makefile b/examples/example_emscripten_wgpu/Makefile index de1792fe..5c79f0c7 100644 --- a/examples/example_emscripten_wgpu/Makefile +++ b/examples/example_emscripten_wgpu/Makefile @@ -23,15 +23,18 @@ SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_wgpu.cpp OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) UNAME_S := $(shell uname -s) +CPPFLAGS = +LDFLAGS = +EMS = ##--------------------------------------------------------------------- ## EMSCRIPTEN OPTIONS ##--------------------------------------------------------------------- -EMS += -s USE_GLFW=3 -s USE_WEBGPU=1 -s WASM=1 -EMS += -s ALLOW_MEMORY_GROWTH=1 -EMS += -s DISABLE_EXCEPTION_CATCHING=1 -s NO_EXIT_RUNTIME=0 -EMS += -s ASSERTIONS=1 +# ("EMS" options gets added to both CPPFLAGS and LDFLAGS, whereas some options are for linker only) +EMS += -s DISABLE_EXCEPTION_CATCHING=1 +LDFLAGS += -s USE_GLFW=3 -s USE_WEBGPU=1 +LDFLAGS += -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=0 -s ASSERTIONS=1 # Emscripten allows preloading a file or folder to be accessible at runtime. # The Makefile for this example project suggests embedding the misc/fonts/ folder into our application, it will then be accessible as "/fonts" @@ -39,7 +42,8 @@ EMS += -s ASSERTIONS=1 # (Default value is 0. Set to 1 to enable file-system and include the misc/fonts/ folder as part of the build.) USE_FILE_SYSTEM ?= 0 ifeq ($(USE_FILE_SYSTEM), 0) -EMS += -s NO_FILESYSTEM=1 -DIMGUI_DISABLE_FILE_FUNCTIONS +LDFLAGS += -s NO_FILESYSTEM=1 +CPPFLAGS += -DIMGUI_DISABLE_FILE_FUNCTIONS endif ifeq ($(USE_FILE_SYSTEM), 1) LDFLAGS += --no-heap-copy --preload-file ../../misc/fonts@/fonts @@ -49,12 +53,11 @@ endif ## FINAL BUILD FLAGS ##--------------------------------------------------------------------- -CPPFLAGS = -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends +CPPFLAGS += -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends #CPPFLAGS += -g -CPPFLAGS += -Wall -Wformat -Os -CPPFLAGS += $(EMS) -LIBS += $(EMS) +CPPFLAGS += -Wall -Wformat -Os $(EMS) #LDFLAGS += --shell-file shell_minimal.html +LDFLAGS += $(EMS) ##--------------------------------------------------------------------- ## BUILD RULES @@ -79,7 +82,7 @@ serve: all python3 -m http.server -d $(WEB_DIR) $(EXE): $(OBJS) $(WEB_DIR) - $(CXX) -o $@ $(OBJS) $(LIBS) $(LDFLAGS) + $(CXX) -o $@ $(OBJS) $(LDFLAGS) clean: rm -f $(EXE) $(OBJS) $(WEB_DIR)/*.js $(WEB_DIR)/*.wasm $(WEB_DIR)/*.wasm.pre diff --git a/examples/example_null/Makefile b/examples/example_null/Makefile index 2197c01c..9208e8a0 100644 --- a/examples/example_null/Makefile +++ b/examples/example_null/Makefile @@ -40,7 +40,7 @@ endif ifeq ($(UNAME_S), Linux) #LINUX ECHO_MESSAGE = "Linux" - ifneq ($(WITH_EXTRA_WARNINGS), 0) + ifeq ($(WITH_EXTRA_WARNINGS), 1) CXXFLAGS += -Wextra -Wpedantic ifeq ($(shell $(CXX) -v 2>&1 | grep -c "clang version"), 1) CXXFLAGS += -Wshadow -Wsign-conversion @@ -51,15 +51,15 @@ endif ifeq ($(UNAME_S), Darwin) #APPLE ECHO_MESSAGE = "Mac OS X" - ifneq ($(WITH_EXTRA_WARNINGS), 0) - CXXFLAGS += -Weverything -Wno-reserved-id-macro -Wno-c++98-compat-pedantic -Wno-padded -Wno-c++11-long-long + ifeq ($(WITH_EXTRA_WARNINGS), 1) + CXXFLAGS += -Weverything -Wno-reserved-id-macro -Wno-c++98-compat-pedantic -Wno-padded -Wno-c++11-long-long -Wno-poison-system-directories endif CFLAGS = $(CXXFLAGS) endif ifeq ($(OS), Windows_NT) ECHO_MESSAGE = "MinGW" - ifneq ($(WITH_EXTRA_WARNINGS), 0) + ifeq ($(WITH_EXTRA_WARNINGS), 1) CXXFLAGS += -Wextra -Wpedantic endif LIBS += -limm32 diff --git a/imgui_internal.h b/imgui_internal.h index 0e813ef3..a282ef1e 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -88,6 +88,13 @@ Index of this file: #pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead #endif +// Helper macros +#if defined(__clang__) +#define IM_NORETURN __attribute__((noreturn)) +#else +#define IM_NORETURN +#endif + // Legacy defines #ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Renamed in 1.74 #error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS @@ -2421,8 +2428,8 @@ namespace ImGui // (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool focused = FocusableItemRegister(...)' // (New) IMGUI_VERSION_NUM >= 18209: using 'ItemAdd(..., ImGuiItemAddFlags_Focusable)' and 'bool focused = (GetItemStatusFlags() & ImGuiItemStatusFlags_Focused) != 0' // Widget code are simplified as there's no need to call FocusableItemUnregister() while managing the transition from regular widget to TempInputText() - inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) { IM_ASSERT(0); IM_UNUSED(window); IM_UNUSED(id); return false; } // -> pass ImGuiItemAddFlags_Focusable flag to ItemAdd() - inline void FocusableItemUnregister(ImGuiWindow* window) { IM_ASSERT(0); IM_UNUSED(window); } // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem + inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) { IM_ASSERT(0); IM_UNUSED(window); IM_UNUSED(id); return false; } // -> pass ImGuiItemAddFlags_Focusable flag to ItemAdd() + inline IM_NORETURN void FocusableItemUnregister(ImGuiWindow* window) { IM_ASSERT(0); IM_UNUSED(window); } // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem #endif // Logging/Capture