mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # imgui.cpp
This commit is contained in:
		| @@ -46,9 +46,14 @@ Other Changes: | |||||||
|   It wasn't much of a problem because we typically use the return value instead of IsItemEdited() here. |   It wasn't much of a problem because we typically use the return value instead of IsItemEdited() here. | ||||||
| - Fixed uses of IsItemDeactivated(), IsItemDeactivatedAfterEdit() on multi-components widgets and | - Fixed uses of IsItemDeactivated(), IsItemDeactivatedAfterEdit() on multi-components widgets and | ||||||
|   after EndGroup(). (#2550, #1875) |   after EndGroup(). (#2550, #1875) | ||||||
|  | - Fixed crash when appending with BeginMainMenuBar() more than once and no other window are showing. (#2567) | ||||||
| - Scrollbar: Very minor bounding box adjustment to cope with various border size. | - Scrollbar: Very minor bounding box adjustment to cope with various border size. | ||||||
| - ImFontAtlas: FreeType: Added RasterizerFlags::Monochrome flag to disable font anti-aliasing. (#2545) | - ImFontAtlas: FreeType: Added RasterizerFlags::Monochrome flag to disable font anti-aliasing. (#2545) | ||||||
|   Combine with RasterizerFlags::MonoHinting for best results. |   Combine with RasterizerFlags::MonoHinting for best results. | ||||||
|  | - ImFontGlyphRangesBuilder: Fixed unnecessarily over-sized buffer, which incidentally was also not | ||||||
|  |   fully cleared. Fixed edge case overflow when adding character 0xFFFF. (#2568). [@NIKE3500] | ||||||
|  | - Add native Mac clipboard copy/paste default implementation in core library to match what we are | ||||||
|  |   dealing with Win32, and to facilitate integration in custom engines. (#2546) [@andrewwillmott] | ||||||
| - Examples/Backends: Don't filter characters under 0x10000 before calling io.AddInputCharacter(), | - Examples/Backends: Don't filter characters under 0x10000 before calling io.AddInputCharacter(), | ||||||
|   the filtering is done in io.AddInputCharacter() itself. This is in prevision for fuller Unicode |   the filtering is done in io.AddInputCharacter() itself. This is in prevision for fuller Unicode | ||||||
|   support. (#2538, #2541) |   support. (#2538, #2541) | ||||||
|   | |||||||
| @@ -38,14 +38,11 @@ | |||||||
| 		4080A99F20B034280036BA46 /* imgui_impl_osx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = imgui_impl_osx.mm; path = ../imgui_impl_osx.mm; sourceTree = "<group>"; }; | 		4080A99F20B034280036BA46 /* imgui_impl_osx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = imgui_impl_osx.mm; path = ../imgui_impl_osx.mm; sourceTree = "<group>"; }; | ||||||
| 		4080A9A020B034280036BA46 /* imgui_impl_opengl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_opengl2.h; path = ../imgui_impl_opengl2.h; sourceTree = "<group>"; }; | 		4080A9A020B034280036BA46 /* imgui_impl_opengl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_opengl2.h; path = ../imgui_impl_opengl2.h; sourceTree = "<group>"; }; | ||||||
| 		4080A9A120B034280036BA46 /* imgui_impl_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_osx.h; path = ../imgui_impl_osx.h; sourceTree = "<group>"; }; | 		4080A9A120B034280036BA46 /* imgui_impl_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_osx.h; path = ../imgui_impl_osx.h; sourceTree = "<group>"; }; | ||||||
| 		4080A9A420B0343C0036BA46 /* stb_truetype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stb_truetype.h; path = ../../stb_truetype.h; sourceTree = "<group>"; }; |  | ||||||
| 		4080A9A520B0343C0036BA46 /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_internal.h; path = ../../imgui_internal.h; sourceTree = "<group>"; }; | 		4080A9A520B0343C0036BA46 /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_internal.h; path = ../../imgui_internal.h; sourceTree = "<group>"; }; | ||||||
| 		4080A9A620B0343C0036BA46 /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_demo.cpp; path = ../../imgui_demo.cpp; sourceTree = "<group>"; }; | 		4080A9A620B0343C0036BA46 /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_demo.cpp; path = ../../imgui_demo.cpp; sourceTree = "<group>"; }; | ||||||
| 		4080A9A720B0343C0036BA46 /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = ../../imgui.cpp; sourceTree = "<group>"; }; | 		4080A9A720B0343C0036BA46 /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = ../../imgui.cpp; sourceTree = "<group>"; }; | ||||||
| 		4080A9A820B0343C0036BA46 /* imgui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui.h; path = ../../imgui.h; sourceTree = "<group>"; }; | 		4080A9A820B0343C0036BA46 /* imgui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui.h; path = ../../imgui.h; sourceTree = "<group>"; }; | ||||||
| 		4080A9A920B0343C0036BA46 /* stb_rect_pack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stb_rect_pack.h; path = ../../stb_rect_pack.h; sourceTree = "<group>"; }; |  | ||||||
| 		4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_draw.cpp; path = ../../imgui_draw.cpp; sourceTree = "<group>"; }; | 		4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_draw.cpp; path = ../../imgui_draw.cpp; sourceTree = "<group>"; }; | ||||||
| 		4080A9AB20B0343C0036BA46 /* stb_textedit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stb_textedit.h; path = ../../stb_textedit.h; sourceTree = "<group>"; }; |  | ||||||
| 		4080A9AC20B0343C0036BA46 /* imconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imconfig.h; path = ../../imconfig.h; sourceTree = "<group>"; }; | 		4080A9AC20B0343C0036BA46 /* imconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imconfig.h; path = ../../imconfig.h; sourceTree = "<group>"; }; | ||||||
| 		4080A9B220B034E40036BA46 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; | 		4080A9B220B034E40036BA46 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; | ||||||
| 		4080A9B420B034EA0036BA46 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; | 		4080A9B420B034EA0036BA46 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; | ||||||
| @@ -74,9 +71,6 @@ | |||||||
| 				4080A9A620B0343C0036BA46 /* imgui_demo.cpp */, | 				4080A9A620B0343C0036BA46 /* imgui_demo.cpp */, | ||||||
| 				4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */, | 				4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */, | ||||||
| 				4080A9A520B0343C0036BA46 /* imgui_internal.h */, | 				4080A9A520B0343C0036BA46 /* imgui_internal.h */, | ||||||
| 				4080A9A920B0343C0036BA46 /* stb_rect_pack.h */, |  | ||||||
| 				4080A9AB20B0343C0036BA46 /* stb_textedit.h */, |  | ||||||
| 				4080A9A420B0343C0036BA46 /* stb_truetype.h */, |  | ||||||
| 				4080A99E20B034280036BA46 /* imgui_impl_opengl2.cpp */, | 				4080A99E20B034280036BA46 /* imgui_impl_opengl2.cpp */, | ||||||
| 				4080A9A020B034280036BA46 /* imgui_impl_opengl2.h */, | 				4080A9A020B034280036BA46 /* imgui_impl_opengl2.h */, | ||||||
| 				4080A9A120B034280036BA46 /* imgui_impl_osx.h */, | 				4080A9A120B034280036BA46 /* imgui_impl_osx.h */, | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2019-05-18: Misc: Removed clipboard handlers as they are now supported by core imgui.cpp. | ||||||
| //  2019-05-11: Inputs: Don't filter character values before calling AddInputCharacter() apart from 0xF700..0xFFFF range. | //  2019-05-11: Inputs: Don't filter character values before calling AddInputCharacter() apart from 0xF700..0xFFFF range. | ||||||
| //  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. | //  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. | ||||||
| //  2018-07-07: Initial version. | //  2018-07-07: Initial version. | ||||||
| @@ -56,31 +57,8 @@ bool ImGui_ImplOSX_Init() | |||||||
|     io.KeyMap[ImGuiKey_Y]           = 'Y'; |     io.KeyMap[ImGuiKey_Y]           = 'Y'; | ||||||
|     io.KeyMap[ImGuiKey_Z]           = 'Z'; |     io.KeyMap[ImGuiKey_Z]           = 'Z'; | ||||||
|  |  | ||||||
|     io.SetClipboardTextFn = [](void*, const char* str) -> void |     // We don't set the io.SetClipboardTextFn/io.GetClipboardTextFn handlers, | ||||||
|     { |     // because imgui.cpp has a default for them that works with OSX. | ||||||
|         NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; |  | ||||||
|         [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] owner:nil]; |  | ||||||
|         [pasteboard setString:[NSString stringWithUTF8String:str] forType:NSPasteboardTypeString]; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     io.GetClipboardTextFn = [](void*) -> const char* |  | ||||||
|     { |  | ||||||
|         NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; |  | ||||||
|         NSString* available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:NSPasteboardTypeString]]; |  | ||||||
|         if (![available isEqualToString:NSPasteboardTypeString]) |  | ||||||
|             return NULL; |  | ||||||
|  |  | ||||||
|         NSString* string = [pasteboard stringForType:NSPasteboardTypeString]; |  | ||||||
|         if (string == nil) |  | ||||||
|             return NULL; |  | ||||||
|  |  | ||||||
|         const char* string_c = (const char*)[string UTF8String]; |  | ||||||
|         size_t string_len = strlen(string_c); |  | ||||||
|         static ImVector<char> s_clipboard; |  | ||||||
|         s_clipboard.resize((int)string_len + 1); |  | ||||||
|         strcpy(s_clipboard.Data, string_c); |  | ||||||
|         return s_clipboard.Data; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -31,7 +31,8 @@ | |||||||
| //---- Don't implement some functions to reduce linkage requirements. | //---- Don't implement some functions to reduce linkage requirements. | ||||||
| //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. | //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. | ||||||
| //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. | //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. | ||||||
| //#define IMGUI_DISABLE_WIN32_FUNCTIONS                     // [Win32] Won't use and link with any Win32 function. | //#define IMGUI_DISABLE_WIN32_FUNCTIONS                     // [Win32] Won't use and link with any Win32 function (clipboard, ime). | ||||||
|  | //#define IMGUI_DISABLE_OSX_FUNCTIONS                       // [OSX] Won't use and link with any OSX function (clipboard). | ||||||
| //#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf. | //#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf. | ||||||
| //#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h. | //#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h. | ||||||
| //#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). | //#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). | ||||||
|   | |||||||
							
								
								
									
										77
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1007,7 +1007,7 @@ CODE | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Clang/GCC warnings with -Weverything | // Clang/GCC warnings with -Weverything | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic ignored "-Wunknown-pragmas"        // warning : unknown warning group '-Wformat-pedantic *'        // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great! | #pragma clang diagnostic ignored "-Wunknown-pragmas"        // warning : unknown warning group '-Wformat-pedantic *'        // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great! | ||||||
| #pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse. | #pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse. | ||||||
| #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok. | #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok. | ||||||
| @@ -2894,9 +2894,13 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg) | |||||||
|     { |     { | ||||||
|         // Navigation processing runs prior to clipping early-out |         // Navigation processing runs prior to clipping early-out | ||||||
|         //  (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget |         //  (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget | ||||||
|         //  (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests unfortunately, but it is still limited to one window. |         //  (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests  | ||||||
|         //      it may not scale very well for windows with ten of thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame. |         //      unfortunately, but it is still limited to one window. It may not scale very well for windows with ten of  | ||||||
|         //      We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick) |         //      thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame. | ||||||
|  |         //      We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able | ||||||
|  |         //      to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick). | ||||||
|  |         // We intentionally don't check if g.NavWindow != NULL because g.NavAnyRequest should only be set when it is non null. | ||||||
|  |         // If we crash on a NULL g.NavWindow we need to fix the bug elsewhere. | ||||||
|         window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask; |         window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask; | ||||||
|         if (g.NavId == id || g.NavAnyRequest) |         if (g.NavId == id || g.NavAnyRequest) | ||||||
|             if (g.NavWindow->RootWindowForNav == window->RootWindowForNav) |             if (g.NavWindow->RootWindowForNav == window->RootWindowForNav) | ||||||
| @@ -7872,6 +7876,8 @@ void ImGui::EndPopup() | |||||||
| bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button) | bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GImGui->CurrentWindow; |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|  |     if (window->SkipItems) | ||||||
|  |         return false; | ||||||
|     ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict! |     ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict! | ||||||
|     IM_ASSERT(id != 0);                                                  // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item) |     IM_ASSERT(id != 0);                                                  // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item) | ||||||
|     if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) |     if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) | ||||||
| @@ -9109,7 +9115,8 @@ void ImGui::NextColumn() | |||||||
|     columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y); |     columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y); | ||||||
|     if (++columns->Current < columns->Count) |     if (++columns->Current < columns->Count) | ||||||
|     { |     { | ||||||
|         // New column (columns 1+ cancels out IndentX) |         // Columns 1+ cancel out IndentX | ||||||
|  |         // FIXME-COLUMNS: Unnecessary, could be locked? | ||||||
|         window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + g.Style.ItemSpacing.x; |         window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + g.Style.ItemSpacing.x; | ||||||
|         window->DrawList->ChannelsSetCurrent(columns->Current + 1); |         window->DrawList->ChannelsSetCurrent(columns->Current + 1); | ||||||
|     } |     } | ||||||
| @@ -9126,7 +9133,7 @@ void ImGui::NextColumn() | |||||||
|     window->DC.CurrLineSize = ImVec2(0.0f, 0.0f); |     window->DC.CurrLineSize = ImVec2(0.0f, 0.0f); | ||||||
|     window->DC.CurrLineTextBaseOffset = 0.0f; |     window->DC.CurrLineTextBaseOffset = 0.0f; | ||||||
|  |  | ||||||
|     PushColumnClipRect(columns->Current); |     PushColumnClipRect(columns->Current);     // FIXME-COLUMNS: Could it be an overwrite? | ||||||
|     PushItemWidth(GetColumnWidth() * 0.65f);  // FIXME-COLUMNS: Move on columns setup |     PushItemWidth(GetColumnWidth() * 0.65f);  // FIXME-COLUMNS: Move on columns setup | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -14120,15 +14127,17 @@ static void ImGui::DockSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettings | |||||||
| #else | #else | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| #endif | #endif | ||||||
|  | #elif defined(__APPLE__) | ||||||
|  | #include <TargetConditionals.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Win32 API clipboard implementation |  | ||||||
| #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) | #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) | ||||||
|  |  | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #pragma comment(lib, "user32") | #pragma comment(lib, "user32") | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // Win32 clipboard implementation | ||||||
| static const char* GetClipboardTextFn_DefaultImpl(void*) | static const char* GetClipboardTextFn_DefaultImpl(void*) | ||||||
| { | { | ||||||
|     static ImVector<char> buf_local; |     static ImVector<char> buf_local; | ||||||
| @@ -14172,16 +14181,66 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text) | |||||||
|     ::CloseClipboard(); |     ::CloseClipboard(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #elif defined(__APPLE__) && TARGET_OS_OSX && !defined(IMGUI_DISABLE_OSX_FUNCTIONS) | ||||||
|  |  | ||||||
|  | #include <Carbon/Carbon.h>  // Use old API to avoid need for separate .mm file | ||||||
|  | static PasteboardRef main_clipboard = 0; | ||||||
|  |  | ||||||
|  | // OSX clipboard implementation | ||||||
|  | static void SetClipboardTextFn_DefaultImpl(void*, const char* text) | ||||||
|  | { | ||||||
|  |     if (!main_clipboard) | ||||||
|  |         PasteboardCreate(kPasteboardClipboard, &main_clipboard); | ||||||
|  |     PasteboardClear(main_clipboard); | ||||||
|  |     CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text)); | ||||||
|  |     if (cf_data) | ||||||
|  |     { | ||||||
|  |         PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0); | ||||||
|  |         CFRelease(cf_data); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static const char* GetClipboardTextFn_DefaultImpl(void*) | ||||||
|  | { | ||||||
|  |     if (!main_clipboard) | ||||||
|  |         PasteboardCreate(kPasteboardClipboard, &main_clipboard); | ||||||
|  |     PasteboardSynchronize(main_clipboard); | ||||||
|  |  | ||||||
|  |     ItemCount item_count = 0; | ||||||
|  |     PasteboardGetItemCount(main_clipboard, &item_count); | ||||||
|  |     for (int i = 0; i < item_count; i++) | ||||||
|  |     { | ||||||
|  |         PasteboardItemID item_id = 0; | ||||||
|  |         PasteboardGetItemIdentifier(main_clipboard, i + 1, &item_id); | ||||||
|  |         CFArrayRef flavor_type_array = 0; | ||||||
|  |         PasteboardCopyItemFlavors(main_clipboard, item_id, &flavor_type_array); | ||||||
|  |         for (CFIndex j = 0, nj = CFArrayGetCount(flavor_type_array); j < nj; j++) | ||||||
|  |         { | ||||||
|  |             CFDataRef cf_data; | ||||||
|  |             if (PasteboardCopyItemFlavorData(main_clipboard, item_id, CFSTR("public.utf8-plain-text"), &cf_data) == noErr) | ||||||
|  |             { | ||||||
|  |                 static ImVector<char> clipboard_text; | ||||||
|  |                 int length = (int)CFDataGetLength(cf_data); | ||||||
|  |                 clipboard_text.resize(length + 1); | ||||||
|  |                 CFDataGetBytes(cf_data, CFRangeMake(0, length), (UInt8*)clipboard_text.Data); | ||||||
|  |                 clipboard_text[length] = 0; | ||||||
|  |                 CFRelease(cf_data); | ||||||
|  |                 return clipboard_text.Data; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
| #else | #else | ||||||
|  |  | ||||||
| // Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers | // Local Dear ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers. | ||||||
| static const char* GetClipboardTextFn_DefaultImpl(void*) | static const char* GetClipboardTextFn_DefaultImpl(void*) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin(); |     return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin(); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers |  | ||||||
| static void SetClipboardTextFn_DefaultImpl(void*, const char* text) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -2090,12 +2090,13 @@ struct ImFontGlyph | |||||||
| // This is essentially a tightly packed of vector of 64k booleans = 8KB storage. | // This is essentially a tightly packed of vector of 64k booleans = 8KB storage. | ||||||
| struct ImFontGlyphRangesBuilder | struct ImFontGlyphRangesBuilder | ||||||
| { | { | ||||||
|     ImVector<int> UsedChars;            // Store 1-bit per Unicode code point (0=unused, 1=used) |     ImVector<ImU32> UsedChars;            // Store 1-bit per Unicode code point (0=unused, 1=used) | ||||||
|  |  | ||||||
|     ImFontGlyphRangesBuilder()          { UsedChars.resize(0x10000 / sizeof(int)); memset(UsedChars.Data, 0, 0x10000 / sizeof(int)); } |     ImFontGlyphRangesBuilder()          { Clear(); } | ||||||
|     bool            GetBit(int n) const { int off = (n >> 5); int mask = 1 << (n & 31); return (UsedChars[off] & mask) != 0; }  // Get bit n in the array |     inline void     Clear()             { int size_in_bytes = 0x10000 / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); } | ||||||
|     void            SetBit(int n)       { int off = (n >> 5); int mask = 1 << (n & 31); UsedChars[off] |= mask; }               // Set bit n in the array |     inline bool     GetBit(int n) const { int off = (n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; }  // Get bit n in the array | ||||||
|     void            AddChar(ImWchar c)  { SetBit(c); }                          // Add character |     inline void     SetBit(int n)       { int off = (n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; }               // Set bit n in the array | ||||||
|  |     inline void     AddChar(ImWchar c)  { SetBit(c); }                          // Add character | ||||||
|     IMGUI_API void  AddText(const char* text, const char* text_end = NULL);     // Add string (each character of the UTF-8 string are added) |     IMGUI_API void  AddText(const char* text, const char* text_end = NULL);     // Add string (each character of the UTF-8 string are added) | ||||||
|     IMGUI_API void  AddRanges(const ImWchar* ranges);                           // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext |     IMGUI_API void  AddRanges(const ImWchar* ranges);                           // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext | ||||||
|     IMGUI_API void  BuildRanges(ImVector<ImWchar>* out_ranges);                 // Output new ranges |     IMGUI_API void  BuildRanges(ImVector<ImWchar>* out_ranges);                 // Output new ranges | ||||||
|   | |||||||
| @@ -64,7 +64,7 @@ Index of this file: | |||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen | #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen | ||||||
| #endif | #endif | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic ignored "-Wold-style-cast"             // warning : use of old-style cast                              // yes, they are more terse. | #pragma clang diagnostic ignored "-Wold-style-cast"             // warning : use of old-style cast                              // yes, they are more terse. | ||||||
| #pragma clang diagnostic ignored "-Wdeprecated-declarations"    // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) | #pragma clang diagnostic ignored "-Wdeprecated-declarations"    // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) | ||||||
| #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"   // warning : cast to 'void *' from smaller integer type 'int' | #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"   // warning : cast to 'void *' from smaller integer type 'int' | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ Index of this file: | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Clang/GCC warnings with -Weverything | // Clang/GCC warnings with -Weverything | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse. | #pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse. | ||||||
| #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants ok. | #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants ok. | ||||||
| #pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference is. | #pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference is. | ||||||
| @@ -100,7 +100,7 @@ namespace IMGUI_STB_NAMESPACE | |||||||
| #pragma warning (disable: 4456)                             // declaration of 'xx' hides previous local declaration | #pragma warning (disable: 4456)                             // declaration of 'xx' hides previous local declaration | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic push | #pragma clang diagnostic push | ||||||
| #pragma clang diagnostic ignored "-Wunused-function" | #pragma clang diagnostic ignored "-Wunused-function" | ||||||
| #pragma clang diagnostic ignored "-Wmissing-prototypes" | #pragma clang diagnostic ignored "-Wmissing-prototypes" | ||||||
| @@ -108,7 +108,7 @@ namespace IMGUI_STB_NAMESPACE | |||||||
| #pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier // | #pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier // | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __GNUC__ | #if defined(__GNUC__) | ||||||
| #pragma GCC diagnostic push | #pragma GCC diagnostic push | ||||||
| #pragma GCC diagnostic ignored "-Wtype-limits"              // warning: comparison is always true due to limited range of data type [-Wtype-limits] | #pragma GCC diagnostic ignored "-Wtype-limits"              // warning: comparison is always true due to limited range of data type [-Wtype-limits] | ||||||
| #pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers | #pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers | ||||||
| @@ -151,15 +151,15 @@ namespace IMGUI_STB_NAMESPACE | |||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __GNUC__ | #if defined(__GNUC__) | ||||||
| #pragma GCC diagnostic pop | #pragma GCC diagnostic pop | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic pop | #pragma clang diagnostic pop | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef _MSC_VER | #if defined(_MSC_VER) | ||||||
| #pragma warning (pop) | #pragma warning (pop) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| @@ -1785,7 +1785,7 @@ static void UnpackBoolVectorToFlatIndexList(const ImBoolVector* in, ImVector<int | |||||||
|     for (const int* it = it_begin; it < it_end; it++) |     for (const int* it = it_begin; it < it_end; it++) | ||||||
|         if (int entries_32 = *it) |         if (int entries_32 = *it) | ||||||
|             for (int bit_n = 0; bit_n < 32; bit_n++) |             for (int bit_n = 0; bit_n < 32; bit_n++) | ||||||
|                 if (entries_32 & (1 << bit_n)) |                 if (entries_32 & (1u << bit_n)) | ||||||
|                     out->push_back((int)((it - it_begin) << 5) + bit_n); |                     out->push_back((int)((it - it_begin) << 5) + bit_n); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -2397,11 +2397,12 @@ void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges) | |||||||
|  |  | ||||||
| void ImFontGlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges) | void ImFontGlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges) | ||||||
| { | { | ||||||
|     for (int n = 0; n < 0x10000; n++) |     int max_codepoint = 0x10000; | ||||||
|  |     for (int n = 0; n < max_codepoint; n++) | ||||||
|         if (GetBit(n)) |         if (GetBit(n)) | ||||||
|         { |         { | ||||||
|             out_ranges->push_back((ImWchar)n); |             out_ranges->push_back((ImWchar)n); | ||||||
|             while (n < 0x10000 && GetBit(n + 1)) |             while (n < max_codepoint - 1 && GetBit(n + 1)) | ||||||
|                 n++; |                 n++; | ||||||
|             out_ranges->push_back((ImWchar)n); |             out_ranges->push_back((ImWchar)n); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -36,15 +36,17 @@ Index of this file: | |||||||
| #include <math.h>       // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf | #include <math.h>       // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf | ||||||
| #include <limits.h>     // INT_MIN, INT_MAX | #include <limits.h>     // INT_MIN, INT_MAX | ||||||
|  |  | ||||||
|  | // Visual Studio warnings | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #pragma warning (push) | #pragma warning (push) | ||||||
| #pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport) | #pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __clang__ | // Clang/GCC warnings with -Weverything | ||||||
|  | #if defined(__clang__) | ||||||
| #pragma clang diagnostic push | #pragma clang diagnostic push | ||||||
| #pragma clang diagnostic ignored "-Wunused-function"                // for stb_textedit.h | #pragma clang diagnostic ignored "-Wunused-function"        // for stb_textedit.h | ||||||
| #pragma clang diagnostic ignored "-Wmissing-prototypes"             // for stb_textedit.h | #pragma clang diagnostic ignored "-Wmissing-prototypes"     // for stb_textedit.h | ||||||
| #pragma clang diagnostic ignored "-Wold-style-cast" | #pragma clang diagnostic ignored "-Wold-style-cast" | ||||||
| #if __has_warning("-Wzero-as-null-pointer-constant") | #if __has_warning("-Wzero-as-null-pointer-constant") | ||||||
| #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" | #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" | ||||||
| @@ -52,6 +54,11 @@ Index of this file: | |||||||
| #if __has_warning("-Wdouble-promotion") | #if __has_warning("-Wdouble-promotion") | ||||||
| #pragma clang diagnostic ignored "-Wdouble-promotion" | #pragma clang diagnostic ignored "-Wdouble-promotion" | ||||||
| #endif | #endif | ||||||
|  | #elif defined(__GNUC__) | ||||||
|  | #pragma GCC diagnostic push | ||||||
|  | #if __GNUC__ >= 8 | ||||||
|  | #pragma GCC diagnostic ignored "-Wclass-memaccess"          // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | ||||||
|  | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| @@ -1867,8 +1874,10 @@ extern void                 ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGu | |||||||
| #define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS)    do { } while (0) | #define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS)    do { } while (0) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic pop | #pragma clang diagnostic pop | ||||||
|  | #elif defined(__GNUC__) | ||||||
|  | #pragma GCC diagnostic pop | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ Index of this file: | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Clang/GCC warnings with -Weverything | // Clang/GCC warnings with -Weverything | ||||||
| #ifdef __clang__ | #if defined(__clang__) | ||||||
| #pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse. | #pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse. | ||||||
| #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok. | #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok. | ||||||
| #pragma clang diagnostic ignored "-Wformat-nonliteral"      // warning : format string is not a string literal              // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code. | #pragma clang diagnostic ignored "-Wformat-nonliteral"      // warning : format string is not a string literal              // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code. | ||||||
| @@ -2806,7 +2806,7 @@ bool ImGui::TempInputTextScalar(const ImRect& bb, ImGuiID id, const char* label, | |||||||
|         if (value_changed) |         if (value_changed) | ||||||
|             MarkItemEdited(id); |             MarkItemEdited(id); | ||||||
|     } |     } | ||||||
|     return false; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_ptr, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags flags) | bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_ptr, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags flags) | ||||||
| @@ -5886,7 +5886,7 @@ void ImGui::EndMainMenuBar() | |||||||
|     // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window |     // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window | ||||||
|     // FIXME: With this strategy we won't be able to restore a NULL focus. |     // FIXME: With this strategy we won't be able to restore a NULL focus. | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0) |     if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest) | ||||||
|         FocusTopMostWindowUnderOne(g.NavWindow, NULL); |         FocusTopMostWindowUnderOne(g.NavWindow, NULL); | ||||||
|  |  | ||||||
|     End(); |     End(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user