mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # examples/imgui_impl_opengl3.cpp # imgui.cpp
This commit is contained in:
		@@ -119,11 +119,15 @@ Other Changes:
 | 
			
		||||
  Set to 0.0f (default) to always make a close button appear on hover (same as Chrome, VS).
 | 
			
		||||
  Set to FLT_MAX to only display a close button when selected (merely hovering is not enough).
 | 
			
		||||
  Set to an intermediary value to toggle behavior based on width (same as Firefox).
 | 
			
		||||
- Fix GetGlyphRangesKorean() end-range to end at 0xD7A3 (instead of 0xD79D). (#348, #3217) [@marukrap]
 | 
			
		||||
- Metrics: Added a "Settings" section with some details about persistent ini settings.
 | 
			
		||||
- Nav, Menus: Fix vertical wrap-around in menus or popups created with multiple appending calls to
 | 
			
		||||
  BeginMenu()/EndMenu() or BeginPopup/EndPopup(). (#3223, #1207) [@rokups]
 | 
			
		||||
- Backends: Win32: Support for #define NOGDI, won't try to call GetDeviceCaps(). (#3137, #2327)
 | 
			
		||||
- Backends: Win32: Fix _WIN32_WINNT < 0x0600 (MinGW defaults to 0x502 == Windows 2003). (#3183)
 | 
			
		||||
- Backends: OpenGL: Fixed handling of GL 4.5+ glClipControl(GL_UPPER_LEFT) by inverting the
 | 
			
		||||
  projection matrix top and bottom values. (#3143, #3146) [@u3shit]
 | 
			
		||||
- Backends: OpenGL: On OSX, if unspecified by app, made default GLSL version 150. (#3199) [@albertvaka]
 | 
			
		||||
- Backends: Vulkan: Fixed error in if initial frame has no vertices. (#3177)
 | 
			
		||||
- Backends: Vulkan: Fixed edge case where render callbacks wouldn't be called if the ImDrawData
 | 
			
		||||
  structure didn't have any vertices. (#2697) [@kudaba]
 | 
			
		||||
 
 | 
			
		||||
@@ -194,7 +194,7 @@ Ongoing Dear ImGui development is financially supported by users and private spo
 | 
			
		||||
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/all/1), [Google](https://github.com/google/filament), [Nvidia](https://developer.nvidia.com/nvidia-omniverse), [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui/)
 | 
			
		||||
 | 
			
		||||
*Double-chocolate and Salty caramel sponsors*
 | 
			
		||||
- [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [Arkane Studios](https://www.arkane-studios.com), [Dotemu](http://www.dotemu.com), [Framefield](http://framefield.com), [Hexagon](https://hexagonxalt.com/the-technology/xalt-visualization), [Kylotonn](https://www.kylotonn.com), [Media Molecule](http://www.mediamolecule.com), [Mesh Consultants](https://www.meshconsultants.ca), [Mobigame](http://www.mobigame.net), [Nadeo](https://www.nadeo.com), [Supercell](http://www.supercell.com), [Remedy Entertainment](https://www.remedygames.com/), [Unit 2 Games](https://unit2games.com/)
 | 
			
		||||
- [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [Arkane Studios](https://www.arkane-studios.com), [Dotemu](http://www.dotemu.com), [Framefield](http://framefield.com), [Hexagon](https://hexagonxalt.com/the-technology/xalt-visualization), [Kylotonn](https://www.kylotonn.com), [Media Molecule](http://www.mediamolecule.com), [Mesh Consultants](https://www.meshconsultants.ca), [Mobigame](http://www.mobigame.net), [Nadeo](https://www.nadeo.com), [Next Level Games](https://www.nextlevelgames.com), [Supercell](http://www.supercell.com), [Remedy Entertainment](https://www.remedygames.com/), [Unit 2 Games](https://unit2games.com/)
 | 
			
		||||
 | 
			
		||||
From November 2014 to December 2019, ongoing development has also been financially supported by its users on Patreon and through individual donations. Please see [detailed list of Dear ImGui supporters](https://github.com/ocornut/imgui/wiki/Sponsors).
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2020-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2020-05-08: OpenGL: Made default GLSL version 150 (instead of 130) on OSX.
 | 
			
		||||
//  2020-04-21: OpenGL: Fixed handling of glClipControl(GL_UPPER_LEFT) by inverting projection matrix.
 | 
			
		||||
//  2020-04-12: OpenGL: Fixed context version check mistakenly testing for 4.0+ instead of 3.2+ to enable ImGuiBackendFlags_RendererHasVtxOffset.
 | 
			
		||||
//  2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader.
 | 
			
		||||
@@ -191,6 +192,9 @@ bool    ImGui_ImplOpenGL3_Init(const char* glsl_version)
 | 
			
		||||
#elif defined(IMGUI_IMPL_OPENGL_ES3)
 | 
			
		||||
    if (glsl_version == NULL)
 | 
			
		||||
        glsl_version = "#version 300 es";
 | 
			
		||||
#elif defined(__APPLE__)
 | 
			
		||||
    if (glsl_version == NULL)
 | 
			
		||||
        glsl_version = "#version 150";
 | 
			
		||||
#else
 | 
			
		||||
    if (glsl_version == NULL)
 | 
			
		||||
        glsl_version = "#version 130";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										157
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										157
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -931,9 +931,9 @@ static void             AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted
 | 
			
		||||
 | 
			
		||||
// Settings
 | 
			
		||||
static void             WindowSettingsHandler_ClearAll(ImGuiContext*, ImGuiSettingsHandler*);
 | 
			
		||||
static void             WindowSettingsHandler_ApplyAll(ImGuiContext*, ImGuiSettingsHandler*);
 | 
			
		||||
static void*            WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
 | 
			
		||||
static void             WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
 | 
			
		||||
static void             WindowSettingsHandler_ApplyAll(ImGuiContext*, ImGuiSettingsHandler*);
 | 
			
		||||
static void             WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);
 | 
			
		||||
 | 
			
		||||
// Platform Dependents default implementation for IO functions
 | 
			
		||||
@@ -949,6 +949,7 @@ static void             NavUpdateWindowingOverlay();
 | 
			
		||||
static void             NavUpdateMoveResult();
 | 
			
		||||
static float            NavUpdatePageUpPageDown();
 | 
			
		||||
static inline void      NavUpdateAnyRequestFlag();
 | 
			
		||||
static void             NavEndFrame();
 | 
			
		||||
static bool             NavScoreItem(ImGuiNavMoveResult* result, ImRect cand);
 | 
			
		||||
static void             NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id);
 | 
			
		||||
static ImVec2           NavCalcPreferredRefPos();
 | 
			
		||||
@@ -4133,9 +4134,9 @@ void ImGui::Initialize(ImGuiContext* context)
 | 
			
		||||
        ini_handler.TypeName = "Window";
 | 
			
		||||
        ini_handler.TypeHash = ImHashStr("Window");
 | 
			
		||||
        ini_handler.ClearAllFn = WindowSettingsHandler_ClearAll;
 | 
			
		||||
        ini_handler.ApplyAllFn = WindowSettingsHandler_ApplyAll;
 | 
			
		||||
        ini_handler.ReadOpenFn = WindowSettingsHandler_ReadOpen;
 | 
			
		||||
        ini_handler.ReadLineFn = WindowSettingsHandler_ReadLine;
 | 
			
		||||
        ini_handler.ApplyAllFn = WindowSettingsHandler_ApplyAll;
 | 
			
		||||
        ini_handler.WriteAllFn = WindowSettingsHandler_WriteAll;
 | 
			
		||||
        g.SettingsHandlers.push_back(ini_handler);
 | 
			
		||||
    }
 | 
			
		||||
@@ -4484,9 +4485,8 @@ void ImGui::EndFrame()
 | 
			
		||||
    // Draw modal whitening background on _other_ viewports than the one the modal is one
 | 
			
		||||
    EndFrameDrawDimmedBackgrounds();
 | 
			
		||||
 | 
			
		||||
    // Show CTRL+TAB list window
 | 
			
		||||
    if (g.NavWindowingTarget != NULL)
 | 
			
		||||
        NavUpdateWindowingOverlay();
 | 
			
		||||
    // Update navigation: CTRL+Tab, wrap-around requests
 | 
			
		||||
    NavEndFrame();
 | 
			
		||||
 | 
			
		||||
    SetCurrentViewport(NULL, NULL);
 | 
			
		||||
 | 
			
		||||
@@ -6793,6 +6793,15 @@ void ImGui::FocusWindow(ImGuiWindow* window)
 | 
			
		||||
    // Close popups if any
 | 
			
		||||
    ClosePopupsOverWindow(window, false);
 | 
			
		||||
 | 
			
		||||
    // Move the root window to the top of the pile
 | 
			
		||||
    IM_ASSERT(window == NULL || window->RootWindow != NULL);
 | 
			
		||||
    ImGuiWindow* focus_front_window = window ? window->RootWindowDockStop : NULL;
 | 
			
		||||
    ImGuiWindow* display_front_window = window ? window->RootWindow : NULL;
 | 
			
		||||
 | 
			
		||||
    // Steal focus on active widgets
 | 
			
		||||
    if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindowDockStop != focus_front_window)
 | 
			
		||||
        ClearActiveID();
 | 
			
		||||
 | 
			
		||||
    // Passing NULL allow to disable keyboard focus
 | 
			
		||||
    if (!window)
 | 
			
		||||
        return;
 | 
			
		||||
@@ -6802,16 +6811,6 @@ void ImGui::FocusWindow(ImGuiWindow* window)
 | 
			
		||||
    if (window->DockNode && window->DockNode->TabBar)
 | 
			
		||||
        window->DockNode->TabBar->SelectedTabId = window->DockNode->TabBar->NextSelectedTabId = window->ID;
 | 
			
		||||
 | 
			
		||||
    // Move the root window to the top of the pile
 | 
			
		||||
    IM_ASSERT(window->RootWindow != NULL);
 | 
			
		||||
    ImGuiWindow* focus_front_window = window->RootWindowDockStop;
 | 
			
		||||
    ImGuiWindow* display_front_window = window->RootWindow;
 | 
			
		||||
 | 
			
		||||
    // Steal focus on active widgets
 | 
			
		||||
    if (focus_front_window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement may be unnecessary? Need further testing before removing it..
 | 
			
		||||
        if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != focus_front_window)
 | 
			
		||||
            ClearActiveID();
 | 
			
		||||
 | 
			
		||||
    // Bring to front
 | 
			
		||||
    BringWindowToFocusFront(focus_front_window);
 | 
			
		||||
    if (((window->Flags | focus_front_window->Flags | display_front_window->Flags) & ImGuiWindowFlags_NoBringToFrontOnFocus) == 0)
 | 
			
		||||
@@ -8564,7 +8563,8 @@ void ImGui::EndPopup()
 | 
			
		||||
    IM_ASSERT(g.BeginPopupStack.Size > 0);
 | 
			
		||||
 | 
			
		||||
    // Make all menus and popups wrap around for now, may need to expose that policy.
 | 
			
		||||
    NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY);
 | 
			
		||||
    if (g.NavWindow == window)
 | 
			
		||||
        NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY);
 | 
			
		||||
 | 
			
		||||
    // Child-popups don't need to be laid out
 | 
			
		||||
    IM_ASSERT(g.WithinEndChild == false);
 | 
			
		||||
@@ -9060,36 +9060,11 @@ void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const Im
 | 
			
		||||
void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    if (g.NavWindow != window || !NavMoveRequestButNoResultYet() || g.NavMoveRequestForward != ImGuiNavForward_None || g.NavLayer != ImGuiNavLayer_Main)
 | 
			
		||||
        return;
 | 
			
		||||
    IM_ASSERT(move_flags != 0); // No points calling this with no wrapping
 | 
			
		||||
    ImRect bb_rel = window->NavRectRel[0];
 | 
			
		||||
 | 
			
		||||
    ImGuiDir clip_dir = g.NavMoveDir;
 | 
			
		||||
    if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
 | 
			
		||||
    {
 | 
			
		||||
        bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->ContentSize.x + window->WindowPadding.x * 2.0f) - window->Scroll.x;
 | 
			
		||||
        if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; }
 | 
			
		||||
        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
    }
 | 
			
		||||
    if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
 | 
			
		||||
    {
 | 
			
		||||
        bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x;
 | 
			
		||||
        if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(+bb_rel.GetHeight()); clip_dir = ImGuiDir_Down; }
 | 
			
		||||
        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
    }
 | 
			
		||||
    if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
 | 
			
		||||
    {
 | 
			
		||||
        bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->ContentSize.y + window->WindowPadding.y * 2.0f) - window->Scroll.y;
 | 
			
		||||
        if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; }
 | 
			
		||||
        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
    }
 | 
			
		||||
    if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
 | 
			
		||||
    {
 | 
			
		||||
        bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y;
 | 
			
		||||
        if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(+bb_rel.GetWidth()); clip_dir = ImGuiDir_Right; }
 | 
			
		||||
        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
    }
 | 
			
		||||
    // Navigation wrap-around logic is delayed to the end of the frame because this operation is only valid after entire
 | 
			
		||||
    // popup is assembled and in case of appended popups it is not clear which EndPopup() call is final.
 | 
			
		||||
    g.NavWrapRequestWindow = window;
 | 
			
		||||
    g.NavWrapRequestFlags = move_flags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FIXME: This could be replaced by updating a frame number in each window when (window == NavWindow) and (NavLayer == 0).
 | 
			
		||||
@@ -9224,6 +9199,8 @@ static void ImGui::NavUpdate()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    g.IO.WantSetMousePos = false;
 | 
			
		||||
    g.NavWrapRequestWindow = NULL;
 | 
			
		||||
    g.NavWrapRequestFlags = ImGuiNavMoveFlags_None;
 | 
			
		||||
#if 0
 | 
			
		||||
    if (g.NavScoringCount > 0) IMGUI_DEBUG_LOG("NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -9637,6 +9614,68 @@ static float ImGui::NavUpdatePageUpPageDown()
 | 
			
		||||
    return 0.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ImGui::NavEndFrame()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
 | 
			
		||||
    // Show CTRL+TAB list window
 | 
			
		||||
    if (g.NavWindowingTarget != NULL)
 | 
			
		||||
        NavUpdateWindowingOverlay();
 | 
			
		||||
 | 
			
		||||
    // Perform wrap-around in menus
 | 
			
		||||
    ImGuiWindow* window = g.NavWrapRequestWindow;
 | 
			
		||||
    ImGuiNavMoveFlags move_flags = g.NavWrapRequestFlags;
 | 
			
		||||
    if (window != NULL && g.NavWindow == window && NavMoveRequestButNoResultYet() && g.NavMoveRequestForward == ImGuiNavForward_None && g.NavLayer == ImGuiNavLayer_Main)
 | 
			
		||||
    {
 | 
			
		||||
        IM_ASSERT(move_flags != 0); // No points calling this with no wrapping
 | 
			
		||||
        ImRect bb_rel = window->NavRectRel[0];
 | 
			
		||||
 | 
			
		||||
        ImGuiDir clip_dir = g.NavMoveDir;
 | 
			
		||||
        if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
 | 
			
		||||
        {
 | 
			
		||||
            bb_rel.Min.x = bb_rel.Max.x =
 | 
			
		||||
                ImMax(window->SizeFull.x, window->ContentSize.x + window->WindowPadding.x * 2.0f) - window->Scroll.x;
 | 
			
		||||
            if (move_flags & ImGuiNavMoveFlags_WrapX)
 | 
			
		||||
            {
 | 
			
		||||
                bb_rel.TranslateY(-bb_rel.GetHeight());
 | 
			
		||||
                clip_dir = ImGuiDir_Up;
 | 
			
		||||
            }
 | 
			
		||||
            NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
        }
 | 
			
		||||
        if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
 | 
			
		||||
        {
 | 
			
		||||
            bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x;
 | 
			
		||||
            if (move_flags & ImGuiNavMoveFlags_WrapX)
 | 
			
		||||
            {
 | 
			
		||||
                bb_rel.TranslateY(+bb_rel.GetHeight());
 | 
			
		||||
                clip_dir = ImGuiDir_Down;
 | 
			
		||||
            }
 | 
			
		||||
            NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
        }
 | 
			
		||||
        if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
 | 
			
		||||
        {
 | 
			
		||||
            bb_rel.Min.y = bb_rel.Max.y =
 | 
			
		||||
                ImMax(window->SizeFull.y, window->ContentSize.y + window->WindowPadding.y * 2.0f) - window->Scroll.y;
 | 
			
		||||
            if (move_flags & ImGuiNavMoveFlags_WrapY)
 | 
			
		||||
            {
 | 
			
		||||
                bb_rel.TranslateX(-bb_rel.GetWidth());
 | 
			
		||||
                clip_dir = ImGuiDir_Left;
 | 
			
		||||
            }
 | 
			
		||||
            NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
        }
 | 
			
		||||
        if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
 | 
			
		||||
        {
 | 
			
		||||
            bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y;
 | 
			
		||||
            if (move_flags & ImGuiNavMoveFlags_WrapY)
 | 
			
		||||
            {
 | 
			
		||||
                bb_rel.TranslateX(+bb_rel.GetWidth());
 | 
			
		||||
                clip_dir = ImGuiDir_Right;
 | 
			
		||||
            }
 | 
			
		||||
            NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
@@ -10617,24 +10656,11 @@ static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandl
 | 
			
		||||
    g.SettingsWindows.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Apply to existing windows (if any)
 | 
			
		||||
static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *ctx;
 | 
			
		||||
    for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
 | 
			
		||||
        if (settings->WantApply)
 | 
			
		||||
        {
 | 
			
		||||
            if (ImGuiWindow* window = ImGui::FindWindowByID(settings->ID))
 | 
			
		||||
                ApplyWindowSettings(window, settings);
 | 
			
		||||
            settings->WantApply = false;
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindowSettings* settings = ImGui::FindOrCreateWindowSettings(name);
 | 
			
		||||
    ImGuiID id = settings->ID;
 | 
			
		||||
    *settings = ImGuiWindowSettings();
 | 
			
		||||
    *settings = ImGuiWindowSettings(); // Clear existing if recycling previous entry
 | 
			
		||||
    settings->ID = id;
 | 
			
		||||
    settings->WantApply = true;
 | 
			
		||||
    return (void*)settings;
 | 
			
		||||
@@ -10656,6 +10682,19 @@ static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*,
 | 
			
		||||
    else if (sscanf(line, "ClassId=0x%X", &u1) == 1)            { settings->ClassId = u1; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Apply to existing windows (if any)
 | 
			
		||||
static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *ctx;
 | 
			
		||||
    for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
 | 
			
		||||
        if (settings->WantApply)
 | 
			
		||||
        {
 | 
			
		||||
            if (ImGuiWindow* window = ImGui::FindWindowByID(settings->ID))
 | 
			
		||||
                ApplyWindowSettings(window, settings);
 | 
			
		||||
            settings->WantApply = false;
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
 | 
			
		||||
{
 | 
			
		||||
    // Gather data from windows that were active during this session
 | 
			
		||||
 
 | 
			
		||||
@@ -2346,7 +2346,7 @@ const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
 | 
			
		||||
    {
 | 
			
		||||
        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
			
		||||
        0x3131, 0x3163, // Korean alphabets
 | 
			
		||||
        0xAC00, 0xD79D, // Korean characters
 | 
			
		||||
        0xAC00, 0xD7A3, // Korean characters
 | 
			
		||||
        0,
 | 
			
		||||
    };
 | 
			
		||||
    return &ranges[0];
 | 
			
		||||
 
 | 
			
		||||
@@ -1381,6 +1381,8 @@ struct ImGuiContext
 | 
			
		||||
    ImGuiNavMoveResult      NavMoveResultLocal;                 // Best move request candidate within NavWindow
 | 
			
		||||
    ImGuiNavMoveResult      NavMoveResultLocalVisibleSet;       // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
 | 
			
		||||
    ImGuiNavMoveResult      NavMoveResultOther;                 // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
 | 
			
		||||
    ImGuiWindow*            NavWrapRequestWindow;               // Window which requested trying nav wrap-around.
 | 
			
		||||
    ImGuiNavMoveFlags       NavWrapRequestFlags;                // Wrap-around operation flags.
 | 
			
		||||
 | 
			
		||||
    // Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
 | 
			
		||||
    ImGuiWindow*            NavWindowingTarget;                 // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most!
 | 
			
		||||
@@ -1566,6 +1568,8 @@ struct ImGuiContext
 | 
			
		||||
        NavMoveRequestForward = ImGuiNavForward_None;
 | 
			
		||||
        NavMoveRequestKeyMods = ImGuiKeyModFlags_None;
 | 
			
		||||
        NavMoveDir = NavMoveDirLast = NavMoveClipDir = ImGuiDir_None;
 | 
			
		||||
        NavWrapRequestWindow = NULL;
 | 
			
		||||
        NavWrapRequestFlags = ImGuiNavMoveFlags_None;
 | 
			
		||||
 | 
			
		||||
        NavWindowingTarget = NavWindowingTargetAnim = NavWindowingListWindow = NULL;
 | 
			
		||||
        NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
 | 
			
		||||
 
 | 
			
		||||
@@ -2977,7 +2977,7 @@ bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImG
 | 
			
		||||
            DataTypeClamp(data_type, p_data, p_clamp_min, p_clamp_max);
 | 
			
		||||
 | 
			
		||||
        // Only mark as edited if new value is different
 | 
			
		||||
        value_changed = memcmp(&data_type, p_data, data_type_size) != 0;
 | 
			
		||||
        value_changed = memcmp(&data_backup, p_data, data_type_size) != 0;
 | 
			
		||||
        if (value_changed)
 | 
			
		||||
            MarkItemEdited(id);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user