mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Merge branch 'viewport' into docking
# Conflicts: # imgui.cpp # imgui_widgets.cpp
This commit is contained in:
		| @@ -86,7 +86,7 @@ Other Changes: | ||||
|   introduced in 1.50 and broken in 1.60. (#1698, #894, #713). | ||||
| - TextUnformatted(): Fixed a case where large-text path would read bytes past the text_end marker depending | ||||
|   on the position of new lines in the buffer (it wasn't affecting the output but still not the right thing to do!)  | ||||
| - InputTextMultiline(), RenderText(): Some optimization for very large text buffers, useful for non-optimized builds. | ||||
| - RenderText(): Some optimization for very large text buffers, useful for non-optimized builds. | ||||
| - BeginMenu(): Fixed menu popup horizontal offset being off the item in the menu bar when WindowPadding=0.0f. | ||||
| - ArrowButton(): Fixed arrow shape being horizontally misaligned by (FramePadding.y-FramePadding.x) if they are different. | ||||
| - Drag and Drop: Added GetDragDropPayload() to peek directly into the payload (if any) from anywhere. (#143) | ||||
|   | ||||
							
								
								
									
										31
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -863,21 +863,21 @@ CODE | ||||
|  | ||||
| #include <ctype.h>      // toupper, isprint | ||||
| #include <stdio.h>      // vsnprintf, sscanf, printf | ||||
| #include <wchar.h>      // wcslen | ||||
| #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier | ||||
| #include <stddef.h>     // intptr_t | ||||
| #else | ||||
| #include <stdint.h>     // intptr_t | ||||
| #endif | ||||
|  | ||||
| // Debug options | ||||
| #define IMGUI_DEBUG_NAV_SCORING     0   // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL | ||||
| #define IMGUI_DEBUG_NAV_RECTS       0   // Display the reference navigation rectangle for each window | ||||
| #define IMGUI_DEBUG_DOCKING_INI     0   // Save additional comments in .ini file (makes saving slower) | ||||
|  | ||||
| // Visual Studio warnings | ||||
| #ifdef _MSC_VER | ||||
| #pragma warning (disable: 4127) // condition expression is constant | ||||
| #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen | ||||
| #pragma warning (disable: 4127)     // condition expression is constant | ||||
| #pragma warning (disable: 4996)     // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen | ||||
| #endif | ||||
|  | ||||
| // Clang/GCC warnings with -Weverything | ||||
| @@ -972,6 +972,14 @@ static int              FindPlatformMonitorForRect(const ImRect& r); | ||||
|  | ||||
| } | ||||
|  | ||||
| // Test engine hooks (imgui-test) | ||||
| //#define IMGUI_ENABLE_TEST_ENGINE_HOOKS | ||||
| #ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS | ||||
| extern void             ImGuiTestEngineHook_PreNewFrame(); | ||||
| extern void             ImGuiTestEngineHook_PostNewFrame(); | ||||
| extern void             ImGuiTestEngineHook_ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg); | ||||
| #endif | ||||
|  | ||||
| //----------------------------------------------------------------------------- | ||||
| // [SECTION] CONTEXT AND MEMORY ALLOCATORS | ||||
| //----------------------------------------------------------------------------- | ||||
| @@ -1235,7 +1243,10 @@ const char* ImStrchrRange(const char* str, const char* str_end, char c) | ||||
|  | ||||
| int ImStrlenW(const ImWchar* str) | ||||
| { | ||||
|     return (int)wcslen((const wchar_t*)str); | ||||
|     //return (int)wcslen((const wchar_t*)str);	// FIXME-OPT: Could use this when wchar_t are 16-bits | ||||
|     int n = 0; | ||||
|     while (*str++) n++; | ||||
|     return n; | ||||
| } | ||||
|  | ||||
| // Find end-of-line. Return pointer will point to either first \n, either str_end. | ||||
| @@ -2640,6 +2651,10 @@ void ImGui::ItemSize(const ImRect& bb, float text_offset_y) | ||||
| // declare their minimum size requirement to ItemSize() and then use a larger region for drawing/interaction, which is passed to ItemAdd(). | ||||
| bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg) | ||||
| { | ||||
| #ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS | ||||
|     ImGuiTestEngineHook_ItemAdd(bb, id, nav_bb_arg); | ||||
| #endif | ||||
|  | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|  | ||||
| @@ -3219,6 +3234,10 @@ void ImGui::NewFrame() | ||||
|     IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() or ImGui::SetCurrentContext()?"); | ||||
|     ImGuiContext& g = *GImGui; | ||||
|  | ||||
| #ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS | ||||
|     ImGuiTestEngineHook_PreNewFrame(); | ||||
| #endif | ||||
|  | ||||
|     // Check user data | ||||
|     // (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument) | ||||
|     IM_ASSERT(g.Initialized); | ||||
| @@ -3435,6 +3454,10 @@ void ImGui::NewFrame() | ||||
|     // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags. | ||||
|     SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver); | ||||
|     Begin("Debug##Default"); | ||||
|  | ||||
| #ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS | ||||
|     ImGuiTestEngineHook_PostNewFrame(); | ||||
| #endif | ||||
| } | ||||
|  | ||||
| void ImGui::Initialize(ImGuiContext* context) | ||||
|   | ||||
| @@ -38,7 +38,6 @@ Index of this file: | ||||
| #include "imgui_internal.h" | ||||
|  | ||||
| #include <ctype.h>      // toupper, isprint | ||||
| #include <wchar.h>      // wmemchr | ||||
| #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier | ||||
| #include <stddef.h>     // intptr_t | ||||
| #else | ||||
| @@ -3641,12 +3640,14 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|             // In multi-line mode, we never exit the loop until all lines are counted, so add one extra to the searches_remaining counter. | ||||
|             searches_remaining += is_multiline ? 1 : 0; | ||||
|             int line_count = 0; | ||||
|             for (const ImWchar* s = text_begin; (s = (const ImWchar*)wcschr((const wchar_t*)s, (wchar_t)'\n')) != NULL; s++) | ||||
|             { | ||||
|                 line_count++; | ||||
|                 if (searches_result_line_number[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_number[0] = line_count; if (--searches_remaining <= 0) break; } | ||||
|                 if (searches_result_line_number[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_number[1] = line_count; if (--searches_remaining <= 0) break; } | ||||
|             } | ||||
|             //for (const ImWchar* s = text_begin; (s = (const ImWchar*)wcschr((const wchar_t*)s, (wchar_t)'\n')) != NULL; s++)  // FIXME-OPT: Could use this when wchar_t are 16-bits | ||||
|             for (const ImWchar* s = text_begin; *s != 0; s++) | ||||
|                 if (*s == '\n') | ||||
|                 { | ||||
|                     line_count++; | ||||
|                     if (searches_result_line_number[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_number[0] = line_count; if (--searches_remaining <= 0) break; } | ||||
|                     if (searches_result_line_number[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_number[1] = line_count; if (--searches_remaining <= 0) break; } | ||||
|                 } | ||||
|             line_count++; | ||||
|             if (searches_result_line_number[0] == -1) searches_result_line_number[0] = line_count; | ||||
|             if (searches_result_line_number[1] == -1) searches_result_line_number[1] = line_count; | ||||
| @@ -3714,8 +3715,11 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|                     break; | ||||
|                 if (rect_pos.y < clip_rect.y) | ||||
|                 { | ||||
|                     p = (const ImWchar*)wmemchr((const wchar_t*)p, '\n', text_selected_end - p); | ||||
|                     p = p ? p + 1 : text_selected_end; | ||||
|                     //p = (const ImWchar*)wmemchr((const wchar_t*)p, '\n', text_selected_end - p);  // FIXME-OPT: Could use this when wchar_t are 16-bits | ||||
|                     //p = p ? p + 1 : text_selected_end; | ||||
|                     while (p < text_selected_end) | ||||
|                         if (*p++ == '\n') | ||||
|                             break; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user