From 0f3fc7dc92dc616345855ec0dd97ead19cb90099 Mon Sep 17 00:00:00 2001 From: Sammy Fatnassi Date: Mon, 18 Jul 2022 16:56:41 +0900 Subject: [PATCH] NetImgui 1.8 update (#35) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed a few issues -Prevent client crash when Dear Imgui has 0 draws -Fixed 32bits Client rendering issues -Added Dear ImGui 1.87 compatibility test * Make sure new client connection RT is cleared Prevents seeing previous client content until 1st DrawCommand is received * Skip preamble when parsing command line host;port (#25) * Bug fix for command line parsing including the executable location. * Add some safety to command line parsing. * Coverity warning fixes Fixes some issues found by Coverity static analyser * Fix to null check & change vertex UV range * * Fix data race between reading and writing pending textures (#26) (#28) Signed-off-by: Kostiantyn * VS2022 warning fixes * Fix accept thread not getting properly signalled to stop on certain platforms (#33) * Version update * *Update DearImGui lib to 1.88 WIP version (#31) * *Update DearImGui lib to 1.88 WIP version Remove direct access to obsolete key arrays for version starts from 1.87 Replace ImGui opengl loader by glad Signed-off-by: Kostiantyn * *Add back compatibility for keyboard keys transfer between server and client Signed-off-by: Kostiantyn * * Update DearImgui lib to 1879 version Signed-off-by: Kostiantyn * * Add debug libs for glfw - Fix CmdInput for compatibility tests - Add linking for glfw debug lib - Update glfw to version 3.3 Signed-off-by: Kostiantyn * Some OpenGl build fixes Also reimported NetImguiServer_App_win32dx11.cpp from latest dear imgui sample main.cpp, makign sure it fits the current backend * Added NoBackend sample New Sample demonstrating use of Dear Imgui without any Backend. -Useful for hardward without display/input. Refactored the Dear Imgui compatibility test to now be console application trying to connect to NetImguiServer (using NoBackend sample code) -This allows making sure older Dear ImGui works with current NetImgui (instead of only testing that it compiles) * Support of the new Dear ImGui in put api Fixed compatibility with older Dear ImGui version * Added Gamepad support * Updated to Dear ImGui 1.88 (docking branch) * Visual Studio 2022 LLVM build fix Runtime library switched to DLL * Center server popup Center server popup on parent Window when they first appear Bug fix that prevent server asset copy in post build step * readme update Co-authored-by: Jeff <96199164+rtjeffk@users.noreply.github.com> Co-authored-by: Kostiantyn Chernenok <44094399+lemantisee@users.noreply.github.com> Co-authored-by: VĂ­ctor Popovici <557049+TheAnswer@users.noreply.github.com> --- Build/GenerateCompatibilityTest.bat | 10 +- Build/netImgui.sharpmake.cs | 86 +- Build/shared.sharpmake.cs | 88 +- Code/Client/NetImgui_Api.h | 28 +- Code/Client/Private/NetImgui_Api.cpp | 206 +- Code/Client/Private/NetImgui_Client.cpp | 45 +- Code/Client/Private/NetImgui_Client.h | 27 +- Code/Client/Private/NetImgui_CmdPackets.h | 185 +- Code/Client/Private/NetImgui_CmdPackets.inl | 17 +- .../Private/NetImgui_CmdPackets_DrawFrame.cpp | 49 +- .../Private/NetImgui_CmdPackets_DrawFrame.h | 4 +- Code/Client/Private/NetImgui_NetworkPosix.cpp | 1 + Code/Client/Private/NetImgui_NetworkWin32.cpp | 1 + Code/Client/Private/NetImgui_Shared.h | 1 + Code/Client/Private/NetImgui_Shared.inl | 18 +- Code/Client/Private/NetImgui_WarningDisable.h | 2 + .../Private/NetImgui_WarningDisableImgui.h | 4 +- Code/Sample/Common/main.cpp | 6 +- .../SampleNoBackend/SampleNoBackend.cpp | 177 + .../GlfwGL3/NetImguiServer_App_GlfwGL3.cpp | 42 +- .../Source/GlfwGL3/NetImguiServer_HAL_GL3.cpp | 3 +- .../GlfwGL3/NetImguiServer_HAL_Glfw.cpp | 22 - Code/ServerApp/Source/NetImguiServer_App.cpp | 7 +- Code/ServerApp/Source/NetImguiServer_App.h | 2 - .../Source/NetImguiServer_Network.cpp | 6 +- .../Source/NetImguiServer_RemoteClient.cpp | 80 +- Code/ServerApp/Source/NetImguiServer_UI.cpp | 75 +- .../NetImguiServer_App_win32dx11.cpp | 15 +- .../Win32DX11/NetImguiServer_HAL_win32.cpp | 18 - Code/ThirdParty/DearImgui/LICENSE.txt | 2 +- .../DearImgui/backends/imgui_impl_dx11.cpp | 17 +- .../DearImgui/backends/imgui_impl_dx11.h | 4 +- .../DearImgui/backends/imgui_impl_glfw.cpp | 577 ++- .../DearImgui/backends/imgui_impl_glfw.h | 20 +- .../DearImgui/backends/imgui_impl_opengl3.cpp | 117 +- .../DearImgui/backends/imgui_impl_opengl3.h | 6 +- .../backends/imgui_impl_opengl3_loader.h | 6 + .../DearImgui/backends/imgui_impl_win32.cpp | 475 ++- .../DearImgui/backends/imgui_impl_win32.h | 8 +- Code/ThirdParty/DearImgui/imconfig.h | 24 +- Code/ThirdParty/DearImgui/imgui.cpp | 3283 +++++++++++------ Code/ThirdParty/DearImgui/imgui.h | 610 +-- Code/ThirdParty/DearImgui/imgui_demo.cpp | 312 +- Code/ThirdParty/DearImgui/imgui_draw.cpp | 202 +- Code/ThirdParty/DearImgui/imgui_internal.h | 438 ++- Code/ThirdParty/DearImgui/imgui_tables.cpp | 79 +- Code/ThirdParty/DearImgui/imgui_widgets.cpp | 977 ++--- Code/ThirdParty/DearImgui/imstb_rectpack.h | 42 +- Code/ThirdParty/DearImgui/imstb_textedit.h | 14 +- Code/ThirdParty/DearImgui/imstb_truetype.h | 822 +++-- Code/ThirdParty/glfw/include/GLFW/glfw3.h | 2724 +++++++++++--- .../glfw/include/GLFW/glfw3native.h | 222 +- .../glfw/lib-vc2019-32/glfw3_mt.lib | Bin 0 -> 527314 bytes .../glfw/lib-vc2019-32/glfw3_mtd.lib | Bin 0 -> 862134 bytes .../glfw/lib-vc2019-64/glfw3_mt.lib | Bin 649750 -> 641926 bytes .../glfw/lib-vc2019-64/glfw3_mtd.lib | Bin 0 -> 918864 bytes .../glfw/lib-vc2022-32/glfw3_mt.lib | Bin 0 -> 528132 bytes .../glfw/lib-vc2022-32/glfw3_mtd.lib | Bin 0 -> 1099612 bytes .../glfw/lib-vc2022-64/glfw3_mt.lib | Bin 0 -> 642648 bytes .../glfw/lib-vc2022-64/glfw3_mtd.lib | Bin 0 -> 1154996 bytes README.md | 63 +- 61 files changed, 8540 insertions(+), 3729 deletions(-) create mode 100644 Code/Sample/SampleNoBackend/SampleNoBackend.cpp create mode 100644 Code/ThirdParty/glfw/lib-vc2019-32/glfw3_mt.lib create mode 100644 Code/ThirdParty/glfw/lib-vc2019-32/glfw3_mtd.lib create mode 100644 Code/ThirdParty/glfw/lib-vc2019-64/glfw3_mtd.lib create mode 100644 Code/ThirdParty/glfw/lib-vc2022-32/glfw3_mt.lib create mode 100644 Code/ThirdParty/glfw/lib-vc2022-32/glfw3_mtd.lib create mode 100644 Code/ThirdParty/glfw/lib-vc2022-64/glfw3_mt.lib create mode 100644 Code/ThirdParty/glfw/lib-vc2022-64/glfw3_mtd.lib diff --git a/Build/GenerateCompatibilityTest.bat b/Build/GenerateCompatibilityTest.bat index 1cc8a59..1ff00c6 100644 --- a/Build/GenerateCompatibilityTest.bat +++ b/Build/GenerateCompatibilityTest.bat @@ -6,7 +6,7 @@ cls :: SETTINGS ::----------------------------------------------------------------------------------- :: List of offical Dear ImGui (from official depot) -set VERSIONS=(v1.70 v1.71 v1.72 v1.73 v1.74 v1.75 v1.76 v1.77 v1.78 v1.79, v1.80, v1.81, v1.82, v1.83, v1.84, v1.85, v1.86) +set VERSIONS=(v1.71 v1.72 v1.73 v1.74 v1.75 v1.76 v1.77 v1.78 v1.79, v1.80, v1.81, v1.82, v1.83, v1.84, v1.85, v1.86, v1.87, v1.88) :: List of custom Dear ImGui releases (from own depot) set EXTRA_VERSIONS=(dock-1-76, dock-1-80) @@ -49,7 +49,7 @@ for %%v in %VERSIONS% do ( echo !IMGUI_FILEPATH! curl -LJ !IMGUI_FILEPATH! --output !IMGUI_FILE! tar -xzf !IMGUI_FILE! - del !IMGUI_FILE! + ::del !IMGUI_FILE! echo. ) for %%v in %EXTRA_VERSIONS% do ( @@ -71,7 +71,7 @@ type compatibility.sharpmake.cs.1 > %COMPAT_FILE% :: Declare each compatibility project (1 per Imgui version) for /D %%d IN (%IMGUI_DIR%\*) DO ( call :GenerateProjectName %%d - echo [Sharpmake.Generate] public class !NetImguiName! : ProjectNetImgui { public !NetImguiName!^(^): base^(@"%%d"^){} } >> %COMPAT_FILE% + echo [Sharpmake.Generate] public class !NetImguiName! : ProjectNoBackend { public !NetImguiName!^(^): base^("!NetImguiName!", @"%%d"^){} } >> %COMPAT_FILE% ) type compatibility.sharpmake.cs.2 >> %COMPAT_FILE% @@ -92,10 +92,10 @@ pause exit /b %errorlevel% :: Take a Imgui install path, and make it into a NetImgui project name -:: By keeping only the last direcotory name and removing '-' and '.' +:: By keeping only the last directory name and removing '-' and '.' :GenerateProjectName set NetImguiName=%~nx1 set NetImguiName=%NetImguiName:-=_% set NetImguiName=%NetImguiName:.=_% - set NetImguiName=ProjectNetImgui_%NetImguiName% + set NetImguiName=ProjectCompatibility_%NetImguiName% exit /b 0 diff --git a/Build/netImgui.sharpmake.cs b/Build/netImgui.sharpmake.cs index 13a2575..a5b4a04 100644 --- a/Build/netImgui.sharpmake.cs +++ b/Build/netImgui.sharpmake.cs @@ -61,9 +61,9 @@ public ProjectNetImguiServer() //--------------------------------------------- // For the OpenGL Server build - AdditionalSourceRootPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\gl3w")); - AdditionalSourceRootPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glfw\include")); - SourceFilesBuildExcludeRegex.Add(@"ThirdParty\\gl3w\\"); + AdditionalSourceRootPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glfw\include")); + AdditionalSourceRootPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glad30core\include")); + AdditionalSourceRootPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glad30core\src")); SourceFilesBuildExcludeRegex.Add(@"ThirdParty\\glfw\\"); //--------------------------------------------- } @@ -72,22 +72,44 @@ public override void ConfigureAll(Configuration conf, NetImguiTarget target) { base.ConfigureAll(conf, target); - AddDependencyImguiIndex32(conf, target); + AddDependencyImguiServer(conf, target); conf.AddPublicDependency(target); + conf.Defines.Add("IS_NETIMGUISERVER=1"); // + conf.Defines.Add("ImTextureID=ImU64"); // Server must absolutly use at minimum 64bits texture id, even when compiled in 32 bits + conf.IncludePaths.Add(SourceRootPath + @"\Source"); conf.IncludePaths.Add(NetImguiTarget.GetPath(ProjectImgui.sDefaultPath)); conf.IncludePaths.Add(NetImguiTarget.GetPath(@"\Code\Client")); //--------------------------------------------- // For the OpenGL Server build - conf.IncludePaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\gl3w")); conf.IncludePaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glfw\include")); - if( target.DevEnv == DevEnv.vs2019 ) conf.LibraryPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glfw\lib-vc2019-64")); - else if( target.DevEnv == DevEnv.vs2017 ) conf.LibraryPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glfw\lib-vc2017-64")); + conf.LibraryPaths.Add(NetImguiTarget.GetPath(@"\Code\ThirdParty\glfw\" + getGlfwLibName(target.Platform, target.DevEnv))); + conf.Options.Add(new Options.Vc.Linker.DisableSpecificWarnings("4099")); //Prevents: warning LNK4099: PDB '' was not found with 'glfw3_mtd.lib(context.c.obj)' or at ''; linking object as if no debug info //--------------------------------------------- - conf.EventPostBuild.Add(@"xcopy " + NetImguiTarget.GetPath(@"\Code\ServerApp\Background.png") + " " + conf.TargetPath + " /D /Y"); + conf.EventPostBuild.Add("xcopy \"" + NetImguiTarget.GetPath(@"\Code\ServerApp\Background.png") + "\" \"" + conf.TargetPath + "\" /D /Y"); + } + + private string getGlfwLibName(Platform platform, DevEnv developerEnv) + { + string libName = "lib"; + if( developerEnv == DevEnv.vs2022 ){ + libName += "-vc2022"; + } else if( developerEnv == DevEnv.vs2019 ) { + libName += "-vc2019"; + } else if( developerEnv == DevEnv.vs2017 ) { + libName += "-vc2017"; + } + + if (platform == Platform.win64) { + libName += "-64"; + } else if (platform == Platform.win32) { + libName += "-32"; + } + + return libName; } } @@ -152,6 +174,23 @@ public override void ConfigureAll(Configuration conf, NetImguiTarget target) } } + //------------------------------------------------------------------------- + // This sample does not have a UI Window, only show a console and wait + // for a connection to NetImguiServer. when connected, Display its + // Dear ImGui content normally, on the remote server. + // Usefull to demonstrate being able to use NetImgui without even needing to + // implement a Backend support (windows / renderer / input) on the client. + // It also compiles the Dear ImGui/NetImgui sources directly + //------------------------------------------------------------------------- + [Sharpmake.Generate] + public class ProjectSample_NoBackend : ProjectNoBackend + { + public ProjectSample_NoBackend() + : base("SampleNoBackend","") + { + } + } + // [Sharpmake.Generate] public class ProjectSample_Compression : ProjectBase @@ -183,6 +222,33 @@ public override void ConfigureAll(Configuration conf, NetImguiTarget target) } } + // + [Sharpmake.Generate] + public class ProjectSample_SampleCompatibility : ProjectBase + { + // This sample does not includes the Dear Imgui or NetImgui Library included. + // They are instead compiled inside this project. This allows to test various + // older version of Dear ImGui against our NetImgui Server compiled + // with latest version + public ProjectSample_SampleCompatibility() + : base(true) + { + Name = "Compatibility"; + SourceRootPath = NetImguiTarget.GetPath(@"\Code\Sample\SampleCompatibility"); + SourceFiles.Add(@"C:\GitHub\NetImguiDev\Build\..\_generated\imgui\imgui-1.88\*.cpp"); + SourceFiles.Add(@"C:\GitHub\NetImguiDev\Build\..\_generated\imgui\imgui-1.88\*.h"); + } + + public override void ConfigureAll(Configuration conf, NetImguiTarget target) + { + base.ConfigureAll(conf, target); + conf.IncludePaths.Add(@"C:\GitHub\NetImguiDev\Build\..\_generated\imgui\imgui-1.88\"); + conf.IncludePaths.Add(NetImguiTarget.GetPath(@"\Code\Client")); + + conf.Options.Add(Options.Vc.Linker.SubSystem.Console); + + } + } //============================================================================================= // SOLUTIONS @@ -211,7 +277,9 @@ public static void AddSampleProjects(Configuration conf, NetImguiTarget target) conf.AddProject(target, false, SolutionFolder); conf.AddProject(target, false, SolutionFolder); conf.AddProject(target, false, SolutionFolder); - // Adding an already auto included dependcy, so it can be moved to more appropriate folder + conf.AddProject(target, false, SolutionFolder); + + // Adding an already auto included dependency, so it can be moved to more appropriate folder conf.AddProject(target, false, "CompatibilityTest"); } } diff --git a/Build/shared.sharpmake.cs b/Build/shared.sharpmake.cs index ac1c613..4b0a119 100644 --- a/Build/shared.sharpmake.cs +++ b/Build/shared.sharpmake.cs @@ -33,13 +33,13 @@ public class NetImguiTarget : ITarget public NetImguiTarget() { DevEnv = DevEnv.vs2019; - Platform = Platform.win64; + Platform = Platform.win64 | Platform.win32; Optimization = Optimization.Debug | Optimization.Release; Compiler = Compiler.MSBuild | Compiler.Clang; } // Generates a solution for each Visual Studio version found - // Note: Add a Clang target when detected isntalled for that Visual Studio version + // Note: Add a Clang target when detected installed for that Visual Studio version static public NetImguiTarget[] CreateTargets() { List targets = new List(); @@ -175,6 +175,11 @@ public virtual void ConfigureAll(Configuration conf, NetImguiTarget target) conf.Defines.Add("_HAS_EXCEPTIONS=0"); // Prevents error in VisualStudio c++ library with NoExcept, like xlocale conf.Defines.Add("IMGUI_DISABLE_OBSOLETE_FUNCTIONS"); // Enforce using up to date Dear ImGui Api (In Server, Compatibility tests and Samples) + if (target.Optimization == Optimization.Debug) + conf.Options.Add(Options.Vc.Compiler.RuntimeLibrary.MultiThreadedDebugDLL); + else + conf.Options.Add(Options.Vc.Compiler.RuntimeLibrary.MultiThreadedDLL); + if( target.Compiler == Compiler.MSBuild ){ conf.Options.Add(new Options.Vc.Compiler.DisableSpecificWarnings("")); conf.Options.Add(Options.Vc.Librarian.TreatLibWarningAsErrors.Enable); //Note: Clang VS2019 doesn't support this option properly @@ -202,6 +207,12 @@ public void AddDependencyImguiIndex32(Configuration conf, NetImguiTarget target) EnabledImguiIndex32Bits(conf); } + public void AddDependencyImguiServer(Configuration conf, NetImguiTarget target) + { + conf.AddPublicDependency(target); + EnabledImguiIndex32Bits(conf); + } + public void EnabledImguiIndex16Bits(Configuration conf) { } @@ -256,6 +267,20 @@ public override void ConfigureAll(Configuration conf, NetImguiTarget target) } } + // Dear ImGui Library, 32bits index & 64 bits textureID + [Sharpmake.Generate] + public class ProjectImguiServer : ProjectImgui + { + public ProjectImguiServer() { Name = "DearImguiServerLib"; } + + public override void ConfigureAll(Configuration conf, NetImguiTarget target) + { + base.ConfigureAll(conf, target); + conf.Defines.Add("ImTextureID=ImU64"); // Server must absolutly use at minimum 64bits texture id, even when compiled in 32 bits + EnabledImguiIndex32Bits(conf); + } + } + //--------------------------------------------------------------------------------------------- // NETIMGUI Project //--------------------------------------------------------------------------------------------- @@ -265,10 +290,10 @@ public class ProjectNetImgui : ProjectBase public ProjectNetImgui(string imguiFullPath) : base(false) { - mVersion = Path.GetFileName(imguiFullPath); - mImguiPath = imguiFullPath; - Name = "NetImguiLib (" + mVersion + ")"; - SourceRootPath = NetImguiTarget.GetPath(@"\Code\Client"); + mVersion = Path.GetFileName(imguiFullPath); + mImguiPath = imguiFullPath; + Name = "NetImguiLib (" + mVersion + ")"; + SourceRootPath = NetImguiTarget.GetPath(@"\Code\Client"); SourceFiles.Add(mImguiPath + @"\imgui.h"); } @@ -308,12 +333,61 @@ public override void ConfigureAll(Configuration conf, NetImguiTarget target) AddDependencyImguiIndex32(conf, target); conf.AddPublicDependency(target); } - conf.IncludePaths.Add(ProjectImgui.sDefaultPath); + conf.IncludePaths.Add(NetImguiTarget.GetPath(ProjectImgui.sDefaultPath)); conf.IncludePaths.Add(NetImguiTarget.GetPath(@"\Code\Client")); } bool mUseIndex32; } + // Compile a console program, with Dear ImGui and NetImgui sources + // included directly. The Dear ImGui code does not include any backend, + // only try connecting the the NetImgui Server to draw its content remotely. + [Sharpmake.Generate] + public class ProjectNoBackend : ProjectBase + { + public ProjectNoBackend(string inName, string inImguiFullPath) + : base(true) + { + mImguiFullPath = string.IsNullOrEmpty(inImguiFullPath) ? NetImguiTarget.GetPath(ProjectImgui.sDefaultPath) : inImguiFullPath; + Name = inName; + SourceRootPath = NetImguiTarget.GetPath(@"\Code\Sample\SampleNoBackend"); + + // Find the Dear Imgui Sources files + string[] sourceExtensions = new string[]{".h",".cpp"}; + var files = Directory.EnumerateFiles(mImguiFullPath, "*.*", SearchOption.TopDirectoryOnly); + foreach (var file in files) + { + if (sourceExtensions.Contains(Path.GetExtension(file), StringComparer.OrdinalIgnoreCase)){ + //Console.WriteLine("File Added: {0}", Path.GetFullPath(file)); + SourceFiles.Add(Path.GetFullPath(file)); + } + }; + } + + public override void ConfigureAll(Configuration conf, NetImguiTarget target) + { + base.ConfigureAll(conf, target); + conf.IncludePaths.Add(mImguiFullPath); + conf.IncludePaths.Add(NetImguiTarget.GetPath(@"\Code\Client")); + conf.Options.Add(Options.Vc.Linker.SubSystem.Console); + conf.LibraryFiles.Add("ws2_32.lib"); + + // Remove a some Dear ImGui sources compile warning + if( target.Compiler == Compiler.MSBuild ){ + conf.Options.Add(new Options.Vc.Compiler.DisableSpecificWarnings("4100")); // warning C4100: xxx: unreferenced formal parameter + conf.Options.Add(new Options.Vc.Compiler.DisableSpecificWarnings("4189")); // warning C4189: xxx: unused local variable + } + else if ( target.Compiler == Compiler.Clang ){ + conf.Options.Add(Options.Vc.General.PlatformToolset.ClangCL); + conf.AdditionalCompilerOptions.Add("-Wno-unknown-warning-option"); + conf.AdditionalCompilerOptions.Add("-Wno-unused-parameter"); + conf.AdditionalCompilerOptions.Add("-Wno-unused-variable"); + conf.AdditionalCompilerOptions.Add("-Wno-unused-but-set-variable"); + } + } + string mImguiFullPath; + } + //============================================================================================= // SOLUTIONS //============================================================================================= diff --git a/Code/Client/NetImgui_Api.h b/Code/Client/NetImgui_Api.h index 2280f68..c656910 100644 --- a/Code/Client/NetImgui_Api.h +++ b/Code/Client/NetImgui_Api.h @@ -4,17 +4,15 @@ //! @Name : NetImgui //================================================================================================= //! @author : Sammy Fatnassi -//! @date : 2022/01/31 -//! @version : v1.7.5 +//! @date : 2022/06/19 +//! @version : v1.7.7 //! @Details : For integration info : https://github.com/sammyfreg/netImgui/wiki //================================================================================================= -#define NETIMGUI_VERSION "1.7.5" -#define NETIMGUI_VERSION_NUM 10705 +#define NETIMGUI_VERSION "1.7.7" +#define NETIMGUI_VERSION_NUM 10707 + -#ifdef NETIMGUI_IMPLEMENTATION - #define NETIMGUI_INTERNAL_INCLUDE -#endif //------------------------------------------------------------------------------------------------- // Deactivate a few warnings to allow Imgui header include @@ -23,7 +21,9 @@ #if defined (__clang__) #pragma clang diagnostic push // ImGui.h warnings(s) + #pragma clang diagnostic ignored "-Wunknown-warning-option" #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" + #pragma clang diagnostic ignored "-Wreserved-identifier" // Enuma values using '__' or member starting with '_' in imgui.h // NetImgui_Api.h Warning(s) #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // Not using nullptr in case this file is used in pre C++11 #elif defined(_MSC_VER) @@ -40,7 +40,14 @@ // 'imgui.h' : always // 'imgui_internal.h' when 'NETIMGUI_INTERNAL_INCLUDE' is defined //================================================================================================= -#include "NetImgui_Config.h" +#ifdef NETIMGUI_IMPLEMENTATION + #define NETIMGUI_INTERNAL_INCLUDE + #include "NetImgui_Config.h" + #undef NETIMGUI_INTERNAL_INCLUDE +#else + #include "NetImgui_Config.h" +#endif + //------------------------------------------------------------------------------------------------- // If 'NETIMGUI_ENABLED' hasn't been defined yet (in project settings or NetImgui_Config.h') @@ -161,8 +168,8 @@ NETIMGUI_API bool IsDrawingRemote(void); NETIMGUI_API void SendDataTexture(ImTextureID textureId, void* pData, uint16_t width, uint16_t height, eTexFormat format); //================================================================================================= -// Start a new Imgui Frame and wait for Draws commands, using a ImGui created internally -// for remote drawing. Returns true if we are awaiting a new ImGui frame. +// Start a new Imgui Frame and wait for Draws commands, using ImContext that was active on connect. +// Returns true if we are awaiting a new ImGui frame. // // All ImGui drawing should be skipped when return is false. // @@ -223,7 +230,6 @@ NETIMGUI_API uint32_t GetTexture_BytePerImage (eTexFormat eFormat, uint32_t pi #include "Private/NetImgui_NetworkPosix.cpp" #include "Private/NetImgui_NetworkUE4.cpp" #include "Private/NetImgui_NetworkWin32.cpp" - #undef NETIMGUI_INTERNAL_INCLUDE #endif #endif // NETIMGUI_ENABLED diff --git a/Code/Client/Private/NetImgui_Api.cpp b/Code/Client/Private/NetImgui_Api.cpp index 5a36e21..a3ba2a7 100644 --- a/Code/Client/Private/NetImgui_Api.cpp +++ b/Code/Client/Private/NetImgui_Api.cpp @@ -169,7 +169,7 @@ bool NewFrame(bool bSupportFrameSkip) { uint8_t* pPixelData(nullptr); int width(0), height(0); ImGui::GetIO().Fonts->GetTexDataAsAlpha8(&pPixelData, &width, &height); - SendDataTexture(ImGui::GetIO().Fonts->TexID, pPixelData, static_cast(width), static_cast(height), eTexFormat::kTexFmtA8); + SendDataTexture(pFonts->TexID, pPixelData, static_cast(width), static_cast(height), eTexFormat::kTexFmtA8); } // No font texture has been sent to the netImgui server, you can either @@ -489,6 +489,38 @@ uint32_t GetTexture_BytePerImage(eTexFormat eFormat, uint32_t pixelWidth, uint32 //Note: If adding support to BC compression format, have to take into account 4x4 size alignement } +static inline void AddKeyEvent(const Client::ClientInfo& client, const CmdInput* pCmdInput, CmdInput::NetImguiKeys netimguiKey, ImGuiKey_ imguiKey) +{ + uint32_t valIndex = netimguiKey/64; + uint64_t valMask = 0x0000000000000001ull << (netimguiKey%64); +#if IMGUI_VERSION_NUM < 18700 + IM_UNUSED(client); + ImGui::GetIO().KeysDown[imguiKey] = (pCmdInput->mInputDownMask[valIndex] & valMask) != 0; +#else + bool bChanged = (pCmdInput->mInputDownMask[valIndex] ^ client.mPreviousInputState.mInputDownMask[valIndex]) & valMask; + if( bChanged ){ + ImGui::GetIO().AddKeyEvent(imguiKey, pCmdInput->mInputDownMask[valIndex] & valMask ); + } +#endif +} + +static inline void AddKeyAnalogEvent(const Client::ClientInfo& client, const CmdInput* pCmdInput, CmdInput::NetImguiKeys netimguiKey, ImGuiKey_ imguiKey) +{ + uint32_t valIndex = netimguiKey/64; + uint64_t valMask = 0x0000000000000001ull << (netimguiKey%64); + assert(CmdInput::kAnalog_First <= static_cast(netimguiKey) && static_cast(netimguiKey) <= CmdInput::kAnalog_Last); +#if IMGUI_VERSION_NUM < 18700 + IM_UNUSED(client); IM_UNUSED(pCmdInput); IM_UNUSED(netimguiKey); IM_UNUSED(imguiKey); +#else + float analogValue = pCmdInput->mInputAnalog[netimguiKey-CmdInput::kAnalog_First]; + bool bChanged = (pCmdInput->mInputDownMask[valIndex] ^ client.mPreviousInputState.mInputDownMask[valIndex]) & valMask; + bChanged |= abs(client.mPreviousInputState.mInputAnalog[netimguiKey-CmdInput::kAnalog_First] - analogValue) > 0.001f; + if(bChanged){ + ImGui::GetIO().AddKeyAnalogEvent(imguiKey, pCmdInput->mInputDownMask[valIndex] & valMask, analogValue); + } +#endif +} + //================================================================================================= bool ProcessInputData(Client::ClientInfo& client) //================================================================================================= @@ -500,40 +532,158 @@ bool ProcessInputData(Client::ClientInfo& client) if (pCmdInput) { - io.DisplaySize = ImVec2(pCmdInput->mScreenSize[0], pCmdInput->mScreenSize[1]); - io.MousePos = ImVec2(pCmdInput->mMousePos[0], pCmdInput->mMousePos[1]); - io.MouseWheel = pCmdInput->mMouseWheelVert - client.mMouseWheelVertPrev; - io.MouseWheelH = pCmdInput->mMouseWheelHoriz - client.mMouseWheelHorizPrev; - io.MouseDown[0] = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkMouseBtnLeft); - io.MouseDown[1] = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkMouseBtnRight); - io.MouseDown[2] = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkMouseBtnMid); - io.MouseDown[3] = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkMouseBtnExtra1); - io.MouseDown[4] = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkMouseBtnExtra2); - io.KeyShift = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkKeyboardShift); - io.KeyCtrl = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkKeyboardCtrl); - io.KeyAlt = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkKeyboardAlt); - io.KeySuper = pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkKeyboardSuper1) || pCmdInput->IsKeyDown(CmdInput::eVirtualKeys::vkKeyboardSuper2); - //io.NavInputs // @sammyfreg TODO: Handle Gamepad - - memset(io.KeysDown, 0, sizeof(io.KeysDown)); - for (uint32_t i(0); i < ArrayCount(pCmdInput->mKeysDownMask) * 64; ++i) - io.KeysDown[i] = (pCmdInput->mKeysDownMask[i / 64] & (static_cast(1) << (i % 64))) != 0; - - // @sammyfreg TODO: Optimize this - io.ClearInputCharacters(); + const float wheelY = pCmdInput->mMouseWheelVert - client.mPreviousInputState.mMouseWheelVertPrev; + const float wheelX = pCmdInput->mMouseWheelHoriz - client.mPreviousInputState.mMouseWheelHorizPrev; + io.DisplaySize = ImVec2(pCmdInput->mScreenSize[0], pCmdInput->mScreenSize[1]); + +#if IMGUI_VERSION_NUM < 18700 + io.MousePos = ImVec2(pCmdInput->mMousePos[0], pCmdInput->mMousePos[1]); + io.MouseWheel = wheelY; + io.MouseWheelH = wheelX; + for (uint32_t i(0); i < CmdInput::NetImguiMouseButton::ImGuiMouseButton_COUNT; ++i) { + io.MouseDown[i] = (pCmdInput->mMouseDownMask & (0x0000000000000001ull << i)) != 0; + } + + #define AddInputDown(KEYNAME) AddKeyEvent(client, pCmdInput, CmdInput::KEYNAME, ImGuiKey_::KEYNAME); + AddInputDown(ImGuiKey_Tab) + AddInputDown(ImGuiKey_LeftArrow) + AddInputDown(ImGuiKey_RightArrow) + AddInputDown(ImGuiKey_UpArrow) + AddInputDown(ImGuiKey_DownArrow) + AddInputDown(ImGuiKey_PageUp) + AddInputDown(ImGuiKey_PageDown) + AddInputDown(ImGuiKey_Home) + AddInputDown(ImGuiKey_End) + AddInputDown(ImGuiKey_Insert) + AddInputDown(ImGuiKey_Delete) + AddInputDown(ImGuiKey_Backspace) + AddInputDown(ImGuiKey_Space) + AddInputDown(ImGuiKey_Enter) + AddInputDown(ImGuiKey_Escape) + AddInputDown(ImGuiKey_A) // for text edit CTRL+A: select all + AddInputDown(ImGuiKey_C) // for text edit CTRL+C: copy + AddInputDown(ImGuiKey_V) // for text edit CTRL+V: paste + AddInputDown(ImGuiKey_X) // for text edit CTRL+X: cut + AddInputDown(ImGuiKey_Y) // for text edit CTRL+Y: redo + AddInputDown(ImGuiKey_Z) // for text edit CTRL+Z: undo +#else + // At the moment All Dear Imgui version share the same ImGuiKey_ enum (with a 512 value offset), + // but could change in the future, so convert from our own enum version, to Dear ImGui. + #define AddInputDown(KEYNAME) AddKeyEvent(client, pCmdInput, CmdInput::KEYNAME, ImGuiKey_::KEYNAME); + #define AddAnalogInputDown(KEYNAME) AddKeyAnalogEvent(client, pCmdInput, CmdInput::KEYNAME, ImGuiKey_::KEYNAME); + AddInputDown(ImGuiKey_Tab) + AddInputDown(ImGuiKey_LeftArrow) + AddInputDown(ImGuiKey_RightArrow) + AddInputDown(ImGuiKey_UpArrow) + AddInputDown(ImGuiKey_DownArrow) + AddInputDown(ImGuiKey_PageUp) + AddInputDown(ImGuiKey_PageDown) + AddInputDown(ImGuiKey_Home) + AddInputDown(ImGuiKey_End) + AddInputDown(ImGuiKey_Insert) + AddInputDown(ImGuiKey_Delete) + AddInputDown(ImGuiKey_Backspace) + AddInputDown(ImGuiKey_Space) + AddInputDown(ImGuiKey_Enter) + AddInputDown(ImGuiKey_Escape) + + AddInputDown(ImGuiKey_LeftCtrl) AddInputDown(ImGuiKey_LeftShift) AddInputDown(ImGuiKey_LeftAlt) AddInputDown(ImGuiKey_LeftSuper) + AddInputDown(ImGuiKey_RightCtrl) AddInputDown(ImGuiKey_RightShift) AddInputDown(ImGuiKey_RightAlt) AddInputDown(ImGuiKey_RightSuper) + AddInputDown(ImGuiKey_Menu) + AddInputDown(ImGuiKey_0) AddInputDown(ImGuiKey_1) AddInputDown(ImGuiKey_2) AddInputDown(ImGuiKey_3) AddInputDown(ImGuiKey_4) AddInputDown(ImGuiKey_5) AddInputDown(ImGuiKey_6) AddInputDown(ImGuiKey_7) AddInputDown(ImGuiKey_8) AddInputDown(ImGuiKey_9) + AddInputDown(ImGuiKey_A) AddInputDown(ImGuiKey_B) AddInputDown(ImGuiKey_C) AddInputDown(ImGuiKey_D) AddInputDown(ImGuiKey_E) AddInputDown(ImGuiKey_F) AddInputDown(ImGuiKey_G) AddInputDown(ImGuiKey_H) AddInputDown(ImGuiKey_I) AddInputDown(ImGuiKey_J) + AddInputDown(ImGuiKey_K) AddInputDown(ImGuiKey_L) AddInputDown(ImGuiKey_M) AddInputDown(ImGuiKey_N) AddInputDown(ImGuiKey_O) AddInputDown(ImGuiKey_P) AddInputDown(ImGuiKey_Q) AddInputDown(ImGuiKey_R) AddInputDown(ImGuiKey_S) AddInputDown(ImGuiKey_T) + AddInputDown(ImGuiKey_U) AddInputDown(ImGuiKey_V) AddInputDown(ImGuiKey_W) AddInputDown(ImGuiKey_X) AddInputDown(ImGuiKey_Y) AddInputDown(ImGuiKey_Z) + AddInputDown(ImGuiKey_F1) AddInputDown(ImGuiKey_F2) AddInputDown(ImGuiKey_F3) AddInputDown(ImGuiKey_F4) AddInputDown(ImGuiKey_F5) AddInputDown(ImGuiKey_F6) + AddInputDown(ImGuiKey_F7) AddInputDown(ImGuiKey_F8) AddInputDown(ImGuiKey_F9) AddInputDown(ImGuiKey_F10) AddInputDown(ImGuiKey_F11) AddInputDown(ImGuiKey_F12) + AddInputDown(ImGuiKey_Apostrophe) + AddInputDown(ImGuiKey_Comma) + AddInputDown(ImGuiKey_Minus) + AddInputDown(ImGuiKey_Period) + AddInputDown(ImGuiKey_Slash) + AddInputDown(ImGuiKey_Semicolon) + AddInputDown(ImGuiKey_Equal) + AddInputDown(ImGuiKey_LeftBracket) + AddInputDown(ImGuiKey_Backslash) + AddInputDown(ImGuiKey_RightBracket) + AddInputDown(ImGuiKey_GraveAccent) + AddInputDown(ImGuiKey_CapsLock) + AddInputDown(ImGuiKey_ScrollLock) + AddInputDown(ImGuiKey_NumLock) + AddInputDown(ImGuiKey_PrintScreen) + AddInputDown(ImGuiKey_Pause) + AddInputDown(ImGuiKey_Keypad0) AddInputDown(ImGuiKey_Keypad1) AddInputDown(ImGuiKey_Keypad2) AddInputDown(ImGuiKey_Keypad3) AddInputDown(ImGuiKey_Keypad4) + AddInputDown(ImGuiKey_Keypad5) AddInputDown(ImGuiKey_Keypad6) AddInputDown(ImGuiKey_Keypad7) AddInputDown(ImGuiKey_Keypad8) AddInputDown(ImGuiKey_Keypad9) + AddInputDown(ImGuiKey_KeypadDecimal) + AddInputDown(ImGuiKey_KeypadDivide) + AddInputDown(ImGuiKey_KeypadMultiply) + AddInputDown(ImGuiKey_KeypadSubtract) + AddInputDown(ImGuiKey_KeypadAdd) + AddInputDown(ImGuiKey_KeypadEnter) + AddInputDown(ImGuiKey_KeypadEqual) + + // Gamepad + AddInputDown(ImGuiKey_GamepadStart) + AddInputDown(ImGuiKey_GamepadBack) + AddInputDown(ImGuiKey_GamepadFaceUp) + AddInputDown(ImGuiKey_GamepadFaceDown) + AddInputDown(ImGuiKey_GamepadFaceLeft) + AddInputDown(ImGuiKey_GamepadFaceRight) + AddInputDown(ImGuiKey_GamepadDpadUp) + AddInputDown(ImGuiKey_GamepadDpadDown) + AddInputDown(ImGuiKey_GamepadDpadLeft) + AddInputDown(ImGuiKey_GamepadDpadRight) + AddInputDown(ImGuiKey_GamepadL1) + AddInputDown(ImGuiKey_GamepadR1) + AddInputDown(ImGuiKey_GamepadL2) + AddInputDown(ImGuiKey_GamepadR2) + AddInputDown(ImGuiKey_GamepadL3) + AddInputDown(ImGuiKey_GamepadR3) + AddAnalogInputDown(ImGuiKey_GamepadLStickUp) + AddAnalogInputDown(ImGuiKey_GamepadLStickDown) + AddAnalogInputDown(ImGuiKey_GamepadLStickLeft) + AddAnalogInputDown(ImGuiKey_GamepadLStickRight) + AddAnalogInputDown(ImGuiKey_GamepadRStickUp) + AddAnalogInputDown(ImGuiKey_GamepadRStickDown) + AddAnalogInputDown(ImGuiKey_GamepadRStickLeft) + AddAnalogInputDown(ImGuiKey_GamepadRStickRight) + + #undef AddInputDown + #undef AddAnalogInputDown + + // Mouse + io.AddMouseWheelEvent(wheelX, wheelY); + io.AddMousePosEvent(pCmdInput->mMousePos[0], pCmdInput->mMousePos[1]); + for(int i(0); imMouseDownMask ^ client.mPreviousInputState.mMouseDownMask) & valMask){ + io.AddMouseButtonEvent(i, pCmdInput->mMouseDownMask & valMask); + } + } +#endif + io.KeyShift = pCmdInput->IsKeyDown(CmdInput::NetImguiKeys::ImGuiKey_ModShift); + io.KeyCtrl = pCmdInput->IsKeyDown(CmdInput::NetImguiKeys::ImGuiKey_ModCtrl); + io.KeyAlt = pCmdInput->IsKeyDown(CmdInput::NetImguiKeys::ImGuiKey_ModAlt); + io.KeySuper = pCmdInput->IsKeyDown(CmdInput::NetImguiKeys::ImGuiKey_ModSuper); + size_t keyCount(1); uint16_t character; + io.ClearInputCharacters(); client.mPendingKeyIn.ReadData(&character, keyCount); - while (keyCount > 0) - { + while (keyCount > 0){ io.AddInputCharacter(character); client.mPendingKeyIn.ReadData(&character, keyCount); } - client.mMouseWheelVertPrev = pCmdInput->mMouseWheelVert; - client.mMouseWheelHorizPrev = pCmdInput->mMouseWheelHoriz; - client.mServerCompressionEnabled = pCmdInput->mCompressionUse; - client.mServerCompressionSkip |= pCmdInput->mCompressionSkip; + static_assert(sizeof(client.mPreviousInputState.mInputDownMask) == sizeof(pCmdInput->mInputDownMask), "Array size should match"); + static_assert(sizeof(client.mPreviousInputState.mInputAnalog) == sizeof(pCmdInput->mInputAnalog), "Array size should match"); + memcpy(client.mPreviousInputState.mInputDownMask, pCmdInput->mInputDownMask, sizeof(client.mPreviousInputState.mInputDownMask)); + memcpy(client.mPreviousInputState.mInputAnalog, pCmdInput->mInputAnalog, sizeof(client.mPreviousInputState.mInputAnalog)); + client.mPreviousInputState.mMouseDownMask = pCmdInput->mMouseDownMask; + client.mPreviousInputState.mMouseWheelVertPrev = pCmdInput->mMouseWheelVert; + client.mPreviousInputState.mMouseWheelHorizPrev = pCmdInput->mMouseWheelHoriz; + client.mServerCompressionEnabled = pCmdInput->mCompressionUse; + client.mServerCompressionSkip |= pCmdInput->mCompressionSkip; } if( hasNewInput ){ diff --git a/Code/Client/Private/NetImgui_Client.cpp b/Code/Client/Private/NetImgui_Client.cpp index 70fbacb..997389e 100644 --- a/Code/Client/Private/NetImgui_Client.cpp +++ b/Code/Client/Private/NetImgui_Client.cpp @@ -18,23 +18,22 @@ void SavedImguiContext::Save(ImGuiContext* copyFrom) { ScopedImguiContext scopedContext(copyFrom); ImGuiIO& sourceIO = ImGui::GetIO(); - - memcpy(mKeyMap, sourceIO.KeyMap, sizeof(mKeyMap)); mSavedContext = true; mConfigFlags = sourceIO.ConfigFlags; mBackendFlags = sourceIO.BackendFlags; mBackendPlatformName = sourceIO.BackendPlatformName; mBackendRendererName = sourceIO.BackendRendererName; - mDrawMouse = sourceIO.MouseDrawCursor; - mClipboardUserData = sourceIO.ClipboardUserData; + mDrawMouse = sourceIO.MouseDrawCursor; + mClipboardUserData = sourceIO.ClipboardUserData; +#if IMGUI_VERSION_NUM < 18700 + memcpy(mKeyMap, sourceIO.KeyMap, sizeof(mKeyMap)); +#endif } void SavedImguiContext::Restore(ImGuiContext* copyTo) { ScopedImguiContext scopedContext(copyTo); ImGuiIO& destIO = ImGui::GetIO(); - - memcpy(destIO.KeyMap, mKeyMap, sizeof(destIO.KeyMap)); mSavedContext = false; destIO.ConfigFlags = mConfigFlags; destIO.BackendFlags = mBackendFlags; @@ -42,6 +41,9 @@ void SavedImguiContext::Restore(ImGuiContext* copyTo) destIO.BackendRendererName = mBackendRendererName; destIO.MouseDrawCursor = mDrawMouse; destIO.ClipboardUserData = mClipboardUserData; +#if IMGUI_VERSION_NUM < 18700 + memcpy(destIO.KeyMap, mKeyMap, sizeof(destIO.KeyMap)); +#endif } //================================================================================================= @@ -408,36 +410,15 @@ void ClientInfo::ContextOverride() // Note: Make sure every setting overwritten here, are handled in 'SavedImguiContext::Save(...)' { ImGuiIO& newIO = ImGui::GetIO(); - newIO.KeyMap[ImGuiKey_Tab] = static_cast(CmdInput::eVirtualKeys::vkKeyboardTab); - newIO.KeyMap[ImGuiKey_LeftArrow] = static_cast(CmdInput::eVirtualKeys::vkKeyboardLeft); - newIO.KeyMap[ImGuiKey_RightArrow] = static_cast(CmdInput::eVirtualKeys::vkKeyboardRight); - newIO.KeyMap[ImGuiKey_UpArrow] = static_cast(CmdInput::eVirtualKeys::vkKeyboardUp); - newIO.KeyMap[ImGuiKey_DownArrow] = static_cast(CmdInput::eVirtualKeys::vkKeyboardDown); - newIO.KeyMap[ImGuiKey_PageUp] = static_cast(CmdInput::eVirtualKeys::vkKeyboardPageUp); - newIO.KeyMap[ImGuiKey_PageDown] = static_cast(CmdInput::eVirtualKeys::vkKeyboardPageDown); - newIO.KeyMap[ImGuiKey_Home] = static_cast(CmdInput::eVirtualKeys::vkKeyboardHome); - newIO.KeyMap[ImGuiKey_End] = static_cast(CmdInput::eVirtualKeys::vkKeyboardEnd); - newIO.KeyMap[ImGuiKey_Insert] = static_cast(CmdInput::eVirtualKeys::vkKeyboardInsert); - newIO.KeyMap[ImGuiKey_Delete] = static_cast(CmdInput::eVirtualKeys::vkKeyboardDelete); - newIO.KeyMap[ImGuiKey_Backspace] = static_cast(CmdInput::eVirtualKeys::vkKeyboardBackspace); - newIO.KeyMap[ImGuiKey_Space] = static_cast(CmdInput::eVirtualKeys::vkKeyboardSpace); - newIO.KeyMap[ImGuiKey_Enter] = static_cast(CmdInput::eVirtualKeys::vkKeyboardEnter); - newIO.KeyMap[ImGuiKey_Escape] = static_cast(CmdInput::eVirtualKeys::vkKeyboardEscape); -#if IMGUI_VERSION_NUM >= 17102 - newIO.KeyMap[ImGuiKey_KeyPadEnter] = 0;//static_cast(CmdInput::eVirtualKeys::vkKeyboardKeypadEnter); -#endif - newIO.KeyMap[ImGuiKey_A] = static_cast(CmdInput::eVirtualKeys::vkKeyboardA); - newIO.KeyMap[ImGuiKey_C] = static_cast(CmdInput::eVirtualKeys::vkKeyboardA) - 'A' + 'C'; - newIO.KeyMap[ImGuiKey_V] = static_cast(CmdInput::eVirtualKeys::vkKeyboardA) - 'A' + 'V'; - newIO.KeyMap[ImGuiKey_X] = static_cast(CmdInput::eVirtualKeys::vkKeyboardA) - 'A' + 'X'; - newIO.KeyMap[ImGuiKey_Y] = static_cast(CmdInput::eVirtualKeys::vkKeyboardA) - 'A' + 'Y'; - newIO.KeyMap[ImGuiKey_Z] = static_cast(CmdInput::eVirtualKeys::vkKeyboardA) - 'A' + 'Z'; - newIO.MouseDrawCursor = false; newIO.ClipboardUserData = nullptr; newIO.BackendPlatformName = "NetImgui"; newIO.BackendRendererName = "DirectX11"; - +#if IMGUI_VERSION_NUM < 18700 + for (uint32_t i(0); i < ImGuiKey_COUNT; ++i) { + newIO.KeyMap[i] = i; + } +#endif #if defined(IMGUI_HAS_VIEWPORT) newIO.ConfigFlags &= ~(ImGuiConfigFlags_ViewportsEnable); // Viewport unsupported at the moment #endif diff --git a/Code/Client/Private/NetImgui_Client.h b/Code/Client/Private/NetImgui_Client.h index f67ca4b..49dab76 100644 --- a/Code/Client/Private/NetImgui_Client.h +++ b/Code/Client/Private/NetImgui_Client.h @@ -52,6 +52,14 @@ struct ClientInfo using BufferKeys = Ringbuffer; using Time = std::chrono::time_point; + struct InputState + { + uint64_t mInputDownMask[(CmdInput::ImGuiKey_COUNT+63)/64] = {}; + float mInputAnalog[CmdInput::kAnalog_Count] = {}; + uint64_t mMouseDownMask = 0; + float mMouseWheelVertPrev = 0.f; + float mMouseWheelHorizPrev = 0.f; + }; ClientInfo(); ~ClientInfo(); void ContextInitialize(); @@ -63,19 +71,19 @@ struct ClientInfo std::atomic mpSocketPending; // Hold socket info until communication is established std::atomic mpSocketComs; // Socket used for communications with server std::atomic mpSocketListen; // Socket used to wait for communication request from server + VecTexture mTextures; // List if textures created by this client (used un main thread) char mName[64] = {}; - uint64_t mFrameIndex = 0; // Incremented everytime we send a DrawFrame Command - VecTexture mTextures; + uint64_t mFrameIndex = 0; // Incremented everytime we send a DrawFrame Command CmdTexture* mTexturesPending[16]; ExchangePtr mPendingFrameOut; ExchangePtr mPendingBackgroundOut; - ExchangePtr mPendingInputIn; - CmdBackground mBGSetting; // Current value assigned to background appearance by user - CmdBackground mBGSettingSent; // Last sent value to remote server + ExchangePtr mPendingInputIn; + ImGuiContext* mpContext = nullptr; // Context that the remote drawing should use (either the one active when connection request happened, or a clone) CmdInput* mpInputPending = nullptr; // Last Input Command from server, waiting to be processed by client CmdDrawFrame* mpDrawFramePrevious = nullptr; // Last sent Draw Command. Used by data compression, to generate delta between previous and current frame - BufferKeys mPendingKeyIn; - ImGuiContext* mpContext = nullptr; // Context that the remote drawing should use (either the one active when connection request happened, or a clone) + CmdBackground mBGSetting; // Current value assigned to background appearance by user + CmdBackground mBGSettingSent; // Last sent value to remote server + BufferKeys mPendingKeyIn; // Keys pressed received. Results of 2 CmdInputs are concatenated if received before being processed ImVec2 mSavedDisplaySize = {0, 0}; // Save original display size on 'NewFrame' and restore it on 'EndFrame' (making sure size is still valid after a disconnect) const void* mpFontTextureData = nullptr; // Last font texture data send to server (used to detect if font was changed) ImTextureID mFontTextureID; @@ -83,8 +91,7 @@ struct ClientInfo Time mTimeTracking; // Used to update Dear ImGui time delta on remote context std::atomic_uint32_t mTexturesPendingSent; std::atomic_uint32_t mTexturesPendingCreated; - float mMouseWheelVertPrev = 0.f; - float mMouseWheelHorizPrev = 0.f; + bool mbDisconnectRequest = false; // Waiting to Disconnect bool mbClientThreadActive = false; bool mbListenThreadActive = false; @@ -100,7 +107,7 @@ struct ClientInfo bool mServerCompressionEnabled = false; // If Server would like compression to be enabled (mClientCompressionMode value can override this value) bool mServerCompressionSkip = false; // Force ignore compression setting for 1 frame char PADDING[2]; - + InputState mPreviousInputState; // Keeping track of last keyboard/mouse state ImGuiID mhImguiHookNewframe = 0; ImGuiID mhImguiHookEndframe = 0; diff --git a/Code/Client/Private/NetImgui_CmdPackets.h b/Code/Client/Private/NetImgui_CmdPackets.h index fbfc576..a2ca436 100644 --- a/Code/Client/Private/NetImgui_CmdPackets.h +++ b/Code/Client/Private/NetImgui_CmdPackets.h @@ -40,15 +40,17 @@ struct alignas(8) CmdVersion ClientName = 6, // Increase maximum allowed client name that a program can set DataCompression = 7, // Adding support for data compression between client/server. Simple low cost delta compressor (only send difference from previous frame) DataCompression2 = 8, // Improvement to data compression (save corner position and use SoA for vertices data) + VertexUVRange = 9, // Changed vertices UV value range to [0,1] for increased precision on large font texture + Imgui_1_87 = 10, // Added Dear ImGui Input refactor // Insert new version here //-------------------------------- - _Count, - _Current = _Count -1 + _count, + _current = _count -1 }; CmdHeader mHeader = CmdHeader(CmdHeader::eCommands::Version, sizeof(CmdVersion)); - eVersion mVersion = eVersion::_Current; + eVersion mVersion = eVersion::_current; char mClientName[64] = {}; char mImguiVerName[16] = {IMGUI_VERSION}; char mNetImguiVerName[16] = {NETIMGUI_VERSION}; @@ -60,58 +62,133 @@ struct alignas(8) CmdVersion struct alignas(8) CmdInput { - // From Windows Virtual Keys Code - // https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes - enum class eVirtualKeys{ - vkMouseBtnLeft = 0x01, - vkMouseBtnRight = 0x02, - vkMouseBtnMid = 0x04, - vkMouseBtnExtra1 = 0x05, // VK_XBUTTON1 - vkMouseBtnExtra2 = 0x06, // VK_XBUTTON2 - vkKeyboardShift = 0x10, - vkKeyboardCtrl = 0x11, - vkKeyboardAlt = 0x12, - vkKeyboardTab = 0x09, - vkKeyboardLeft = 0x25, - vkKeyboardRight = 0x27, - vkKeyboardUp = 0x26, - vkKeyboardDown = 0x28, - vkKeyboardPageUp = 0x21, - vkKeyboardPageDown = 0x22, - vkKeyboardHome = 0x24, - vkKeyboardEnd = 0x23, - vkKeyboardInsert = 0x2D, - vkKeyboardDelete = 0x2E, - vkKeyboardBackspace = 0x08, - vkKeyboardSpace = 0x20, - vkKeyboardEnter = 0x0D, - vkKeyboardEscape = 0x1B, - vkKeyboardSuper1 = 0x5B, // VK_LWIN - vkKeyboardSuper2 = 0x5C, // VK_LWIN - vkKeyboardSuperF1 = 0x70, // F1 ... F24 - vkKeyboardA = 0x41, // A ... Z - vkKeyboard0 = 0x30, // 0 ... 9 - vkNumpad0 = 0x60, // 0 ... 9 - vkNumpadAdd = 0x6B, - vkNumpadSub = 0x6D, - vkNumpadMul = 0x6A, - vkNumpadDiv = 0x6F, - vkNumpadDecimal = 0x6E, + // Identify a mouse button. + // Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience. + enum NetImguiMouseButton + { + ImGuiMouseButton_Left = 0, + ImGuiMouseButton_Right = 1, + ImGuiMouseButton_Middle = 2, + ImGuiMouseButton_Extra1 = 3, // Additional entry + ImGuiMouseButton_Extra2 = 4, // Additional entry + ImGuiMouseButton_COUNT = 5 }; - inline bool IsKeyDown(eVirtualKeys vkKey)const; - inline void SetKeyDown(eVirtualKeys vkKey, bool isDown); - - CmdHeader mHeader = CmdHeader(CmdHeader::eCommands::Input, sizeof(CmdInput)); - uint16_t mScreenSize[2] = {}; - int16_t mMousePos[2] = {}; - float mMouseWheelVert = 0.f; - float mMouseWheelHoriz = 0.f; - ImWchar mKeyChars[256]; // Input characters - uint64_t mKeysDownMask[512/64]; // List of keys currently pressed (follow Windows Virtual-Key codes) - uint16_t mKeyCharCount = 0; // Number of valid input characters - bool mCompressionUse = false; // Server would like client to compress the communication data - bool mCompressionSkip = false; // Server forcing next client's frame data to be uncompressed - uint8_t PADDING[4] = {}; + + // Copy of Dear ImGui key enum + // We keep our own internal version, to make sure Client key is the same as Server Key (since they can have different Imgui version) + enum NetImguiKeys + { + // Keyboard + ImGuiKey_Tab, + ImGuiKey_LeftArrow, + ImGuiKey_RightArrow, + ImGuiKey_UpArrow, + ImGuiKey_DownArrow, + ImGuiKey_PageUp, + ImGuiKey_PageDown, + ImGuiKey_Home, + ImGuiKey_End, + ImGuiKey_Insert, + ImGuiKey_Delete, + ImGuiKey_Backspace, + ImGuiKey_Space, + ImGuiKey_Enter, + ImGuiKey_Escape, + ImGuiKey_LeftCtrl, ImGuiKey_LeftShift, ImGuiKey_LeftAlt, ImGuiKey_LeftSuper, + ImGuiKey_RightCtrl, ImGuiKey_RightShift, ImGuiKey_RightAlt, ImGuiKey_RightSuper, + ImGuiKey_Menu, + ImGuiKey_0, ImGuiKey_1, ImGuiKey_2, ImGuiKey_3, ImGuiKey_4, ImGuiKey_5, ImGuiKey_6, ImGuiKey_7, ImGuiKey_8, ImGuiKey_9, + ImGuiKey_A, ImGuiKey_B, ImGuiKey_C, ImGuiKey_D, ImGuiKey_E, ImGuiKey_F, ImGuiKey_G, ImGuiKey_H, ImGuiKey_I, ImGuiKey_J, + ImGuiKey_K, ImGuiKey_L, ImGuiKey_M, ImGuiKey_N, ImGuiKey_O, ImGuiKey_P, ImGuiKey_Q, ImGuiKey_R, ImGuiKey_S, ImGuiKey_T, + ImGuiKey_U, ImGuiKey_V, ImGuiKey_W, ImGuiKey_X, ImGuiKey_Y, ImGuiKey_Z, + ImGuiKey_F1, ImGuiKey_F2, ImGuiKey_F3, ImGuiKey_F4, ImGuiKey_F5, ImGuiKey_F6, + ImGuiKey_F7, ImGuiKey_F8, ImGuiKey_F9, ImGuiKey_F10, ImGuiKey_F11, ImGuiKey_F12, + ImGuiKey_Apostrophe, // ' + ImGuiKey_Comma, // , + ImGuiKey_Minus, // - + ImGuiKey_Period, // . + ImGuiKey_Slash, // / + ImGuiKey_Semicolon, // ; + ImGuiKey_Equal, // = + ImGuiKey_LeftBracket, // [ + ImGuiKey_Backslash, // \ (this text inhibit multiline comment caused by backslash) + ImGuiKey_RightBracket, // ] + ImGuiKey_GraveAccent, // ` + ImGuiKey_CapsLock, + ImGuiKey_ScrollLock, + ImGuiKey_NumLock, + ImGuiKey_PrintScreen, + ImGuiKey_Pause, + ImGuiKey_Keypad0, ImGuiKey_Keypad1, ImGuiKey_Keypad2, ImGuiKey_Keypad3, ImGuiKey_Keypad4, + ImGuiKey_Keypad5, ImGuiKey_Keypad6, ImGuiKey_Keypad7, ImGuiKey_Keypad8, ImGuiKey_Keypad9, + ImGuiKey_KeypadDecimal, + ImGuiKey_KeypadDivide, + ImGuiKey_KeypadMultiply, + ImGuiKey_KeypadSubtract, + ImGuiKey_KeypadAdd, + ImGuiKey_KeypadEnter, + ImGuiKey_KeypadEqual, + + // Gamepad (some of those are analog values, 0.0f to 1.0f) // NAVIGATION action + ImGuiKey_GamepadStart, // Menu (Xbox) + (Switch) Start/Options (PS) // -- + ImGuiKey_GamepadBack, // View (Xbox) - (Switch) Share (PS) // -- + ImGuiKey_GamepadFaceUp, // Y (Xbox) X (Switch) Triangle (PS) // -> ImGuiNavInput_Input + ImGuiKey_GamepadFaceDown, // A (Xbox) B (Switch) Cross (PS) // -> ImGuiNavInput_Activate + ImGuiKey_GamepadFaceLeft, // X (Xbox) Y (Switch) Square (PS) // -> ImGuiNavInput_Menu + ImGuiKey_GamepadFaceRight, // B (Xbox) A (Switch) Circle (PS) // -> ImGuiNavInput_Cancel + ImGuiKey_GamepadDpadUp, // D-pad Up // -> ImGuiNavInput_DpadUp + ImGuiKey_GamepadDpadDown, // D-pad Down // -> ImGuiNavInput_DpadDown + ImGuiKey_GamepadDpadLeft, // D-pad Left // -> ImGuiNavInput_DpadLeft + ImGuiKey_GamepadDpadRight, // D-pad Right // -> ImGuiNavInput_DpadRight + ImGuiKey_GamepadL1, // L Bumper (Xbox) L (Switch) L1 (PS) // -> ImGuiNavInput_FocusPrev + ImGuiNavInput_TweakSlow + ImGuiKey_GamepadR1, // R Bumper (Xbox) R (Switch) R1 (PS) // -> ImGuiNavInput_FocusNext + ImGuiNavInput_TweakFast + ImGuiKey_GamepadL2, // L Trigger (Xbox) ZL (Switch) L2 (PS) [Analog] + ImGuiKey_GamepadR2, // R Trigger (Xbox) ZR (Switch) R2 (PS) [Analog] + ImGuiKey_GamepadL3, // L Thumbstick (Xbox) L3 (Switch) L3 (PS) + ImGuiKey_GamepadR3, // R Thumbstick (Xbox) R3 (Switch) R3 (PS) + + ImGuiKey_GamepadLStickUp, // [Analog] // -> ImGuiNavInput_LStickUp + ImGuiKey_GamepadLStickDown, // [Analog] // -> ImGuiNavInput_LStickDown + ImGuiKey_GamepadLStickLeft, // [Analog] // -> ImGuiNavInput_LStickLeft + ImGuiKey_GamepadLStickRight, // [Analog] // -> ImGuiNavInput_LStickRight + ImGuiKey_GamepadRStickUp, // [Analog] + ImGuiKey_GamepadRStickDown, // [Analog] + ImGuiKey_GamepadRStickLeft, // [Analog] + ImGuiKey_GamepadRStickRight, // [Analog] + + // Keyboard Modifiers (explicitly submitted by backend via AddKeyEvent() calls) + // - This is mirroring the data also written to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper, in a format allowing + // them to be accessed via standard key API, allowing calls such as IsKeyPressed(), IsKeyReleased(), querying duration etc. + // - Code polling every keys (e.g. an interface to detect a key press for input mapping) might want to ignore those + // and prefer using the real keys (e.g. ImGuiKey_LeftCtrl, ImGuiKey_RightCtrl instead of ImGuiKey_ModCtrl). + // - In theory the value of keyboard modifiers should be roughly equivalent to a logical or of the equivalent left/right keys. + // In practice: it's complicated; mods are often provided from different sources. Keyboard layout, IME, sticky keys and + // backends tend to interfere and break that equivalence. The safer decision is to relay that ambiguity down to the end-user... + ImGuiKey_ModCtrl, ImGuiKey_ModShift, ImGuiKey_ModAlt, ImGuiKey_ModSuper, + + // End of list + ImGuiKey_COUNT, // No valid ImGuiKey is ever greater than this value + }; + + + static constexpr uint32_t kAnalog_First = ImGuiKey_GamepadLStickUp; + static constexpr uint32_t kAnalog_Last = ImGuiKey_GamepadRStickRight; + static constexpr uint32_t kAnalog_Count = kAnalog_Last - kAnalog_First + 1; + + CmdHeader mHeader = CmdHeader(CmdHeader::eCommands::Input, sizeof(CmdInput)); + uint16_t mScreenSize[2] = {}; + int16_t mMousePos[2] = {}; + float mMouseWheelVert = 0.f; + float mMouseWheelHoriz = 0.f; + ImWchar mKeyChars[256] = {}; // Input characters + uint16_t mKeyCharCount = 0; // Number of valid input characters + bool mCompressionUse = false; // Server would like client to compress the communication data + bool mCompressionSkip = false; // Server forcing next client's frame data to be uncompressed + uint8_t PADDING[4] = {}; + uint64_t mMouseDownMask = 0; + uint64_t mInputDownMask[(ImGuiKey_COUNT+63)/64]={}; + float mInputAnalog[kAnalog_Count] = {}; + inline bool IsKeyDown(NetImguiKeys netimguiKey) const; }; struct alignas(8) CmdTexture diff --git a/Code/Client/Private/NetImgui_CmdPackets.inl b/Code/Client/Private/NetImgui_CmdPackets.inl index db075ce..183026e 100644 --- a/Code/Client/Private/NetImgui_CmdPackets.inl +++ b/Code/Client/Private/NetImgui_CmdPackets.inl @@ -1,3 +1,5 @@ +#include "NetImgui_CmdPackets.h" + namespace NetImgui { namespace Internal { // @sammyfreg TODO: Make Offset/Pointer test safer @@ -43,18 +45,11 @@ void ImguiDrawGroup::ToOffsets() } } -bool CmdInput::IsKeyDown(eVirtualKeys vkKey)const -{ - const uint64_t key = static_cast(vkKey); - return (mKeysDownMask[key/64] & (static_cast(1)<<(key%64))) != 0; -} - -void CmdInput::SetKeyDown(eVirtualKeys vkKey, bool isDown) +bool CmdInput::IsKeyDown( CmdInput::NetImguiKeys netimguiKey) const { - const size_t keyEntryIndex = static_cast(vkKey) / 64; - const uint64_t keyBitMask = static_cast(1) << static_cast(vkKey) % 64; - mKeysDownMask[keyEntryIndex]= isDown ? mKeysDownMask[keyEntryIndex] | keyBitMask : - mKeysDownMask[keyEntryIndex] & ~keyBitMask; + uint32_t valIndex = netimguiKey/64; + uint64_t valMask = 0x0000000000000001ull << (netimguiKey%64); + return mInputDownMask[valIndex] & valMask; } bool CmdBackground::operator==(const CmdBackground& cmp)const diff --git a/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.cpp b/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.cpp index a84e4c1..fab267b 100644 --- a/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.cpp +++ b/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.cpp @@ -115,22 +115,25 @@ void CompressData(const ComDataType* pDataPrev, size_t dataSizePrev, const ComDa const size_t elemCount = elemCountPrev < elemCountNew ? elemCountPrev : elemCountNew; size_t n = 0; - while(n < elemCount) + if( pDataPrev ) { - uint32_t* pBlockInfo = reinterpret_cast(pCommandMemoryInOut++); // Add a new block info to output + while(n < elemCount) + { + uint32_t* pBlockInfo = reinterpret_cast(pCommandMemoryInOut++); // Add a new block info to output - // Find number of elements with same value as last frame - size_t startN = n; - while( n < elemCount && pDataPrev[n] == pDataNew[n] ) - ++n; - pBlockInfo[0] = static_cast(n - startN); + // Find number of elements with same value as last frame + size_t startN = n; + while( n < elemCount && pDataPrev[n] == pDataNew[n] ) + ++n; + pBlockInfo[0] = static_cast(n - startN); - // Find number of elements with different value as last frame, and save new value - while (n < elemCount && pDataPrev[n] != pDataNew[n]) { - *pCommandMemoryInOut = pDataNew[n++]; - ++pCommandMemoryInOut; + // Find number of elements with different value as last frame, and save new value + while (n < elemCount && pDataPrev[n] != pDataNew[n]) { + *pCommandMemoryInOut = pDataNew[n++]; + ++pCommandMemoryInOut; + } + pBlockInfo[1] = static_cast(pCommandMemoryInOut - reinterpret_cast(pBlockInfo)) - 1; } - pBlockInfo[1] = static_cast(pCommandMemoryInOut - reinterpret_cast(pBlockInfo)) - 1; } // New frame has more element than previous frame, add the remaining entries @@ -151,11 +154,13 @@ void CompressData(const ComDataType* pDataPrev, size_t dataSizePrev, const ComDa //================================================================================================= void DecompressData(const ComDataType* pDataPrev, size_t dataSizePrev, const ComDataType* pDataPack, size_t dataUnpackSize, ComDataType*& pCommandMemoryInOut) { - const size_t elemCountPrev = DivUp(dataSizePrev, ComDataSize); - const size_t elemCountUnpack= DivUp(dataUnpackSize, ComDataSize); - const size_t elemCountCopy = elemCountPrev < elemCountUnpack ? elemCountPrev : elemCountUnpack; - uint64_t* pCommandMemoryEnd = &pCommandMemoryInOut[elemCountUnpack]; - memcpy(pCommandMemoryInOut, pDataPrev, elemCountCopy * ComDataSize); + const size_t elemCountPrev = DivUp(dataSizePrev, ComDataSize); + const size_t elemCountUnpack = DivUp(dataUnpackSize, ComDataSize); + const size_t elemCountCopy = elemCountPrev < elemCountUnpack ? elemCountPrev : elemCountUnpack; + uint64_t* pCommandMemoryEnd = &pCommandMemoryInOut[elemCountUnpack]; + if( pDataPrev ){ + memcpy(pCommandMemoryInOut, pDataPrev, elemCountCopy * ComDataSize); + } while(pCommandMemoryInOut < pCommandMemoryEnd) { const uint32_t* pBlockInfo = reinterpret_cast(pDataPack++); // Add a new block info to output @@ -163,7 +168,7 @@ void DecompressData(const ComDataType* pDataPrev, size_t dataSizePrev, const Com memcpy(pCommandMemoryInOut, pDataPack, pBlockInfo[1] * sizeof(uint64_t)); pCommandMemoryInOut += pBlockInfo[1]; pDataPack += pBlockInfo[1]; - } + } } //================================================================================================= @@ -217,13 +222,13 @@ CmdDrawFrame* CompressCmdDrawFrame(const CmdDrawFrame* pDrawFramePrev, const Cmd pIndicePrev = reinterpret_cast(drawGroupPrev.mpIndices.Get()); pDrawsPrev = reinterpret_cast(drawGroupPrev.mpDraws.Get()); verticeSizePrev = drawGroupPrev.mVerticeCount * sizeof(ImguiVert); - indiceSizePrev = drawGroupPrev.mIndiceCount*drawGroupPrev.mBytePerIndex; + indiceSizePrev = drawGroupPrev.mIndiceCount*static_cast(drawGroupPrev.mBytePerIndex); drawSizePrev = drawGroupPrev.mDrawCount*sizeof(ImguiDraw); } drawGroup.mpIndices.SetComDataPtr(pDataOutput); CompressData( pIndicePrev, indiceSizePrev, - drawGroupNew.mpIndices.GetComData(), drawGroupNew.mIndiceCount*drawGroupNew.mBytePerIndex, + drawGroupNew.mpIndices.GetComData(), drawGroupNew.mIndiceCount*static_cast(drawGroupNew.mBytePerIndex), pDataOutput); drawGroup.mpVertices.SetComDataPtr(pDataOutput); @@ -273,13 +278,13 @@ CmdDrawFrame* DecompressCmdDrawFrame(const CmdDrawFrame* pDrawFramePrev, const C pIndicePrev = reinterpret_cast(drawGroupPrev.mpIndices.Get()); pDrawsPrev = reinterpret_cast(drawGroupPrev.mpDraws.Get()); verticeSizePrev = drawGroupPrev.mVerticeCount * sizeof(ImguiVert); - indiceSizePrev = drawGroupPrev.mIndiceCount*drawGroupPrev.mBytePerIndex; + indiceSizePrev = drawGroupPrev.mIndiceCount*static_cast(drawGroupPrev.mBytePerIndex); drawSizePrev = drawGroupPrev.mDrawCount*sizeof(ImguiDraw); } drawGroup.mpIndices.SetComDataPtr(pDataOutput); DecompressData( pIndicePrev, indiceSizePrev, - drawGroupPack.mpIndices.GetComData(), drawGroupPack.mIndiceCount*drawGroupPack.mBytePerIndex, + drawGroupPack.mpIndices.GetComData(), drawGroupPack.mIndiceCount*static_cast(drawGroupPack.mBytePerIndex), pDataOutput); drawGroup.mpVertices.SetComDataPtr(pDataOutput); diff --git a/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.h b/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.h index f5e408e..e3cb5e8 100644 --- a/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.h +++ b/Code/Client/Private/NetImgui_CmdPackets_DrawFrame.h @@ -8,7 +8,7 @@ namespace NetImgui { namespace Internal struct ImguiVert { //Note: If updating this, increase 'CmdVersion::eVersion' - enum Constants{ kUvRange_Min=-2, kUvRange_Max=2, kPosRange_Min=-8096, kPosRange_Max=8096}; + enum Constants{ kUvRange_Min=0, kUvRange_Max=1, kPosRange_Min=-8192, kPosRange_Max=8192}; uint16_t mPos[2]; uint16_t mUV[2]; uint32_t mColor; @@ -35,7 +35,7 @@ struct alignas(8) ImguiDrawGroup uint32_t mDrawGroupIdxPrev = kInvalidDrawGroup;// Group index in previous DrawFrame (kInvalidDrawGroup when not using delta compression) uint8_t mBytePerIndex = 2; // 2, 4 bytes uint8_t PADDING[7]; - float mReferenceCoord[2] = {}; // Reference position for the encoded vertices offsets + float mReferenceCoord[2] = {}; // Reference position for the encoded vertices offsets (1st vertice top/left position) OffsetPointer mpIndices; OffsetPointer mpVertices; OffsetPointer mpDraws; diff --git a/Code/Client/Private/NetImgui_NetworkPosix.cpp b/Code/Client/Private/NetImgui_NetworkPosix.cpp index c11748e..b04cd81 100644 --- a/Code/Client/Private/NetImgui_NetworkPosix.cpp +++ b/Code/Client/Private/NetImgui_NetworkPosix.cpp @@ -115,6 +115,7 @@ void Disconnect(SocketInfo* pClientSocket) { if( pClientSocket ) { + shutdown(pClientSocket->mSocket, SHUT_RDWR); close(pClientSocket->mSocket); netImguiDelete(pClientSocket); } diff --git a/Code/Client/Private/NetImgui_NetworkWin32.cpp b/Code/Client/Private/NetImgui_NetworkWin32.cpp index b78b4ae..1736ab9 100644 --- a/Code/Client/Private/NetImgui_NetworkWin32.cpp +++ b/Code/Client/Private/NetImgui_NetworkWin32.cpp @@ -116,6 +116,7 @@ void Disconnect(SocketInfo* pClientSocket) { if( pClientSocket ) { + shutdown(pClientSocket->mSocket, SD_BOTH); closesocket(pClientSocket->mSocket); netImguiDelete(pClientSocket); } diff --git a/Code/Client/Private/NetImgui_Shared.h b/Code/Client/Private/NetImgui_Shared.h index 58b38e0..c205e83 100644 --- a/Code/Client/Private/NetImgui_Shared.h +++ b/Code/Client/Private/NetImgui_Shared.h @@ -196,6 +196,7 @@ template IntType RoundUp(IntType Value, IntType Round); inline uint64_t TextureCastHelper(ImTextureID textureID); +inline ImTextureID TextureCastHelper(const void* pTexture); inline ImTextureID TextureCastHelper(uint64_t textureID); }} //namespace NetImgui::Internal diff --git a/Code/Client/Private/NetImgui_Shared.inl b/Code/Client/Private/NetImgui_Shared.inl index 9044c98..e7f9c14 100644 --- a/Code/Client/Private/NetImgui_Shared.inl +++ b/Code/Client/Private/NetImgui_Shared.inl @@ -36,6 +36,7 @@ void netImguiDeleteSafe(TType*& pData) } //============================================================================= +// Acquire ownership of the resource //============================================================================= template TType* ExchangePtr::Release() @@ -92,7 +93,8 @@ OffsetPointer::OffsetPointer(uint64_t offset) template void OffsetPointer::SetPtr(TType* pPointer) { - mPointer = pPointer; + mOffset = 0; // Remove 'offset flag' that can be left active on non 64bits pointer + mPointer = pPointer; } template @@ -286,20 +288,32 @@ union TextureCastHelperUnion { ImTextureID TextureID; uint64_t TextureUint; + const void* TexturePtr; }; uint64_t TextureCastHelper(ImTextureID textureID) { TextureCastHelperUnion textureUnion; - textureUnion.TextureID = textureID; + textureUnion.TextureUint = 0; + textureUnion.TextureID = textureID; return textureUnion.TextureUint; } +ImTextureID TextureCastHelper(const void* pTexture) +{ + TextureCastHelperUnion textureUnion; + textureUnion.TextureUint = 0; + textureUnion.TexturePtr = pTexture; + return textureUnion.TextureID; +} + +#ifndef IS_NETIMGUISERVER ImTextureID TextureCastHelper(uint64_t textureID) { TextureCastHelperUnion textureUnion; textureUnion.TextureUint = textureID; return textureUnion.TextureID; } +#endif }} //namespace NetImgui::Internal diff --git a/Code/Client/Private/NetImgui_WarningDisable.h b/Code/Client/Private/NetImgui_WarningDisable.h index fe21bde..3f1dc77 100644 --- a/Code/Client/Private/NetImgui_WarningDisable.h +++ b/Code/Client/Private/NetImgui_WarningDisable.h @@ -24,6 +24,8 @@ #pragma warning (disable: 4577) // 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify #pragma warning (disable: 4710) // 'xxx': function not inlined #pragma warning (disable: 4711) // function 'xxx' selected for automatic inline expansion + #pragma warning (disable: 4826) // Conversion from 'TType *' to 'uint64_t' is sign-extended. This may cause unexpected runtime behavior. #pragma warning (disable: 5031) // #pragma warning(pop): likely mismatch, popping warning state pushed in different file #pragma warning (disable: 5045) // Compiler will insert Spectre mitigation for memory load if / Qspectre switch specified + #endif diff --git a/Code/Client/Private/NetImgui_WarningDisableImgui.h b/Code/Client/Private/NetImgui_WarningDisableImgui.h index 1bce435..01d2b51 100644 --- a/Code/Client/Private/NetImgui_WarningDisableImgui.h +++ b/Code/Client/Private/NetImgui_WarningDisableImgui.h @@ -8,8 +8,10 @@ //================================================================================================= #if defined (__clang__) #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wunknown-warning-option" #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" - #pragma clang diagnostic ignored "-Wnonportable-include-path" // Sharpmake convert include path to lowercase, avoid warning + #pragma clang diagnostic ignored "-Wnonportable-include-path" // Sharpmake convert include path to lowercase, avoid warning + #pragma clang diagnostic ignored "-Wreserved-identifier" // Enuma values using '__' or member starting with '_' in imgui.h //================================================================================================= // Visual Studio warnings diff --git a/Code/Sample/Common/main.cpp b/Code/Sample/Common/main.cpp index 25abfa4..01436c9 100644 --- a/Code/Sample/Common/main.cpp +++ b/Code/Sample/Common/main.cpp @@ -54,9 +54,9 @@ int main(int, char**) ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls + io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls // @SAMPLE_EDIT Enabled gamepad io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking - //io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows // @SAMPLE_EDIT diabled temporarily + //io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows // @SAMPLE_EDIT disabled temporarily //io.ConfigViewportsNoAutoMerge = true; //io.ConfigViewportsNoTaskBarIcon = true; //io.ConfigViewportsNoDefaultParent = true; @@ -378,7 +378,7 @@ void TextureDestroy(void*& pTextureView) } } -int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { IM_UNUSED(hInstance); IM_UNUSED(hPrevInstance); diff --git a/Code/Sample/SampleNoBackend/SampleNoBackend.cpp b/Code/Sample/SampleNoBackend/SampleNoBackend.cpp new file mode 100644 index 0000000..57479ad --- /dev/null +++ b/Code/Sample/SampleNoBackend/SampleNoBackend.cpp @@ -0,0 +1,177 @@ +//================================================================================================= +// SAMPLE NO BACKEND +//------------------------------------------------------------------------------------------------- +// Demonstration of using Dear ImGui without any Backend support. +// This way, user can use DearImgui without any code needed for drawing / input management, +// since it is all handled by the NetImgui remote server instead. Useful when this code +// is running on hardward without any display and/or convenient input. +// +// Because we are not using any Backend code, this Sample is a little bit different from +// the others. All of its code is included in this file (except for Dear ImGui sourcs) +// and does not rely on some shared sample source file. +// +// This sample compile both 'Dear Imgui' and 'NetImgui' sources directly +// (not using library version for them) +// +// NOTE: This sample is also use in backward compatibility test with older Dear ImGui versions, +// making it easier to compile Dear Imgui without any OS specific code (Backends) +//================================================================================================= + +#include + +// Defining this value before '#include ', also load all 'NetImgui' client sources +// It should only be done in 1 source file (to avoid duplicate symbol at link time), +// other location can still include 'NetImgui_Api.h', but without using the define +// +// Note: Another (more conventional) way of compiling 'NetImgui' with your code, +// is to includes its sources file directly in your project. This single header include +// approach was added for potential convenience, minimizing changes to a project. +#define NETIMGUI_IMPLEMENTATION +#include + +#include + +namespace SampleNoBackend +{ + +enum eSampleState : uint8_t { + Start, + Disconnected, + Connected, +}; + +//================================================================================================= +// Initialize the Dear Imgui Context and the NetImgui library +//================================================================================================= +bool Client_Startup() +{ + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); + io.Fonts->AddFontDefault(); + io.Fonts->Build(); + io.Fonts->SetTexID(0); + io.DisplaySize = ImVec2(8,8); + ImGui::StyleColorsDark(); + + if( !NetImgui::Startup() ) + return false; + + return true; +} + +//================================================================================================= +// Release resources +//================================================================================================= +void Client_Shutdown() +{ + NetImgui::Shutdown(); + ImGui::DestroyContext(ImGui::GetCurrentContext()); +} + +//================================================================================================= +// Manage connection to NetImguiServer +//================================================================================================= +void Client_Connect(eSampleState& sampleState) +{ + constexpr char zClientName[] = "SampleNoBackend (ImGui " IMGUI_VERSION ")"; + if( sampleState == eSampleState::Start ) + { + printf("- Connecting to NetImguiServer to (127.0.0.1:%i)... ", NetImgui::kDefaultServerPort); + NetImgui::ConnectToApp(zClientName, "localhost"); + while( NetImgui::IsConnectionPending() ); + bool bSuccess = NetImgui::IsConnected(); + sampleState = bSuccess ? eSampleState::Connected : eSampleState::Disconnected; + printf(bSuccess ? "Success\n" : "Failed\n"); + if (!bSuccess) { + printf("- Waiting for a connection from NetImguiServer on port %i... ", NetImgui::kDefaultClientPort); + NetImgui::ConnectFromApp(zClientName); + + } + } + else if (sampleState == eSampleState::Disconnected && NetImgui::IsConnected()) + { + sampleState = eSampleState::Connected; + printf("CONNECTED\n"); + } + else if (sampleState == eSampleState::Connected && !NetImgui::IsConnected()) + { + sampleState = eSampleState::Disconnected; + printf("DISCONNECTED\n"); + printf("- Waiting for a connection from NetImguiServer on port %i... ", NetImgui::kDefaultClientPort); + NetImgui::ConnectFromApp(zClientName); + } +} + +//================================================================================================= +// Render all of our Dear ImGui Content (when appropriate) +//================================================================================================= +void Client_Draw(bool& bQuit) +{ + if( NetImgui::IsConnected() && NetImgui::NewFrame(true) ){ + + ImGui::ShowDemoWindow(); + + ImGui::SetNextWindowPos(ImVec2(32,48), ImGuiCond_Once); + ImGui::SetNextWindowSize(ImVec2(400,400), ImGuiCond_Once); + if( ImGui::Begin("Sample No Backend", nullptr) ) + { + ImGui::TextColored(ImVec4(0.1, 1, 0.1, 1), "Client:"); + ImGui::TextUnformatted(" DearImgui Version: " IMGUI_VERSION); + ImGui::TextUnformatted(" NetImgui Version: " NETIMGUI_VERSION); + ImGui::TextUnformatted(""); ImGui::SameLine(); + bQuit = ImGui::Button(" Quit "); + if( ImGui::IsItemHovered() ) + ImGui::SetTooltip("Terminate this sample."); + ImGui::NewLine(); + ImGui::TextColored(ImVec4(0.1, 1, 0.1, 1), "Description:"); + ImGui::TextWrapped( "This sample demonstate the ability to use Dear ImGui without any Backend. " + "Rely instead on NetImgui to remotely handle drawing and inputs. This avoids the need for rendering/input/window management code on the client itself."); + } + ImGui::End(); + + NetImgui::EndFrame(); + } +} + +} // namespace SampleNoBackend + +int main(int, char**) +{ + printf("================================================================================\n"); + printf(" NetImgui Sample: No Backend\n"); + printf("================================================================================\n"); + printf(" Demonstrate 'Dear ImGui' + 'NetImgui' for a UI displayed on a remote server.\n"); + printf(" Dear ImGui : " IMGUI_VERSION "\n"); + printf(" NetImgui : " NETIMGUI_VERSION "\n"); + printf(" ['Ctrl + C' to quit]\n"); + printf("--------------------------------------------------------------------------------\n"); + if ( !SampleNoBackend::Client_Startup() ) { + printf("Failed initializing NetImgui."); + SampleNoBackend::Client_Shutdown(); + return -1; + } + + // Main loop + bool bQuit = false; + SampleNoBackend::eSampleState sampleState = SampleNoBackend::eSampleState::Start; + while (!bQuit) + { + // Avoids high CPU/GPU usage by releasing this thread until enough time has passed + static auto sLastTime = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsedSec = std::chrono::high_resolution_clock::now() - sLastTime; + if( elapsedSec.count() < 1.f/120.f ){ + std::this_thread::sleep_for(std::chrono::microseconds(250)); + continue; + } + sLastTime = std::chrono::high_resolution_clock::now(); + + // Sample Update + SampleNoBackend::Client_Connect(sampleState); + SampleNoBackend::Client_Draw(bQuit); + } + + // Cleanup + SampleNoBackend::Client_Shutdown(); + return 0; +} diff --git a/Code/ServerApp/Source/GlfwGL3/NetImguiServer_App_GlfwGL3.cpp b/Code/ServerApp/Source/GlfwGL3/NetImguiServer_App_GlfwGL3.cpp index 458fcd6..b3e21e2 100644 --- a/Code/ServerApp/Source/GlfwGL3/NetImguiServer_App_GlfwGL3.cpp +++ b/Code/ServerApp/Source/GlfwGL3/NetImguiServer_App_GlfwGL3.cpp @@ -8,24 +8,33 @@ #if HAL_API_PLATFORM_GLFW_GL3 #ifdef _MSC_VER - #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen - #pragma comment(lib, "opengl32.lib") - #pragma comment(lib, "glfw3_mt.lib") +#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen + + +#pragma comment(lib, "opengl32.lib") +#ifdef _DEBUG +#pragma comment(lib, "glfw3_mtd.lib") +#else +#pragma comment(lib, "glfw3_mt.lib") +#endif #endif + #if defined (__clang__) #pragma clang diagnostic ignored "-Wdeprecated-declarations" // imgui_impl_opengl3.cpp(171,9): error : 'sscanf' is deprecated: This function or variable may be unsafe. #pragma clang diagnostic ignored "-Wmicrosoft-cast" // gl3w.c(28,8): error : implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension #endif -#include "NetImguiServer_UI.h" -#include -#include - // @SAMPLE_EDIT -// Note: We fetch a special 'imgui_impl_opengl3_loader.h' file without stripped symbol, -// instead of using the one provided in the Dear Imgui depot. The server App needs a few extra +// Note: The 'imgui_impl_opengl3_loader.h' included by Dear Imgui Backend has been replaced +// with our own version without stripped symbol. The server App needs a few extra // function that are not shipped with Dear ImGui. // The unstripped version comes from : https://github.com/dearimgui/gl3w_stripped/releases + +#include +#include "NetImguiServer_UI.h" +#include "backends/imgui_impl_opengl3.cpp" +#include "backends/imgui_impl_glfw.cpp" +#include "backends/imgui_impl_win32.cpp" //================================================================================================= // Dear ImGui: standalone example application for GLFW + OpenGL 3, using programmable pipeline @@ -54,7 +63,7 @@ static void glfw_error_callback(int error, const char* description) fprintf(stderr, "Glfw Error %d: %s\n", error, description); } -int main(int, char**) +int main(int argc, char **argv) { // Setup window glfwSetErrorCallback(glfw_error_callback); @@ -91,6 +100,7 @@ int main(int, char**) glfwMakeContextCurrent(window); glfwSwapInterval(1); // Enable vsync + // Setup Dear ImGui context IMGUI_CHECKVERSION(); ImGui::CreateContext(); @@ -141,7 +151,17 @@ int main(int, char**) // Main loop //========================================================================================= // @SAMPLE_EDIT (Start our own initialisation) - bool ok = NetImguiServer::App::Startup( GetCommandLineA() ); + std::string cmdArgs; + for (size_t i = 0; i < size_t(argc); ++i) { + std::string arg(argv[i]); + cmdArgs += arg + " "; + } + + if (!cmdArgs.empty()) { + cmdArgs.pop_back(); + } + + bool ok = NetImguiServer::App::Startup(cmdArgs.c_str()); while (ok && !glfwWindowShouldClose(window)) //========================================================================================= { diff --git a/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_GL3.cpp b/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_GL3.cpp index a9bd00e..e21e89f 100644 --- a/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_GL3.cpp +++ b/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_GL3.cpp @@ -8,10 +8,9 @@ #if HAL_API_PLATFORM_GLFW_GL3 -#include #include "NetImguiServer_RemoteClient.h" #include -#include "imgui_impl_opengl3_loader.h" +#include namespace NetImguiServer { namespace App { diff --git a/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_Glfw.cpp b/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_Glfw.cpp index 14d03b4..5db4718 100644 --- a/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_Glfw.cpp +++ b/Code/ServerApp/Source/GlfwGL3/NetImguiServer_HAL_Glfw.cpp @@ -69,28 +69,6 @@ void HAL_Shutdown() } -//================================================================================================= -// HAL CONVERT KEY DOWN -// Receive platform specific 'key down' status from ImGui, and convert them to 'Windows' specific -// key code and store them has bitmask entry that InputCmd in forwardit it to remote client. -//================================================================================================= -void HAL_ConvertKeyDown(const bool ImguiKeysDown[512], uint64_t outKeysDownMask[512/64] ) -{ -#if _WIN32 - // NetImgui is relying on Windows key code and this function is evaluated under windows, - // so no conversion key code needed, can just store they keys as bitmask directly - for (uint64_t i(0); i < 512; ++i) - { - const uint64_t keyEntryIndex = static_cast(i) / 64; - const uint64_t keyBitMask = static_cast(1) << static_cast(i) % 64; - outKeysDownMask[keyEntryIndex] = ImguiKeysDown[i] ? outKeysDownMask[keyEntryIndex] | keyBitMask : - outKeysDownMask[keyEntryIndex] & ~keyBitMask; - } -#else - // Do platform specific key code covnersion to Window virtual keys, here. -#endif -} - //================================================================================================= // HAL SHELL COMMAND // Receive a command to execute by the OS. Used to open our weblink to the NetImgui Github diff --git a/Code/ServerApp/Source/NetImguiServer_App.cpp b/Code/ServerApp/Source/NetImguiServer_App.cpp index ac0febe..24162b0 100644 --- a/Code/ServerApp/Source/NetImguiServer_App.cpp +++ b/Code/ServerApp/Source/NetImguiServer_App.cpp @@ -84,6 +84,11 @@ bool AddClientConfigFromString(const char* string, bool transient) while( *zEntryCur != 0 ) { zEntryCur++; + // Skip commandline preamble holding path to executable + if (*zEntryCur == ' ' && *(zEntryCur+1) != 0) + { + zEntryStart = zEntryCur + 1; + } if( (*zEntryCur == ';' || *zEntryCur == 0) ) { if (paramIndex == 0) @@ -166,7 +171,7 @@ void UpdateRemoteContent() client.ProcessPendingTextures(); // Update the RenderTarget destination of each client, of size was updated - if (client.mAreaSizeX > 0 && client.mAreaSizeY > 0 && (client.mAreaRTSizeX != client.mAreaSizeX || client.mAreaRTSizeY != client.mAreaSizeY)) + if (client.mAreaSizeX > 0 && client.mAreaSizeY > 0 && (!client.mpHAL_AreaRT || client.mAreaRTSizeX != client.mAreaSizeX || client.mAreaRTSizeY != client.mAreaSizeY)) { if (HAL_CreateRenderTarget(client.mAreaSizeX, client.mAreaSizeY, client.mpHAL_AreaRT, client.mpHAL_AreaTexture)) { diff --git a/Code/ServerApp/Source/NetImguiServer_App.h b/Code/ServerApp/Source/NetImguiServer_App.h index 8374982..e918a1c 100644 --- a/Code/ServerApp/Source/NetImguiServer_App.h +++ b/Code/ServerApp/Source/NetImguiServer_App.h @@ -48,8 +48,6 @@ namespace NetImguiServer { namespace App bool HAL_Startup(const char* CmdLine); // Prepare for shutdown of application, with platform specific code void HAL_Shutdown(); - // Receive the 'Dear ImGui' key down values from the 'NetImgui' application, and convert them to windows virtual key codes - void HAL_ConvertKeyDown(const bool ImguiKeysDown[512], uint64_t outKeysDownMask[512/64] ); // Receive a platform specific socket, and return us with info on the connection bool HAL_GetSocketInfo(NetImgui::Internal::Network::SocketInfo* pClientSocket, char* pOutHostname, size_t HostNameLen, int& outPort); // Receive a command to execute by the OS. Used to open our weblink to the NetImgui Github diff --git a/Code/ServerApp/Source/NetImguiServer_Network.cpp b/Code/ServerApp/Source/NetImguiServer_Network.cpp index 4f59882..46a3fef 100644 --- a/Code/ServerApp/Source/NetImguiServer_Network.cpp +++ b/Code/ServerApp/Source/NetImguiServer_Network.cpp @@ -212,7 +212,7 @@ bool Communications_InitializeClient(NetImgui::Internal::Network::SocketInfo* pC if( NetImgui::Internal::Network::DataSend(pClientSocket, reinterpret_cast(&cmdVersionSend), cmdVersionSend.mHeader.mSize) && NetImgui::Internal::Network::DataReceive(pClientSocket, reinterpret_cast(&cmdVersionRcv), cmdVersionRcv.mHeader.mSize) && cmdVersionRcv.mHeader.mType == NetImgui::Internal::CmdHeader::eCommands::Version && - cmdVersionRcv.mVersion == NetImgui::Internal::CmdVersion::eVersion::_Current ) + cmdVersionRcv.mVersion == NetImgui::Internal::CmdVersion::eVersion::_current ) { pClient->Initialize(); pClient->mInfoImguiVerID = cmdVersionRcv.mImguiVerID; @@ -223,10 +223,10 @@ bool Communications_InitializeClient(NetImgui::Internal::Network::SocketInfo* pC NetImguiServer::Config::Client clientConfig; if( NetImguiServer::Config::Client::GetConfigByID(pClient->mClientConfigID, clientConfig) ){ - NetImgui::Internal::StringFormat(pClient->mWindowID, "%s (%s)###%i", pClient->mInfoName, clientConfig.mClientName, clientConfig.mHostPort); // Using HostPort as a window unique ID + NetImgui::Internal::StringFormat(pClient->mWindowID, "%s (%s)##%i", pClient->mInfoName, clientConfig.mClientName, static_cast(pClient->mClientIndex)); // Using ClientIndex as a window unique ID } else{ - NetImgui::Internal::StringFormat(pClient->mWindowID, "%s##%i", pClient->mInfoName, static_cast(pClient->mClientIndex)); // Using HostPort as a window unique ID + NetImgui::Internal::StringFormat(pClient->mWindowID, "%s##%i", pClient->mInfoName, static_cast(pClient->mClientIndex)); // Using ClientIndex as a window unique ID } return true; diff --git a/Code/ServerApp/Source/NetImguiServer_RemoteClient.cpp b/Code/ServerApp/Source/NetImguiServer_RemoteClient.cpp index b1ff98b..2046ec9 100644 --- a/Code/ServerApp/Source/NetImguiServer_RemoteClient.cpp +++ b/Code/ServerApp/Source/NetImguiServer_RemoteClient.cpp @@ -88,14 +88,16 @@ void Client::ReceiveTexture(NetImgui::Internal::CmdTexture* pTextureCmd) if( pTextureCmd ) { // Wait for a free spot in the ring buffer - while ( mPendingTextureWriteIndex-mPendingTextureReadIndex > IM_ARRAYSIZE(mpPendingTextures) ); + while (mPendingTextureWriteIndex - mPendingTextureReadIndex >= IM_ARRAYSIZE(mpPendingTextures)) { + std::this_thread::yield(); + } mpPendingTextures[(mPendingTextureWriteIndex++) % IM_ARRAYSIZE(mpPendingTextures)] = pTextureCmd; } } void Client::ProcessPendingTextures() { - while( mPendingTextureReadIndex < mPendingTextureWriteIndex ) + while( mPendingTextureReadIndex != mPendingTextureWriteIndex ) { NetImgui::Internal::CmdTexture* pTextureCmd = mpPendingTextures[(mPendingTextureReadIndex++) % IM_ARRAYSIZE(mpPendingTextures)]; size_t foundIdx = static_cast(-1); @@ -132,6 +134,7 @@ void Client::ProcessPendingTextures() void Client::Reset() { + NetImguiServer::App::HAL_DestroyRenderTarget(mpHAL_AreaRT, mpHAL_AreaTexture); for(auto& texEntry : mvTextures ) { NetImguiServer::App::HAL_DestroyTexture(texEntry); @@ -235,12 +238,12 @@ NetImguiImDrawData* Client::GetImguiDrawData(void* pEmtpyTextureHAL) for(int drawIdx(0), drawCount(pCmdList->CmdBuffer.size()); drawIdxCmdBuffer[drawIdx].TextureId); - pCmdList->CmdBuffer[drawIdx].TextureId = pEmtpyTextureHAL; // Default to empty texture + pCmdList->CmdBuffer[drawIdx].TextureId = NetImgui::Internal::TextureCastHelper(pEmtpyTextureHAL); // Default to empty texture for(size_t texIdx=0; texIdxCmdBuffer[drawIdx].TextureId = mvTextures[texIdx].mpHAL_Texture; + pCmdList->CmdBuffer[drawIdx].TextureId = NetImgui::Internal::TextureCastHelper(mvTextures[texIdx].mpHAL_Texture); break; } } @@ -266,7 +269,6 @@ NetImguiImDrawData* Client::ConvertToImguiDrawData(const NetImgui::Internal::Cmd mMouseCursor = static_cast(pCmdDrawFrame->mMouseCursor); NetImguiImDrawData* pDrawData = NetImgui::Internal::netImguiNew(); - ImDrawList* pCmdList = pDrawData->CmdLists[0]; pDrawData->Valid = true; pDrawData->TotalVtxCount = static_cast(pCmdDrawFrame->mTotalVerticeCount); pDrawData->TotalIdxCount = static_cast(pCmdDrawFrame->mTotalIndiceCount); @@ -277,11 +279,17 @@ NetImguiImDrawData* Client::ConvertToImguiDrawData(const NetImgui::Internal::Cmd pDrawData->FramebufferScale = ImVec2(1,1); //! @sammyfreg Currently untested, so force set to 1 pDrawData->OwnerViewport = nullptr; - uint32_t indexOffset(0), vertexOffset(0); + ImDrawList* pCmdList = pDrawData->CmdLists[0]; pCmdList->IdxBuffer.resize(pCmdDrawFrame->mTotalIndiceCount); pCmdList->VtxBuffer.resize(pCmdDrawFrame->mTotalVerticeCount); pCmdList->CmdBuffer.resize(pCmdDrawFrame->mTotalDrawCount); pCmdList->Flags = ImDrawListFlags_AllowVtxOffset|ImDrawListFlags_AntiAliasedLines|ImDrawListFlags_AntiAliasedFill|ImDrawListFlags_AntiAliasedLinesUseTex; + + if( pCmdDrawFrame->mTotalDrawCount == 0 ){ + return pDrawData; + } + + uint32_t indexOffset(0), vertexOffset(0); ImDrawIdx* pIndexDst = &pCmdList->IdxBuffer[0]; ImDrawVert* pVertexDst = &pCmdList->VtxBuffer[0]; ImDrawCmd* pCommandDst = &pCmdList->CmdBuffer[0]; @@ -372,7 +380,7 @@ void Client::CaptureImguiInput() // Update persistent mouse status if( ImGui::IsMousePosValid(&io.MousePos)){ mMousePos[0] = io.MousePos.x - ImGui::GetCursorScreenPos().x; - mMousePos[1] = io.MousePos.y - ImGui::GetCursorScreenPos().y; + mMousePos[1] = io.MousePos.y - ImGui::GetCursorScreenPos().y; } // This method is tied to the Server VSync setting, which might not match our client desired refresh setting @@ -407,18 +415,52 @@ void Client::CaptureImguiInput() if( ImGui::IsWindowFocused() ) { - NetImguiServer::App::HAL_ConvertKeyDown(io.KeysDown, pNewInput->mKeysDownMask); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkMouseBtnLeft, io.MouseDown[0]); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkMouseBtnRight, io.MouseDown[1]); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkMouseBtnMid, io.MouseDown[2]); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkMouseBtnExtra1, io.MouseDown[3]); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkMouseBtnExtra2, io.MouseDown[4]); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardShift, io.KeyShift); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardCtrl, io.KeyCtrl); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardAlt, io.KeyAlt); - pNewInput->SetKeyDown(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardSuper1, io.KeySuper); - - //! @sammyfreg: ToDo Add support for gamepad + // Mouse Buttons Inputs + // If Dear ImGui Update this enum, must also adjust our enum copy + static_assert( static_cast(NetImgui::Internal::CmdInput::NetImguiMouseButton::ImGuiMouseButton_COUNT) == + static_cast(ImGuiMouseButton_::ImGuiMouseButton_COUNT), "Update the NetImgui enum to match the updated Dear ImGui enum"); + pNewInput->mMouseDownMask = 0; + pNewInput->mMouseDownMask |= ImGui::IsMouseDown(ImGuiMouseButton_::ImGuiMouseButton_Left) ? 1<mMouseDownMask |= ImGui::IsMouseDown(ImGuiMouseButton_::ImGuiMouseButton_Right) ? 1<mMouseDownMask |= ImGui::IsMouseDown(ImGuiMouseButton_::ImGuiMouseButton_Middle) ? 1<mMouseDownMask |= ImGui::IsMouseDown(3) ? 1<mMouseDownMask |= ImGui::IsMouseDown(4) ? 1<(NetImgui::Internal::CmdInput::NetImguiKeys::KEYNAME) == static_cast(ImGuiKey_::KEYNAME-ImGuiKey_::ImGuiKey_NamedKey_BEGIN), "Update the NetImgui enum to match the updated Dear ImGui enum" + static_assert(EnumKeynameTest(ImGuiKey_COUNT)); + static_assert(EnumKeynameTest(ImGuiKey_Tab)); + static_assert(EnumKeynameTest(ImGuiKey_Escape)); + static_assert(EnumKeynameTest(ImGuiKey_RightSuper)); + static_assert(EnumKeynameTest(ImGuiKey_Apostrophe)); + static_assert(EnumKeynameTest(ImGuiKey_Keypad0)); + static_assert(EnumKeynameTest(ImGuiKey_CapsLock)); + static_assert(EnumKeynameTest(ImGuiKey_GamepadStart)); + static_assert(EnumKeynameTest(ImGuiKey_GamepadLStickUp)); + static_assert(EnumKeynameTest(ImGuiKey_ModCtrl)); + static_assert(EnumKeynameTest(ImGuiKey_ModShift)); + static_assert(EnumKeynameTest(ImGuiKey_ModAlt)); + static_assert(EnumKeynameTest(ImGuiKey_ModSuper)); + static_assert(EnumKeynameTest(ImGuiKey_GamepadStart)); + static_assert(EnumKeynameTest(ImGuiKey_GamepadR3)); + static_assert(EnumKeynameTest(ImGuiKey_GamepadLStickUp)); + static_assert(EnumKeynameTest(ImGuiKey_GamepadRStickRight)); + + // Save every keydown status to out bitmask + uint64_t valueMask(0); + for (uint32_t i(0); i < ImGuiKey_::ImGuiKey_NamedKey_COUNT; ++i) { + valueMask |= ImGui::IsKeyDown(ImGuiKey_NamedKey_BEGIN+i) ? 0x0000000000000001ull << (i%64) : 0; + if( ((i % 64) == 63) || i == (ImGuiKey_::ImGuiKey_NamedKey_COUNT-1)){ + pNewInput->mInputDownMask[i/64] = valueMask; + valueMask = 0; + } + } + // Save analog keys (gamepad) + for (uint32_t i(0); i < NetImgui::Internal::CmdInput::kAnalog_Count; ++i) { + pNewInput->mInputAnalog[i] = ImGui::GetIO().KeysData[NetImgui::Internal::CmdInput::kAnalog_First+i].AnalogValue; + } } // Copy waiting characters inputs diff --git a/Code/ServerApp/Source/NetImguiServer_UI.cpp b/Code/ServerApp/Source/NetImguiServer_UI.cpp index 8f3a3f9..510f721 100644 --- a/Code/ServerApp/Source/NetImguiServer_UI.cpp +++ b/Code/ServerApp/Source/NetImguiServer_UI.cpp @@ -110,16 +110,23 @@ void ClientInfoTooltip(const RemoteClient::Client& Client) // When a Remote Client request is made, first makes sure to confirm with user //================================================================================================= void Popup_ConfirmDisconnect() -{ +{ bool pendingDisconnectOpen(gPopup_ConfirmDisconnect_ClientIdx != kClientRemoteInvalid); if (pendingDisconnectOpen) - { - + { RemoteClient::Client& client = RemoteClient::Client::Get(gPopup_ConfirmDisconnect_ClientIdx); - bool wantExit = ImGui::IsKeyPressed(static_cast(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardEscape), false); + bool wantExit = ImGui::IsKeyPressed(ImGuiKey_Escape); ImGuiWindowClass windowClass; - windowClass.ViewportFlagsOverrideSet = ImGuiViewportFlags_TopMost; + windowClass.ViewportFlagsOverrideSet = ImGuiViewportFlags_TopMost; ImGui::SetNextWindowClass(&windowClass); + + static ImVec2 sPopupSize = ImVec2(250.f,200.f); + ImGuiViewport* pViewport = ImGui::GetWindowViewport(); + ImVec2 popupPos = pViewport->Pos; + popupPos.x += pViewport->Size.x/2.f - sPopupSize.x/2.f; + popupPos.y += pViewport->Size.y/2.f - sPopupSize.y/2.f; + ImGui::SetNextWindowPos(popupPos, ImGuiCond_Appearing); + ImGui::OpenPopup("Confirmation##DEL"); if (ImGui::BeginPopupModal("Confirmation##DEL", &pendingDisconnectOpen, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -134,7 +141,7 @@ void Popup_ConfirmDisconnect() } ImGui::NewLine(); - ImGui::Separator(); + ImGui::Separator(); if (ImGui::Button("Cancel", ImVec2(ImGui::GetContentRegionAvail().x / 2.f, 0)) || wantExit ) { pendingDisconnectOpen = false; @@ -148,6 +155,7 @@ void Popup_ConfirmDisconnect() pendingDisconnectOpen = false; } + sPopupSize = ImGui::GetWindowSize(); ImGui::EndPopup(); } } @@ -168,6 +176,14 @@ void Popup_AboutNetImgui() ImGuiWindowClass windowClass; windowClass.ViewportFlagsOverrideSet = ImGuiViewportFlags_TopMost; ImGui::SetNextWindowClass(&windowClass); + + static ImVec2 sPopupSize = ImVec2(250.f,200.f); + ImGuiViewport* pViewport = ImGui::GetWindowViewport(); + ImVec2 popupPos = pViewport->Pos; + popupPos.x += pViewport->Size.x/2.f - sPopupSize.x/2.f; + popupPos.y += pViewport->Size.y/2.f - sPopupSize.y/2.f; + ImGui::SetNextWindowPos(popupPos, ImGuiCond_Appearing); + ImGui::OpenPopup("About NetImgui..."); if (ImGui::BeginPopupModal("About NetImgui...", &gPopup_AboutNetImgui_Show, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -190,10 +206,11 @@ void Popup_AboutNetImgui() ImGui::NewLine(); ImGui::Separator(); - bool wantExit = ImGui::IsKeyPressed(static_cast(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardEscape), false); - wantExit |= ImGui::IsKeyPressed(static_cast(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardEnter), false); + bool wantExit = ImGui::IsKeyPressed(ImGuiKey_Escape); + wantExit |= ImGui::IsKeyPressed(ImGuiKey_Enter); if( ImGui::Button("Close", ImVec2(ImGui::GetContentRegionAvail().x, 0)) || wantExit) gPopup_AboutNetImgui_Show = false; + sPopupSize = ImGui::GetWindowSize(); ImGui::EndPopup(); } } @@ -219,6 +236,14 @@ void Popup_ServerConfig() ImGuiWindowClass windowClass; windowClass.ViewportFlagsOverrideSet = ImGuiViewportFlags_TopMost; ImGui::SetNextWindowClass(&windowClass); + + static ImVec2 sPopupSize = ImVec2(250.f,200.f); + ImGuiViewport* pViewport = ImGui::GetWindowViewport(); + ImVec2 popupPos = pViewport->Pos; + popupPos.x += pViewport->Size.x/2.f - sPopupSize.x/2.f; + popupPos.y += pViewport->Size.y/2.f - sPopupSize.y/2.f; + ImGui::SetNextWindowPos(popupPos, ImGuiCond_Appearing); + ImGui::OpenPopup("Server Configuration"); if (ImGui::BeginPopupModal("Server Configuration", &gPopup_ServerConfig_Show, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -256,7 +281,7 @@ void Popup_ServerConfig() // --- Save/Cancel --- ImGui::NewLine(); ImGui::Separator(); - bool wantExit = ImGui::IsKeyPressed(static_cast(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardEscape), false); + bool wantExit = ImGui::IsKeyPressed(ImGuiKey_Escape); gPopup_ServerConfig_Show &= !ImGui::Button("Cancel", ImVec2(ImGui::GetContentRegionAvail().x / 2.f, 0)) && !wantExit; ImGui::SetItemDefaultFocus(); ImGui::SameLine(); @@ -268,6 +293,8 @@ void Popup_ServerConfig() NetImguiServer::Config::Client::SaveAll(); gPopup_ServerConfig_Show = false; } + + sPopupSize = ImGui::GetWindowSize(); ImGui::EndPopup(); } } @@ -282,13 +309,21 @@ void Popup_ServerConfig() // Edit a new or existing client settings //================================================================================================= void Popup_ClientConfigEdit() -{ +{ bool bOpenEdit(gPopup_ClientConfig_pConfig != nullptr); if (bOpenEdit) { ImGuiWindowClass windowClass; windowClass.ViewportFlagsOverrideSet = ImGuiViewportFlags_TopMost; ImGui::SetNextWindowClass(&windowClass); + + static ImVec2 sPopupSize = ImVec2(250.f,200.f); + ImGuiViewport* pViewport = ImGui::GetWindowViewport(); + ImVec2 popupPos = pViewport->Pos; + popupPos.x += pViewport->Size.x/2.f - sPopupSize.x/2.f; + popupPos.y += pViewport->Size.y/2.f - sPopupSize.y/2.f; + ImGui::SetNextWindowPos(popupPos, ImGuiCond_Appearing); + ImGui::OpenPopup("Edit Client Info"); if (ImGui::BeginPopupModal("Edit Client Info", &bOpenEdit, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -327,10 +362,11 @@ void Popup_ClientConfigEdit() NetImguiServer::Config::Client::SaveAll(); bOpenEdit = false; } + sPopupSize = ImGui::GetWindowSize(); ImGui::EndPopup(); } - bool wantExit = ImGui::IsKeyPressed(static_cast(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardEscape), false); + bool wantExit = ImGui::IsKeyPressed(ImGuiKey_Escape); bOpenEdit &= !wantExit; } @@ -352,6 +388,14 @@ void Popup_ClientConfigDelete() ImGuiWindowClass windowClass; windowClass.ViewportFlagsOverrideSet = ImGuiViewportFlags_TopMost; ImGui::SetNextWindowClass(&windowClass); + + static ImVec2 sPopupSize = ImVec2(250.f,200.f); + ImGuiViewport* pViewport = ImGui::GetWindowViewport(); + ImVec2 popupPos = pViewport->Pos; + popupPos.x += pViewport->Size.x/2.f - sPopupSize.x/2.f; + popupPos.y += pViewport->Size.y/2.f - sPopupSize.y/2.f; + ImGui::SetNextWindowPos(popupPos, ImGuiCond_Appearing); + ImGui::OpenPopup("Confirmation##DEL"); if (ImGui::BeginPopupModal("Confirmation##DEL", &bOpenDelConfirm, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -375,10 +419,11 @@ void Popup_ClientConfigDelete() NetImguiServer::Config::Client::SaveAll(); bOpenDelConfirm = false; } + sPopupSize = ImGui::GetWindowSize(); ImGui::EndPopup(); } - bool wantExit = ImGui::IsKeyPressed(static_cast(NetImgui::Internal::CmdInput::eVirtualKeys::vkKeyboardEscape), false); + bool wantExit = ImGui::IsKeyPressed(ImGuiKey_Escape); bOpenDelConfirm &= !wantExit; if( !bOpenDelConfirm ){ gPopup_ConfirmDelete_ConfigIdx = NetImguiServer::Config::Client::kInvalidRuntimeID; @@ -705,7 +750,7 @@ void DrawImguiContent_MainMenu_Clients() // Display some relevenant stats in the MainMenu bar //================================================================================================= void DrawImguiContent_MainMenu_Stats() -{ +{ constexpr float width(100.f); uint32_t txKBs(0), rxKBs(0), connected(0); for(uint32_t i(0); i(std::chrono::duration_cast(std::chrono::steady_clock::now() - gLastUIUpdate).count()); gLastUIUpdate = std::chrono::steady_clock::now(); diff --git a/Code/ServerApp/Source/Win32DX11/NetImguiServer_App_win32dx11.cpp b/Code/ServerApp/Source/Win32DX11/NetImguiServer_App_win32dx11.cpp index 73f88a9..8bd8558 100644 --- a/Code/ServerApp/Source/Win32DX11/NetImguiServer_App_win32dx11.cpp +++ b/Code/ServerApp/Source/Win32DX11/NetImguiServer_App_win32dx11.cpp @@ -6,9 +6,9 @@ #include "NetImguiServer_App.h" #if HAL_API_PLATFORM_WIN32_DX11 +#include "NetImguiServer_UI.h" #include "backends/imgui_impl_dx11.cpp" #include "backends/imgui_impl_win32.cpp" -#include "NetImguiServer_UI.h" //================================================================================================= // Dear ImGui: standalone example application for DirectX 11 @@ -112,17 +112,14 @@ int main(int, char**) // Main loop bool done = false; - //========================================================================================= + //========================================================================================= // @SAMPLE_EDIT (Start our own initialisation) done = !NetImguiServer::App::Startup( GetCommandLineA() ); //========================================================================================= while (!done) { // Poll and handle messages (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + // See the WndProc() function below for our to dispatch events to the Win32 backend. MSG msg; while (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { @@ -290,6 +287,10 @@ void CleanupRenderTarget() extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); // Win32 message handler +// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. +// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data. +// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data. +// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) @@ -325,4 +326,4 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) return ::DefWindowProc(hWnd, msg, wParam, lParam); } -#endif // @SAMPLE_EDIT HAL_API_PLATFORM_WIN32_DX11 \ No newline at end of file +#endif // @SAMPLE_EDIT HAL_API_PLATFORM_WIN32_DX11 diff --git a/Code/ServerApp/Source/Win32DX11/NetImguiServer_HAL_win32.cpp b/Code/ServerApp/Source/Win32DX11/NetImguiServer_HAL_win32.cpp index 7723526..000e3df 100644 --- a/Code/ServerApp/Source/Win32DX11/NetImguiServer_HAL_win32.cpp +++ b/Code/ServerApp/Source/Win32DX11/NetImguiServer_HAL_win32.cpp @@ -149,24 +149,6 @@ void HAL_Shutdown() } -//================================================================================================= -// HAL CONVERT KEY DOWN -// Receive platform specific 'key down' status from ImGui, and convert them to 'Windows' specific -// key code and store them has bitmask entry that InputCmd in forwardit it to remote client. -//================================================================================================= -void HAL_ConvertKeyDown(const bool ImguiKeysDown[512], uint64_t outKeysDownMask[512/64] ) -{ - // NetImgui is relying on Windows key code and this function is evaluated under windows, - // so no conversion key code needed, can just store they keys as bitmask directly - for (uint64_t i(0); i < 512; ++i) - { - const uint64_t keyEntryIndex = static_cast(i) / 64; - const uint64_t keyBitMask = static_cast(1) << static_cast(i) % 64; - outKeysDownMask[keyEntryIndex] = ImguiKeysDown[i] ? outKeysDownMask[keyEntryIndex] | keyBitMask : - outKeysDownMask[keyEntryIndex] & ~keyBitMask; - } -} - //================================================================================================= // HAL SHELL COMMAND // Receive a command to execute by the OS. Used to open our weblink to the NetImgui Github diff --git a/Code/ThirdParty/DearImgui/LICENSE.txt b/Code/ThirdParty/DearImgui/LICENSE.txt index 780533d..4023e0c 100644 --- a/Code/ThirdParty/DearImgui/LICENSE.txt +++ b/Code/ThirdParty/DearImgui/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2021 Omar Cornut +Copyright (c) 2014-2022 Omar Cornut Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.cpp b/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.cpp index c016101..b4452df 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.cpp +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.cpp @@ -3,8 +3,8 @@ // Implemented features: // [X] Renderer: User texture binding. Use 'ID3D11ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. +// [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. +// [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. @@ -13,7 +13,7 @@ // CHANGELOG // (minor and older changes stripped away, please see git history for details) -// 2021-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. // 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX). // 2021-05-19: DirectX11: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement) // 2021-02-18: DirectX11: Change blending equation to preserve alpha in output buffer. @@ -62,10 +62,10 @@ struct ImGui_ImplDX11_Data int VertexBufferSize; int IndexBufferSize; - ImGui_ImplDX11_Data() { memset(this, 0, sizeof(*this)); VertexBufferSize = 5000; IndexBufferSize = 10000; } + ImGui_ImplDX11_Data() { memset((void*)this, 0, sizeof(*this)); VertexBufferSize = 5000; IndexBufferSize = 10000; } }; -struct VERTEX_CONSTANT_BUFFER +struct VERTEX_CONSTANT_BUFFER_DX11 { float mvp[4][4]; }; @@ -183,7 +183,7 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) D3D11_MAPPED_SUBRESOURCE mapped_resource; if (ctx->Map(bd->pVertexConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_resource) != S_OK) return; - VERTEX_CONSTANT_BUFFER* constant_buffer = (VERTEX_CONSTANT_BUFFER*)mapped_resource.pData; + VERTEX_CONSTANT_BUFFER_DX11* constant_buffer = (VERTEX_CONSTANT_BUFFER_DX11*)mapped_resource.pData; float L = draw_data->DisplayPos.x; float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; float T = draw_data->DisplayPos.y; @@ -272,7 +272,7 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) // Project scissor/clipping rectangles into framebuffer space ImVec2 clip_min(pcmd->ClipRect.x - clip_off.x, pcmd->ClipRect.y - clip_off.y); ImVec2 clip_max(pcmd->ClipRect.z - clip_off.x, pcmd->ClipRect.w - clip_off.y); - if (clip_max.x < clip_min.x || clip_max.y < clip_min.y) + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) continue; // Apply scissor/clipping rectangle @@ -355,6 +355,7 @@ static void ImGui_ImplDX11_CreateFontsTexture() io.Fonts->SetTexID((ImTextureID)bd->pFontTextureView); // Create texture sampler + // (Bilinear sampling is required by default. Set 'io.Fonts->Flags |= ImFontAtlasFlags_NoBakedLines' or 'style.AntiAliasedLinesUseTex = false' to allow point/nearest sampling) { D3D11_SAMPLER_DESC desc; ZeroMemory(&desc, sizeof(desc)); @@ -440,7 +441,7 @@ bool ImGui_ImplDX11_CreateDeviceObjects() // Create the constant buffer { D3D11_BUFFER_DESC desc; - desc.ByteWidth = sizeof(VERTEX_CONSTANT_BUFFER); + desc.ByteWidth = sizeof(VERTEX_CONSTANT_BUFFER_DX11); desc.Usage = D3D11_USAGE_DYNAMIC; desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.h b/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.h index 07495a0..8e2aa68 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.h +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_dx11.h @@ -3,8 +3,8 @@ // Implemented features: // [X] Renderer: User texture binding. Use 'ID3D11ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. +// [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. +// [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.cpp b/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.cpp index 018b537..e996fa6 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.cpp +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.cpp @@ -5,9 +5,9 @@ // Implemented features: // [X] Platform: Clipboard support. +// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy GLFW_KEY_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] // [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange' (note: the resizing cursors requires GLFW 3.4+). -// [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE). // [X] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. // Issues: @@ -20,7 +20,17 @@ // CHANGELOG // (minor and older changes stripped away, please see git history for details) -// 2021-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-04-30: Inputs: Fixed ImGui_ImplGlfw_TranslateUntranslatedKey() for lower case letters on OSX. +// 2022-03-23: Inputs: Fixed a regression in 1.87 which resulted in keyboard modifiers events being reported incorrectly on Linux/X11. +// 2022-02-07: Added ImGui_ImplGlfw_InstallCallbacks()/ImGui_ImplGlfw_RestoreCallbacks() helpers to facilitate user installing callbacks after initializing backend. +// 2022-01-26: Inputs: replaced short-lived io.AddKeyModsEvent() (added two weeks ago)with io.AddKeyEvent() using ImGuiKey_ModXXX flags. Sorry for the confusion. +// 2021-01-20: Inputs: calling new io.AddKeyAnalogEvent() for gamepad support, instead of writing directly to io.NavInputs[]. +// 2022-01-17: Inputs: calling new io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() API (1.87+). +// 2022-01-17: Inputs: always update key mods next and before key event (not in NewFrame) to fix input queue with very low framerates. +// 2022-01-12: *BREAKING CHANGE*: Now using glfwSetCursorPosCallback(). If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install glfwSetCursorPosCallback() and forward it to the backend via ImGui_ImplGlfw_CursorPosCallback(). +// 2022-01-10: Inputs: calling new io.AddKeyEvent(), io.AddKeyModsEvent() + io.SetKeyEventNativeData() API (1.87+). Support for full ImGuiKey range. +// 2022-01-05: Inputs: Converting GLFW untranslated keycodes back to translated keycodes (in the ImGui_ImplGlfw_KeyCallback() function) in order to match the behavior of every other backend, and facilitate the use of GLFW with lettered-shortcuts API. // 2021-08-17: *BREAKING CHANGE*: Now using glfwSetWindowFocusCallback() to calling io.AddFocusEvent(). If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install glfwSetWindowFocusCallback() and forward it to the backend via ImGui_ImplGlfw_WindowFocusCallback(). // 2021-07-29: *BREAKING CHANGE*: Now using glfwSetCursorEnterCallback(). MousePos is correctly reported when the host platform window is hovered but not focused. If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install glfwSetWindowFocusCallback() callback and forward it to the backend via ImGui_ImplGlfw_CursorEnterCallback(). // 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX). @@ -49,13 +59,29 @@ #include "imgui.h" #include "imgui_impl_glfw.h" +// Clang warnings with -Weverything +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast +#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness +#if __has_warning("-Wzero-as-null-pointer-constant") +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif +#endif + // GLFW #include + #ifdef _WIN32 #undef APIENTRY #define GLFW_EXPOSE_NATIVE_WIN32 -#include // for glfwGetWin32Window +#include // for glfwGetWin32Window() #endif +#ifdef __APPLE__ +#define GLFW_EXPOSE_NATIVE_COCOA +#include // for glfwGetCocoaWindow() +#endif + #define GLFW_HAS_WINDOW_TOPMOST (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ GLFW_FLOATING #define GLFW_HAS_WINDOW_HOVERED (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ GLFW_HOVERED #define GLFW_HAS_WINDOW_ALPHA (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwSetWindowOpacity @@ -75,6 +101,8 @@ #else #define GLFW_HAS_MOUSE_PASSTHROUGH (0) #endif +#define GLFW_HAS_GAMEPAD_API (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwGetGamepadState() new api +#define GLFW_HAS_GET_KEY_NAME (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwGetKeyName() // GLFW data enum GlfwClientApi @@ -90,14 +118,15 @@ struct ImGui_ImplGlfw_Data GlfwClientApi ClientApi; double Time; GLFWwindow* MouseWindow; - bool MouseJustPressed[ImGuiMouseButton_COUNT]; GLFWcursor* MouseCursors[ImGuiMouseCursor_COUNT]; - GLFWwindow* KeyOwnerWindows[512]; + ImVec2 LastValidMousePos; + GLFWwindow* KeyOwnerWindows[GLFW_KEY_LAST]; bool InstalledCallbacks; bool WantUpdateMonitors; // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. GLFWwindowfocusfun PrevUserCallbackWindowFocus; + GLFWcursorposfun PrevUserCallbackCursorPos; GLFWcursorenterfun PrevUserCallbackCursorEnter; GLFWmousebuttonfun PrevUserCallbackMousebutton; GLFWscrollfun PrevUserCallbackScroll; @@ -105,7 +134,7 @@ struct ImGui_ImplGlfw_Data GLFWcharfun PrevUserCallbackChar; GLFWmonitorfun PrevUserCallbackMonitor; - ImGui_ImplGlfw_Data() { memset(this, 0, sizeof(*this)); } + ImGui_ImplGlfw_Data() { memset((void*)this, 0, sizeof(*this)); } }; // Backend data stored in io.BackendPlatformUserData to allow support for multiple Dear ImGui contexts @@ -136,14 +165,152 @@ static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text) glfwSetClipboardString((GLFWwindow*)user_data, text); } +static ImGuiKey ImGui_ImplGlfw_KeyToImGuiKey(int key) +{ + switch (key) + { + case GLFW_KEY_TAB: return ImGuiKey_Tab; + case GLFW_KEY_LEFT: return ImGuiKey_LeftArrow; + case GLFW_KEY_RIGHT: return ImGuiKey_RightArrow; + case GLFW_KEY_UP: return ImGuiKey_UpArrow; + case GLFW_KEY_DOWN: return ImGuiKey_DownArrow; + case GLFW_KEY_PAGE_UP: return ImGuiKey_PageUp; + case GLFW_KEY_PAGE_DOWN: return ImGuiKey_PageDown; + case GLFW_KEY_HOME: return ImGuiKey_Home; + case GLFW_KEY_END: return ImGuiKey_End; + case GLFW_KEY_INSERT: return ImGuiKey_Insert; + case GLFW_KEY_DELETE: return ImGuiKey_Delete; + case GLFW_KEY_BACKSPACE: return ImGuiKey_Backspace; + case GLFW_KEY_SPACE: return ImGuiKey_Space; + case GLFW_KEY_ENTER: return ImGuiKey_Enter; + case GLFW_KEY_ESCAPE: return ImGuiKey_Escape; + case GLFW_KEY_APOSTROPHE: return ImGuiKey_Apostrophe; + case GLFW_KEY_COMMA: return ImGuiKey_Comma; + case GLFW_KEY_MINUS: return ImGuiKey_Minus; + case GLFW_KEY_PERIOD: return ImGuiKey_Period; + case GLFW_KEY_SLASH: return ImGuiKey_Slash; + case GLFW_KEY_SEMICOLON: return ImGuiKey_Semicolon; + case GLFW_KEY_EQUAL: return ImGuiKey_Equal; + case GLFW_KEY_LEFT_BRACKET: return ImGuiKey_LeftBracket; + case GLFW_KEY_BACKSLASH: return ImGuiKey_Backslash; + case GLFW_KEY_RIGHT_BRACKET: return ImGuiKey_RightBracket; + case GLFW_KEY_GRAVE_ACCENT: return ImGuiKey_GraveAccent; + case GLFW_KEY_CAPS_LOCK: return ImGuiKey_CapsLock; + case GLFW_KEY_SCROLL_LOCK: return ImGuiKey_ScrollLock; + case GLFW_KEY_NUM_LOCK: return ImGuiKey_NumLock; + case GLFW_KEY_PRINT_SCREEN: return ImGuiKey_PrintScreen; + case GLFW_KEY_PAUSE: return ImGuiKey_Pause; + case GLFW_KEY_KP_0: return ImGuiKey_Keypad0; + case GLFW_KEY_KP_1: return ImGuiKey_Keypad1; + case GLFW_KEY_KP_2: return ImGuiKey_Keypad2; + case GLFW_KEY_KP_3: return ImGuiKey_Keypad3; + case GLFW_KEY_KP_4: return ImGuiKey_Keypad4; + case GLFW_KEY_KP_5: return ImGuiKey_Keypad5; + case GLFW_KEY_KP_6: return ImGuiKey_Keypad6; + case GLFW_KEY_KP_7: return ImGuiKey_Keypad7; + case GLFW_KEY_KP_8: return ImGuiKey_Keypad8; + case GLFW_KEY_KP_9: return ImGuiKey_Keypad9; + case GLFW_KEY_KP_DECIMAL: return ImGuiKey_KeypadDecimal; + case GLFW_KEY_KP_DIVIDE: return ImGuiKey_KeypadDivide; + case GLFW_KEY_KP_MULTIPLY: return ImGuiKey_KeypadMultiply; + case GLFW_KEY_KP_SUBTRACT: return ImGuiKey_KeypadSubtract; + case GLFW_KEY_KP_ADD: return ImGuiKey_KeypadAdd; + case GLFW_KEY_KP_ENTER: return ImGuiKey_KeypadEnter; + case GLFW_KEY_KP_EQUAL: return ImGuiKey_KeypadEqual; + case GLFW_KEY_LEFT_SHIFT: return ImGuiKey_LeftShift; + case GLFW_KEY_LEFT_CONTROL: return ImGuiKey_LeftCtrl; + case GLFW_KEY_LEFT_ALT: return ImGuiKey_LeftAlt; + case GLFW_KEY_LEFT_SUPER: return ImGuiKey_LeftSuper; + case GLFW_KEY_RIGHT_SHIFT: return ImGuiKey_RightShift; + case GLFW_KEY_RIGHT_CONTROL: return ImGuiKey_RightCtrl; + case GLFW_KEY_RIGHT_ALT: return ImGuiKey_RightAlt; + case GLFW_KEY_RIGHT_SUPER: return ImGuiKey_RightSuper; + case GLFW_KEY_MENU: return ImGuiKey_Menu; + case GLFW_KEY_0: return ImGuiKey_0; + case GLFW_KEY_1: return ImGuiKey_1; + case GLFW_KEY_2: return ImGuiKey_2; + case GLFW_KEY_3: return ImGuiKey_3; + case GLFW_KEY_4: return ImGuiKey_4; + case GLFW_KEY_5: return ImGuiKey_5; + case GLFW_KEY_6: return ImGuiKey_6; + case GLFW_KEY_7: return ImGuiKey_7; + case GLFW_KEY_8: return ImGuiKey_8; + case GLFW_KEY_9: return ImGuiKey_9; + case GLFW_KEY_A: return ImGuiKey_A; + case GLFW_KEY_B: return ImGuiKey_B; + case GLFW_KEY_C: return ImGuiKey_C; + case GLFW_KEY_D: return ImGuiKey_D; + case GLFW_KEY_E: return ImGuiKey_E; + case GLFW_KEY_F: return ImGuiKey_F; + case GLFW_KEY_G: return ImGuiKey_G; + case GLFW_KEY_H: return ImGuiKey_H; + case GLFW_KEY_I: return ImGuiKey_I; + case GLFW_KEY_J: return ImGuiKey_J; + case GLFW_KEY_K: return ImGuiKey_K; + case GLFW_KEY_L: return ImGuiKey_L; + case GLFW_KEY_M: return ImGuiKey_M; + case GLFW_KEY_N: return ImGuiKey_N; + case GLFW_KEY_O: return ImGuiKey_O; + case GLFW_KEY_P: return ImGuiKey_P; + case GLFW_KEY_Q: return ImGuiKey_Q; + case GLFW_KEY_R: return ImGuiKey_R; + case GLFW_KEY_S: return ImGuiKey_S; + case GLFW_KEY_T: return ImGuiKey_T; + case GLFW_KEY_U: return ImGuiKey_U; + case GLFW_KEY_V: return ImGuiKey_V; + case GLFW_KEY_W: return ImGuiKey_W; + case GLFW_KEY_X: return ImGuiKey_X; + case GLFW_KEY_Y: return ImGuiKey_Y; + case GLFW_KEY_Z: return ImGuiKey_Z; + case GLFW_KEY_F1: return ImGuiKey_F1; + case GLFW_KEY_F2: return ImGuiKey_F2; + case GLFW_KEY_F3: return ImGuiKey_F3; + case GLFW_KEY_F4: return ImGuiKey_F4; + case GLFW_KEY_F5: return ImGuiKey_F5; + case GLFW_KEY_F6: return ImGuiKey_F6; + case GLFW_KEY_F7: return ImGuiKey_F7; + case GLFW_KEY_F8: return ImGuiKey_F8; + case GLFW_KEY_F9: return ImGuiKey_F9; + case GLFW_KEY_F10: return ImGuiKey_F10; + case GLFW_KEY_F11: return ImGuiKey_F11; + case GLFW_KEY_F12: return ImGuiKey_F12; + default: return ImGuiKey_None; + } +} + +static int ImGui_ImplGlfw_KeyToModifier(int key) +{ + if (key == GLFW_KEY_LEFT_CONTROL || key == GLFW_KEY_RIGHT_CONTROL) + return GLFW_MOD_CONTROL; + if (key == GLFW_KEY_LEFT_SHIFT || key == GLFW_KEY_RIGHT_SHIFT) + return GLFW_MOD_SHIFT; + if (key == GLFW_KEY_LEFT_ALT || key == GLFW_KEY_RIGHT_ALT) + return GLFW_MOD_ALT; + if (key == GLFW_KEY_LEFT_SUPER || key == GLFW_KEY_RIGHT_SUPER) + return GLFW_MOD_SUPER; + return 0; +} + +static void ImGui_ImplGlfw_UpdateKeyModifiers(int mods) +{ + ImGuiIO& io = ImGui::GetIO(); + io.AddKeyEvent(ImGuiKey_ModCtrl, (mods & GLFW_MOD_CONTROL) != 0); + io.AddKeyEvent(ImGuiKey_ModShift, (mods & GLFW_MOD_SHIFT) != 0); + io.AddKeyEvent(ImGuiKey_ModAlt, (mods & GLFW_MOD_ALT) != 0); + io.AddKeyEvent(ImGuiKey_ModSuper, (mods & GLFW_MOD_SUPER) != 0); +} + void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods) { ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); if (bd->PrevUserCallbackMousebutton != NULL && window == bd->Window) bd->PrevUserCallbackMousebutton(window, button, action, mods); - if (action == GLFW_PRESS && button >= 0 && button < IM_ARRAYSIZE(bd->MouseJustPressed)) - bd->MouseJustPressed[button] = true; + ImGui_ImplGlfw_UpdateKeyModifiers(mods); + + ImGuiIO& io = ImGui::GetIO(); + if (button >= 0 && button < ImGuiMouseButton_COUNT) + io.AddMouseButtonEvent(button, action == GLFW_PRESS); } void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) @@ -153,40 +320,60 @@ void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yo bd->PrevUserCallbackScroll(window, xoffset, yoffset); ImGuiIO& io = ImGui::GetIO(); - io.MouseWheelH += (float)xoffset; - io.MouseWheel += (float)yoffset; + io.AddMouseWheelEvent((float)xoffset, (float)yoffset); } -void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) +static int ImGui_ImplGlfw_TranslateUntranslatedKey(int key, int scancode) { - ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); - if (bd->PrevUserCallbackKey != NULL && window == bd->Window) - bd->PrevUserCallbackKey(window, key, scancode, action, mods); - - ImGuiIO& io = ImGui::GetIO(); - if (key >= 0 && key < IM_ARRAYSIZE(io.KeysDown)) +#if GLFW_HAS_GET_KEY_NAME && !defined(__EMSCRIPTEN__) + // GLFW 3.1+ attempts to "untranslate" keys, which goes the opposite of what every other framework does, making using lettered shortcuts difficult. + // (It had reasons to do so: namely GLFW is/was more likely to be used for WASD-type game controls rather than lettered shortcuts, but IHMO the 3.1 change could have been done differently) + // See https://github.com/glfw/glfw/issues/1502 for details. + // Adding a workaround to undo this (so our keys are translated->untranslated->translated, likely a lossy process). + // This won't cover edge cases but this is at least going to cover common cases. + if (key >= GLFW_KEY_KP_0 && key <= GLFW_KEY_KP_EQUAL) + return key; + const char* key_name = glfwGetKeyName(key, scancode); + if (key_name && key_name[0] != 0 && key_name[1] == 0) { - if (action == GLFW_PRESS) - { - io.KeysDown[key] = true; - bd->KeyOwnerWindows[key] = window; - } - if (action == GLFW_RELEASE) - { - io.KeysDown[key] = false; - bd->KeyOwnerWindows[key] = NULL; - } + const char char_names[] = "`-=[]\\,;\'./"; + const int char_keys[] = { GLFW_KEY_GRAVE_ACCENT, GLFW_KEY_MINUS, GLFW_KEY_EQUAL, GLFW_KEY_LEFT_BRACKET, GLFW_KEY_RIGHT_BRACKET, GLFW_KEY_BACKSLASH, GLFW_KEY_COMMA, GLFW_KEY_SEMICOLON, GLFW_KEY_APOSTROPHE, GLFW_KEY_PERIOD, GLFW_KEY_SLASH, 0 }; + IM_ASSERT(IM_ARRAYSIZE(char_names) == IM_ARRAYSIZE(char_keys)); + if (key_name[0] >= '0' && key_name[0] <= '9') { key = GLFW_KEY_0 + (key_name[0] - '0'); } + else if (key_name[0] >= 'A' && key_name[0] <= 'Z') { key = GLFW_KEY_A + (key_name[0] - 'A'); } + else if (key_name[0] >= 'a' && key_name[0] <= 'z') { key = GLFW_KEY_A + (key_name[0] - 'a'); } + else if (const char* p = strchr(char_names, key_name[0])) { key = char_keys[p - char_names]; } } - - // Modifiers are not reliable across systems - io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL]; - io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT]; - io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT]; -#ifdef _WIN32 - io.KeySuper = false; + // if (action == GLFW_PRESS) printf("key %d scancode %d name '%s'\n", key, scancode, key_name); #else - io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER]; + IM_UNUSED(scancode); #endif + return key; +} + +void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int keycode, int scancode, int action, int mods) +{ + ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); + if (bd->PrevUserCallbackKey != NULL && window == bd->Window) + bd->PrevUserCallbackKey(window, keycode, scancode, action, mods); + + if (action != GLFW_PRESS && action != GLFW_RELEASE) + return; + + // Workaround: X11 does not include current pressed/released modifier key in 'mods' flags. https://github.com/glfw/glfw/issues/1630 + if (int keycode_to_mod = ImGui_ImplGlfw_KeyToModifier(keycode)) + mods = (action == GLFW_PRESS) ? (mods | keycode_to_mod) : (mods & ~keycode_to_mod); + ImGui_ImplGlfw_UpdateKeyModifiers(mods); + + if (keycode >= 0 && keycode < IM_ARRAYSIZE(bd->KeyOwnerWindows)) + bd->KeyOwnerWindows[keycode] = (action == GLFW_PRESS) ? window : NULL; + + keycode = ImGui_ImplGlfw_TranslateUntranslatedKey(keycode, scancode); + + ImGuiIO& io = ImGui::GetIO(); + ImGuiKey imgui_key = ImGui_ImplGlfw_KeyToImGuiKey(keycode); + io.AddKeyEvent(imgui_key, (action == GLFW_PRESS)); + io.SetKeyEventNativeData(imgui_key, keycode, scancode); // To support legacy indexing (<1.87 user code) } void ImGui_ImplGlfw_WindowFocusCallback(GLFWwindow* window, int focused) @@ -199,16 +386,44 @@ void ImGui_ImplGlfw_WindowFocusCallback(GLFWwindow* window, int focused) io.AddFocusEvent(focused != 0); } +void ImGui_ImplGlfw_CursorPosCallback(GLFWwindow* window, double x, double y) +{ + ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); + if (bd->PrevUserCallbackCursorPos != NULL && window == bd->Window) + bd->PrevUserCallbackCursorPos(window, x, y); + + ImGuiIO& io = ImGui::GetIO(); + if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + int window_x, window_y; + glfwGetWindowPos(window, &window_x, &window_y); + x += window_x; + y += window_y; + } + io.AddMousePosEvent((float)x, (float)y); + bd->LastValidMousePos = ImVec2((float)x, (float)y); +} + +// Workaround: X11 seems to send spurious Leave/Enter events which would make us lose our position, +// so we back it up and restore on Leave/Enter (see https://github.com/ocornut/imgui/issues/4984) void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered) { ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); if (bd->PrevUserCallbackCursorEnter != NULL && window == bd->Window) bd->PrevUserCallbackCursorEnter(window, entered); + ImGuiIO& io = ImGui::GetIO(); if (entered) + { bd->MouseWindow = window; - if (!entered && bd->MouseWindow == window) + io.AddMousePosEvent(bd->LastValidMousePos.x, bd->LastValidMousePos.y); + } + else if (!entered && bd->MouseWindow == window) + { + bd->LastValidMousePos = io.MousePos; bd->MouseWindow = NULL; + io.AddMousePosEvent(-FLT_MAX, -FLT_MAX); + } } void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c) @@ -227,6 +442,48 @@ void ImGui_ImplGlfw_MonitorCallback(GLFWmonitor*, int) bd->WantUpdateMonitors = true; } +void ImGui_ImplGlfw_InstallCallbacks(GLFWwindow* window) +{ + ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); + IM_ASSERT(bd->InstalledCallbacks == false && "Callbacks already installed!"); + IM_ASSERT(bd->Window == window); + + bd->PrevUserCallbackWindowFocus = glfwSetWindowFocusCallback(window, ImGui_ImplGlfw_WindowFocusCallback); + bd->PrevUserCallbackCursorEnter = glfwSetCursorEnterCallback(window, ImGui_ImplGlfw_CursorEnterCallback); + bd->PrevUserCallbackCursorPos = glfwSetCursorPosCallback(window, ImGui_ImplGlfw_CursorPosCallback); + bd->PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback); + bd->PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback); + bd->PrevUserCallbackKey = glfwSetKeyCallback(window, ImGui_ImplGlfw_KeyCallback); + bd->PrevUserCallbackChar = glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback); + bd->PrevUserCallbackMonitor = glfwSetMonitorCallback(ImGui_ImplGlfw_MonitorCallback); + bd->InstalledCallbacks = true; +} + +void ImGui_ImplGlfw_RestoreCallbacks(GLFWwindow* window) +{ + ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); + IM_ASSERT(bd->InstalledCallbacks == true && "Callbacks not installed!"); + IM_ASSERT(bd->Window == window); + + glfwSetWindowFocusCallback(window, bd->PrevUserCallbackWindowFocus); + glfwSetCursorEnterCallback(window, bd->PrevUserCallbackCursorEnter); + glfwSetCursorPosCallback(window, bd->PrevUserCallbackCursorPos); + glfwSetMouseButtonCallback(window, bd->PrevUserCallbackMousebutton); + glfwSetScrollCallback(window, bd->PrevUserCallbackScroll); + glfwSetKeyCallback(window, bd->PrevUserCallbackKey); + glfwSetCharCallback(window, bd->PrevUserCallbackChar); + glfwSetMonitorCallback(bd->PrevUserCallbackMonitor); + bd->InstalledCallbacks = false; + bd->PrevUserCallbackWindowFocus = NULL; + bd->PrevUserCallbackCursorEnter = NULL; + bd->PrevUserCallbackCursorPos = NULL; + bd->PrevUserCallbackMousebutton = NULL; + bd->PrevUserCallbackScroll = NULL; + bd->PrevUserCallbackKey = NULL; + bd->PrevUserCallbackChar = NULL; + bd->PrevUserCallbackMonitor = NULL; +} + static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, GlfwClientApi client_api) { ImGuiIO& io = ImGui::GetIO(); @@ -240,37 +497,13 @@ static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, Glfw io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) #if GLFW_HAS_MOUSE_PASSTHROUGH || (GLFW_HAS_WINDOW_HOVERED && defined(_WIN32)) - io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport; // We can set io.MouseHoveredViewport correctly (optional, not easy) + io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport; // We can call io.AddMouseViewportEvent() with correct data (optional) #endif bd->Window = window; bd->Time = 0.0; bd->WantUpdateMonitors = true; - // Keyboard mapping. Dear ImGui will use those indices to peek into the io.KeysDown[] array. - io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; - io.KeyMap[ImGuiKey_DownArrow] = GLFW_KEY_DOWN; - io.KeyMap[ImGuiKey_PageUp] = GLFW_KEY_PAGE_UP; - io.KeyMap[ImGuiKey_PageDown] = GLFW_KEY_PAGE_DOWN; - io.KeyMap[ImGuiKey_Home] = GLFW_KEY_HOME; - io.KeyMap[ImGuiKey_End] = GLFW_KEY_END; - io.KeyMap[ImGuiKey_Insert] = GLFW_KEY_INSERT; - io.KeyMap[ImGuiKey_Delete] = GLFW_KEY_DELETE; - io.KeyMap[ImGuiKey_Backspace] = GLFW_KEY_BACKSPACE; - io.KeyMap[ImGuiKey_Space] = GLFW_KEY_SPACE; - io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER; - io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = GLFW_KEY_KP_ENTER; - io.KeyMap[ImGuiKey_A] = GLFW_KEY_A; - io.KeyMap[ImGuiKey_C] = GLFW_KEY_C; - io.KeyMap[ImGuiKey_V] = GLFW_KEY_V; - io.KeyMap[ImGuiKey_X] = GLFW_KEY_X; - io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y; - io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z; - io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText; io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText; io.ClipboardUserData = bd->Window; @@ -299,23 +532,8 @@ static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, Glfw glfwSetErrorCallback(prev_error_callback); // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. - bd->PrevUserCallbackWindowFocus = NULL; - bd->PrevUserCallbackMousebutton = NULL; - bd->PrevUserCallbackScroll = NULL; - bd->PrevUserCallbackKey = NULL; - bd->PrevUserCallbackChar = NULL; - bd->PrevUserCallbackMonitor = NULL; if (install_callbacks) - { - bd->InstalledCallbacks = true; - bd->PrevUserCallbackWindowFocus = glfwSetWindowFocusCallback(window, ImGui_ImplGlfw_WindowFocusCallback); - bd->PrevUserCallbackCursorEnter = glfwSetCursorEnterCallback(window, ImGui_ImplGlfw_CursorEnterCallback); - bd->PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback); - bd->PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback); - bd->PrevUserCallbackKey = glfwSetKeyCallback(window, ImGui_ImplGlfw_KeyCallback); - bd->PrevUserCallbackChar = glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback); - bd->PrevUserCallbackMonitor = glfwSetMonitorCallback(ImGui_ImplGlfw_MonitorCallback); - } + ImGui_ImplGlfw_InstallCallbacks(window); // Update monitors the first time (note: monitor callback are broken in GLFW 3.2 and earlier, see github.com/glfw/glfw/issues/784) ImGui_ImplGlfw_UpdateMonitors(); @@ -326,6 +544,8 @@ static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, Glfw main_viewport->PlatformHandle = (void*)bd->Window; #ifdef _WIN32 main_viewport->PlatformHandleRaw = glfwGetWin32Window(bd->Window); +#elif defined(__APPLE__) + main_viewport->PlatformHandleRaw = (void*)glfwGetCocoaWindow(bd->Window); #endif if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) ImGui_ImplGlfw_InitPlatformInterface(); @@ -358,15 +578,7 @@ void ImGui_ImplGlfw_Shutdown() ImGui_ImplGlfw_ShutdownPlatformInterface(); if (bd->InstalledCallbacks) - { - glfwSetWindowFocusCallback(bd->Window, bd->PrevUserCallbackWindowFocus); - glfwSetCursorEnterCallback(bd->Window, bd->PrevUserCallbackCursorEnter); - glfwSetMouseButtonCallback(bd->Window, bd->PrevUserCallbackMousebutton); - glfwSetScrollCallback(bd->Window, bd->PrevUserCallbackScroll); - glfwSetKeyCallback(bd->Window, bd->PrevUserCallbackKey); - glfwSetCharCallback(bd->Window, bd->PrevUserCallbackChar); - glfwSetMonitorCallback(bd->PrevUserCallbackMonitor); - } + ImGui_ImplGlfw_RestoreCallbacks(bd->Window); for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++) glfwDestroyCursor(bd->MouseCursors[cursor_n]); @@ -376,72 +588,59 @@ void ImGui_ImplGlfw_Shutdown() IM_DELETE(bd); } -static void ImGui_ImplGlfw_UpdateMousePosAndButtons() +static void ImGui_ImplGlfw_UpdateMouseData() { ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); ImGuiIO& io = ImGui::GetIO(); ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO(); + ImGuiID mouse_viewport_id = 0; const ImVec2 mouse_pos_prev = io.MousePos; - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - io.MouseHoveredViewport = 0; - - // Update mouse buttons - // (if a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame) - for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) - { - io.MouseDown[i] = bd->MouseJustPressed[i] || glfwGetMouseButton(bd->Window, i) != 0; - bd->MouseJustPressed[i] = false; - } - for (int n = 0; n < platform_io.Viewports.Size; n++) { ImGuiViewport* viewport = platform_io.Viewports[n]; GLFWwindow* window = (GLFWwindow*)viewport->PlatformHandle; #ifdef __EMSCRIPTEN__ - const bool focused = true; + const bool is_window_focused = true; #else - const bool focused = glfwGetWindowAttrib(window, GLFW_FOCUSED) != 0; + const bool is_window_focused = glfwGetWindowAttrib(window, GLFW_FOCUSED) != 0; #endif - GLFWwindow* mouse_window = (bd->MouseWindow == window || focused) ? window : NULL; - - // Update mouse buttons - if (focused) - for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) - io.MouseDown[i] |= glfwGetMouseButton(window, i) != 0; - - // Set OS mouse position from Dear ImGui if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) - // (When multi-viewports are enabled, all Dear ImGui positions are same as OS positions) - if (io.WantSetMousePos && focused) - glfwSetCursorPos(window, (double)(mouse_pos_prev.x - viewport->Pos.x), (double)(mouse_pos_prev.y - viewport->Pos.y)); - - // Set Dear ImGui mouse position from OS position - if (mouse_window != NULL) + if (is_window_focused) { - double mouse_x, mouse_y; - glfwGetCursorPos(mouse_window, &mouse_x, &mouse_y); - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - // Multi-viewport mode: mouse position in OS absolute coordinates (io.MousePos is (0,0) when the mouse is on the upper-left of the primary monitor) - int window_x, window_y; - glfwGetWindowPos(window, &window_x, &window_y); - io.MousePos = ImVec2((float)mouse_x + window_x, (float)mouse_y + window_y); - } - else + // (Optional) Set OS mouse position from Dear ImGui if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) + // When multi-viewports are enabled, all Dear ImGui positions are same as OS positions. + if (io.WantSetMousePos) + glfwSetCursorPos(window, (double)(mouse_pos_prev.x - viewport->Pos.x), (double)(mouse_pos_prev.y - viewport->Pos.y)); + + // (Optional) Fallback to provide mouse position when focused (ImGui_ImplGlfw_CursorPosCallback already provides this when hovered or captured) + if (bd->MouseWindow == NULL) { - // Single viewport mode: mouse position in client window coordinates (io.MousePos is (0,0) when the mouse is on the upper-left corner of the app window) - io.MousePos = ImVec2((float)mouse_x, (float)mouse_y); + double mouse_x, mouse_y; + glfwGetCursorPos(window, &mouse_x, &mouse_y); + if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + // Single viewport mode: mouse position in client window coordinates (io.MousePos is (0,0) when the mouse is on the upper-left corner of the app window) + // Multi-viewport mode: mouse position in OS absolute coordinates (io.MousePos is (0,0) when the mouse is on the upper-left of the primary monitor) + int window_x, window_y; + glfwGetWindowPos(window, &window_x, &window_y); + mouse_x += window_x; + mouse_y += window_y; + } + bd->LastValidMousePos = ImVec2((float)mouse_x, (float)mouse_y); + io.AddMousePosEvent((float)mouse_x, (float)mouse_y); } } - // (Optional) When using multiple viewports: set io.MouseHoveredViewport to the viewport the OS mouse cursor is hovering. - // Important: this information is not easy to provide and many high-level windowing library won't be able to provide it correctly, because - // - This is _ignoring_ viewports with the ImGuiViewportFlags_NoInputs flag (pass-through windows). - // - This is _regardless_ of whether another viewport is focused or being dragged from. - // If ImGuiBackendFlags_HasMouseHoveredViewport is not set by the backend, imgui will ignore this field and infer the information by relying on the - // rectangles and last focused time of every viewports it knows about. It will be unaware of other windows that may be sitting between or over your windows. - // [GLFW] FIXME: This is currently only correct on Win32. See what we do below with the WM_NCHITTEST, missing an equivalent for other systems. + // (Optional) When using multiple viewports: call io.AddMouseViewportEvent() with the viewport the OS mouse cursor is hovering. + // If ImGuiBackendFlags_HasMouseHoveredViewport is not set by the backend, Dear imGui will ignore this field and infer the information using its flawed heuristic. + // - [X] GLFW >= 3.3 backend ON WINDOWS ONLY does correctly ignore viewports with the _NoInputs flag. + // - [!] GLFW <= 3.2 backend CANNOT correctly ignore viewports with the _NoInputs flag, and CANNOT reported Hovered Viewport because of mouse capture. + // Some backend are not able to handle that correctly. If a backend report an hovered viewport that has the _NoInputs flag (e.g. when dragging a window + // for docking, the viewport has the _NoInputs flag in order to allow us to find the viewport under), then Dear ImGui is forced to ignore the value reported + // by the backend, and use its flawed heuristic to guess the viewport behind. + // - [X] GLFW backend correctly reports this regardless of another viewport behind focused and dragged from (we need this to find a useful drag and drop target). + // FIXME: This is currently only correct on Win32. See what we do below with the WM_NCHITTEST, missing an equivalent for other systems. // See https://github.com/glfw/glfw/issues/1236 if you want to help in making this a GLFW feature. #if GLFW_HAS_MOUSE_PASSTHROUGH || (GLFW_HAS_WINDOW_HOVERED && defined(_WIN32)) const bool window_no_input = (viewport->Flags & ImGuiViewportFlags_NoInputs) != 0; @@ -449,9 +648,14 @@ static void ImGui_ImplGlfw_UpdateMousePosAndButtons() glfwSetWindowAttrib(window, GLFW_MOUSE_PASSTHROUGH, window_no_input); #endif if (glfwGetWindowAttrib(window, GLFW_HOVERED) && !window_no_input) - io.MouseHoveredViewport = viewport->ID; + mouse_viewport_id = viewport->ID; +#else + // We cannot use bd->MouseWindow maintained from CursorEnter/Leave callbacks, because it is locked to the window capturing mouse. #endif } + + if (io.BackendFlags & ImGuiBackendFlags_HasMouseHoveredViewport) + io.AddMouseViewportEvent(mouse_viewport_id); } static void ImGui_ImplGlfw_UpdateMouseCursor() @@ -481,41 +685,57 @@ static void ImGui_ImplGlfw_UpdateMouseCursor() } } +// Update gamepad inputs +static inline float Saturate(float v) { return v < 0.0f ? 0.0f : v > 1.0f ? 1.0f : v; } static void ImGui_ImplGlfw_UpdateGamepads() { ImGuiIO& io = ImGui::GetIO(); - memset(io.NavInputs, 0, sizeof(io.NavInputs)); if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) return; - // Update gamepad inputs - #define MAP_BUTTON(NAV_NO, BUTTON_NO) { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; } - #define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; } + io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; +#if GLFW_HAS_GAMEPAD_API + GLFWgamepadstate gamepad; + if (!glfwGetGamepadState(GLFW_JOYSTICK_1, &gamepad)) + return; + #define MAP_BUTTON(KEY_NO, BUTTON_NO, _UNUSED) do { io.AddKeyEvent(KEY_NO, gamepad.buttons[BUTTON_NO] != 0); } while (0) + #define MAP_ANALOG(KEY_NO, AXIS_NO, _UNUSED, V0, V1) do { float v = gamepad.axes[AXIS_NO]; v = (v - V0) / (V1 - V0); io.AddKeyAnalogEvent(KEY_NO, v > 0.10f, Saturate(v)); } while (0) +#else int axes_count = 0, buttons_count = 0; const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count); const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count); - MAP_BUTTON(ImGuiNavInput_Activate, 0); // Cross / A - MAP_BUTTON(ImGuiNavInput_Cancel, 1); // Circle / B - MAP_BUTTON(ImGuiNavInput_Menu, 2); // Square / X - MAP_BUTTON(ImGuiNavInput_Input, 3); // Triangle / Y - MAP_BUTTON(ImGuiNavInput_DpadLeft, 13); // D-Pad Left - MAP_BUTTON(ImGuiNavInput_DpadRight, 11); // D-Pad Right - MAP_BUTTON(ImGuiNavInput_DpadUp, 10); // D-Pad Up - MAP_BUTTON(ImGuiNavInput_DpadDown, 12); // D-Pad Down - MAP_BUTTON(ImGuiNavInput_FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGuiNavInput_FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGuiNavInput_TweakSlow, 4); // L1 / LB - MAP_BUTTON(ImGuiNavInput_TweakFast, 5); // R1 / RB - MAP_ANALOG(ImGuiNavInput_LStickLeft, 0, -0.3f, -0.9f); - MAP_ANALOG(ImGuiNavInput_LStickRight,0, +0.3f, +0.9f); - MAP_ANALOG(ImGuiNavInput_LStickUp, 1, +0.3f, +0.9f); - MAP_ANALOG(ImGuiNavInput_LStickDown, 1, -0.3f, -0.9f); + if (axes_count == 0 || buttons_count == 0) + return; + #define MAP_BUTTON(KEY_NO, _UNUSED, BUTTON_NO) do { io.AddKeyEvent(KEY_NO, (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS)); } while (0) + #define MAP_ANALOG(KEY_NO, _UNUSED, AXIS_NO, V0, V1) do { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); io.AddKeyAnalogEvent(KEY_NO, v > 0.10f, Saturate(v)); } while (0) +#endif + io.BackendFlags |= ImGuiBackendFlags_HasGamepad; + MAP_BUTTON(ImGuiKey_GamepadStart, GLFW_GAMEPAD_BUTTON_START, 7); + MAP_BUTTON(ImGuiKey_GamepadBack, GLFW_GAMEPAD_BUTTON_BACK, 6); + MAP_BUTTON(ImGuiKey_GamepadFaceDown, GLFW_GAMEPAD_BUTTON_A, 0); // Xbox A, PS Cross + MAP_BUTTON(ImGuiKey_GamepadFaceRight, GLFW_GAMEPAD_BUTTON_B, 1); // Xbox B, PS Circle + MAP_BUTTON(ImGuiKey_GamepadFaceLeft, GLFW_GAMEPAD_BUTTON_X, 2); // Xbox X, PS Square + MAP_BUTTON(ImGuiKey_GamepadFaceUp, GLFW_GAMEPAD_BUTTON_Y, 3); // Xbox Y, PS Triangle + MAP_BUTTON(ImGuiKey_GamepadDpadLeft, GLFW_GAMEPAD_BUTTON_DPAD_LEFT, 13); + MAP_BUTTON(ImGuiKey_GamepadDpadRight, GLFW_GAMEPAD_BUTTON_DPAD_RIGHT, 11); + MAP_BUTTON(ImGuiKey_GamepadDpadUp, GLFW_GAMEPAD_BUTTON_DPAD_UP, 10); + MAP_BUTTON(ImGuiKey_GamepadDpadDown, GLFW_GAMEPAD_BUTTON_DPAD_DOWN, 12); + MAP_BUTTON(ImGuiKey_GamepadL1, GLFW_GAMEPAD_BUTTON_LEFT_BUMPER, 4); + MAP_BUTTON(ImGuiKey_GamepadR1, GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER, 5); + MAP_ANALOG(ImGuiKey_GamepadL2, GLFW_GAMEPAD_AXIS_LEFT_TRIGGER, 4, -0.75f, +1.0f); + MAP_ANALOG(ImGuiKey_GamepadR2, GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER, 5, -0.75f, +1.0f); + MAP_BUTTON(ImGuiKey_GamepadL3, GLFW_GAMEPAD_BUTTON_LEFT_THUMB, 8); + MAP_BUTTON(ImGuiKey_GamepadR3, GLFW_GAMEPAD_BUTTON_RIGHT_THUMB, 9); + MAP_ANALOG(ImGuiKey_GamepadLStickLeft, GLFW_GAMEPAD_AXIS_LEFT_X, 0, -0.25f, -1.0f); + MAP_ANALOG(ImGuiKey_GamepadLStickRight, GLFW_GAMEPAD_AXIS_LEFT_X, 0, +0.25f, +1.0f); + MAP_ANALOG(ImGuiKey_GamepadLStickUp, GLFW_GAMEPAD_AXIS_LEFT_Y, 1, -0.25f, -1.0f); + MAP_ANALOG(ImGuiKey_GamepadLStickDown, GLFW_GAMEPAD_AXIS_LEFT_Y, 1, +0.25f, +1.0f); + MAP_ANALOG(ImGuiKey_GamepadRStickLeft, GLFW_GAMEPAD_AXIS_RIGHT_X, 2, -0.25f, -1.0f); + MAP_ANALOG(ImGuiKey_GamepadRStickRight, GLFW_GAMEPAD_AXIS_RIGHT_X, 2, +0.25f, +1.0f); + MAP_ANALOG(ImGuiKey_GamepadRStickUp, GLFW_GAMEPAD_AXIS_RIGHT_Y, 3, -0.25f, -1.0f); + MAP_ANALOG(ImGuiKey_GamepadRStickDown, GLFW_GAMEPAD_AXIS_RIGHT_Y, 3, +0.25f, +1.0f); #undef MAP_BUTTON #undef MAP_ANALOG - if (axes_count > 0 && buttons_count > 0) - io.BackendFlags |= ImGuiBackendFlags_HasGamepad; - else - io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; } static void ImGui_ImplGlfw_UpdateMonitors() @@ -566,7 +786,7 @@ void ImGui_ImplGlfw_NewFrame() glfwGetFramebufferSize(bd->Window, &display_w, &display_h); io.DisplaySize = ImVec2((float)w, (float)h); if (w > 0 && h > 0) - io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h); + io.DisplayFramebufferScale = ImVec2((float)display_w / (float)w, (float)display_h / (float)h); if (bd->WantUpdateMonitors) ImGui_ImplGlfw_UpdateMonitors(); @@ -575,7 +795,7 @@ void ImGui_ImplGlfw_NewFrame() io.DeltaTime = bd->Time > 0.0 ? (float)(current_time - bd->Time) : (float)(1.0f / 60.0f); bd->Time = current_time; - ImGui_ImplGlfw_UpdateMousePosAndButtons(); + ImGui_ImplGlfw_UpdateMouseData(); ImGui_ImplGlfw_UpdateMouseCursor(); // Update game controllers (if enabled and available) @@ -665,12 +885,15 @@ static void ImGui_ImplGlfw_CreateWindow(ImGuiViewport* viewport) viewport->PlatformHandle = (void*)vd->Window; #ifdef _WIN32 viewport->PlatformHandleRaw = glfwGetWin32Window(vd->Window); +#elif defined(__APPLE__) + viewport->PlatformHandleRaw = (void*)glfwGetCocoaWindow(vd->Window); #endif glfwSetWindowPos(vd->Window, (int)viewport->Pos.x, (int)viewport->Pos.y); // Install GLFW callbacks for secondary viewports glfwSetWindowFocusCallback(vd->Window, ImGui_ImplGlfw_WindowFocusCallback); glfwSetCursorEnterCallback(vd->Window, ImGui_ImplGlfw_CursorEnterCallback); + glfwSetCursorPosCallback(vd->Window, ImGui_ImplGlfw_CursorPosCallback); glfwSetMouseButtonCallback(vd->Window, ImGui_ImplGlfw_MouseButtonCallback); glfwSetScrollCallback(vd->Window, ImGui_ImplGlfw_ScrollCallback); glfwSetKeyCallback(vd->Window, ImGui_ImplGlfw_KeyCallback); @@ -719,7 +942,7 @@ static LRESULT CALLBACK WndProcNoInputs(HWND hWnd, UINT msg, WPARAM wParam, LPAR { if (msg == WM_NCHITTEST) { - // Let mouse pass-through the window. This will allow the backend to set io.MouseHoveredViewport properly (which is OPTIONAL). + // Let mouse pass-through the window. This will allow the backend to call io.AddMouseViewportEvent() properly (which is OPTIONAL). // The ImGuiViewportFlags_NoInputs flag is set while dragging a viewport, as want to detect the window behind the one we are dragging. // If you cannot easily access those viewport flags from your windowing/event code: you may manually synchronize its state e.g. in // your main loop after calling UpdatePlatformWindows(). Iterate all viewports/platform windows and pass the flag to your windowing system. @@ -866,31 +1089,6 @@ static void ImGui_ImplGlfw_SwapBuffers(ImGuiViewport* viewport, void*) } } -//-------------------------------------------------------------------------------------------------------- -// IME (Input Method Editor) basic support for e.g. Asian language users -//-------------------------------------------------------------------------------------------------------- - -// We provide a Win32 implementation because this is such a common issue for IME users -#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) -#define HAS_WIN32_IME 1 -#include -#ifdef _MSC_VER -#pragma comment(lib, "imm32") -#endif -static void ImGui_ImplWin32_SetImeInputPos(ImGuiViewport* viewport, ImVec2 pos) -{ - COMPOSITIONFORM cf = { CFS_FORCE_POSITION, { (LONG)(pos.x - viewport->Pos.x), (LONG)(pos.y - viewport->Pos.y) }, { 0, 0, 0, 0 } }; - if (HWND hwnd = (HWND)viewport->PlatformHandleRaw) - if (HIMC himc = ::ImmGetContext(hwnd)) - { - ::ImmSetCompositionWindow(himc, &cf); - ::ImmReleaseContext(hwnd, himc); - } -} -#else -#define HAS_WIN32_IME 0 -#endif - //-------------------------------------------------------------------------------------------------------- // Vulkan support (the Vulkan renderer needs to call a platform-side support function to create the surface) //-------------------------------------------------------------------------------------------------------- @@ -945,9 +1143,6 @@ static void ImGui_ImplGlfw_InitPlatformInterface() #if GLFW_HAS_VULKAN platform_io.Platform_CreateVkSurface = ImGui_ImplGlfw_CreateVkSurface; #endif -#if HAS_WIN32_IME - platform_io.Platform_SetImeInputPos = ImGui_ImplWin32_SetImeInputPos; -#endif // Register main window handle (which is owned by the main application, not by us) // This is mostly for simplicity and consistency, so that our code (e.g. mouse handling etc.) can use same logic for main and secondary viewports. @@ -963,3 +1158,7 @@ static void ImGui_ImplGlfw_ShutdownPlatformInterface() { ImGui::DestroyPlatformWindows(); } + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.h b/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.h index bb0ddf3..b96f3ee 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.h +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_glfw.h @@ -1,12 +1,13 @@ // dear imgui: Platform Backend for GLFW // This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan, WebGPU..) // (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) +// (Requires: GLFW 3.1+. Prefer GLFW 3.3+ for full feature support.) // Implemented features: // [X] Platform: Clipboard support. +// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy GLFW_KEY_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] // [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// [x] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: 3 cursors types are missing from GLFW. -// [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE). +// [x] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange' (note: the resizing cursors requires GLFW 3.4+). // [X] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. // Issues: @@ -33,11 +34,16 @@ IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForOther(GLFWwindow* window, bool ins IMGUI_IMPL_API void ImGui_ImplGlfw_Shutdown(); IMGUI_IMPL_API void ImGui_ImplGlfw_NewFrame(); -// GLFW callbacks -// - When calling Init with 'install_callbacks=true': GLFW callbacks will be installed for you. They will call user's previously installed callbacks, if any. -// - When calling Init with 'install_callbacks=false': GLFW callbacks won't be installed. You will need to call those function yourself from your own GLFW callbacks. -IMGUI_IMPL_API void ImGui_ImplGlfw_WindowFocusCallback(GLFWwindow* window, int focused); -IMGUI_IMPL_API void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered); +// GLFW callbacks (installer) +// - When calling Init with 'install_callbacks=true': ImGui_ImplGlfw_InstallCallbacks() is called. GLFW callbacks will be installed for you. They will chain-call user's previously installed callbacks, if any. +// - When calling Init with 'install_callbacks=false': GLFW callbacks won't be installed. You will need to call individual function yourself from your own GLFW callbacks. +IMGUI_IMPL_API void ImGui_ImplGlfw_InstallCallbacks(GLFWwindow* window); +IMGUI_IMPL_API void ImGui_ImplGlfw_RestoreCallbacks(GLFWwindow* window); + +// GLFW callbacks (individual callbacks to call if you didn't install callbacks) +IMGUI_IMPL_API void ImGui_ImplGlfw_WindowFocusCallback(GLFWwindow* window, int focused); // Since 1.84 +IMGUI_IMPL_API void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered); // Since 1.84 +IMGUI_IMPL_API void ImGui_ImplGlfw_CursorPosCallback(GLFWwindow* window, double x, double y); // Since 1.87 IMGUI_IMPL_API void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods); IMGUI_IMPL_API void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset); IMGUI_IMPL_API void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.cpp b/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.cpp index 19d79b2..b7587d0 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.cpp +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.cpp @@ -5,8 +5,8 @@ // Implemented features: // [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. -// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. +// [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. +// [x] Renderer: Large meshes support (64k+ vertices) with 16-bit indices (Desktop OpenGL only). // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. @@ -15,7 +15,10 @@ // CHANGELOG // (minor and older changes stripped away, please see git history for details) -// 2021-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-05-23: OpenGL: Reworking 2021-12-15 "Using buffer orphaning" so it only happens on Intel GPU, seems to cause problems otherwise. (#4468, #4825, #4832, #5127). +// 2022-05-13: OpenGL: Fix state corruption on OpenGL ES 2.0 due to not preserving GL_ELEMENT_ARRAY_BUFFER_BINDING and vertex attribute states. +// 2021-12-15: OpenGL: Using buffer orphaning + glBufferSubData(), seems to fix leaks with multi-viewports with some Intel HD drivers. // 2021-08-23: OpenGL: Fixed ES 3.0 shader ("#version 300 es") use normal precision floats to avoid wobbly rendering at HD resolutions. // 2021-08-19: OpenGL: Embed and use our own minimal GL loader (imgui_impl_opengl3_loader.h), removing requirement and support for third-party loader. // 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX). @@ -96,10 +99,27 @@ #else #include // intptr_t #endif +#if defined(__APPLE__) +#include +#endif + +// Clang warnings with -Weverything +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast +#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness +#if __has_warning("-Wzero-as-null-pointer-constant") +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif +#endif // GL includes #if defined(IMGUI_IMPL_OPENGL_ES2) -#include +#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) +#include // Use GL ES 2 +#else +#include // Use GL ES 2 +#endif #if defined(__EMSCRIPTEN__) #ifndef GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES @@ -107,9 +127,6 @@ #include #endif #elif defined(IMGUI_IMPL_OPENGL_ES3) -#if defined(__APPLE__) -#include -#endif #if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) #include // Use GL ES 3 #else @@ -176,9 +193,12 @@ struct ImGui_ImplOpenGL3_Data GLuint AttribLocationVtxUV; GLuint AttribLocationVtxColor; unsigned int VboHandle, ElementsHandle; + GLsizeiptr VertexBufferSize; + GLsizeiptr IndexBufferSize; bool HasClipOrigin; + bool UseBufferSubData; - ImGui_ImplOpenGL3_Data() { memset(this, 0, sizeof(*this)); } + ImGui_ImplOpenGL3_Data() { memset((void*)this, 0, sizeof(*this)); } }; // Backend data stored in io.BackendRendererUserData to allow support for multiple Dear ImGui contexts @@ -192,6 +212,30 @@ static ImGui_ImplOpenGL3_Data* ImGui_ImplOpenGL3_GetBackendData() static void ImGui_ImplOpenGL3_InitPlatformInterface(); static void ImGui_ImplOpenGL3_ShutdownPlatformInterface(); +// OpenGL vertex attribute state (for ES 1.0 and ES 2.0 only) +#ifndef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY +struct ImGui_ImplOpenGL3_VtxAttribState +{ + GLint Enabled, Size, Type, Normalized, Stride; + GLvoid* Ptr; + + void GetState(GLint index) + { + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &Enabled); + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_SIZE, &Size); + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_TYPE, &Type); + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &Normalized); + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_STRIDE, &Stride); + glGetVertexAttribPointerv(index, GL_VERTEX_ATTRIB_ARRAY_POINTER, &Ptr); + } + void SetState(GLint index) + { + glVertexAttribPointer(index, Size, Type, (GLboolean)Normalized, Stride, Ptr); + if (Enabled) glEnableVertexAttribArray(index); else glDisableVertexAttribArray(index); + } +}; +#endif + // Functions bool ImGui_ImplOpenGL3_Init(const char* glsl_version) { @@ -225,6 +269,14 @@ bool ImGui_ImplOpenGL3_Init(const char* glsl_version) sscanf(gl_version, "%d.%d", &major, &minor); } bd->GlVersion = (GLuint)(major * 100 + minor * 10); + + // Query vendor to enable glBufferSubData kludge +#ifdef _WIN32 + if (const char* vendor = (const char*)glGetString(GL_VENDOR)) + if (strncmp(vendor, "Intel", 5) == 0) + bd->UseBufferSubData = true; +#endif + //printf("GL_MAJOR_VERSION = %d\nGL_MINOR_VERSION = %d\nGL_VENDOR = '%s'\nGL_RENDERER = '%s'\n", major, minor, (const char*)glGetString(GL_VENDOR), (const char*)glGetString(GL_RENDERER)); // [DEBUG] #else bd->GlVersion = 200; // GLES 2 #endif @@ -394,6 +446,13 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) GLuint last_sampler; if (bd->GlVersion >= 330) { glGetIntegerv(GL_SAMPLER_BINDING, (GLint*)&last_sampler); } else { last_sampler = 0; } #endif GLuint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, (GLint*)&last_array_buffer); +#ifndef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + // This is part of VAO on OpenGL 3.0+ and OpenGL ES 3.0+. + GLint last_element_array_buffer; glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &last_element_array_buffer); + ImGui_ImplOpenGL3_VtxAttribState last_vtx_attrib_state_pos; last_vtx_attrib_state_pos.GetState(bd->AttribLocationVtxPos); + ImGui_ImplOpenGL3_VtxAttribState last_vtx_attrib_state_uv; last_vtx_attrib_state_uv.GetState(bd->AttribLocationVtxUV); + ImGui_ImplOpenGL3_VtxAttribState last_vtx_attrib_state_color; last_vtx_attrib_state_color.GetState(bd->AttribLocationVtxColor); +#endif #ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY GLuint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint*)&last_vertex_array_object); #endif @@ -436,8 +495,31 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) const ImDrawList* cmd_list = draw_data->CmdLists[n]; // Upload vertex/index buffers - glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW); + // - On Intel windows drivers we got reports that regular glBufferData() led to accumulating leaks when using multi-viewports, so we started using orphaning + glBufferSubData(). (See https://github.com/ocornut/imgui/issues/4468) + // - On NVIDIA drivers we got reports that using orphaning + glBufferSubData() led to glitches when using multi-viewports. + // - OpenGL drivers are in a very sorry state in 2022, for now we are switching code path based on vendors. + const GLsizeiptr vtx_buffer_size = (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert); + const GLsizeiptr idx_buffer_size = (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx); + if (bd->UseBufferSubData) + { + if (bd->VertexBufferSize < vtx_buffer_size) + { + bd->VertexBufferSize = vtx_buffer_size; + glBufferData(GL_ARRAY_BUFFER, bd->VertexBufferSize, NULL, GL_STREAM_DRAW); + } + if (bd->IndexBufferSize < idx_buffer_size) + { + bd->IndexBufferSize = idx_buffer_size; + glBufferData(GL_ELEMENT_ARRAY_BUFFER, bd->IndexBufferSize, NULL, GL_STREAM_DRAW); + } + glBufferSubData(GL_ARRAY_BUFFER, 0, vtx_buffer_size, (const GLvoid*)cmd_list->VtxBuffer.Data); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, idx_buffer_size, (const GLvoid*)cmd_list->IdxBuffer.Data); + } + else + { + glBufferData(GL_ARRAY_BUFFER, vtx_buffer_size, (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, idx_buffer_size, (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW); + } for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) { @@ -456,11 +538,11 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) // Project scissor/clipping rectangles into framebuffer space ImVec2 clip_min((pcmd->ClipRect.x - clip_off.x) * clip_scale.x, (pcmd->ClipRect.y - clip_off.y) * clip_scale.y); ImVec2 clip_max((pcmd->ClipRect.z - clip_off.x) * clip_scale.x, (pcmd->ClipRect.w - clip_off.y) * clip_scale.y); - if (clip_max.x < clip_min.x || clip_max.y < clip_min.y) + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) continue; // Apply scissor/clipping rectangle (Y is inverted in OpenGL) - glScissor((int)clip_min.x, (int)(fb_height - clip_max.y), (int)(clip_max.x - clip_min.x), (int)(clip_max.y - clip_min.y)); + glScissor((int)clip_min.x, (int)((float)fb_height - clip_max.y), (int)(clip_max.x - clip_min.x), (int)(clip_max.y - clip_min.y)); // Bind texture, Draw glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->GetTexID()); @@ -491,6 +573,12 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) glBindVertexArray(last_vertex_array_object); #endif glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); +#ifndef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + last_vtx_attrib_state_pos.SetState(bd->AttribLocationVtxPos); + last_vtx_attrib_state_uv.SetState(bd->AttribLocationVtxUV); + last_vtx_attrib_state_color.SetState(bd->AttribLocationVtxColor); +#endif glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); @@ -521,6 +609,7 @@ bool ImGui_ImplOpenGL3_CreateFontsTexture() io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. // Upload texture to graphics system + // (Bilinear sampling is required by default. Set 'io.Fonts->Flags |= ImFontAtlasFlags_NoBakedLines' or 'style.AntiAliasedLinesUseTex = false' to allow point/nearest sampling) GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); glGenTextures(1, &bd->FontTexture); @@ -815,3 +904,7 @@ static void ImGui_ImplOpenGL3_ShutdownPlatformInterface() { ImGui::DestroyPlatformWindows(); } + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.h b/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.h index 84d9135..81722bd 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.h +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3.h @@ -5,8 +5,8 @@ // Implemented features: // [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. -// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. +// [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. +// [x] Renderer: Large meshes support (64k+ vertices) with 16-bit indices (Desktop OpenGL only). // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. @@ -47,7 +47,7 @@ IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(); #endif #if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__)) #define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es" -#elif defined(__EMSCRIPTEN__) +#elif defined(__EMSCRIPTEN__) || defined(__amigaos4__) #define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100" #else // Otherwise imgui_impl_opengl3_loader.h will be used. diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3_loader.h b/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3_loader.h index 36089ce..36ba33a 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3_loader.h +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_opengl3_loader.h @@ -1,3 +1,9 @@ +// @SAMPLE_EDIT +// Note: The 'imgui_impl_opengl3_loader.h' included by Dear Imgui Backend has been replaced +// with our own version without stripped symbol. The server App needs a few extra +// function that are not shipped with Dear ImGui. +// The unstripped version comes from : https://github.com/dearimgui/gl3w_stripped/releases + /* * This file was generated with gl3w_gen.py, part of imgl3w * (hosted at https://github.com/dearimgui/gl3w_stripped) diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.cpp b/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.cpp index f18553b..bc5e979 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.cpp +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.cpp @@ -3,9 +3,9 @@ // Implemented features: // [X] Platform: Clipboard support (for Win32 this is actually part of core dear imgui) -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: Keyboard arrays indexed using VK_* Virtual Key Codes, e.g. ImGui::IsKeyPressed(VK_SPACE). +// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy VK_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] // [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. +// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. // [X] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. @@ -19,6 +19,7 @@ #define WIN32_LEAN_AND_MEAN #endif #include +#include // GET_X_LPARAM(), GET_Y_LPARAM() #include #include @@ -34,9 +35,17 @@ typedef DWORD (WINAPI *PFN_XInputGetState)(DWORD, XINPUT_STATE*); // CHANGELOG // (minor and older changes stripped away, please see git history for details) -// 2021-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. +// 2022-01-26: Inputs: replaced short-lived io.AddKeyModsEvent() (added two weeks ago)with io.AddKeyEvent() using ImGuiKey_ModXXX flags. Sorry for the confusion. +// 2021-01-20: Inputs: calling new io.AddKeyAnalogEvent() for gamepad support, instead of writing directly to io.NavInputs[]. +// 2022-01-17: Inputs: calling new io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() API (1.87+). +// 2022-01-17: Inputs: always update key mods next and before a key event (not in NewFrame) to fix input queue with very low framerates. +// 2022-01-12: Inputs: Update mouse inputs using WM_MOUSEMOVE/WM_MOUSELEAVE + fallback to provide it when focused but not hovered/captured. More standard and will allow us to pass it to future input queue API. +// 2022-01-12: Inputs: Maintain our own copy of MouseButtonsDown mask instead of using ImGui::IsAnyMouseDown() which will be obsoleted. +// 2022-01-10: Inputs: calling new io.AddKeyEvent(), io.AddKeyModsEvent() + io.SetKeyEventNativeData() API (1.87+). Support for full ImGuiKey range. +// 2021-12-16: Inputs: Fill VK_LCONTROL/VK_RCONTROL/VK_LSHIFT/VK_RSHIFT/VK_LMENU/VK_RMENU for completeness. // 2021-08-17: Calling io.AddFocusEvent() on WM_SETFOCUS/WM_KILLFOCUS messages. -// 2021-08-02: Inputs: Fixed keyboard modifiers being reported when host windo doesn't have focus. +// 2021-08-02: Inputs: Fixed keyboard modifiers being reported when host window doesn't have focus. // 2021-07-29: Inputs: MousePos is correctly reported when the host platform window is hovered but not focused (using TrackMouseEvent() to receive WM_MOUSELEAVE events). // 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX). // 2021-06-08: Fixed ImGui_ImplWin32_EnableDpiAwareness() and ImGui_ImplWin32_GetDpiScaleForMonitor() to handle Windows 8.1/10 features without a manifest (per-monitor DPI, and properly calls SetProcessDpiAwareness() on 8.1). @@ -79,6 +88,7 @@ struct ImGui_ImplWin32_Data HWND hWnd; HWND MouseHwnd; bool MouseTracked; + int MouseButtonsDown; INT64 Time; INT64 TicksPerSecond; ImGuiMouseCursor LastMouseCursor; @@ -87,12 +97,13 @@ struct ImGui_ImplWin32_Data bool WantUpdateMonitors; #ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD + int GamepadID; // @SAMPLE_EDIT Keeping track of which gamepad to use HMODULE XInputDLL; PFN_XInputGetCapabilities XInputGetCapabilities; PFN_XInputGetState XInputGetState; #endif - ImGui_ImplWin32_Data() { memset(this, 0, sizeof(*this)); } + ImGui_ImplWin32_Data() { memset((void*)this, 0, sizeof(*this)); } }; // Backend data stored in io.BackendPlatformUserData to allow support for multiple Dear ImGui contexts @@ -123,7 +134,7 @@ bool ImGui_ImplWin32_Init(void* hwnd) io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) - io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport; // We can set io.MouseHoveredViewport correctly (optional, not easy) + io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport; // We can call io.AddMouseViewportEvent() with correct data (optional) bd->hWnd = (HWND)hwnd; bd->WantUpdateHasGamepad = true; @@ -138,30 +149,6 @@ bool ImGui_ImplWin32_Init(void* hwnd) if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) ImGui_ImplWin32_InitPlatformInterface(); - // Keyboard mapping. Dear ImGui will use those indices to peek into the io.KeysDown[] array that we will update during the application lifetime. - io.KeyMap[ImGuiKey_Tab] = VK_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = VK_UP; - io.KeyMap[ImGuiKey_DownArrow] = VK_DOWN; - io.KeyMap[ImGuiKey_PageUp] = VK_PRIOR; - io.KeyMap[ImGuiKey_PageDown] = VK_NEXT; - io.KeyMap[ImGuiKey_Home] = VK_HOME; - io.KeyMap[ImGuiKey_End] = VK_END; - io.KeyMap[ImGuiKey_Insert] = VK_INSERT; - io.KeyMap[ImGuiKey_Delete] = VK_DELETE; - io.KeyMap[ImGuiKey_Backspace] = VK_BACK; - io.KeyMap[ImGuiKey_Space] = VK_SPACE; - io.KeyMap[ImGuiKey_Enter] = VK_RETURN; - io.KeyMap[ImGuiKey_Escape] = VK_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = VK_RETURN; - io.KeyMap[ImGuiKey_A] = 'A'; - io.KeyMap[ImGuiKey_C] = 'C'; - io.KeyMap[ImGuiKey_V] = 'V'; - io.KeyMap[ImGuiKey_X] = 'X'; - io.KeyMap[ImGuiKey_Y] = 'Y'; - io.KeyMap[ImGuiKey_Z] = 'Z'; - // Dynamically load XInput library #ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD const char* xinput_dll_names[] = @@ -237,68 +224,95 @@ static bool ImGui_ImplWin32_UpdateMouseCursor() return true; } +static bool IsVkDown(int vk) +{ + return (::GetKeyState(vk) & 0x8000) != 0; +} + +static void ImGui_ImplWin32_AddKeyEvent(ImGuiKey key, bool down, int native_keycode, int native_scancode = -1) +{ + ImGuiIO& io = ImGui::GetIO(); + io.AddKeyEvent(key, down); + io.SetKeyEventNativeData(key, native_keycode, native_scancode); // To support legacy indexing (<1.87 user code) + IM_UNUSED(native_scancode); +} + +static void ImGui_ImplWin32_ProcessKeyEventsWorkarounds() +{ + // Left & right Shift keys: when both are pressed together, Windows tend to not generate the WM_KEYUP event for the first released one. + if (ImGui::IsKeyDown(ImGuiKey_LeftShift) && !IsVkDown(VK_LSHIFT)) + ImGui_ImplWin32_AddKeyEvent(ImGuiKey_LeftShift, false, VK_LSHIFT); + if (ImGui::IsKeyDown(ImGuiKey_RightShift) && !IsVkDown(VK_RSHIFT)) + ImGui_ImplWin32_AddKeyEvent(ImGuiKey_RightShift, false, VK_RSHIFT); + + // Sometimes WM_KEYUP for Win key is not passed down to the app (e.g. for Win+V on some setups, according to GLFW). + if (ImGui::IsKeyDown(ImGuiKey_LeftSuper) && !IsVkDown(VK_LWIN)) + ImGui_ImplWin32_AddKeyEvent(ImGuiKey_LeftSuper, false, VK_LWIN); + if (ImGui::IsKeyDown(ImGuiKey_RightSuper) && !IsVkDown(VK_RWIN)) + ImGui_ImplWin32_AddKeyEvent(ImGuiKey_RightSuper, false, VK_RWIN); +} + +static void ImGui_ImplWin32_UpdateKeyModifiers() +{ + ImGuiIO& io = ImGui::GetIO(); + io.AddKeyEvent(ImGuiKey_ModCtrl, IsVkDown(VK_CONTROL)); + io.AddKeyEvent(ImGuiKey_ModShift, IsVkDown(VK_SHIFT)); + io.AddKeyEvent(ImGuiKey_ModAlt, IsVkDown(VK_MENU)); + io.AddKeyEvent(ImGuiKey_ModSuper, IsVkDown(VK_APPS)); +} + // This code supports multi-viewports (multiple OS Windows mapped into different Dear ImGui viewports) // Because of that, it is a little more complicated than your typical single-viewport binding code! -static void ImGui_ImplWin32_UpdateMousePos() +static void ImGui_ImplWin32_UpdateMouseData() { ImGui_ImplWin32_Data* bd = ImGui_ImplWin32_GetBackendData(); ImGuiIO& io = ImGui::GetIO(); IM_ASSERT(bd->hWnd != 0); - const ImVec2 mouse_pos_prev = io.MousePos; - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - io.MouseHoveredViewport = 0; + POINT mouse_screen_pos; + bool has_mouse_screen_pos = ::GetCursorPos(&mouse_screen_pos) != 0; - // Obtain focused and hovered window. We forward mouse input when focused or when hovered (and no other window is capturing) HWND focused_window = ::GetForegroundWindow(); - HWND hovered_window = bd->MouseHwnd; - HWND mouse_window = NULL; - if (hovered_window && (hovered_window == bd->hWnd || ::IsChild(hovered_window, bd->hWnd) || ImGui::FindViewportByPlatformHandle((void*)hovered_window))) - mouse_window = hovered_window; - else if (focused_window && (focused_window == bd->hWnd || ::IsChild(focused_window, bd->hWnd) || ImGui::FindViewportByPlatformHandle((void*)focused_window))) - mouse_window = focused_window; - if (mouse_window == NULL) - return; - - // Set OS mouse position from Dear ImGui if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) - // (When multi-viewports are enabled, all Dear ImGui positions are same as OS positions) - if (io.WantSetMousePos) + const bool is_app_focused = (focused_window && (focused_window == bd->hWnd || ::IsChild(focused_window, bd->hWnd) || ImGui::FindViewportByPlatformHandle((void*)focused_window))); + if (is_app_focused) { - POINT pos = { (int)mouse_pos_prev.x, (int)mouse_pos_prev.y }; - if ((io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) == 0) - ::ClientToScreen(mouse_window, &pos); - ::SetCursorPos(pos.x, pos.y); - } + // (Optional) Set OS mouse position from Dear ImGui if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) + // When multi-viewports are enabled, all Dear ImGui positions are same as OS positions. + if (io.WantSetMousePos) + { + POINT pos = { (int)io.MousePos.x, (int)io.MousePos.y }; + if ((io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) == 0) + ::ClientToScreen(focused_window, &pos); + ::SetCursorPos(pos.x, pos.y); + } - // Set Dear ImGui mouse position from OS position - POINT mouse_screen_pos; - if (!::GetCursorPos(&mouse_screen_pos)) - return; - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - // Multi-viewport mode: mouse position in OS absolute coordinates (io.MousePos is (0,0) when the mouse is on the upper-left of the primary monitor) - // This is the position you can get with ::GetCursorPos() or WM_MOUSEMOVE + ::ClientToScreen(). In theory adding viewport->Pos to a client position would also be the same. - io.MousePos = ImVec2((float)mouse_screen_pos.x, (float)mouse_screen_pos.y); - } - else - { - // Single viewport mode: mouse position in client window coordinates (io.MousePos is (0,0) when the mouse is on the upper-left corner of the app window) - // This is the position you can get with ::GetCursorPos() + ::ScreenToClient() or WM_MOUSEMOVE. - POINT mouse_client_pos = mouse_screen_pos; - ::ScreenToClient(bd->hWnd, &mouse_client_pos); - io.MousePos = ImVec2((float)mouse_client_pos.x, (float)mouse_client_pos.y); + // (Optional) Fallback to provide mouse position when focused (WM_MOUSEMOVE already provides this when hovered or captured) + if (!io.WantSetMousePos && !bd->MouseTracked && has_mouse_screen_pos) + { + // Single viewport mode: mouse position in client window coordinates (io.MousePos is (0,0) when the mouse is on the upper-left corner of the app window) + // (This is the position you can get with ::GetCursorPos() + ::ScreenToClient() or WM_MOUSEMOVE.) + // Multi-viewport mode: mouse position in OS absolute coordinates (io.MousePos is (0,0) when the mouse is on the upper-left of the primary monitor) + // (This is the position you can get with ::GetCursorPos() or WM_MOUSEMOVE + ::ClientToScreen(). In theory adding viewport->Pos to a client position would also be the same.) + POINT mouse_pos = mouse_screen_pos; + if (!(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)) + ::ScreenToClient(bd->hWnd, &mouse_pos); + io.AddMousePosEvent((float)mouse_pos.x, (float)mouse_pos.y); + } } - // (Optional) When using multiple viewports: set io.MouseHoveredViewport to the viewport the OS mouse cursor is hovering. - // Important: this information is not easy to provide and many high-level windowing library won't be able to provide it correctly, because - // - This is _ignoring_ viewports with the ImGuiViewportFlags_NoInputs flag (pass-through windows). - // - This is _regardless_ of whether another viewport is focused or being dragged from. - // If ImGuiBackendFlags_HasMouseHoveredViewport is not set by the backend, imgui will ignore this field and infer the information by relying on the - // rectangles and last focused time of every viewports it knows about. It will be unaware of foreign windows that may be sitting between or over your windows. - if (HWND hovered_hwnd = ::WindowFromPoint(mouse_screen_pos)) - if (ImGuiViewport* viewport = ImGui::FindViewportByPlatformHandle((void*)hovered_hwnd)) - if ((viewport->Flags & ImGuiViewportFlags_NoInputs) == 0) // FIXME: We still get our NoInputs window with WM_NCHITTEST/HTTRANSPARENT code when decorated? - io.MouseHoveredViewport = viewport->ID; + // (Optional) When using multiple viewports: call io.AddMouseViewportEvent() with the viewport the OS mouse cursor is hovering. + // If ImGuiBackendFlags_HasMouseHoveredViewport is not set by the backend, Dear imGui will ignore this field and infer the information using its flawed heuristic. + // - [X] Win32 backend correctly ignore viewports with the _NoInputs flag (here using ::WindowFromPoint with WM_NCHITTEST + HTTRANSPARENT in WndProc does that) + // Some backend are not able to handle that correctly. If a backend report an hovered viewport that has the _NoInputs flag (e.g. when dragging a window + // for docking, the viewport has the _NoInputs flag in order to allow us to find the viewport under), then Dear ImGui is forced to ignore the value reported + // by the backend, and use its flawed heuristic to guess the viewport behind. + // - [X] Win32 backend correctly reports this regardless of another viewport behind focused and dragged from (we need this to find a useful drag and drop target). + ImGuiID mouse_viewport_id = 0; + if (has_mouse_screen_pos) + if (HWND hovered_hwnd = ::WindowFromPoint(mouse_screen_pos)) + if (ImGuiViewport* viewport = ImGui::FindViewportByPlatformHandle((void*)hovered_hwnd)) + mouse_viewport_id = viewport->ID; + io.AddMouseViewportEvent(mouse_viewport_id); } // Gamepad navigation mapping @@ -307,7 +321,6 @@ static void ImGui_ImplWin32_UpdateGamepads() #ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD ImGuiIO& io = ImGui::GetIO(); ImGui_ImplWin32_Data* bd = ImGui_ImplWin32_GetBackendData(); - memset(io.NavInputs, 0, sizeof(io.NavInputs)); if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) return; @@ -315,39 +328,61 @@ static void ImGui_ImplWin32_UpdateGamepads() // Instead we refresh gamepad availability by calling XInputGetCapabilities() _only_ after receiving WM_DEVICECHANGE. if (bd->WantUpdateHasGamepad) { - XINPUT_CAPABILITIES caps; +#if 1 // @SAMPLE_EDIT Trying to only read gamepad 0 doesn't always work. Iterate until a valid one is found + bd->GamepadID = -1; + for (DWORD i=0; bd->XInputGetCapabilities && i< XUSER_MAX_COUNT && bd->GamepadID == -1; i++ ) + { + XINPUT_CAPABILITIES caps = {}; + auto dwResult = bd->XInputGetCapabilities( i, XINPUT_FLAG_GAMEPAD, &caps ); + if( dwResult == ERROR_SUCCESS ){ + bd->GamepadID = static_cast(i); + } + } + bd->HasGamepad = bd->GamepadID != -1; + bd->WantUpdateHasGamepad = false; +#else + XINPUT_CAPABILITIES caps = {}; bd->HasGamepad = bd->XInputGetCapabilities ? (bd->XInputGetCapabilities(0, XINPUT_FLAG_GAMEPAD, &caps) == ERROR_SUCCESS) : false; bd->WantUpdateHasGamepad = false; +#endif } io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; XINPUT_STATE xinput_state; - if (bd->HasGamepad && bd->XInputGetState && bd->XInputGetState(0, &xinput_state) == ERROR_SUCCESS) - { - const XINPUT_GAMEPAD& gamepad = xinput_state.Gamepad; - io.BackendFlags |= ImGuiBackendFlags_HasGamepad; - - #define MAP_BUTTON(NAV_NO, BUTTON_ENUM) { io.NavInputs[NAV_NO] = (gamepad.wButtons & BUTTON_ENUM) ? 1.0f : 0.0f; } - #define MAP_ANALOG(NAV_NO, VALUE, V0, V1) { float vn = (float)(VALUE - V0) / (float)(V1 - V0); if (vn > 1.0f) vn = 1.0f; if (vn > 0.0f && io.NavInputs[NAV_NO] < vn) io.NavInputs[NAV_NO] = vn; } - MAP_BUTTON(ImGuiNavInput_Activate, XINPUT_GAMEPAD_A); // Cross / A - MAP_BUTTON(ImGuiNavInput_Cancel, XINPUT_GAMEPAD_B); // Circle / B - MAP_BUTTON(ImGuiNavInput_Menu, XINPUT_GAMEPAD_X); // Square / X - MAP_BUTTON(ImGuiNavInput_Input, XINPUT_GAMEPAD_Y); // Triangle / Y - MAP_BUTTON(ImGuiNavInput_DpadLeft, XINPUT_GAMEPAD_DPAD_LEFT); // D-Pad Left - MAP_BUTTON(ImGuiNavInput_DpadRight, XINPUT_GAMEPAD_DPAD_RIGHT); // D-Pad Right - MAP_BUTTON(ImGuiNavInput_DpadUp, XINPUT_GAMEPAD_DPAD_UP); // D-Pad Up - MAP_BUTTON(ImGuiNavInput_DpadDown, XINPUT_GAMEPAD_DPAD_DOWN); // D-Pad Down - MAP_BUTTON(ImGuiNavInput_FocusPrev, XINPUT_GAMEPAD_LEFT_SHOULDER); // L1 / LB - MAP_BUTTON(ImGuiNavInput_FocusNext, XINPUT_GAMEPAD_RIGHT_SHOULDER); // R1 / RB - MAP_BUTTON(ImGuiNavInput_TweakSlow, XINPUT_GAMEPAD_LEFT_SHOULDER); // L1 / LB - MAP_BUTTON(ImGuiNavInput_TweakFast, XINPUT_GAMEPAD_RIGHT_SHOULDER); // R1 / RB - MAP_ANALOG(ImGuiNavInput_LStickLeft, gamepad.sThumbLX, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32768); - MAP_ANALOG(ImGuiNavInput_LStickRight, gamepad.sThumbLX, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); - MAP_ANALOG(ImGuiNavInput_LStickUp, gamepad.sThumbLY, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); - MAP_ANALOG(ImGuiNavInput_LStickDown, gamepad.sThumbLY, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32767); - #undef MAP_BUTTON - #undef MAP_ANALOG - } + XINPUT_GAMEPAD& gamepad = xinput_state.Gamepad; + if (!bd->HasGamepad || bd->XInputGetState == NULL || bd->XInputGetState(bd->GamepadID, &xinput_state) != ERROR_SUCCESS) // @SAMPLE_EDIT Using 'GamepadID' instead of '0' + return; + io.BackendFlags |= ImGuiBackendFlags_HasGamepad; + + #define IM_SATURATE(V) (V < 0.0f ? 0.0f : V > 1.0f ? 1.0f : V) + #define MAP_BUTTON(KEY_NO, BUTTON_ENUM) { io.AddKeyEvent(KEY_NO, (gamepad.wButtons & BUTTON_ENUM) != 0); } + #define MAP_ANALOG(KEY_NO, VALUE, V0, V1) { float vn = (float)(VALUE - V0) / (float)(V1 - V0); io.AddKeyAnalogEvent(KEY_NO, vn > 0.10f, IM_SATURATE(vn)); } + MAP_BUTTON(ImGuiKey_GamepadStart, XINPUT_GAMEPAD_START); + MAP_BUTTON(ImGuiKey_GamepadBack, XINPUT_GAMEPAD_BACK); + MAP_BUTTON(ImGuiKey_GamepadFaceDown, XINPUT_GAMEPAD_A); + MAP_BUTTON(ImGuiKey_GamepadFaceRight, XINPUT_GAMEPAD_B); + MAP_BUTTON(ImGuiKey_GamepadFaceLeft, XINPUT_GAMEPAD_X); + MAP_BUTTON(ImGuiKey_GamepadFaceUp, XINPUT_GAMEPAD_Y); + MAP_BUTTON(ImGuiKey_GamepadDpadLeft, XINPUT_GAMEPAD_DPAD_LEFT); + MAP_BUTTON(ImGuiKey_GamepadDpadRight, XINPUT_GAMEPAD_DPAD_RIGHT); + MAP_BUTTON(ImGuiKey_GamepadDpadUp, XINPUT_GAMEPAD_DPAD_UP); + MAP_BUTTON(ImGuiKey_GamepadDpadDown, XINPUT_GAMEPAD_DPAD_DOWN); + MAP_BUTTON(ImGuiKey_GamepadL1, XINPUT_GAMEPAD_LEFT_SHOULDER); + MAP_BUTTON(ImGuiKey_GamepadR1, XINPUT_GAMEPAD_RIGHT_SHOULDER); + MAP_ANALOG(ImGuiKey_GamepadL2, gamepad.bLeftTrigger, XINPUT_GAMEPAD_TRIGGER_THRESHOLD, 255); + MAP_ANALOG(ImGuiKey_GamepadR2, gamepad.bRightTrigger, XINPUT_GAMEPAD_TRIGGER_THRESHOLD, 255); + MAP_BUTTON(ImGuiKey_GamepadL3, XINPUT_GAMEPAD_LEFT_THUMB); + MAP_BUTTON(ImGuiKey_GamepadR3, XINPUT_GAMEPAD_RIGHT_THUMB); + MAP_ANALOG(ImGuiKey_GamepadLStickLeft, gamepad.sThumbLX, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32768); + MAP_ANALOG(ImGuiKey_GamepadLStickRight, gamepad.sThumbLX, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); + MAP_ANALOG(ImGuiKey_GamepadLStickUp, gamepad.sThumbLY, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); + MAP_ANALOG(ImGuiKey_GamepadLStickDown, gamepad.sThumbLY, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32768); + MAP_ANALOG(ImGuiKey_GamepadRStickLeft, gamepad.sThumbRX, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32768); + MAP_ANALOG(ImGuiKey_GamepadRStickRight, gamepad.sThumbRX, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); + MAP_ANALOG(ImGuiKey_GamepadRStickUp, gamepad.sThumbRY, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); + MAP_ANALOG(ImGuiKey_GamepadRStickDown, gamepad.sThumbRY, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32768); + #undef MAP_BUTTON + #undef MAP_ANALOG #endif // #ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD } @@ -399,7 +434,10 @@ void ImGui_ImplWin32_NewFrame() bd->Time = current_time; // Update OS mouse position - ImGui_ImplWin32_UpdateMousePos(); + ImGui_ImplWin32_UpdateMouseData(); + + // Process workarounds for known Windows key handling issues + ImGui_ImplWin32_ProcessKeyEventsWorkarounds(); // Update OS mouse cursor with the cursor requested by imgui ImGuiMouseCursor mouse_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); @@ -413,6 +451,122 @@ void ImGui_ImplWin32_NewFrame() ImGui_ImplWin32_UpdateGamepads(); } +// There is no distinct VK_xxx for keypad enter, instead it is VK_RETURN + KF_EXTENDED, we assign it an arbitrary value to make code more readable (VK_ codes go up to 255) +#define IM_VK_KEYPAD_ENTER (VK_RETURN + 256) + +// Map VK_xxx to ImGuiKey_xxx. +static ImGuiKey ImGui_ImplWin32_VirtualKeyToImGuiKey(WPARAM wParam) +{ + switch (wParam) + { + case VK_TAB: return ImGuiKey_Tab; + case VK_LEFT: return ImGuiKey_LeftArrow; + case VK_RIGHT: return ImGuiKey_RightArrow; + case VK_UP: return ImGuiKey_UpArrow; + case VK_DOWN: return ImGuiKey_DownArrow; + case VK_PRIOR: return ImGuiKey_PageUp; + case VK_NEXT: return ImGuiKey_PageDown; + case VK_HOME: return ImGuiKey_Home; + case VK_END: return ImGuiKey_End; + case VK_INSERT: return ImGuiKey_Insert; + case VK_DELETE: return ImGuiKey_Delete; + case VK_BACK: return ImGuiKey_Backspace; + case VK_SPACE: return ImGuiKey_Space; + case VK_RETURN: return ImGuiKey_Enter; + case VK_ESCAPE: return ImGuiKey_Escape; + case VK_OEM_7: return ImGuiKey_Apostrophe; + case VK_OEM_COMMA: return ImGuiKey_Comma; + case VK_OEM_MINUS: return ImGuiKey_Minus; + case VK_OEM_PERIOD: return ImGuiKey_Period; + case VK_OEM_2: return ImGuiKey_Slash; + case VK_OEM_1: return ImGuiKey_Semicolon; + case VK_OEM_PLUS: return ImGuiKey_Equal; + case VK_OEM_4: return ImGuiKey_LeftBracket; + case VK_OEM_5: return ImGuiKey_Backslash; + case VK_OEM_6: return ImGuiKey_RightBracket; + case VK_OEM_3: return ImGuiKey_GraveAccent; + case VK_CAPITAL: return ImGuiKey_CapsLock; + case VK_SCROLL: return ImGuiKey_ScrollLock; + case VK_NUMLOCK: return ImGuiKey_NumLock; + case VK_SNAPSHOT: return ImGuiKey_PrintScreen; + case VK_PAUSE: return ImGuiKey_Pause; + case VK_NUMPAD0: return ImGuiKey_Keypad0; + case VK_NUMPAD1: return ImGuiKey_Keypad1; + case VK_NUMPAD2: return ImGuiKey_Keypad2; + case VK_NUMPAD3: return ImGuiKey_Keypad3; + case VK_NUMPAD4: return ImGuiKey_Keypad4; + case VK_NUMPAD5: return ImGuiKey_Keypad5; + case VK_NUMPAD6: return ImGuiKey_Keypad6; + case VK_NUMPAD7: return ImGuiKey_Keypad7; + case VK_NUMPAD8: return ImGuiKey_Keypad8; + case VK_NUMPAD9: return ImGuiKey_Keypad9; + case VK_DECIMAL: return ImGuiKey_KeypadDecimal; + case VK_DIVIDE: return ImGuiKey_KeypadDivide; + case VK_MULTIPLY: return ImGuiKey_KeypadMultiply; + case VK_SUBTRACT: return ImGuiKey_KeypadSubtract; + case VK_ADD: return ImGuiKey_KeypadAdd; + case IM_VK_KEYPAD_ENTER: return ImGuiKey_KeypadEnter; + case VK_LSHIFT: return ImGuiKey_LeftShift; + case VK_LCONTROL: return ImGuiKey_LeftCtrl; + case VK_LMENU: return ImGuiKey_LeftAlt; + case VK_LWIN: return ImGuiKey_LeftSuper; + case VK_RSHIFT: return ImGuiKey_RightShift; + case VK_RCONTROL: return ImGuiKey_RightCtrl; + case VK_RMENU: return ImGuiKey_RightAlt; + case VK_RWIN: return ImGuiKey_RightSuper; + case VK_APPS: return ImGuiKey_Menu; + case '0': return ImGuiKey_0; + case '1': return ImGuiKey_1; + case '2': return ImGuiKey_2; + case '3': return ImGuiKey_3; + case '4': return ImGuiKey_4; + case '5': return ImGuiKey_5; + case '6': return ImGuiKey_6; + case '7': return ImGuiKey_7; + case '8': return ImGuiKey_8; + case '9': return ImGuiKey_9; + case 'A': return ImGuiKey_A; + case 'B': return ImGuiKey_B; + case 'C': return ImGuiKey_C; + case 'D': return ImGuiKey_D; + case 'E': return ImGuiKey_E; + case 'F': return ImGuiKey_F; + case 'G': return ImGuiKey_G; + case 'H': return ImGuiKey_H; + case 'I': return ImGuiKey_I; + case 'J': return ImGuiKey_J; + case 'K': return ImGuiKey_K; + case 'L': return ImGuiKey_L; + case 'M': return ImGuiKey_M; + case 'N': return ImGuiKey_N; + case 'O': return ImGuiKey_O; + case 'P': return ImGuiKey_P; + case 'Q': return ImGuiKey_Q; + case 'R': return ImGuiKey_R; + case 'S': return ImGuiKey_S; + case 'T': return ImGuiKey_T; + case 'U': return ImGuiKey_U; + case 'V': return ImGuiKey_V; + case 'W': return ImGuiKey_W; + case 'X': return ImGuiKey_X; + case 'Y': return ImGuiKey_Y; + case 'Z': return ImGuiKey_Z; + case VK_F1: return ImGuiKey_F1; + case VK_F2: return ImGuiKey_F2; + case VK_F3: return ImGuiKey_F3; + case VK_F4: return ImGuiKey_F4; + case VK_F5: return ImGuiKey_F5; + case VK_F6: return ImGuiKey_F6; + case VK_F7: return ImGuiKey_F7; + case VK_F8: return ImGuiKey_F8; + case VK_F9: return ImGuiKey_F9; + case VK_F10: return ImGuiKey_F10; + case VK_F11: return ImGuiKey_F11; + case VK_F12: return ImGuiKey_F12; + default: return ImGuiKey_None; + } +} + // Allow compilation with old Windows SDK. MinGW doesn't have default _WIN32_WINNT/WINVER versions. #ifndef WM_MOUSEHWHEEL #define WM_MOUSEHWHEEL 0x020E @@ -422,10 +576,10 @@ void ImGui_ImplWin32_NewFrame() #endif // Win32 message handler (process Win32 mouse/keyboard inputs, etc.) -// Call from your application's message handler. +// Call from your application's message handler. Keep calling your message handler unless this function returns TRUE. // When implementing your own backend, you can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if Dear ImGui wants to use your inputs. -// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. -// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. +// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data. +// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data. // Generally you may always pass all inputs to Dear ImGui, and hide them from your application based on those two flags. // PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinates when dragging mouse outside of our window bounds. // PS: We treat DBLCLK messages as regular mouse down messages, so this code will work on windows classes that have the CS_DBLCLKS flag set. Our own example app code doesn't set this flag. @@ -444,6 +598,7 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA switch (msg) { case WM_MOUSEMOVE: + { // We need to call TrackMouseEvent in order to receive WM_MOUSELEAVE events bd->MouseHwnd = hwnd; if (!bd->MouseTracked) @@ -452,11 +607,17 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA ::TrackMouseEvent(&tme); bd->MouseTracked = true; } + POINT mouse_pos = { (LONG)GET_X_LPARAM(lParam), (LONG)GET_Y_LPARAM(lParam) }; + if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + ::ClientToScreen(hwnd, &mouse_pos); + io.AddMousePosEvent((float)mouse_pos.x, (float)mouse_pos.y); break; + } case WM_MOUSELEAVE: if (bd->MouseHwnd == hwnd) bd->MouseHwnd = NULL; bd->MouseTracked = false; + io.AddMousePosEvent(-FLT_MAX, -FLT_MAX); break; case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK: @@ -468,9 +629,10 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) { button = 1; } if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONDBLCLK) { button = 2; } if (msg == WM_XBUTTONDOWN || msg == WM_XBUTTONDBLCLK) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; } - if (!ImGui::IsAnyMouseDown() && ::GetCapture() == NULL) + if (bd->MouseButtonsDown == 0 && ::GetCapture() == NULL) ::SetCapture(hwnd); - io.MouseDown[button] = true; + bd->MouseButtonsDown |= 1 << button; + io.AddMouseButtonEvent(button, true); return 0; } case WM_LBUTTONUP: @@ -483,31 +645,59 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA if (msg == WM_RBUTTONUP) { button = 1; } if (msg == WM_MBUTTONUP) { button = 2; } if (msg == WM_XBUTTONUP) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; } - io.MouseDown[button] = false; - if (!ImGui::IsAnyMouseDown() && ::GetCapture() == hwnd) + bd->MouseButtonsDown &= ~(1 << button); + if (bd->MouseButtonsDown == 0 && ::GetCapture() == hwnd) ::ReleaseCapture(); + io.AddMouseButtonEvent(button, false); return 0; } case WM_MOUSEWHEEL: - io.MouseWheel += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA; + io.AddMouseWheelEvent(0.0f, (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA); return 0; case WM_MOUSEHWHEEL: - io.MouseWheelH += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA; + io.AddMouseWheelEvent((float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA, 0.0f); return 0; case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYDOWN: case WM_SYSKEYUP: { - bool down = (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN); + const bool is_key_down = (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN); if (wParam < 256) - io.KeysDown[wParam] = down; - if (wParam == VK_CONTROL) - io.KeyCtrl = down; - if (wParam == VK_SHIFT) - io.KeyShift = down; - if (wParam == VK_MENU) - io.KeyAlt = down; + { + // Submit modifiers + ImGui_ImplWin32_UpdateKeyModifiers(); + + // Obtain virtual key code + // (keypad enter doesn't have its own... VK_RETURN with KF_EXTENDED flag means keypad enter, see IM_VK_KEYPAD_ENTER definition for details, it is mapped to ImGuiKey_KeyPadEnter.) + int vk = (int)wParam; + if ((wParam == VK_RETURN) && (HIWORD(lParam) & KF_EXTENDED)) + vk = IM_VK_KEYPAD_ENTER; + + // Submit key event + const ImGuiKey key = ImGui_ImplWin32_VirtualKeyToImGuiKey(vk); + const int scancode = (int)LOBYTE(HIWORD(lParam)); + if (key != ImGuiKey_None) + ImGui_ImplWin32_AddKeyEvent(key, is_key_down, vk, scancode); + + // Submit individual left/right modifier events + if (vk == VK_SHIFT) + { + // Important: Shift keys tend to get stuck when pressed together, missing key-up events are corrected in ImGui_ImplWin32_ProcessKeyEventsWorkarounds() + if (IsVkDown(VK_LSHIFT) == is_key_down) { ImGui_ImplWin32_AddKeyEvent(ImGuiKey_LeftShift, is_key_down, VK_LSHIFT, scancode); } + if (IsVkDown(VK_RSHIFT) == is_key_down) { ImGui_ImplWin32_AddKeyEvent(ImGuiKey_RightShift, is_key_down, VK_RSHIFT, scancode); } + } + else if (vk == VK_CONTROL) + { + if (IsVkDown(VK_LCONTROL) == is_key_down) { ImGui_ImplWin32_AddKeyEvent(ImGuiKey_LeftCtrl, is_key_down, VK_LCONTROL, scancode); } + if (IsVkDown(VK_RCONTROL) == is_key_down) { ImGui_ImplWin32_AddKeyEvent(ImGuiKey_RightCtrl, is_key_down, VK_RCONTROL, scancode); } + } + else if (vk == VK_MENU) + { + if (IsVkDown(VK_LMENU) == is_key_down) { ImGui_ImplWin32_AddKeyEvent(ImGuiKey_LeftAlt, is_key_down, VK_LMENU, scancode); } + if (IsVkDown(VK_RMENU) == is_key_down) { ImGui_ImplWin32_AddKeyEvent(ImGuiKey_RightAlt, is_key_down, VK_RMENU, scancode); } + } + } return 0; } case WM_SETFOCUS: @@ -520,6 +710,7 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA io.AddInputCharacterUTF16((unsigned short)wParam); return 0; case WM_SETCURSOR: + // This is required to restore cursor when transitioning from e.g resize borders to client area. if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor()) return 1; return 0; @@ -657,35 +848,6 @@ float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd) return ImGui_ImplWin32_GetDpiScaleForMonitor(monitor); } - -//-------------------------------------------------------------------------------------------------------- -// IME (Input Method Editor) basic support for e.g. Asian language users -//-------------------------------------------------------------------------------------------------------- - -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) // UWP doesn't have Win32 functions -#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS -#endif - -#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) -#define HAS_WIN32_IME 1 -#include -#ifdef _MSC_VER -#pragma comment(lib, "imm32") -#endif -static void ImGui_ImplWin32_SetImeInputPos(ImGuiViewport* viewport, ImVec2 pos) -{ - COMPOSITIONFORM cf = { CFS_FORCE_POSITION,{ (LONG)(pos.x - viewport->Pos.x), (LONG)(pos.y - viewport->Pos.y) },{ 0, 0, 0, 0 } }; - if (HWND hwnd = (HWND)viewport->PlatformHandle) - if (HIMC himc = ::ImmGetContext(hwnd)) - { - ::ImmSetCompositionWindow(himc, &cf); - ::ImmReleaseContext(hwnd, himc); - } -} -#else -#define HAS_WIN32_IME 0 -#endif - //-------------------------------------------------------------------------------------------------------- // MULTI-VIEWPORT / PLATFORM INTERFACE SUPPORT // This is an _advanced_ and _optional_ feature, allowing the backend to create and handle multiple viewports simultaneously. @@ -939,7 +1101,7 @@ static LRESULT CALLBACK ImGui_ImplWin32_WndProcHandler_PlatformWindow(HWND hWnd, return MA_NOACTIVATE; break; case WM_NCHITTEST: - // Let mouse pass-through the window. This will allow the backend to set io.MouseHoveredViewport properly (which is OPTIONAL). + // Let mouse pass-through the window. This will allow the backend to call io.AddMouseViewportEvent() correctly. (which is optional). // The ImGuiViewportFlags_NoInputs flag is set while dragging a viewport, as want to detect the window behind the one we are dragging. // If you cannot easily access those viewport flags from your windowing/event code: you may manually synchronize its state e.g. in // your main loop after calling UpdatePlatformWindows(). Iterate all viewports/platform windows and pass the flag to your windowing system. @@ -988,9 +1150,6 @@ static void ImGui_ImplWin32_InitPlatformInterface() platform_io.Platform_UpdateWindow = ImGui_ImplWin32_UpdateWindow; platform_io.Platform_GetWindowDpiScale = ImGui_ImplWin32_GetWindowDpiScale; // FIXME-DPI platform_io.Platform_OnChangedViewport = ImGui_ImplWin32_OnChangedViewport; // FIXME-DPI -#if HAS_WIN32_IME - platform_io.Platform_SetImeInputPos = ImGui_ImplWin32_SetImeInputPos; -#endif // Register main window handle (which is owned by the main application, not by us) // This is mostly for simplicity and consistency, so that our code (e.g. mouse handling etc.) can use same logic for main and secondary viewports. diff --git a/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.h b/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.h index 7a9437a..3778c32 100644 --- a/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.h +++ b/Code/ThirdParty/DearImgui/backends/imgui_impl_win32.h @@ -3,12 +3,12 @@ // Implemented features: // [X] Platform: Clipboard support (for Win32 this is actually part of core dear imgui) -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: Keyboard arrays indexed using VK_* Virtual Key Codes, e.g. ImGui::IsKeyPressed(VK_SPACE). +// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy VK_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] // [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. +// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. // [X] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. -// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. // Read online: https://github.com/ocornut/imgui/tree/master/docs @@ -23,6 +23,8 @@ IMGUI_IMPL_API void ImGui_ImplWin32_NewFrame(); // Win32 message handler your application need to call. // - Intentionally commented out in a '#if 0' block to avoid dragging dependencies on from this helper. // - You should COPY the line below into your .cpp code to forward declare the function and then you can call it. +// - Call from your application's message handler. Keep calling your message handler unless this function returns TRUE. + #if 0 extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); #endif diff --git a/Code/ThirdParty/DearImgui/imconfig.h b/Code/ThirdParty/DearImgui/imconfig.h index 7082c55..e3dc27f 100644 --- a/Code/ThirdParty/DearImgui/imconfig.h +++ b/Code/ThirdParty/DearImgui/imconfig.h @@ -28,12 +28,13 @@ //---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names. //#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87: disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This will be folded into IMGUI_DISABLE_OBSOLETE_FUNCTIONS in a few versions. -//---- Disable all of Dear ImGui or don't implement standard windows. -// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp. +//---- Disable all of Dear ImGui or don't implement standard windows/tools. +// It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp. //#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty. -//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended. -//#define IMGUI_DISABLE_METRICS_WINDOW // Disable metrics/debugger and other debug tools: ShowMetricsWindow() and ShowStackToolWindow() will be empty. +//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. +//#define IMGUI_DISABLE_DEBUG_TOOLS // Disable metrics/debugger and other debug tools: ShowMetricsWindow(), ShowDebugLogWindow() and ShowStackToolWindow() will be empty (this was called IMGUI_DISABLE_METRICS_WINDOW before 1.88). //---- 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. (user32.lib/.a, kernel32.lib/.a) @@ -61,12 +62,13 @@ // By default the embedded implementations are declared static and not available outside of Dear ImGui sources files. //#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h" //#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h" +//#define IMGUI_STB_SPRINTF_FILENAME "my_folder/stb_sprintf.h" // only used if enabled //#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION //#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION -//---- Use stb_printf's faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined) -// Requires 'stb_sprintf.h' to be available in the include path. Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by STB sprintf. -// #define IMGUI_USE_STB_SPRINTF +//---- Use stb_sprintf.h for a faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined) +// Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by stb_sprintf.h. +//#define IMGUI_USE_STB_SPRINTF //---- Use FreeType to build and rasterize the font atlas (instead of stb_truetype which is embedded by default in Dear ImGui) // Requires FreeType headers to be available in the include path. Requires program to be compiled with 'misc/freetype/imgui_freetype.cpp' (in this repository) + the FreeType library (not provided). @@ -80,12 +82,12 @@ //---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4. // This will be inlined as part of ImVec2 and ImVec4 class declarations. /* -#define IM_VEC2_CLASS_EXTRA \ - ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ +#define IM_VEC2_CLASS_EXTRA \ + constexpr ImVec2(const MyVec2& f) : x(f.x), y(f.y) {} \ operator MyVec2() const { return MyVec2(x,y); } -#define IM_VEC4_CLASS_EXTRA \ - ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ +#define IM_VEC4_CLASS_EXTRA \ + constexpr ImVec4(const MyVec4& f) : x(f.x), y(f.y), z(f.z), w(f.w) {} \ operator MyVec4() const { return MyVec4(x,y,z,w); } */ diff --git a/Code/ThirdParty/DearImgui/imgui.cpp b/Code/ThirdParty/DearImgui/imgui.cpp index 3663a46..9f33cb1 100644 --- a/Code/ThirdParty/DearImgui/imgui.cpp +++ b/Code/ThirdParty/DearImgui/imgui.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (main code and documentation) // Help: @@ -11,7 +11,7 @@ // - FAQ http://dearimgui.org/faq // - Homepage & latest https://github.com/ocornut/imgui // - Releases & changelog https://github.com/ocornut/imgui/releases -// - Gallery https://github.com/ocornut/imgui/issues/4451 (please post your screenshots/video there!) +// - Gallery https://github.com/ocornut/imgui/issues/5243 (please post your screenshots/video there!) // - Wiki https://github.com/ocornut/imgui/wiki (lots of good stuff there) // - Glossary https://github.com/ocornut/imgui/wiki/Glossary // - Issues & support https://github.com/ocornut/imgui/issues @@ -70,6 +70,7 @@ CODE // [SECTION] STYLING // [SECTION] RENDER HELPERS // [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!) +// [SECTION] INPUTS // [SECTION] ERROR CHECKING // [SECTION] LAYOUT // [SECTION] SCROLLING @@ -83,6 +84,7 @@ CODE // [SECTION] DOCKING // [SECTION] PLATFORM DEPENDENT HELPERS // [SECTION] METRICS/DEBUGGER WINDOW +// [SECTION] DEBUG LOG WINDOW // [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL) */ @@ -101,6 +103,7 @@ CODE - Easy to hack and improve. - Minimize setup and maintenance. - Minimize state storage on user side. + - Minimize state synchronization. - Portable, minimize dependencies, run on target (consoles, phones, etc.). - Efficient runtime and memory consumption. @@ -128,7 +131,6 @@ CODE - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/ - CTRL+Z,CTRL+Y to undo/redo. - ESCAPE to revert text to its original value. - - You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!) - Controls are automatically adjusted for OSX to match standard OSX text editing operations. - General Keyboard controls: enable with ImGuiConfigFlags_NavEnableKeyboard. - General Gamepad controls: enable with ImGuiConfigFlags_NavEnableGamepad. See suggested mappings in imgui.h ImGuiNavInput_ + download PNG/PSD at http://dearimgui.org/controls_sheets @@ -255,9 +257,9 @@ CODE io.DeltaTime = 1.0f/60.0f; // set the time elapsed since the previous frame (in seconds) io.DisplaySize.x = 1920.0f; // set the current display width io.DisplaySize.y = 1280.0f; // set the current display height here - io.MousePos = my_mouse_pos; // set the mouse position - io.MouseDown[0] = my_mouse_buttons[0]; // set the mouse button states - io.MouseDown[1] = my_mouse_buttons[1]; + io.AddMousePosEvent(mouse_x, mouse_y); // update mouse position + io.AddMouseButtonEvent(0, mouse_b[0]); // update mouse button states + io.AddMouseButtonEvent(1, mouse_b[1]); // update mouse button states // Call NewFrame(), after this point you can use ImGui::* functions anytime // (So you want to try calling NewFrame() as early as you can in your main loop to be able to use Dear ImGui everywhere) @@ -292,9 +294,11 @@ CODE void void MyImGuiRenderFunction(ImDrawData* draw_data) { // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + // TODO: Setup texture sampling state: sample with bilinear filtering (NOT point/nearest filtering). Use 'io.Fonts->Flags |= ImFontAtlasFlags_NoBakedLines;' to allow point/nearest filtering. // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize // TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color. + ImVec2 clip_off = draw_data->DisplayPos; for (int n = 0; n < draw_data->CmdListsCount; n++) { const ImDrawList* cmd_list = draw_data->CmdLists[n]; @@ -309,9 +313,11 @@ CODE } else { - // The texture for the draw call is specified by pcmd->GetTexID(). - // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization. - MyEngineBindTexture((MyTexture*)pcmd->GetTexID()); + // Project scissor/clipping rectangles into framebuffer space + ImVec2 clip_min(pcmd->ClipRect.x - clip_off.x, pcmd->ClipRect.y - clip_off.y); + ImVec2 clip_max(pcmd->ClipRect.z - clip_off.x, pcmd->ClipRect.w - clip_off.y); + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) + continue; // We are using scissoring to clip some objects. All low-level graphics API should support it. // - If your engine doesn't support scissoring yet, you may ignore this at first. You will get some small glitches @@ -322,14 +328,16 @@ CODE // - In the interest of supporting multi-viewport applications (see 'docking' branch on github), // always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space. // - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min) - ImVec2 pos = draw_data->DisplayPos; - MyEngineScissor((int)(pcmd->ClipRect.x - pos.x), (int)(pcmd->ClipRect.y - pos.y), (int)(pcmd->ClipRect.z - pos.x), (int)(pcmd->ClipRect.w - pos.y)); + MyEngineSetScissor(clip_min.x, clip_min.y, clip_max.x, clip_max.y); + + // The texture for the draw call is specified by pcmd->GetTexID(). + // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization. + MyEngineBindTexture((MyTexture*)pcmd->GetTexID()); // Render 'pcmd->ElemCount/3' indexed triangles. // By default the indices ImDrawIdx are 16-bit, you can change them to 32-bit in imconfig.h if your engine doesn't support 16-bit indices. - MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer); + MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer + pcmd->IdxOffset, vtx_buffer, pcmd->VtxOffset); } - idx_buffer += pcmd->ElemCount; } } } @@ -342,27 +350,26 @@ CODE - You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787 - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable. - Keyboard: - - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. - NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays. - - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), the io.WantCaptureKeyboard flag - will be set. For more advanced uses, you may want to read from: + - Application: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. + - Internally: NewFrame() will automatically fill io.NavInputs[] based on backend's io.AddKeyEvent() calls. + - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), + the io.WantCaptureKeyboard flag will be set. For more advanced uses, you may want to read from: - io.NavActive: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set. - io.NavVisible: true when the navigation cursor is visible (and usually goes false when mouse is used). - or query focus information with e.g. IsWindowFocused(ImGuiFocusedFlags_AnyWindow), IsItemFocused() etc. functions. Please reach out if you think the game vs navigation input sharing could be improved. - Gamepad: - - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. - - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + fill the io.NavInputs[] fields before calling NewFrame(). - Note that io.NavInputs[] is cleared by EndFrame(). - - See 'enum ImGuiNavInput_' in imgui.h for a description of inputs. For each entry of io.NavInputs[], set the following values: - 0.0f= not held. 1.0f= fully held. Pass intermediate 0.0f..1.0f values for analog triggers/sticks. - - We use a simple >0.0f test for activation testing, and won't attempt to test for a dead-zone. - Your code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.). + - Application: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. + - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + call io.AddKeyEvent/AddKeyAnalogEvent() with ImGuiKey_Gamepad_XXX keys. + For analog values (0.0f to 1.0f), backend is responsible to handling a dead-zone and rescaling inputs accordingly. + Backend code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.). + - Internally: NewFrame() will automatically fill io.NavInputs[] based on backend's io.AddKeyEvent() + io.AddKeyAnalogEvent() calls. + - BEFORE 1.87, BACKENDS USED TO WRITE DIRECTLY TO io.NavInputs[]. This is going to be obsoleted in the future. Please call io functions instead! - You can download PNG/PSD files depicting the gamepad controls for common controllers at: http://dearimgui.org/controls_sheets - - If you need to share inputs between your game and the imgui parts, the easiest approach is to go all-or-nothing, with a buttons combo - to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved. + - If you need to share inputs between your game and the Dear ImGui interface, the easiest approach is to go all-or-nothing, + with a buttons combo to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved. - Mouse: - - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback. + - PS4/PS5 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback. - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard. - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag. Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements. @@ -382,14 +389,41 @@ CODE You can read releases logs https://github.com/ocornut/imgui/releases for more details. (Docking/Viewport Branch) - - 2021/XX/XX (1.XX) - when multi-viewports are enabled, all positions will be in your natural OS coordinates space. It means that: + - 2022/XX/XX (1.XX) - when multi-viewports are enabled, all positions will be in your natural OS coordinates space. It means that: - reference to hard-coded positions such as in SetNextWindowPos(ImVec2(0,0)) are probably not what you want anymore. you may use GetMainViewport()->Pos to offset hard-coded positions, e.g. SetNextWindowPos(GetMainViewport()->Pos) - likewise io.MousePos and GetMousePos() will use OS coordinates. If you query mouse positions to interact with non-imgui coordinates you will need to offset them, e.g. subtract GetWindowViewport()->Pos. - - 2021/XX/XX (1.XX) - Moved IME support functions from io.ImeSetInputScreenPosFn, io.ImeWindowHandle to the PlatformIO api. - + - 2022/06/15 (1.88) - renamed IMGUI_DISABLE_METRICS_WINDOW to IMGUI_DISABLE_DEBUG_TOOLS for correctness. kept support for old define (will obsolete). + - 2022/05/03 (1.88) - backends: osx: removed ImGui_ImplOSX_HandleEvent() from backend API in favor of backend automatically handling event capture. All ImGui_ImplOSX_HandleEvent() calls should be removed as they are now unnecessary. + - 2022/04/05 (1.88) - inputs: renamed ImGuiKeyModFlags to ImGuiModFlags. Kept inline redirection enums (will obsolete). This was never used in public API functions but technically present in imgui.h and ImGuiIO. + - 2022/01/20 (1.87) - inputs: reworded gamepad IO. + - Backend writing to io.NavInputs[] -> backend should call io.AddKeyEvent()/io.AddKeyAnalogEvent() with ImGuiKey_GamepadXXX values. + - 2022/01/19 (1.87) - sliders, drags: removed support for legacy arithmetic operators (+,+-,*,/) when inputing text. This doesn't break any api/code but a feature that used to be accessible by end-users (which seemingly no one used). + - 2022/01/17 (1.87) - inputs: reworked mouse IO. + - Backend writing to io.MousePos -> backend should call io.AddMousePosEvent() + - Backend writing to io.MouseDown[] -> backend should call io.AddMouseButtonEvent() + - Backend writing to io.MouseWheel -> backend should call io.AddMouseWheelEvent() + - Backend writing to io.MouseHoveredViewport -> backend should call io.AddMouseViewportEvent() [Docking branch w/ multi-viewports only] + note: for all calls to IO new functions, the Dear ImGui context should be bound/current. + read https://github.com/ocornut/imgui/issues/4921 for details. + - 2022/01/10 (1.87) - inputs: reworked keyboard IO. Removed io.KeyMap[], io.KeysDown[] in favor of calling io.AddKeyEvent(). Removed GetKeyIndex(), now unecessary. All IsKeyXXX() functions now take ImGuiKey values. All features are still functional until IMGUI_DISABLE_OBSOLETE_KEYIO is defined. Read Changelog and Release Notes for details. + - IsKeyPressed(MY_NATIVE_KEY_XXX) -> use IsKeyPressed(ImGuiKey_XXX) + - IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -> use IsKeyPressed(ImGuiKey_XXX) + - Backend writing to io.KeyMap[],io.KeysDown[] -> backend should call io.AddKeyEvent() (+ call io.SetKeyEventNativeData() if you want legacy user code to stil function with legacy key codes). + - Backend writing to io.KeyCtrl, io.KeyShift.. -> backend should call io.AddKeyEvent() with ImGuiKey_ModXXX values. *IF YOU PULLED CODE BETWEEN 2021/01/10 and 2021/01/27: We used to have a io.AddKeyModsEvent() function which was now replaced by io.AddKeyEvent() with ImGuiKey_ModXXX values.* + - one case won't work with backward compatibility: if your custom backend used ImGuiKey as mock native indices (e.g. "io.KeyMap[ImGuiKey_A] = ImGuiKey_A") because those values are now larger than the legacy KeyDown[] array. Will assert. + - inputs: added ImGuiKey_ModCtrl/ImGuiKey_ModShift/ImGuiKey_ModAlt/ImGuiKey_ModSuper values to submit keyboard modifiers using io.AddKeyEvent(), instead of writing directly to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper. + - 2022/01/05 (1.87) - inputs: renamed ImGuiKey_KeyPadEnter to ImGuiKey_KeypadEnter to align with new symbols. Kept redirection enum. + - 2022/01/05 (1.87) - removed io.ImeSetInputScreenPosFn() in favor of more flexible io.SetPlatformImeDataFn(). Removed 'void* io.ImeWindowHandle' in favor of writing to 'void* ImGuiViewport::PlatformHandleRaw'. + - 2022/01/01 (1.87) - commented out redirecting functions/enums names that were marked obsolete in 1.69, 1.70, 1.71, 1.72 (March-July 2019) + - ImGui::SetNextTreeNodeOpen() -> use ImGui::SetNextItemOpen() + - ImGui::GetContentRegionAvailWidth() -> use ImGui::GetContentRegionAvail().x + - ImGui::TreeAdvanceToLabelPos() -> use ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetTreeNodeToLabelSpacing()); + - ImFontAtlas::CustomRect -> use ImFontAtlasCustomRect + - ImGuiColorEditFlags_RGB/HSV/HEX -> use ImGuiColorEditFlags_DisplayRGB/HSV/Hex + - 2021/12/20 (1.86) - backends: removed obsolete Marmalade backend (imgui_impl_marmalade.cpp) + example. Find last supported version at https://github.com/ocornut/imgui/wiki/Bindings - 2021/11/04 (1.86) - removed CalcListClipping() function. Prefer using ImGuiListClipper which can return non-contiguous ranges. Please open an issue if you think you really need this function. - 2021/08/23 (1.85) - removed GetWindowContentRegionWidth() function. keep inline redirection helper. can use 'GetWindowContentRegionMax().x - GetWindowContentRegionMin().x' instead for generally 'GetContentRegionAvail().x' is more useful. - 2021/07/26 (1.84) - commented out redirecting functions/enums names that were marked obsolete in 1.67 and 1.69 (March 2019): @@ -920,6 +954,7 @@ static void WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSetti // Platform Dependents default implementation for IO functions static const char* GetClipboardTextFn_DefaultImpl(void* user_data); static void SetClipboardTextFn_DefaultImpl(void* user_data, const char* text); +static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, ImGuiPlatformImeData* data); namespace ImGui { @@ -953,13 +988,16 @@ static void UpdateDebugToolStackQueries(); // Misc static void UpdateSettings(); +static void UpdateKeyboardInputs(); static void UpdateMouseInputs(); static void UpdateMouseWheel(); static bool UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4], const ImRect& visibility_rect); static void RenderWindowOuterBorders(ImGuiWindow* window); static void RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, bool handle_borders_and_resize_grips, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size); static void RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open); -static void EndFrameDrawDimmedBackgrounds(); +static void RenderDimmedBackgroundBehindWindow(ImGuiWindow* window, ImU32 col); +static void RenderDimmedBackgrounds(); +static ImGuiWindow* FindBlockingModal(ImGuiWindow* window); // Viewports const ImGuiID IMGUI_VIEWPORT_DEFAULT_ID = 0x11111111; // Using an arbitrary constant instead of e.g. ImHashStr("ViewportDefault", 0); so it's easier to spot in the debugger. The exact value doesn't matter. @@ -1049,7 +1087,7 @@ ImGuiStyle::ImGuiStyle() ColumnsMinSpacing = 6.0f; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1). ScrollbarSize = 14.0f; // Width of the vertical scrollbar, Height of the horizontal scrollbar ScrollbarRounding = 9.0f; // Radius of grab corners rounding for scrollbar - GrabMinSize = 10.0f; // Minimum width/height of a grab box for slider/scrollbar + GrabMinSize = 12.0f; // Minimum width/height of a grab box for slider/scrollbar GrabRounding = 0.0f; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. LogSliderDeadzone = 4.0f; // The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero. TabRounding = 4.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. @@ -1062,7 +1100,7 @@ ImGuiStyle::ImGuiStyle() DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later. AntiAliasedLines = true; // Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU. - AntiAliasedLinesUseTex = true; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering. + AntiAliasedLinesUseTex = true; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). AntiAliasedFill = true; // Enable anti-aliased filled shapes (rounded rectangles, circles, etc.). CurveTessellationTol = 1.25f; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. CircleTessellationMaxError = 0.30f; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry. @@ -1104,7 +1142,7 @@ ImGuiIO::ImGuiIO() { // Most fields are initialized with zero memset(this, 0, sizeof(*this)); - IM_ASSERT(IM_ARRAYSIZE(ImGuiIO::MouseDown) == ImGuiMouseButton_COUNT && IM_ARRAYSIZE(ImGuiIO::MouseClicked) == ImGuiMouseButton_COUNT); // Our pre-C++11 IM_STATIC_ASSERT() macros triggers warning on modern compilers so we don't use it here. + IM_STATIC_ASSERT(IM_ARRAYSIZE(ImGuiIO::MouseDown) == ImGuiMouseButton_COUNT && IM_ARRAYSIZE(ImGuiIO::MouseClicked) == ImGuiMouseButton_COUNT); // Settings ConfigFlags = ImGuiConfigFlags_None; @@ -1116,8 +1154,10 @@ ImGuiIO::ImGuiIO() LogFilename = "imgui_log.txt"; MouseDoubleClickTime = 0.30f; MouseDoubleClickMaxDist = 6.0f; +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO for (int i = 0; i < ImGuiKey_COUNT; i++) KeyMap[i] = -1; +#endif KeyRepeatDelay = 0.275f; KeyRepeatRate = 0.050f; UserData = NULL; @@ -1147,6 +1187,7 @@ ImGuiIO::ImGuiIO() #else ConfigMacOSXBehaviors = false; #endif + ConfigInputTrickleEventQueue = true; ConfigInputTextCursorBlink = true; ConfigWindowsResizeFromEdges = true; ConfigWindowsMoveFromTitleBarOnly = false; @@ -1158,36 +1199,49 @@ ImGuiIO::ImGuiIO() GetClipboardTextFn = GetClipboardTextFn_DefaultImpl; // Platform dependent default implementations SetClipboardTextFn = SetClipboardTextFn_DefaultImpl; ClipboardUserData = NULL; + SetPlatformImeDataFn = SetPlatformImeDataFn_DefaultImpl; // Input (NB: we already have memset zero the entire structure!) MousePos = ImVec2(-FLT_MAX, -FLT_MAX); MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX); MouseDragThreshold = 6.0f; for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f; - for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) KeysDownDuration[i] = KeysDownDurationPrev[i] = -1.0f; + for (int i = 0; i < IM_ARRAYSIZE(KeysData); i++) { KeysData[i].DownDuration = KeysData[i].DownDurationPrev = -1.0f; } for (int i = 0; i < IM_ARRAYSIZE(NavInputsDownDuration); i++) NavInputsDownDuration[i] = -1.0f; + AppAcceptingEvents = true; + BackendUsingLegacyKeyArrays = (ImS8)-1; + BackendUsingLegacyNavInputArray = true; // assume using legacy array until proven wrong } // Pass in translated ASCII characters for text input. // - with glfw you can get those from the callback set in glfwSetCharCallback() // - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message +// FIXME: Should in theory be called "AddCharacterEvent()" to be consistent with new API void ImGuiIO::AddInputCharacter(unsigned int c) { - if (c != 0) - InputQueueCharacters.push_back(c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID); + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + if (c == 0 || !AppAcceptingEvents) + return; + + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_Text; + e.Source = ImGuiInputSource_Keyboard; + e.Text.Char = c; + g.InputEventsQueue.push_back(e); } // UTF16 strings use surrogate pairs to encode codepoints >= 0x10000, so // we should save the high surrogate. void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c) { - if (c == 0 && InputQueueSurrogate == 0) + if ((c == 0 && InputQueueSurrogate == 0) || !AppAcceptingEvents) return; if ((c & 0xFC00) == 0xD800) // High surrogate, must save { if (InputQueueSurrogate != 0) - InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID); + AddInputCharacter(IM_UNICODE_CODEPOINT_INVALID); InputQueueSurrogate = c; return; } @@ -1197,7 +1251,7 @@ void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c) { if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate { - InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID); + AddInputCharacter(IM_UNICODE_CODEPOINT_INVALID); } else { @@ -1210,17 +1264,19 @@ void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c) InputQueueSurrogate = 0; } - InputQueueCharacters.push_back(cp); + AddInputCharacter((unsigned)cp); } void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars) { + if (!AppAcceptingEvents) + return; while (*utf8_chars != 0) { unsigned int c = 0; utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL); if (c != 0) - InputQueueCharacters.push_back((ImWchar)c); + AddInputCharacter(c); } } @@ -1231,20 +1287,175 @@ void ImGuiIO::ClearInputCharacters() void ImGuiIO::ClearInputKeys() { +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO memset(KeysDown, 0, sizeof(KeysDown)); - for (int n = 0; n < IM_ARRAYSIZE(KeysDownDuration); n++) - KeysDownDuration[n] = KeysDownDurationPrev[n] = -1.0f; +#endif + for (int n = 0; n < IM_ARRAYSIZE(KeysData); n++) + { + KeysData[n].Down = false; + KeysData[n].DownDuration = -1.0f; + KeysData[n].DownDurationPrev = -1.0f; + } KeyCtrl = KeyShift = KeyAlt = KeySuper = false; - KeyMods = KeyModsPrev = ImGuiKeyModFlags_None; + KeyMods = ImGuiModFlags_None; for (int n = 0; n < IM_ARRAYSIZE(NavInputsDownDuration); n++) NavInputsDownDuration[n] = NavInputsDownDurationPrev[n] = -1.0f; } +// Queue a new key down/up event. +// - ImGuiKey key: Translated key (as in, generally ImGuiKey_A matches the key end-user would use to emit an 'A' character) +// - bool down: Is the key down? use false to signify a key release. +// - float analog_value: 0.0f..1.0f +void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value) +{ + //if (e->Down) { IMGUI_DEBUG_LOG_IO("AddKeyEvent() Key='%s' %d, NativeKeycode = %d, NativeScancode = %d\n", ImGui::GetKeyName(e->Key), e->Down, e->NativeKeycode, e->NativeScancode); } + if (key == ImGuiKey_None || !AppAcceptingEvents) + return; + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + IM_ASSERT(ImGui::IsNamedKey(key)); // Backend needs to pass a valid ImGuiKey_ constant. 0..511 values are legacy native key codes which are not accepted by this API. + + // Verify that backend isn't mixing up using new io.AddKeyEvent() api and old io.KeysDown[] + io.KeyMap[] data. +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + IM_ASSERT((BackendUsingLegacyKeyArrays == -1 || BackendUsingLegacyKeyArrays == 0) && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!"); + if (BackendUsingLegacyKeyArrays == -1) + for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++) + IM_ASSERT(KeyMap[n] == -1 && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!"); + BackendUsingLegacyKeyArrays = 0; +#endif + if (ImGui::IsGamepadKey(key)) + BackendUsingLegacyNavInputArray = false; + + // Partial filter of duplicates (not strictly needed, but makes data neater in particular for key mods and gamepad values which are most commonly spmamed) + ImGuiKeyData* key_data = ImGui::GetKeyData(key); + if (key_data->Down == down && key_data->AnalogValue == analog_value) + { + bool found = false; + for (int n = g.InputEventsQueue.Size - 1; n >= 0 && !found; n--) + if (g.InputEventsQueue[n].Type == ImGuiInputEventType_Key && g.InputEventsQueue[n].Key.Key == key) + found = true; + if (!found) + return; + } + + // Add event + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_Key; + e.Source = ImGui::IsGamepadKey(key) ? ImGuiInputSource_Gamepad : ImGuiInputSource_Keyboard; + e.Key.Key = key; + e.Key.Down = down; + e.Key.AnalogValue = analog_value; + g.InputEventsQueue.push_back(e); +} + +void ImGuiIO::AddKeyEvent(ImGuiKey key, bool down) +{ + if (!AppAcceptingEvents) + return; + AddKeyAnalogEvent(key, down, down ? 1.0f : 0.0f); +} + +// [Optional] Call after AddKeyEvent(). +// Specify native keycode, scancode + Specify index for legacy <1.87 IsKeyXXX() functions with native indices. +// If you are writing a backend in 2022 or don't use IsKeyXXX() with native values that are not ImGuiKey values, you can avoid calling this. +void ImGuiIO::SetKeyEventNativeData(ImGuiKey key, int native_keycode, int native_scancode, int native_legacy_index) +{ + if (key == ImGuiKey_None) + return; + IM_ASSERT(ImGui::IsNamedKey(key)); // >= 512 + IM_ASSERT(native_legacy_index == -1 || ImGui::IsLegacyKey(native_legacy_index)); // >= 0 && <= 511 + IM_UNUSED(native_keycode); // Yet unused + IM_UNUSED(native_scancode); // Yet unused + + // Build native->imgui map so old user code can still call key functions with native 0..511 values. +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + const int legacy_key = (native_legacy_index != -1) ? native_legacy_index : native_keycode; + if (!ImGui::IsLegacyKey(legacy_key)) + return; + KeyMap[legacy_key] = key; + KeyMap[key] = legacy_key; +#else + IM_UNUSED(key); + IM_UNUSED(native_legacy_index); +#endif +} + +// Set master flag for accepting key/mouse/text events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen. +void ImGuiIO::SetAppAcceptingEvents(bool accepting_events) +{ + AppAcceptingEvents = accepting_events; +} + +// Queue a mouse move event +void ImGuiIO::AddMousePosEvent(float x, float y) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + if (!AppAcceptingEvents) + return; + + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_MousePos; + e.Source = ImGuiInputSource_Mouse; + e.MousePos.PosX = x; + e.MousePos.PosY = y; + g.InputEventsQueue.push_back(e); +} + +void ImGuiIO::AddMouseButtonEvent(int mouse_button, bool down) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + IM_ASSERT(mouse_button >= 0 && mouse_button < ImGuiMouseButton_COUNT); + if (!AppAcceptingEvents) + return; + + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_MouseButton; + e.Source = ImGuiInputSource_Mouse; + e.MouseButton.Button = mouse_button; + e.MouseButton.Down = down; + g.InputEventsQueue.push_back(e); +} + +// Queue a mouse wheel event (most mouse/API will only have a Y component) +void ImGuiIO::AddMouseWheelEvent(float wheel_x, float wheel_y) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + if ((wheel_x == 0.0f && wheel_y == 0.0f) || !AppAcceptingEvents) + return; + + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_MouseWheel; + e.Source = ImGuiInputSource_Mouse; + e.MouseWheel.WheelX = wheel_x; + e.MouseWheel.WheelY = wheel_y; + g.InputEventsQueue.push_back(e); +} + +void ImGuiIO::AddMouseViewportEvent(ImGuiID viewport_id) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + IM_ASSERT(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseHoveredViewport); + + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_MouseViewport; + e.Source = ImGuiInputSource_Mouse; + e.MouseViewport.HoveredViewportID = viewport_id; + g.InputEventsQueue.push_back(e); +} + void ImGuiIO::AddFocusEvent(bool focused) { - // We intentionally overwrite this and process in NewFrame(), in order to give a chance - // to multi-viewports backends to queue AddFocusEvent(false),AddFocusEvent(true) in same frame. - AppFocusLost = !focused; + ImGuiContext& g = *GImGui; + IM_ASSERT(&g.IO == this && "Can only add events to current context."); + + ImGuiInputEvent e; + e.Type = ImGuiInputEventType_Focus; + e.AppFocused.Focused = focused; + g.InputEventsQueue.push_back(e); } //----------------------------------------------------------------------------- @@ -1500,8 +1711,12 @@ const char* ImStrSkipBlank(const char* str) // designed using two-passes worst case, which probably could be improved using the stbsp_vsprintfcb() function.) #ifdef IMGUI_USE_STB_SPRINTF #define STB_SPRINTF_IMPLEMENTATION +#ifdef IMGUI_STB_SPRINTF_FILENAME +#include IMGUI_STB_SPRINTF_FILENAME +#else #include "stb_sprintf.h" #endif +#endif #if defined(_MSC_VER) && !defined(vsnprintf) #define vsnprintf _vsnprintf @@ -1541,6 +1756,25 @@ int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) } #endif // #ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS +void ImFormatStringToTempBuffer(const char** out_buf, const char** out_buf_end, const char* fmt, ...) +{ + ImGuiContext& g = *GImGui; + va_list args; + va_start(args, fmt); + int buf_len = ImFormatStringV(g.TempBuffer.Data, g.TempBuffer.Size, fmt, args); + *out_buf = g.TempBuffer.Data; + if (out_buf_end) { *out_buf_end = g.TempBuffer.Data + buf_len; } + va_end(args); +} + +void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end, const char* fmt, va_list args) +{ + ImGuiContext& g = *GImGui; + int buf_len = ImFormatStringV(g.TempBuffer.Data, g.TempBuffer.Size, fmt, args); + *out_buf = g.TempBuffer.Data; + if (out_buf_end) { *out_buf_end = g.TempBuffer.Data + buf_len; } +} + // CRC32 needs a 1KB lookup table (not cache friendly) // Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily: // - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe. @@ -1982,7 +2216,7 @@ void ImGuiStorage::BuildSortByKey() { struct StaticFunc { - static int IMGUI_CDECL PairCompareByID(const void* lhs, const void* rhs) + static int IMGUI_CDECL PairComparerByID(const void* lhs, const void* rhs) { // We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that. if (((const ImGuiStoragePair*)lhs)->key > ((const ImGuiStoragePair*)rhs)->key) return +1; @@ -1990,8 +2224,7 @@ void ImGuiStorage::BuildSortByKey() return 0; } }; - if (Data.Size > 1) - ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairCompareByID); + ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairComparerByID); } int ImGuiStorage::GetInt(ImGuiID key, int default_val) const @@ -2103,18 +2336,15 @@ void ImGuiStorage::SetAllInt(int v) //----------------------------------------------------------------------------- // Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" -ImGuiTextFilter::ImGuiTextFilter(const char* default_filter) +ImGuiTextFilter::ImGuiTextFilter(const char* default_filter) //-V1077 { + InputBuf[0] = 0; + CountGrep = 0; if (default_filter) { ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); Build(); } - else - { - InputBuf[0] = 0; - CountGrep = 0; - } } bool ImGuiTextFilter::Draw(const char* label, float width) @@ -2383,8 +2613,9 @@ static void ImGuiListClipper_SeekCursorAndSetupPrevLine(float pos_y, float line_ static void ImGuiListClipper_SeekCursorForItem(ImGuiListClipper* clipper, int item_n) { // StartPosY starts from ItemsFrozen hence the subtraction + // Perform the add and multiply with double to allow seeking through larger ranges ImGuiListClipperData* data = (ImGuiListClipperData*)clipper->TempData; - float pos_y = clipper->StartPosY + (item_n - data->ItemsFrozen) * clipper->ItemsHeight; + float pos_y = (float)((double)clipper->StartPosY + data->LossynessOffset + (double)(item_n - data->ItemsFrozen) * clipper->ItemsHeight); ImGuiListClipper_SeekCursorAndSetupPrevLine(pos_y, clipper->ItemsHeight); } @@ -2422,20 +2653,20 @@ void ImGuiListClipper::Begin(int items_count, float items_height) g.ClipperTempData.resize(g.ClipperTempDataStacked, ImGuiListClipperData()); ImGuiListClipperData* data = &g.ClipperTempData[g.ClipperTempDataStacked - 1]; data->Reset(this); + data->LossynessOffset = window->DC.CursorStartPosLossyness.y; TempData = data; } void ImGuiListClipper::End() { - // In theory here we should assert that we are already at the right position, but it seems saner to just seek at the end and not assert/crash the user. ImGuiContext& g = *GImGui; - if (ItemsCount >= 0 && ItemsCount < INT_MAX && DisplayStart >= 0) - ImGuiListClipper_SeekCursorForItem(this, ItemsCount); - ItemsCount = -1; - - // Restore temporary buffer and fix back pointers which may be invalidated when nesting if (ImGuiListClipperData* data = (ImGuiListClipperData*)TempData) { + // In theory here we should assert that we are already at the right position, but it seems saner to just seek at the end and not assert/crash the user. + if (ItemsCount >= 0 && ItemsCount < INT_MAX && DisplayStart >= 0) + ImGuiListClipper_SeekCursorForItem(this, ItemsCount); + + // Restore temporary buffer and fix back pointers which may be invalidated when nesting IM_ASSERT(data->ListClipper == this); data->StepNo = data->Ranges.Size; if (--g.ClipperTempDataStacked > 0) @@ -2445,6 +2676,7 @@ void ImGuiListClipper::End() } TempData = NULL; } + ItemsCount = -1; } void ImGuiListClipper::ForceDisplayRangeByIndices(int item_min, int item_max) @@ -2461,6 +2693,7 @@ bool ImGuiListClipper::Step() ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; ImGuiListClipperData* data = (ImGuiListClipperData*)TempData; + IM_ASSERT(data != NULL && "Called ImGuiListClipper::Step() too many times, or before ImGuiListClipper::Begin() ?"); ImGuiTable* table = g.CurrentTable; if (table && table->IsInsideRow) @@ -2468,10 +2701,7 @@ bool ImGuiListClipper::Step() // No items if (ItemsCount == 0 || GetSkipItemForListClipping()) - { - End(); - return false; - } + return (void)End(), false; // While we are in frozen row state, keep displaying items one by one, unclipped // FIXME: Could be stored as a table-agnostic state. @@ -2479,6 +2709,8 @@ bool ImGuiListClipper::Step() { DisplayStart = data->ItemsFrozen; DisplayEnd = data->ItemsFrozen + 1; + if (DisplayStart >= ItemsCount) + return (void)End(), false; data->ItemsFrozen++; return true; } @@ -2494,6 +2726,8 @@ bool ImGuiListClipper::Step() data->Ranges.push_front(ImGuiListClipperRange::FromIndices(data->ItemsFrozen, data->ItemsFrozen + 1)); DisplayStart = ImMax(data->Ranges[0].Min, data->ItemsFrozen); DisplayEnd = ImMin(data->Ranges[0].Max, ItemsCount); + if (DisplayStart == DisplayEnd) + return (void)End(), false; data->StepNo = 1; return true; } @@ -2505,16 +2739,13 @@ bool ImGuiListClipper::Step() { IM_ASSERT(data->StepNo == 1); if (table) - { - const float pos_y1 = table->RowPosY1; // Using RowPosY1 instead of StartPosY to handle clipper straddling the frozen row - const float pos_y2 = table->RowPosY2; // Using RowPosY2 instead of CursorPos.y to take account of tallest cell. - ItemsHeight = pos_y2 - pos_y1; - window->DC.CursorPos.y = pos_y2; - } - else - { - ItemsHeight = (window->DC.CursorPos.y - StartPosY) / (float)(DisplayEnd - DisplayStart); - } + IM_ASSERT(table->RowPosY1 == StartPosY && table->RowPosY2 == window->DC.CursorPos.y); + + ItemsHeight = (window->DC.CursorPos.y - StartPosY) / (float)(DisplayEnd - DisplayStart); + bool affected_by_floating_point_precision = ImIsFloatAboveGuaranteedIntegerPrecision(StartPosY) || ImIsFloatAboveGuaranteedIntegerPrecision(window->DC.CursorPos.y); + if (affected_by_floating_point_precision) + ItemsHeight = window->DC.PrevLineSize.y + g.Style.ItemSpacing.y; // FIXME: Technically wouldn't allow multi-line entries. + IM_ASSERT(ItemsHeight > 0.0f && "Unable to calculate item height! First item hasn't moved the cursor vertically!"); calc_clipping = true; // If item height had to be calculated, calculate clipping afterwards. } @@ -2555,8 +2786,10 @@ bool ImGuiListClipper::Step() for (int i = 0; i < data->Ranges.Size; i++) if (data->Ranges[i].PosToIndexConvert) { - data->Ranges[i].Min = ImClamp(already_submitted + (int)ImFloor((data->Ranges[i].Min - window->DC.CursorPos.y) / ItemsHeight) + data->Ranges[i].PosToIndexOffsetMin, already_submitted, ItemsCount - 1); - data->Ranges[i].Max = ImClamp(already_submitted + (int)ImCeil((data->Ranges[i].Max - window->DC.CursorPos.y) / ItemsHeight) + 0 + data->Ranges[i].PosToIndexOffsetMax, data->Ranges[i].Min + 1, ItemsCount); + int m1 = (int)(((double)data->Ranges[i].Min - window->DC.CursorPos.y - data->LossynessOffset) / ItemsHeight); + int m2 = (int)((((double)data->Ranges[i].Max - window->DC.CursorPos.y - data->LossynessOffset) / ItemsHeight) + 0.999999f); + data->Ranges[i].Min = ImClamp(already_submitted + m1 + data->Ranges[i].PosToIndexOffsetMin, already_submitted, ItemsCount - 1); + data->Ranges[i].Max = ImClamp(already_submitted + m2 + data->Ranges[i].PosToIndexOffsetMax, data->Ranges[i].Min + 1, ItemsCount); data->Ranges[i].PosToIndexConvert = false; } ImGuiListClipper_SortAndFuseRanges(data->Ranges, data->StepNo); @@ -2577,8 +2810,8 @@ bool ImGuiListClipper::Step() // Advance the cursor to the end of the list and then returns 'false' to end the loop. if (ItemsCount < INT_MAX) ImGuiListClipper_SeekCursorForItem(this, ItemsCount); - ItemsCount = -1; + End(); return false; } @@ -3062,6 +3295,34 @@ void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFl } } +void ImGui::RenderMouseCursor(ImVec2 base_pos, float base_scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT); + ImFontAtlas* font_atlas = g.DrawListSharedData.Font->ContainerAtlas; + for (int n = 0; n < g.Viewports.Size; n++) + { + // We scale cursor with current viewport/monitor, however Windows 10 for its own hardware cursor seems to be using a different scale factor. + ImVec2 offset, size, uv[4]; + if (!font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2])) + continue; + ImGuiViewportP* viewport = g.Viewports[n]; + const ImVec2 pos = base_pos - offset; + const float scale = base_scale * viewport->DpiScale; + if (!viewport->GetMainRect().Overlaps(ImRect(pos, pos + ImVec2(size.x + 2, size.y + 2) * scale))) + continue; + ImDrawList* draw_list = GetForegroundDrawList(viewport); + ImTextureID tex_id = font_atlas->TexID; + draw_list->PushTextureID(tex_id); + draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale, uv[2], uv[3], col_shadow); + draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale, uv[2], uv[3], col_shadow); + draw_list->AddImage(tex_id, pos, pos + size * scale, uv[2], uv[3], col_border); + draw_list->AddImage(tex_id, pos, pos + size * scale, uv[0], uv[1], col_fill); + draw_list->PopTextureID(); + } +} + + //----------------------------------------------------------------------------- // [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!) //----------------------------------------------------------------------------- @@ -3077,6 +3338,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name) : DrawListInst ViewportAllowPlatformMonitorExtend = -1; ViewportPos = ImVec2(FLT_MAX, FLT_MAX); MoveId = GetID("#MOVE"); + TabId = GetID("#TAB"); ScrollTarget = ImVec2(FLT_MAX, FLT_MAX); ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f); AutoFitFramesX = AutoFitFramesY = -1; @@ -3092,6 +3354,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name) : DrawListInst DrawList = &DrawListInst; DrawList->_Data = &context->DrawListSharedData; DrawList->_OwnerName = Name; + IM_PLACEMENT_NEW(&WindowClass) ImGuiWindowClass(); } ImGuiWindow::~ImGuiWindow() @@ -3105,7 +3368,6 @@ ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end) { ImGuiID seed = IDStack.back(); ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed); - ImGui::KeepAliveID(id); ImGuiContext& g = *GImGui; if (g.DebugHookIdInfo == id) ImGui::DebugHookIdInfo(id, ImGuiDataType_String, str, str_end); @@ -3116,7 +3378,6 @@ ImGuiID ImGuiWindow::GetID(const void* ptr) { ImGuiID seed = IDStack.back(); ImGuiID id = ImHashData(&ptr, sizeof(void*), seed); - ImGui::KeepAliveID(id); ImGuiContext& g = *GImGui; if (g.DebugHookIdInfo == id) ImGui::DebugHookIdInfo(id, ImGuiDataType_Pointer, ptr, NULL); @@ -3124,37 +3385,6 @@ ImGuiID ImGuiWindow::GetID(const void* ptr) } ImGuiID ImGuiWindow::GetID(int n) -{ - ImGuiID seed = IDStack.back(); - ImGuiID id = ImHashData(&n, sizeof(n), seed); - ImGui::KeepAliveID(id); - ImGuiContext& g = *GImGui; - if (g.DebugHookIdInfo == id) - ImGui::DebugHookIdInfo(id, ImGuiDataType_S32, (void*)(intptr_t)n, NULL); - return id; -} - -ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end) -{ - ImGuiID seed = IDStack.back(); - ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed); - ImGuiContext& g = *GImGui; - if (g.DebugHookIdInfo == id) - ImGui::DebugHookIdInfo(id, ImGuiDataType_String, str, str_end); - return id; -} - -ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr) -{ - ImGuiID seed = IDStack.back(); - ImGuiID id = ImHashData(&ptr, sizeof(void*), seed); - ImGuiContext& g = *GImGui; - if (g.DebugHookIdInfo == id) - ImGui::DebugHookIdInfo(id, ImGuiDataType_Pointer, ptr, NULL); - return id; -} - -ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n) { ImGuiID seed = IDStack.back(); ImGuiID id = ImHashData(&n, sizeof(n), seed); @@ -3168,9 +3398,8 @@ ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n) ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs) { ImGuiID seed = IDStack.back(); - const int r_rel[4] = { (int)(r_abs.Min.x - Pos.x), (int)(r_abs.Min.y - Pos.y), (int)(r_abs.Max.x - Pos.x), (int)(r_abs.Max.y - Pos.y) }; + ImRect r_rel = ImGui::WindowRectAbsToRel(this, r_abs); ImGuiID id = ImHashData(&r_rel, sizeof(r_rel), seed); - ImGui::KeepAliveID(id); return id; } @@ -3220,9 +3449,21 @@ void ImGui::GcAwakeTransientWindowBuffers(ImGuiWindow* window) void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window) { ImGuiContext& g = *GImGui; + + // While most behaved code would make an effort to not steal active id during window move/drag operations, + // we at least need to be resilient to it. Cancelling the move is rather aggressive and users of 'master' branch + // may prefer the weird ill-defined half working situation ('docking' did assert), so may need to rework that. + if (g.MovingWindow != NULL && g.ActiveId == g.MovingWindow->MoveId) + { + IMGUI_DEBUG_LOG_ACTIVEID("SetActiveID() cancel MovingWindow\n"); + g.MovingWindow = NULL; + } + + // Set active id g.ActiveIdIsJustActivated = (g.ActiveId != id); if (g.ActiveIdIsJustActivated) { + IMGUI_DEBUG_LOG_ACTIVEID("SetActiveID() old:0x%08X (window \"%s\") -> new:0x%08X (window \"%s\")\n", g.ActiveId, g.ActiveIdWindow ? g.ActiveIdWindow->Name : "", id, window ? window->Name : ""); g.ActiveIdTimer = 0.0f; g.ActiveIdHasBeenPressedBefore = false; g.ActiveIdHasBeenEditedBefore = false; @@ -3241,7 +3482,7 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window) if (id) { g.ActiveIdIsAlive = id; - g.ActiveIdSource = (g.NavActivateId == id || g.NavActivateInputId == id || g.NavJustMovedToId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse; + g.ActiveIdSource = (g.NavActivateId == id || g.NavActivateInputId == id || g.NavJustMovedToId == id) ? (ImGuiInputSource)ImGuiInputSource_Nav : ImGuiInputSource_Mouse; } // Clear declaration of inputs claimed by the widget @@ -3249,7 +3490,7 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window) g.ActiveIdUsingMouseWheel = false; g.ActiveIdUsingNavDirMask = 0x00; g.ActiveIdUsingNavInputMask = 0x00; - g.ActiveIdUsingKeyInputMask = 0x00; + g.ActiveIdUsingKeyInputMask.ClearAllBits(); } void ImGui::ClearActiveID() @@ -3273,6 +3514,8 @@ ImGuiID ImGui::GetHoveredID() return g.HoveredId ? g.HoveredId : g.HoveredIdPreviousFrame; } +// This is called by ItemAdd(). +// Code not using ItemAdd() may need to call this manually otherwise ActiveId will be cleared. In IMGUI_VERSION_NUM < 18717 this was called by GetID(). void ImGui::KeepAliveID(ImGuiID id) { ImGuiContext& g = *GImGui; @@ -3327,46 +3570,52 @@ bool ImGui::IsItemHovered(ImGuiHoveredFlags flags) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; - if (g.NavDisableMouseHover && !g.NavDisableHighlight) + if (g.NavDisableMouseHover && !g.NavDisableHighlight && !(flags & ImGuiHoveredFlags_NoNavOverride)) { if ((g.LastItemData.InFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled)) return false; - return IsItemFocused(); + if (!IsItemFocused()) + return false; } - - // Test for bounding box overlap, as updated as ItemAdd() - ImGuiItemStatusFlags status_flags = g.LastItemData.StatusFlags; - if (!(status_flags & ImGuiItemStatusFlags_HoveredRect)) - return false; - IM_ASSERT((flags & (ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_NoPopupHierarchy | ImGuiHoveredFlags_DockHierarchy)) == 0); // Flags not supported by this function - - // Test if we are hovering the right window (our window could be behind another window) - // [2021/03/02] Reworked / reverted the revert, finally. Note we want e.g. BeginGroup/ItemAdd/EndGroup to work as well. (#3851) - // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable - // to use IsItemHovered() after EndChild() itself. Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was - // the test that has been running for a long while. - if (g.HoveredWindow != window && (status_flags & ImGuiItemStatusFlags_HoveredWindow) == 0) - if ((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0) + else + { + // Test for bounding box overlap, as updated as ItemAdd() + ImGuiItemStatusFlags status_flags = g.LastItemData.StatusFlags; + if (!(status_flags & ImGuiItemStatusFlags_HoveredRect)) return false; + IM_ASSERT((flags & (ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_NoPopupHierarchy | ImGuiHoveredFlags_DockHierarchy)) == 0); // Flags not supported by this function + + // Test if we are hovering the right window (our window could be behind another window) + // [2021/03/02] Reworked / reverted the revert, finally. Note we want e.g. BeginGroup/ItemAdd/EndGroup to work as well. (#3851) + // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable + // to use IsItemHovered() after EndChild() itself. Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was + // the test that has been running for a long while. + if (g.HoveredWindow != window && (status_flags & ImGuiItemStatusFlags_HoveredWindow) == 0) + if ((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0) + return false; - // Test if another item is active (e.g. being dragged) - if ((flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) == 0) - if (g.ActiveId != 0 && g.ActiveId != g.LastItemData.ID && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId) + // Test if another item is active (e.g. being dragged) + if ((flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) == 0) + if (g.ActiveId != 0 && g.ActiveId != g.LastItemData.ID && !g.ActiveIdAllowOverlap) + if (g.ActiveId != window->MoveId && g.ActiveId != window->TabId) + return false; + + // Test if interactions on this window are blocked by an active popup or modal. + // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here. + if (!IsWindowContentHoverable(window, flags)) return false; - // Test if interactions on this window are blocked by an active popup or modal. - // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here. - if (!IsWindowContentHoverable(window, flags)) - return false; + // Test if the item is disabled + if ((g.LastItemData.InFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled)) + return false; - // Test if the item is disabled - if ((g.LastItemData.InFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled)) - return false; + // Special handling for calling after Begin() which represent the title bar or tab. + // When the window is skipped/collapsed (SkipItems==true) that last item (always ->MoveId submitted by Begin) + // will never be overwritten so we need to detect the case. + if (g.LastItemData.ID == window->MoveId && window->WriteAccessed) + return false; + } - // Special handling for calling after Begin() which represent the title bar or tab. - // When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect the case. - if ((g.LastItemData.ID == window->ID || g.LastItemData.ID == window->MoveId) && window->WriteAccessed) - return false; return true; } @@ -3384,8 +3633,6 @@ bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id) return false; if (!IsMouseHoveringRect(bb.Min, bb.Max)) return false; - if (g.NavDisableMouseHover) - return false; if (!IsWindowContentHoverable(window, ImGuiHoveredFlags_None)) { g.HoveredIdDisabled = true; @@ -3421,6 +3668,9 @@ bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id) IM_DEBUG_BREAK(); } + if (g.NavDisableMouseHover) + return false; + return true; } @@ -3538,20 +3788,23 @@ void ImGui::GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeF ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas) { + ImGuiContext* prev_ctx = GetCurrentContext(); ImGuiContext* ctx = IM_NEW(ImGuiContext)(shared_font_atlas); - if (GImGui == NULL) - SetCurrentContext(ctx); - Initialize(ctx); + SetCurrentContext(ctx); + Initialize(); + if (prev_ctx != NULL) + SetCurrentContext(prev_ctx); // Restore previous context if any, else keep new one. return ctx; } void ImGui::DestroyContext(ImGuiContext* ctx) { - if (ctx == NULL) - ctx = GImGui; - Shutdown(ctx); - if (GImGui == ctx) - SetCurrentContext(NULL); + ImGuiContext* prev_ctx = GetCurrentContext(); + if (ctx == NULL) //-V1051 + ctx = prev_ctx; + SetCurrentContext(ctx); + Shutdown(); + SetCurrentContext((prev_ctx != ctx) ? prev_ctx : NULL); IM_DELETE(ctx); } @@ -3732,13 +3985,12 @@ void ImGui::UpdateMouseMovingWindowNewFrame() ImGuiWindow* moving_window = g.MovingWindow->RootWindowDockTree; // When a window stop being submitted while being dragged, it may will its viewport until next Begin() - const bool window_disappared = (!moving_window->WasActive || moving_window->Viewport == NULL); + const bool window_disappared = ((!moving_window->WasActive && !moving_window->Active) || moving_window->Viewport == NULL); if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos) && !window_disappared) { ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset; if (moving_window->Pos.x != pos.x || moving_window->Pos.y != pos.y) { - MarkIniSettingsDirty(moving_window); SetWindowPos(moving_window, pos, ImGuiCond_Always); if (moving_window->ViewportOwned) // Synchronize viewport immediately because some overlays may relies on clipping rectangle before we Begin() into the window. { @@ -3836,6 +4088,8 @@ void ImGui::UpdateMouseMovingWindowEndFrame() } } +// This is called during NewFrame()->UpdateViewportsNewFrame() only. +// Need to keep in sync with SetWindowPos() static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta) { window->Pos += delta; @@ -3845,6 +4099,7 @@ static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta) window->DC.CursorPos += delta; window->DC.CursorStartPos += delta; window->DC.CursorMaxPos += delta; + window->DC.IdealMaxPos += delta; } static void ScaleWindow(ImGuiWindow* window, float scale) @@ -3861,65 +4116,134 @@ static bool IsWindowActiveAndVisible(ImGuiWindow* window) return (window->Active) && (!window->Hidden); } +static void ImGui::UpdateKeyboardInputs() +{ + ImGuiContext& g = *GImGui; + ImGuiIO& io = g.IO; + + // Import legacy keys or verify they are not used +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + if (io.BackendUsingLegacyKeyArrays == 0) + { + // Backend used new io.AddKeyEvent() API: Good! Verify that old arrays are never written to externally. + for (int n = 0; n < ImGuiKey_LegacyNativeKey_END; n++) + IM_ASSERT((io.KeysDown[n] == false || IsKeyDown(n)) && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!"); + } + else + { + if (g.FrameCount == 0) + for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) + IM_ASSERT(g.IO.KeyMap[n] == -1 && "Backend is not allowed to write to io.KeyMap[0..511]!"); + + // Build reverse KeyMap (Named -> Legacy) + for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++) + if (io.KeyMap[n] != -1) + { + IM_ASSERT(IsLegacyKey((ImGuiKey)io.KeyMap[n])); + io.KeyMap[io.KeyMap[n]] = n; + } + + // Import legacy keys into new ones + for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) + if (io.KeysDown[n] || io.BackendUsingLegacyKeyArrays == 1) + { + const ImGuiKey key = (ImGuiKey)(io.KeyMap[n] != -1 ? io.KeyMap[n] : n); + IM_ASSERT(io.KeyMap[n] == -1 || IsNamedKey(key)); + io.KeysData[key].Down = io.KeysDown[n]; + if (key != n) + io.KeysDown[key] = io.KeysDown[n]; // Allow legacy code using io.KeysDown[GetKeyIndex()] with old backends + io.BackendUsingLegacyKeyArrays = 1; + } + if (io.BackendUsingLegacyKeyArrays == 1) + { + io.KeysData[ImGuiKey_ModCtrl].Down = io.KeyCtrl; + io.KeysData[ImGuiKey_ModShift].Down = io.KeyShift; + io.KeysData[ImGuiKey_ModAlt].Down = io.KeyAlt; + io.KeysData[ImGuiKey_ModSuper].Down = io.KeySuper; + } + } +#endif + + // Synchronize io.KeyMods with individual modifiers io.KeyXXX bools + io.KeyMods = GetMergedModFlags(); + + // Clear gamepad data if disabled + if ((io.BackendFlags & ImGuiBackendFlags_HasGamepad) == 0) + for (int i = ImGuiKey_Gamepad_BEGIN; i < ImGuiKey_Gamepad_END; i++) + { + io.KeysData[i - ImGuiKey_KeysData_OFFSET].Down = false; + io.KeysData[i - ImGuiKey_KeysData_OFFSET].AnalogValue = 0.0f; + } + + // Update keys + for (int i = 0; i < IM_ARRAYSIZE(io.KeysData); i++) + { + ImGuiKeyData* key_data = &io.KeysData[i]; + key_data->DownDurationPrev = key_data->DownDuration; + key_data->DownDuration = key_data->Down ? (key_data->DownDuration < 0.0f ? 0.0f : key_data->DownDuration + io.DeltaTime) : -1.0f; + } +} + static void ImGui::UpdateMouseInputs() { ImGuiContext& g = *GImGui; + ImGuiIO& io = g.IO; // Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well) - if (IsMousePosValid(&g.IO.MousePos)) - g.IO.MousePos = g.MouseLastValidPos = ImFloor(g.IO.MousePos); + if (IsMousePosValid(&io.MousePos)) + io.MousePos = g.MouseLastValidPos = ImFloorSigned(io.MousePos); // If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta - if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev)) - g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev; + if (IsMousePosValid(&io.MousePos) && IsMousePosValid(&io.MousePosPrev)) + io.MouseDelta = io.MousePos - io.MousePosPrev; else - g.IO.MouseDelta = ImVec2(0.0f, 0.0f); + io.MouseDelta = ImVec2(0.0f, 0.0f); // If mouse moved we re-enable mouse hovering in case it was disabled by gamepad/keyboard. In theory should use a >0.0f threshold but would need to reset in everywhere we set this to true. - if (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f) + if (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f) g.NavDisableMouseHover = false; - g.IO.MousePosPrev = g.IO.MousePos; - for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) + io.MousePosPrev = io.MousePos; + for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) { - g.IO.MouseClicked[i] = g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] < 0.0f; - g.IO.MouseClickedCount[i] = 0; // Will be filled below - g.IO.MouseReleased[i] = !g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] >= 0.0f; - g.IO.MouseDownDurationPrev[i] = g.IO.MouseDownDuration[i]; - g.IO.MouseDownDuration[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownDuration[i] < 0.0f ? 0.0f : g.IO.MouseDownDuration[i] + g.IO.DeltaTime) : -1.0f; - if (g.IO.MouseClicked[i]) + io.MouseClicked[i] = io.MouseDown[i] && io.MouseDownDuration[i] < 0.0f; + io.MouseClickedCount[i] = 0; // Will be filled below + io.MouseReleased[i] = !io.MouseDown[i] && io.MouseDownDuration[i] >= 0.0f; + io.MouseDownDurationPrev[i] = io.MouseDownDuration[i]; + io.MouseDownDuration[i] = io.MouseDown[i] ? (io.MouseDownDuration[i] < 0.0f ? 0.0f : io.MouseDownDuration[i] + io.DeltaTime) : -1.0f; + if (io.MouseClicked[i]) { bool is_repeated_click = false; - if ((float)(g.Time - g.IO.MouseClickedTime[i]) < g.IO.MouseDoubleClickTime) + if ((float)(g.Time - io.MouseClickedTime[i]) < io.MouseDoubleClickTime) { - ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); - if (ImLengthSqr(delta_from_click_pos) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist) + ImVec2 delta_from_click_pos = IsMousePosValid(&io.MousePos) ? (io.MousePos - io.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); + if (ImLengthSqr(delta_from_click_pos) < io.MouseDoubleClickMaxDist * io.MouseDoubleClickMaxDist) is_repeated_click = true; } if (is_repeated_click) - g.IO.MouseClickedLastCount[i]++; + io.MouseClickedLastCount[i]++; else - g.IO.MouseClickedLastCount[i] = 1; - g.IO.MouseClickedTime[i] = g.Time; - g.IO.MouseClickedPos[i] = g.IO.MousePos; - g.IO.MouseClickedCount[i] = g.IO.MouseClickedLastCount[i]; - g.IO.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f); - g.IO.MouseDragMaxDistanceSqr[i] = 0.0f; + io.MouseClickedLastCount[i] = 1; + io.MouseClickedTime[i] = g.Time; + io.MouseClickedPos[i] = io.MousePos; + io.MouseClickedCount[i] = io.MouseClickedLastCount[i]; + io.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f); + io.MouseDragMaxDistanceSqr[i] = 0.0f; } - else if (g.IO.MouseDown[i]) + else if (io.MouseDown[i]) { // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold - ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); - g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(delta_from_click_pos)); - g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x); - g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y); + ImVec2 delta_from_click_pos = IsMousePosValid(&io.MousePos) ? (io.MousePos - io.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); + io.MouseDragMaxDistanceSqr[i] = ImMax(io.MouseDragMaxDistanceSqr[i], ImLengthSqr(delta_from_click_pos)); + io.MouseDragMaxDistanceAbs[i].x = ImMax(io.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x); + io.MouseDragMaxDistanceAbs[i].y = ImMax(io.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y); } // We provide io.MouseDoubleClicked[] as a legacy service - g.IO.MouseDoubleClicked[i] = (g.IO.MouseClickedCount[i] == 2); + io.MouseDoubleClicked[i] = (io.MouseClickedCount[i] == 2); // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation - if (g.IO.MouseClicked[i]) + if (io.MouseClicked[i]) g.NavDisableMouseHover = false; } } @@ -3951,7 +4275,9 @@ void ImGui::UpdateMouseWheel() } } - if (g.IO.MouseWheel == 0.0f && g.IO.MouseWheelH == 0.0f) + float wheel_x = g.IO.MouseWheelH; + float wheel_y = g.IO.MouseWheel; + if (wheel_x == 0.0f && wheel_y == 0.0f) return; if ((g.ActiveId != 0 && g.ActiveIdUsingMouseWheel) || (g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrameUsingMouseWheel)) @@ -3963,7 +4289,7 @@ void ImGui::UpdateMouseWheel() // Zoom / Scale window // FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned. - if (g.IO.MouseWheel != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling) + if (wheel_y != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling) { StartLockWheelingWindow(window); const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f); @@ -3987,8 +4313,11 @@ void ImGui::UpdateMouseWheel() // As a standard behavior holding SHIFT while using Vertical Mouse Wheel triggers Horizontal scroll instead // (we avoid doing it on OSX as it the OS input layer handles this already) const bool swap_axis = g.IO.KeyShift && !g.IO.ConfigMacOSXBehaviors; - const float wheel_y = swap_axis ? 0.0f : g.IO.MouseWheel; - const float wheel_x = swap_axis ? g.IO.MouseWheel : g.IO.MouseWheelH; + if (swap_axis) + { + wheel_x = wheel_y; + wheel_y = 0.0f; + } // Vertical Mouse Wheel scrolling if (wheel_y != 0.0f) @@ -4036,7 +4365,7 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags() // Modal windows prevents mouse from hovering behind them. ImGuiWindow* modal_window = GetTopMostPopupModal(); - if (modal_window && g.HoveredWindow && !IsWindowChildOf(g.HoveredWindow->RootWindowDockTree, modal_window, true, true)) + if (modal_window && g.HoveredWindow && !IsWindowWithinBeginStackOf(g.HoveredWindow->RootWindow, modal_window)) // FIXME-MERGE: RootWindowDockTree ? clear_hovered_windows = true; // Disabled mouse? @@ -4097,15 +4426,16 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags() io.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false; } -ImGuiKeyModFlags ImGui::GetMergedKeyModFlags() +// [Internal] Do not use directly (can read io.KeyMods instead) +ImGuiModFlags ImGui::GetMergedModFlags() { ImGuiContext& g = *GImGui; - ImGuiKeyModFlags key_mod_flags = ImGuiKeyModFlags_None; - if (g.IO.KeyCtrl) { key_mod_flags |= ImGuiKeyModFlags_Ctrl; } - if (g.IO.KeyShift) { key_mod_flags |= ImGuiKeyModFlags_Shift; } - if (g.IO.KeyAlt) { key_mod_flags |= ImGuiKeyModFlags_Alt; } - if (g.IO.KeySuper) { key_mod_flags |= ImGuiKeyModFlags_Super; } - return key_mod_flags; + ImGuiModFlags key_mods = ImGuiModFlags_None; + if (g.IO.KeyCtrl) { key_mods |= ImGuiModFlags_Ctrl; } + if (g.IO.KeyShift) { key_mods |= ImGuiModFlags_Shift; } + if (g.IO.KeyAlt) { key_mods |= ImGuiModFlags_Alt; } + if (g.IO.KeySuper) { key_mods |= ImGuiModFlags_Super; } + return key_mods; } void ImGui::NewFrame() @@ -4194,9 +4524,16 @@ void ImGui::NewFrame() g.HoveredIdUsingMouseWheel = false; g.HoveredIdDisabled = false; - // Update ActiveId data (clear reference to active widget if the widget isn't alive anymore) - if (g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0) + // Clear ActiveID if the item is not alive anymore. + // In 1.87, the common most call to KeepAliveID() was moved from GetID() to ItemAdd(). + // As a result, custom widget using ButtonBehavior() _without_ ItemAdd() need to call KeepAliveID() themselves. + if (g.ActiveId != 0 && g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId) + { + IMGUI_DEBUG_LOG_ACTIVEID("NewFrame(): ClearActiveID() because it isn't marked alive anymore!\n"); ClearActiveID(); + } + + // Update ActiveId data (clear reference to active widget if the widget isn't alive anymore) if (g.ActiveId) g.ActiveIdTimer += g.IO.DeltaTime; g.LastActiveIdTimer += g.IO.DeltaTime; @@ -4213,7 +4550,7 @@ void ImGui::NewFrame() { g.ActiveIdUsingNavDirMask = 0x00; g.ActiveIdUsingNavInputMask = 0x00; - g.ActiveIdUsingKeyInputMask = 0x00; + g.ActiveIdUsingKeyInputMask.ClearAllBits(); } // Drag and drop @@ -4228,20 +4565,17 @@ void ImGui::NewFrame() //if (g.IO.AppFocusLost) // ClosePopupsExceptModals(); - // Clear buttons state when focus is lost - // (this is useful so e.g. releasing Alt after focus loss on Alt-Tab doesn't trigger the Alt menu toggle) - if (g.IO.AppFocusLost) - { - g.IO.ClearInputKeys(); - g.IO.AppFocusLost = false; - } + // Process input queue (trickle as many events as possible) + g.InputEventsTrail.resize(0); + UpdateInputEvents(g.IO.ConfigInputTrickleEventQueue); // Update keyboard input state - // Synchronize io.KeyMods with individual modifiers io.KeyXXX bools - g.IO.KeyMods = GetMergedKeyModFlags(); - memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration)); - for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++) - g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f; + UpdateKeyboardInputs(); + + //IM_ASSERT(g.IO.KeyCtrl == IsKeyDown(ImGuiKey_LeftCtrl) || IsKeyDown(ImGuiKey_RightCtrl)); + //IM_ASSERT(g.IO.KeyShift == IsKeyDown(ImGuiKey_LeftShift) || IsKeyDown(ImGuiKey_RightShift)); + //IM_ASSERT(g.IO.KeyAlt == IsKeyDown(ImGuiKey_LeftAlt) || IsKeyDown(ImGuiKey_RightAlt)); + //IM_ASSERT(g.IO.KeySuper == IsKeyDown(ImGuiKey_LeftSuper) || IsKeyDown(ImGuiKey_RightSuper)); // Update gamepad/keyboard navigation NavUpdate(); @@ -4268,8 +4602,10 @@ void ImGui::NewFrame() g.MouseCursor = ImGuiMouseCursor_Arrow; g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1; - g.PlatformImePos = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default - g.PlatformImePosViewport = NULL; + + // Platform IME data: reset for the frame + g.PlatformImeDataPrev = g.PlatformImeData; + g.PlatformImeData.WantVisible = false; // Mouse wheel scrolling, scale UpdateMouseWheel(); @@ -4331,9 +4667,9 @@ void ImGui::NewFrame() CallContextHooks(&g, ImGuiContextHookType_NewFramePost); } -void ImGui::Initialize(ImGuiContext* context) +void ImGui::Initialize() { - ImGuiContext& g = *context; + ImGuiContext& g = *GImGui; IM_ASSERT(!g.Initialized && !g.SettingsLoaded); // Add .ini handle for ImGuiWindow type @@ -4346,11 +4682,11 @@ void ImGui::Initialize(ImGuiContext* context) ini_handler.ReadLineFn = WindowSettingsHandler_ReadLine; ini_handler.ApplyAllFn = WindowSettingsHandler_ApplyAll; ini_handler.WriteAllFn = WindowSettingsHandler_WriteAll; - g.SettingsHandlers.push_back(ini_handler); + AddSettingsHandler(&ini_handler); } // Add .ini handle for ImGuiTable type - TableSettingsInstallHandler(context); + TableSettingsAddSettingsHandler(); // Create default viewport ImGuiViewportP* viewport = IM_NEW(ImGuiViewportP)(); @@ -4359,6 +4695,7 @@ void ImGui::Initialize(ImGuiContext* context) viewport->PlatformWindowCreated = true; viewport->Flags = ImGuiViewportFlags_OwnedByApp; g.Viewports.push_back(viewport); + g.TempBuffer.resize(1024 * 3 + 1, 0); g.PlatformIO.Viewports.push_back(g.Viewports[0]); #ifdef IMGUI_HAS_DOCK @@ -4370,10 +4707,10 @@ void ImGui::Initialize(ImGuiContext* context) } // This function is merely here to free heap allocations. -void ImGui::Shutdown(ImGuiContext* context) +void ImGui::Shutdown() { // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame) - ImGuiContext& g = *context; + ImGuiContext& g = *GImGui; if (g.IO.Fonts && g.FontAtlasOwnedByContext) { g.IO.Fonts->Locked = false; @@ -4387,18 +4724,10 @@ void ImGui::Shutdown(ImGuiContext* context) // Save settings (unless we haven't attempted to load them: CreateContext/DestroyContext without a call to NewFrame shouldn't save an empty file) if (g.SettingsLoaded && g.IO.IniFilename != NULL) - { - ImGuiContext* backup_context = GImGui; - SetCurrentContext(&g); SaveIniSettingsToDisk(g.IO.IniFilename); - SetCurrentContext(backup_context); - } // Destroy platform windows - ImGuiContext* backup_context = ImGui::GetCurrentContext(); - SetCurrentContext(context); DestroyPlatformWindows(); - SetCurrentContext(backup_context); // Shutdown extensions DockContextShutdown(&g); @@ -4451,6 +4780,7 @@ void ImGui::Shutdown(ImGuiContext* context) g.LogFile = NULL; } g.LogBuffer.clear(); + g.DebugLogBuf.clear(); g.Initialized = false; } @@ -4473,8 +4803,7 @@ static void AddWindowToSortBuffer(ImVector* out_sorted_windows, Im if (window->Active) { int count = window->DC.ChildWindows.Size; - if (count > 1) - ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer); + ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer); for (int i = 0; i < count; i++) { ImGuiWindow* child = window->DC.ChildWindows[i]; @@ -4486,11 +4815,10 @@ static void AddWindowToSortBuffer(ImVector* out_sorted_windows, Im static void AddDrawListToDrawData(ImVector* out_list, ImDrawList* draw_list) { - // Remove trailing command if unused. - // Technically we could return directly instead of popping, but this make things looks neat in Metrics/Debugger window as well. - draw_list->_PopUnusedDrawCmd(); if (draw_list->CmdBuffer.Size == 0) return; + if (draw_list->CmdBuffer.Size == 1 && draw_list->CmdBuffer[0].ElemCount == 0 && draw_list->CmdBuffer[0].UserCallback == NULL) + return; // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc. // May trigger for you if you are using PrimXXX functions incorrectly. @@ -4525,6 +4853,8 @@ static void AddWindowToDrawData(ImGuiWindow* window, int layer) ImGuiContext& g = *GImGui; ImGuiViewportP* viewport = window->Viewport; g.IO.MetricsRenderWindows++; + if (window->Flags & ImGuiWindowFlags_DockNodeHost) + window->DrawList->ChannelsMerge(); AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[layer], window->DrawList); for (int i = 0; i < window->DC.ChildWindows.Size; i++) { @@ -4585,8 +4915,10 @@ static void SetupViewportDrawData(ImGuiViewportP* viewport, ImVectorOwnerViewport = viewport; for (int n = 0; n < draw_lists->Size; n++) { - draw_data->TotalVtxCount += draw_lists->Data[n]->VtxBuffer.Size; - draw_data->TotalIdxCount += draw_lists->Data[n]->IdxBuffer.Size; + ImDrawList* draw_list = draw_lists->Data[n]; + draw_list->_PopUnusedDrawCmd(); + draw_data->TotalVtxCount += draw_list->VtxBuffer.Size; + draw_data->TotalIdxCount += draw_list->IdxBuffer.Size; } } @@ -4618,84 +4950,139 @@ static ImGuiWindow* FindFrontMostVisibleChildWindow(ImGuiWindow* window) return window; } -static void ImGui::EndFrameDrawDimmedBackgrounds() +static void ImGui::RenderDimmedBackgroundBehindWindow(ImGuiWindow* window, ImU32 col) { - ImGuiContext& g = *GImGui; + if ((col & IM_COL32_A_MASK) == 0) + return; - // Draw modal whitening background on _other_ viewports than the one the modal is one - ImGuiWindow* modal_window = GetTopMostPopupModal(); - const bool dim_bg_for_modal = (modal_window != NULL); - const bool dim_bg_for_window_list = (g.NavWindowingTargetAnim != NULL); - if (dim_bg_for_modal || dim_bg_for_window_list) - for (int viewport_n = 0; viewport_n < g.Viewports.Size; viewport_n++) - { - ImGuiViewportP* viewport = g.Viewports[viewport_n]; - if (modal_window && viewport == modal_window->Viewport) - continue; - if (g.NavWindowingListWindow && viewport == g.NavWindowingListWindow->Viewport) - continue; - if (g.NavWindowingTargetAnim && viewport == g.NavWindowingTargetAnim->Viewport) - continue; - if (viewport->Window && modal_window && IsWindowAbove(viewport->Window, modal_window)) - continue; - ImDrawList* draw_list = GetForegroundDrawList(viewport); - const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio); - draw_list->AddRectFilled(viewport->Pos, viewport->Pos + viewport->Size, dim_bg_col); - } + ImGuiViewportP* viewport = window->Viewport; + ImRect viewport_rect = viewport->GetMainRect(); + + // Draw behind window by moving the draw command at the FRONT of the draw list + { + // We've already called AddWindowToDrawData() which called DrawList->ChannelsMerge() on DockNodeHost windows, + // and draw list have been trimmed already, hence the explicit recreation of a draw command if missing. + // FIXME: This is creating complication, might be simpler if we could inject a drawlist in drawdata at a given position and not attempt to manipulate ImDrawCmd order. + ImDrawList* draw_list = window->RootWindowDockTree->DrawList; + if (draw_list->CmdBuffer.Size == 0) + draw_list->AddDrawCmd(); + draw_list->PushClipRect(viewport_rect.Min - ImVec2(1, 1), viewport_rect.Max + ImVec2(1, 1), false); // Ensure ImDrawCmd are not merged + draw_list->AddRectFilled(viewport_rect.Min, viewport_rect.Max, col); + ImDrawCmd cmd = draw_list->CmdBuffer.back(); + IM_ASSERT(cmd.ElemCount == 6); + draw_list->CmdBuffer.pop_back(); + draw_list->CmdBuffer.push_front(cmd); + draw_list->PopClipRect(); + draw_list->AddDrawCmd(); // We need to create a command as CmdBuffer.back().IdxOffset won't be correct if we append to same command. + } - // Draw modal whitening background between CTRL-TAB list - if (dim_bg_for_window_list && g.NavWindowingTargetAnim->Active) + // Draw over sibling docking nodes in a same docking tree + if (window->RootWindow->DockIsActive) { - // Choose a draw list that will be front-most across all our children - // In the unlikely case that the window wasn't made active we can't rely on its drawlist and skip rendering all-together. - ImGuiWindow* window = g.NavWindowingTargetAnim; ImDrawList* draw_list = FindFrontMostVisibleChildWindow(window->RootWindowDockTree)->DrawList; - draw_list->PushClipRectFullScreen(); - - // Docking: draw modal whitening background on other nodes of a same dock tree - // For CTRL+TAB within a docking node we need to render the dimming background in 8 steps - // (Because the root node renders the background in one shot, in order to avoid flickering when a child dock node is not submitted) - if (window->RootWindow->DockIsActive) - if (window->RootWindowDockTree != window->RootWindow) - RenderRectFilledWithHole(draw_list, window->RootWindowDockTree->Rect(), window->RootWindow->Rect(), GetColorU32(ImGuiCol_NavWindowingDimBg, g.DimBgRatio), g.Style.WindowRounding); - - // Draw navigation selection/windowing rectangle border - float rounding = ImMax(window->WindowRounding, g.Style.WindowRounding); - ImRect bb = window->Rect(); - bb.Expand(g.FontSize); - if (bb.Contains(window->Viewport->GetMainRect())) // If a window fits the entire viewport, adjust its highlight inward - { - bb.Expand(-g.FontSize - 1.0f); - rounding = window->WindowRounding; - } - draw_list->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, 0, 3.0f); + if (draw_list->CmdBuffer.Size == 0) + draw_list->AddDrawCmd(); + draw_list->PushClipRect(viewport_rect.Min, viewport_rect.Max, false); + RenderRectFilledWithHole(draw_list, window->RootWindowDockTree->Rect(), window->RootWindow->Rect(), col, 0.0f);// window->RootWindowDockTree->WindowRounding); draw_list->PopClipRect(); } } -// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. -void ImGui::EndFrame() +ImGuiWindow* ImGui::FindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow* parent_window) { ImGuiContext& g = *GImGui; - IM_ASSERT(g.Initialized); + ImGuiWindow* bottom_most_visible_window = parent_window; + for (int i = FindWindowDisplayIndex(parent_window); i >= 0; i--) + { + ImGuiWindow* window = g.Windows[i]; + if (window->Flags & ImGuiWindowFlags_ChildWindow) + continue; + if (!IsWindowWithinBeginStackOf(window, parent_window)) + break; + if (IsWindowActiveAndVisible(window) && GetWindowDisplayLayer(window) <= GetWindowDisplayLayer(parent_window)) + bottom_most_visible_window = window; + } + return bottom_most_visible_window; +} - // Don't process EndFrame() multiple times. - if (g.FrameCountEnded == g.FrameCount) +static void ImGui::RenderDimmedBackgrounds() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* modal_window = GetTopMostAndVisiblePopupModal(); + if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f) + return; + const bool dim_bg_for_modal = (modal_window != NULL); + const bool dim_bg_for_window_list = (g.NavWindowingTargetAnim != NULL && g.NavWindowingTargetAnim->Active); + if (!dim_bg_for_modal && !dim_bg_for_window_list) return; - IM_ASSERT(g.WithinFrameScope && "Forgot to call ImGui::NewFrame()?"); - - CallContextHooks(&g, ImGuiContextHookType_EndFramePre); - ErrorCheckEndFrameSanityChecks(); + ImGuiViewport* viewports_already_dimmed[2] = { NULL, NULL }; + if (dim_bg_for_modal) + { + // Draw dimming behind modal or a begin stack child, whichever comes first in draw order. + ImGuiWindow* dim_behind_window = FindBottomMostVisibleWindowWithinBeginStack(modal_window); + RenderDimmedBackgroundBehindWindow(dim_behind_window, GetColorU32(ImGuiCol_ModalWindowDimBg, g.DimBgRatio)); + viewports_already_dimmed[0] = modal_window->Viewport; + } + else if (dim_bg_for_window_list) + { + // Draw dimming behind CTRL+Tab target window and behind CTRL+Tab UI window + RenderDimmedBackgroundBehindWindow(g.NavWindowingTargetAnim, GetColorU32(ImGuiCol_NavWindowingDimBg, g.DimBgRatio)); + if (g.NavWindowingListWindow != NULL && g.NavWindowingListWindow->Viewport && g.NavWindowingListWindow->Viewport != g.NavWindowingTargetAnim->Viewport) + RenderDimmedBackgroundBehindWindow(g.NavWindowingListWindow, GetColorU32(ImGuiCol_NavWindowingDimBg, g.DimBgRatio)); + viewports_already_dimmed[0] = g.NavWindowingTargetAnim->Viewport; + viewports_already_dimmed[1] = g.NavWindowingListWindow ? g.NavWindowingListWindow->Viewport : NULL; - // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME) - if (g.PlatformIO.Platform_SetImeInputPos && (g.PlatformImeLastPos.x == FLT_MAX || ImLengthSqr(g.PlatformImePos - g.PlatformImeLastPos) > 0.0001f)) - if (g.PlatformImePosViewport && g.PlatformImePosViewport->PlatformWindowCreated) - { - g.PlatformIO.Platform_SetImeInputPos(g.PlatformImePosViewport, g.PlatformImePos); - g.PlatformImeLastPos = g.PlatformImePos; - g.PlatformImePosViewport = NULL; - } + // Draw border around CTRL+Tab target window + ImGuiWindow* window = g.NavWindowingTargetAnim; + ImGuiViewport* viewport = window->Viewport; + float distance = g.FontSize; + ImRect bb = window->Rect(); + bb.Expand(distance); + if (bb.GetWidth() >= viewport->Size.x && bb.GetHeight() >= viewport->Size.y) + bb.Expand(-distance - 1.0f); // If a window fits the entire viewport, adjust its highlight inward + if (window->DrawList->CmdBuffer.Size == 0) + window->DrawList->AddDrawCmd(); + window->DrawList->PushClipRect(viewport->Pos, viewport->Pos + viewport->Size); + window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), window->WindowRounding, 0, 3.0f); + window->DrawList->PopClipRect(); + } + + // Draw dimming background on _other_ viewports than the ones our windows are in + for (int viewport_n = 0; viewport_n < g.Viewports.Size; viewport_n++) + { + ImGuiViewportP* viewport = g.Viewports[viewport_n]; + if (viewport == viewports_already_dimmed[0] || viewport == viewports_already_dimmed[1]) + continue; + if (modal_window && viewport->Window && IsWindowAbove(viewport->Window, modal_window)) + continue; + ImDrawList* draw_list = GetForegroundDrawList(viewport); + const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio); + draw_list->AddRectFilled(viewport->Pos, viewport->Pos + viewport->Size, dim_bg_col); + } +} + +// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. +void ImGui::EndFrame() +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(g.Initialized); + + // Don't process EndFrame() multiple times. + if (g.FrameCountEnded == g.FrameCount) + return; + IM_ASSERT(g.WithinFrameScope && "Forgot to call ImGui::NewFrame()?"); + + CallContextHooks(&g, ImGuiContextHookType_EndFramePre); + + ErrorCheckEndFrameSanityChecks(); + + // Notify Platform/OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME) + if (g.IO.SetPlatformImeDataFn && memcmp(&g.PlatformImeData, &g.PlatformImeDataPrev, sizeof(ImGuiPlatformImeData)) != 0) + { + ImGuiViewport* viewport = FindViewportByID(g.PlatformImeViewport); + g.IO.SetPlatformImeDataFn(viewport ? viewport : GetMainViewport(), &g.PlatformImeData); + } // Hide implicit/fallback "Debug" window if it hasn't been used g.WithinFrameScopeWithImplicitWindow = false; @@ -4703,12 +5090,12 @@ void ImGui::EndFrame() g.CurrentWindow->Active = false; End(); - // Draw modal whitening background on _other_ viewports than the one the modal is one - EndFrameDrawDimmedBackgrounds(); - // Update navigation: CTRL+Tab, wrap-around requests NavEndFrame(); + // Update docking + DockContextEndFrame(&g); + SetCurrentViewport(NULL, NULL); // Drag and Drop: Elapse payload (if delivered, or if source stops being submitted) @@ -4761,7 +5148,6 @@ void ImGui::EndFrame() // Clear Input data for next frame g.IO.MouseWheel = g.IO.MouseWheelH = 0.0f; g.IO.InputQueueCharacters.resize(0); - g.IO.KeyModsPrev = g.IO.KeyMods; // doing it here is better than in NewFrame() as we'll tolerate backend writing to KeyMods. If we want to firmly disallow it we should detect it. memset(g.IO.NavInputs, 0, sizeof(g.IO.NavInputs)); CallContextHooks(&g, ImGuiContextHookType_EndFramePost); @@ -4777,6 +5163,7 @@ void ImGui::Render() if (g.FrameCountEnded != g.FrameCount) EndFrame(); + const bool first_render_of_frame = (g.FrameCountRendered != g.FrameCount); g.FrameCountRendered = g.FrameCount; g.IO.MetricsRenderWindows = 0; @@ -4806,9 +5193,13 @@ void ImGui::Render() if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window AddRootWindowToDrawData(windows_to_render_top_most[n]); - ImVec2 mouse_cursor_offset, mouse_cursor_size, mouse_cursor_uv[4]; - if (g.IO.MouseDrawCursor && g.MouseCursor != ImGuiMouseCursor_None) - g.IO.Fonts->GetMouseCursorTexData(g.MouseCursor, &mouse_cursor_offset, &mouse_cursor_size, &mouse_cursor_uv[0], &mouse_cursor_uv[2]); + // Draw modal/window whitening backgrounds + if (first_render_of_frame) + RenderDimmedBackgrounds(); + + // Draw software mouse cursor if requested by io.MouseDrawCursor flag + if (g.IO.MouseDrawCursor && first_render_of_frame && g.MouseCursor != ImGuiMouseCursor_None) + RenderMouseCursor(g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48)); // Setup ImDrawData structures for end-user g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = 0; @@ -4817,15 +5208,6 @@ void ImGui::Render() ImGuiViewportP* viewport = g.Viewports[n]; viewport->DrawDataBuilder.FlattenIntoSingleLayer(); - // Draw software mouse cursor if requested by io.MouseDrawCursor flag - // (note we scale cursor by current viewport/monitor, however Windows 10 for its own hardware cursor seems to be using a different scale factor) - if (mouse_cursor_size.x > 0.0f && mouse_cursor_size.y > 0.0f) - { - float scale = g.Style.MouseCursorScale * viewport->DpiScale; - if (viewport->GetMainRect().Overlaps(ImRect(g.IO.MousePos, g.IO.MousePos + ImVec2(mouse_cursor_size.x + 2, mouse_cursor_size.y + 2) * scale))) - RenderMouseCursor(GetForegroundDrawList(viewport), g.IO.MousePos, scale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48)); - } - // Add foreground ImDrawList (for each active viewport) if (viewport->DrawLists[1] != NULL) AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport)); @@ -4934,240 +5316,6 @@ static void FindHoveredWindow() g.MovingWindow->Viewport = moving_window_viewport; } -// Test if mouse cursor is hovering given rectangle -// NB- Rectangle is clipped by our current clip setting -// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding) -bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip) -{ - ImGuiContext& g = *GImGui; - - // Clip - ImRect rect_clipped(r_min, r_max); - if (clip) - rect_clipped.ClipWith(g.CurrentWindow->ClipRect); - - // Expand for touch input - const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding); - if (!rect_for_touch.Contains(g.IO.MousePos)) - return false; - if (!g.MouseViewport->GetMainRect().Overlaps(rect_clipped)) - return false; - return true; -} - -int ImGui::GetKeyIndex(ImGuiKey imgui_key) -{ - IM_ASSERT(imgui_key >= 0 && imgui_key < ImGuiKey_COUNT); - ImGuiContext& g = *GImGui; - return g.IO.KeyMap[imgui_key]; -} - -// Note that dear imgui doesn't know the semantic of each entry of io.KeysDown[]! -// Use your own indices/enums according to how your backend/engine stored them into io.KeysDown[]! -bool ImGui::IsKeyDown(int user_key_index) -{ - if (user_key_index < 0) - return false; - ImGuiContext& g = *GImGui; - IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - return g.IO.KeysDown[user_key_index]; -} - -// t0 = previous time (e.g.: g.Time - g.IO.DeltaTime) -// t1 = current time (e.g.: g.Time) -// An event is triggered at: -// t = 0.0f t = repeat_delay, t = repeat_delay + repeat_rate*N -int ImGui::CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) -{ - if (t1 == 0.0f) - return 1; - if (t0 >= t1) - return 0; - if (repeat_rate <= 0.0f) - return (t0 < repeat_delay) && (t1 >= repeat_delay); - const int count_t0 = (t0 < repeat_delay) ? -1 : (int)((t0 - repeat_delay) / repeat_rate); - const int count_t1 = (t1 < repeat_delay) ? -1 : (int)((t1 - repeat_delay) / repeat_rate); - const int count = count_t1 - count_t0; - return count; -} - -int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_rate) -{ - ImGuiContext& g = *GImGui; - if (key_index < 0) - return 0; - IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - const float t = g.IO.KeysDownDuration[key_index]; - return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, repeat_delay, repeat_rate); -} - -bool ImGui::IsKeyPressed(int user_key_index, bool repeat) -{ - ImGuiContext& g = *GImGui; - if (user_key_index < 0) - return false; - IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - const float t = g.IO.KeysDownDuration[user_key_index]; - if (t == 0.0f) - return true; - if (repeat && t > g.IO.KeyRepeatDelay) - return GetKeyPressedAmount(user_key_index, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0; - return false; -} - -bool ImGui::IsKeyReleased(int user_key_index) -{ - ImGuiContext& g = *GImGui; - if (user_key_index < 0) return false; - IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - return g.IO.KeysDownDurationPrev[user_key_index] >= 0.0f && !g.IO.KeysDown[user_key_index]; -} - -bool ImGui::IsMouseDown(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseDown[button]; -} - -bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - const float t = g.IO.MouseDownDuration[button]; - if (t == 0.0f) - return true; - - if (repeat && t > g.IO.KeyRepeatDelay) - { - // FIXME: 2019/05/03: Our old repeat code was wrong here and led to doubling the repeat rate, which made it an ok rate for repeat on mouse hold. - int amount = CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate * 0.50f); - if (amount > 0) - return true; - } - return false; -} - -bool ImGui::IsMouseReleased(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseReleased[button]; -} - -bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseClickedCount[button] == 2; -} - -bool ImGui::IsMouseTripleClicked(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseClickedCount[button] == 3; -} - -// Return if a mouse click/drag went past the given threshold. Valid to call during the MouseReleased frame. -// [Internal] This doesn't test if the button is pressed -bool ImGui::IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - if (lock_threshold < 0.0f) - lock_threshold = g.IO.MouseDragThreshold; - return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold; -} - -bool ImGui::IsMouseDragging(ImGuiMouseButton button, float lock_threshold) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - if (!g.IO.MouseDown[button]) - return false; - return IsMouseDragPastThreshold(button, lock_threshold); -} - -ImVec2 ImGui::GetMousePos() -{ - ImGuiContext& g = *GImGui; - return g.IO.MousePos; -} - -// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed! -ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup() -{ - ImGuiContext& g = *GImGui; - if (g.BeginPopupStack.Size > 0) - return g.OpenPopupStack[g.BeginPopupStack.Size - 1].OpenMousePos; - return g.IO.MousePos; -} - -// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position. -bool ImGui::IsMousePosValid(const ImVec2* mouse_pos) -{ - // The assert is only to silence a false-positive in XCode Static Analysis. - // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions). - IM_ASSERT(GImGui != NULL); - const float MOUSE_INVALID = -256000.0f; - ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos; - return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID; -} - -bool ImGui::IsAnyMouseDown() -{ - ImGuiContext& g = *GImGui; - for (int n = 0; n < IM_ARRAYSIZE(g.IO.MouseDown); n++) - if (g.IO.MouseDown[n]) - return true; - return false; -} - -// Return the delta from the initial clicking position while the mouse button is clicked or was just released. -// This is locked and return 0.0f until the mouse moves past a distance threshold at least once. -// NB: This is only valid if IsMousePosValid(). backends in theory should always keep mouse position valid when dragging even outside the client window. -ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - if (lock_threshold < 0.0f) - lock_threshold = g.IO.MouseDragThreshold; - if (g.IO.MouseDown[button] || g.IO.MouseReleased[button]) - if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold) - if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button])) - return g.IO.MousePos - g.IO.MouseClickedPos[button]; - return ImVec2(0.0f, 0.0f); -} - -void ImGui::ResetMouseDragDelta(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr - g.IO.MouseClickedPos[button] = g.IO.MousePos; -} - -ImGuiMouseCursor ImGui::GetMouseCursor() -{ - return GImGui->MouseCursor; -} - -void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type) -{ - GImGui->MouseCursor = cursor_type; -} - -void ImGui::CaptureKeyboardFromApp(bool capture) -{ - GImGui->WantCaptureKeyboardNextFrame = capture ? 1 : 0; -} - -void ImGui::CaptureMouseFromApp(bool capture) -{ - GImGui->WantCaptureMouseNextFrame = capture ? 1 : 0; -} - bool ImGui::IsItemActive() { ImGuiContext& g = *GImGui; @@ -5292,7 +5440,7 @@ void ImGui::SetActiveIdUsingNavAndKeys() IM_ASSERT(g.ActiveId != 0); g.ActiveIdUsingNavDirMask = ~(ImU32)0; g.ActiveIdUsingNavInputMask = ~(ImU32)0; - g.ActiveIdUsingKeyInputMask = ~(ImU64)0; + g.ActiveIdUsingKeyInputMask.SetAllBits(); NavMoveRequestCancel(); } @@ -5333,15 +5481,16 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b SetNextWindowSize(size); // Build up name. If you need to append to a same child from multiple location in the ID stack, use BeginChild(ImGuiID id) with a stable value. + const char* temp_window_name; if (name) - ImFormatString(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), "%s/%s_%08X", parent_window->Name, name, id); + ImFormatStringToTempBuffer(&temp_window_name, NULL, "%s/%s_%08X", parent_window->Name, name, id); else - ImFormatString(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), "%s/%08X", parent_window->Name, id); + ImFormatStringToTempBuffer(&temp_window_name, NULL, "%s/%08X", parent_window->Name, id); const float backup_border_size = g.Style.ChildBorderSize; if (!border) g.Style.ChildBorderSize = 0.0f; - bool ret = Begin(g.TempBuffer, NULL, flags); + bool ret = Begin(temp_window_name, NULL, flags); g.Style.ChildBorderSize = backup_border_size; ImGuiWindow* child_window = g.CurrentWindow; @@ -5479,6 +5628,29 @@ static void ApplyWindowSettings(ImGuiWindow* window, ImGuiWindowSettings* settin window->DockOrder = settings->DockOrder; } +static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_created, ImGuiWindowFlags new_flags) +{ + ImGuiContext& g = *GImGui; + + const bool new_is_explicit_child = (new_flags & ImGuiWindowFlags_ChildWindow) != 0; + const bool child_flag_changed = new_is_explicit_child != window->IsExplicitChild; + if ((just_created || child_flag_changed) && !new_is_explicit_child) + { + IM_ASSERT(!g.WindowsFocusOrder.contains(window)); + g.WindowsFocusOrder.push_back(window); + window->FocusOrder = (short)(g.WindowsFocusOrder.Size - 1); + } + else if (!just_created && child_flag_changed && new_is_explicit_child) + { + IM_ASSERT(g.WindowsFocusOrder[window->FocusOrder] == window); + for (int n = window->FocusOrder + 1; n < g.WindowsFocusOrder.Size; n++) + g.WindowsFocusOrder[n]->FocusOrder--; + g.WindowsFocusOrder.erase(g.WindowsFocusOrder.Data + window->FocusOrder); + window->FocusOrder = -1; + } + window->IsExplicitChild = new_is_explicit_child; +} + static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags) { ImGuiContext& g = *GImGui; @@ -5503,7 +5675,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags) SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false); ApplyWindowSettings(window, settings); } - window->DC.CursorStartPos = window->DC.CursorMaxPos = window->Pos; // So first call to CalcContentSize() doesn't return crazy values + window->DC.CursorStartPos = window->DC.CursorMaxPos = window->DC.IdealMaxPos = window->Pos; // So first call to CalcWindowContentSizes() doesn't return crazy values if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0) { @@ -5519,16 +5691,12 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags) window->AutoFitOnlyGrows = (window->AutoFitFramesX > 0) || (window->AutoFitFramesY > 0); } - if (!(flags & ImGuiWindowFlags_ChildWindow)) - { - g.WindowsFocusOrder.push_back(window); - window->FocusOrder = (short)(g.WindowsFocusOrder.Size - 1); - } - if (flags & ImGuiWindowFlags_NoBringToFrontOnFocus) g.Windows.push_front(window); // Quite slow but rare and only once else g.Windows.push_back(window); + UpdateWindowInFocusOrderList(window, true, window->Flags); + return window; } @@ -5650,11 +5818,11 @@ ImVec2 ImGui::CalcWindowNextAutoFitSize(ImGuiWindow* window) return size_final; } -static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags) +static ImGuiCol GetWindowBgColorIdx(ImGuiWindow* window) { - if (flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) + if (window->Flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) return ImGuiCol_PopupBg; - if (flags & ImGuiWindowFlags_ChildWindow) + if ((window->Flags & ImGuiWindowFlags_ChildWindow) && !window->DockIsActive) return ImGuiCol_ChildBg; return ImGuiCol_WindowBg; } @@ -5784,6 +5952,7 @@ static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& s if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x); if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y); ImGuiID resize_grip_id = window->GetID(resize_grip_n); // == GetWindowResizeCornerID() + KeepAliveID(resize_grip_id); ButtonBehavior(resize_rect, resize_grip_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus); //GetForegroundDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255)); if (hovered || held) @@ -5819,6 +5988,7 @@ static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& s bool hovered, held; ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, WINDOWS_HOVER_PADDING); ImGuiID border_id = window->GetID(border_n + 4); // == GetWindowResizeBorderID() + KeepAliveID(border_id); ButtonBehavior(border_rect, border_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus); //GetForegroundDrawLists(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255)); if ((hovered && g.HoveredIdTimer > WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER) || held) @@ -5847,9 +6017,9 @@ static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& s { ImVec2 nav_resize_delta; if (g.NavInputSource == ImGuiInputSource_Keyboard && g.IO.KeyShift) - nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_RawKeyboard, ImGuiInputReadMode_Down); + nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_RawKeyboard, ImGuiNavReadMode_Down); if (g.NavInputSource == ImGuiInputSource_Gamepad) - nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_Down); + nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadDPad, ImGuiNavReadMode_Down); if (nav_resize_delta.x != 0.0f || nav_resize_delta.y != 0.0f) { const float NAV_RESIZE_SPEED = 600.0f; @@ -5883,8 +6053,8 @@ static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& visibility { ImGuiContext& g = *GImGui; ImVec2 size_for_clamping = window->Size; - if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) - size_for_clamping.y = window->TitleBarHeight(); + if (g.IO.ConfigWindowsMoveFromTitleBarOnly && (!(window->Flags & ImGuiWindowFlags_NoTitleBar) || window->DockNodeAsHost)) + size_for_clamping.y = ImGui::GetFrameHeight(); // Not using window->TitleBarHeight() as DockNodeAsHost will report 0.0f here. window->Pos = ImClamp(window->Pos, visibility_rect.Min - size_for_clamping, visibility_rect.Max); } @@ -5947,7 +6117,7 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar if (g.DragDropPayload.IsDataType(IMGUI_PAYLOAD_TYPE_WINDOW) && *(ImGuiWindow**)g.DragDropPayload.Data == window) is_docking_transparent_payload = true; - ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags)); + ImU32 bg_col = GetColorU32(GetWindowBgColorIdx(window)); if (window->ViewportOwned) { // No alpha @@ -5973,8 +6143,21 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar if (override_alpha) bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT); } - window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? 0 : ImDrawFlags_RoundCornersBottom); + + // Render, for docked windows and host windows we ensure bg goes before decorations + ImDrawList* bg_draw_list = window->DockIsActive ? window->DockNode->HostWindow->DrawList : window->DrawList; + if (window->DockIsActive || (flags & ImGuiWindowFlags_DockNodeHost)) + bg_draw_list->ChannelsSetCurrent(0); + if (window->DockIsActive) + window->DockNode->LastBgColor = bg_col; + + bg_draw_list->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? 0 : ImDrawFlags_RoundCornersBottom); + + if (window->DockIsActive || (flags & ImGuiWindowFlags_DockNodeHost)) + bg_draw_list->ChannelsSetCurrent(1); } + if (window->DockIsActive) + window->DockNode->IsBgDrawnThisFrame = true; // Title bar // (when docked, DockNode are drawing their own title bar. Individual windows however do NOT set the _NoTitleBar flag, @@ -6003,8 +6186,10 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar float unhide_sz_hit = ImFloor(g.FontSize * 0.55f); ImVec2 p = node->Pos; ImRect r(p, p + ImVec2(unhide_sz_hit, unhide_sz_hit)); + ImGuiID unhide_id = window->GetID("#UNHIDE"); + KeepAliveID(unhide_id); bool hovered, held; - if (ButtonBehavior(r, window->GetID("#UNHIDE"), &hovered, &held, ImGuiButtonFlags_FlattenChildren)) + if (ButtonBehavior(r, unhide_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren)) node->WantHiddenTabBarToggle = true; else if (held && IsMouseDragging(0)) StartMouseMovingWindowOrNode(window, node, true); @@ -6142,7 +6327,7 @@ void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags } if (parent_window && (flags & ImGuiWindowFlags_Popup)) window->RootWindowPopupTree = parent_window->RootWindowPopupTree; - if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup))) + if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup))) // FIXME: simply use _NoTitleBar ? window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight; while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened) { @@ -6151,6 +6336,38 @@ void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags } } +// When a modal popup is open, newly created windows that want focus (i.e. are not popups and do not specify ImGuiWindowFlags_NoFocusOnAppearing) +// should be positioned behind that modal window, unless the window was created inside the modal begin-stack. +// In case of multiple stacked modals newly created window honors begin stack order and does not go below its own modal parent. +// - Window // FindBlockingModal() returns Modal1 +// - Window // .. returns Modal1 +// - Modal1 // .. returns Modal2 +// - Window // .. returns Modal2 +// - Window // .. returns Modal2 +// - Modal2 // .. returns Modal2 +static ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window) +{ + ImGuiContext& g = *GImGui; + if (g.OpenPopupStack.Size <= 0) + return NULL; + + // Find a modal that has common parent with specified window. Specified window should be positioned behind that modal. + for (int i = g.OpenPopupStack.Size - 1; i >= 0; i--) + { + ImGuiWindow* popup_window = g.OpenPopupStack.Data[i].Window; + if (popup_window == NULL || !(popup_window->Flags & ImGuiWindowFlags_Modal)) + continue; + if (!popup_window->Active && !popup_window->WasActive) // Check WasActive, because this code may run before popup renders on current frame, also check Active to handle newly created windows. + continue; + if (IsWindowWithinBeginStackOf(window, popup_window)) // Window is rendered over last modal, no render order change needed. + break; + for (ImGuiWindow* parent = popup_window->ParentWindowInBeginStack->RootWindow; parent != NULL; parent = parent->ParentWindowInBeginStack->RootWindow) + if (IsWindowWithinBeginStackOf(window, parent)) + return popup_window; // Place window above its begin stack parent. + } + return NULL; +} + // Push a new Dear ImGui window to add widgets to. // - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair. // - Begin/End can be called multiple times during the frame with the same window name to append content. @@ -6171,6 +6388,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) const bool window_just_created = (window == NULL); if (window_just_created) window = CreateNewWindow(name, flags); + else + UpdateWindowInFocusOrderList(window, window_just_created, flags); // Automatically disable manual moving/resizing when NoInputs is set if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs) @@ -6228,10 +6447,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) BeginDocked(window, p_open); flags = window->Flags; if (window->DockIsActive) + { IM_ASSERT(window->DockNode != NULL); - - // Docking currently override constraints - g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint; + g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint; // Docking currently override constraints + } // Amend the Appearing flag if (window->DockTabIsVisible && !dock_tab_was_visible && dock_node_was_visible && !window->Appearing && !window_was_appearing) @@ -6247,7 +6466,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) } // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack - ImGuiWindow* parent_window_in_stack = window->DockIsActive ? window->DockNode->HostWindow : g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back().Window; + ImGuiWindow* parent_window_in_stack = (window->DockIsActive && window->DockNode->HostWindow) ? window->DockNode->HostWindow : g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back().Window; ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow; IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow)); @@ -6264,18 +6483,24 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) window_stack_data.StackSizesOnBegin.SetToCurrentState(); g.CurrentWindowStack.push_back(window_stack_data); g.CurrentWindow = NULL; + if (flags & ImGuiWindowFlags_ChildMenu) + g.BeginMenuCount++; if (flags & ImGuiWindowFlags_Popup) { ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size]; popup_ref.Window = window; + popup_ref.ParentNavLayer = parent_window_in_stack->DC.NavLayerCurrent; g.BeginPopupStack.push_back(popup_ref); window->PopupId = popup_ref.PopupId; } // Update ->RootWindow and others pointers (before any possible call to FocusWindow) if (first_begin_of_the_frame) + { UpdateWindowParentAndRootLinks(window, flags, parent_window); + window->ParentWindowInBeginStack = parent_window_in_stack; + } // Process SetNextWindow***() calls // (FIXME: Consider splitting the HasXXX flags into X/Y components @@ -6334,12 +6559,18 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) { // Initialize const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345) + const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0); window->Active = true; window->HasCloseButton = (p_open != NULL); window->ClipRect = ImVec4(-FLT_MAX, -FLT_MAX, +FLT_MAX, +FLT_MAX); window->IDStack.resize(1); window->DrawList->_ResetForNewFrame(); window->DC.CurrentTableIdx = -1; + if (flags & ImGuiWindowFlags_DockNodeHost) + { + window->DrawList->ChannelsSplit(2); + window->DrawList->ChannelsSetCurrent(1); // Render decorations on channel 1 as we will render the backgrounds manually later + } // Restore buffer capacity when woken from a compacted state, to avoid if (window->MemoryCompacted) @@ -6362,7 +6593,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) // UPDATE CONTENTS SIZE, UPDATE HIDDEN STATUS // Update contents size from last frame for auto-fitting (or use explicit size) - const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0); CalcWindowContentSizes(window, &window->ContentSize, &window->ContentSizeIdeal); // FIXME: These flags are decremented before they are used. This means that in order to have these fields produce their intended behaviors @@ -6578,7 +6808,35 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) want_focus = true; else if ((window->DockIsActive || (flags & ImGuiWindowFlags_ChildWindow) == 0) && !(flags & ImGuiWindowFlags_Tooltip)) want_focus = true; + + ImGuiWindow* modal = GetTopMostPopupModal(); + if (modal != NULL && !IsWindowWithinBeginStackOf(window, modal)) + { + // Avoid focusing a window that is created outside of active modal. This will prevent active modal from being closed. + // Since window is not focused it would reappear at the same display position like the last time it was visible. + // In case of completely new windows it would go to the top (over current modal), but input to such window would still be blocked by modal. + // Position window behind a modal that is not a begin-parent of this window. + want_focus = false; + if (window == window->RootWindow) + { + ImGuiWindow* blocking_modal = FindBlockingModal(window); + IM_ASSERT(blocking_modal != NULL); + BringWindowToDisplayBehind(window, blocking_modal); + } + } + } + + // [Test Engine] Register whole window in the item system +#ifdef IMGUI_ENABLE_TEST_ENGINE + if (g.TestEngineHookItems) + { + IM_ASSERT(window->IDStack.Size == 1); + window->IDStack.Size = 0; + IMGUI_TEST_ENGINE_ITEM_ADD(window->Rect(), window->ID); + IMGUI_TEST_ENGINE_ITEM_INFO(window->ID, window->Name, (g.HoveredWindow == window) ? ImGuiItemStatusFlags_HoveredRect : 0); + window->IDStack.Size = 1; } +#endif // Decide if we are going to handle borders and resize grips const bool handle_borders_and_resize_grips = (window->DockNodeAsHost || !window->DockIsActive); @@ -6694,25 +6952,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID); PushClipRect(host_rect.Min, host_rect.Max, false); - // Draw modal or window list full viewport dimming background (for other viewports we'll render them in EndFrame) - ImGuiWindow* window_window_list = g.NavWindowingListWindow; - const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetTopMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0; - const bool dim_bg_for_window_list = g.NavWindowingTargetAnim && ((window == g.NavWindowingTargetAnim->RootWindowDockTree) || (window == window_window_list && window_window_list->Viewport != g.NavWindowingTargetAnim->Viewport)); - if (dim_bg_for_modal || dim_bg_for_window_list) - { - const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio); - window->DrawList->AddRectFilled(viewport_rect.Min, viewport_rect.Max, dim_bg_col); - } - - // Draw navigation selection/windowing rectangle background - if (dim_bg_for_window_list && window == g.NavWindowingTargetAnim) - { - ImRect bb = window->Rect(); - bb.Expand(g.FontSize); - if (!bb.Contains(viewport_rect)) // Avoid drawing if the window covers all the viewport anyway - window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding); - } - // Child windows can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call (since 1.71) // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order. // FIXME: User code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected (github #4493) @@ -6742,20 +6981,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) window->DrawList = &window->DrawListInst; } - // Draw navigation selection/windowing rectangle border - if (g.NavWindowingTargetAnim == window) - { - float rounding = ImMax(window->WindowRounding, g.Style.WindowRounding); - ImRect bb = window->Rect(); - bb.Expand(g.FontSize); - if (bb.Contains(viewport_rect)) // If a window fits the entire viewport, adjust its highlight inward - { - bb.Expand(-g.FontSize - 1.0f); - rounding = window->WindowRounding; - } - window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, 0, 3.0f); - } - // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING) // Work rectangle. @@ -6787,17 +7012,23 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) window->DC.Indent.x = 0.0f + window->WindowPadding.x - window->Scroll.x; window->DC.GroupOffset.x = 0.0f; window->DC.ColumnsOffset.x = 0.0f; - window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.Indent.x + window->DC.ColumnsOffset.x, decoration_up_height + window->WindowPadding.y - window->Scroll.y); + + // Record the loss of precision of CursorStartPos which can happen due to really large scrolling amount. + // This is used by clipper to compensate and fix the most common use case of large scroll area. Easy and cheap, next best thing compared to switching everything to double or ImU64. + double start_pos_highp_x = (double)window->Pos.x + window->WindowPadding.x - (double)window->Scroll.x + window->DC.ColumnsOffset.x; + double start_pos_highp_y = (double)window->Pos.y + window->WindowPadding.y - (double)window->Scroll.y + decoration_up_height; + window->DC.CursorStartPos = ImVec2((float)start_pos_highp_x, (float)start_pos_highp_y); + window->DC.CursorStartPosLossyness = ImVec2((float)(start_pos_highp_x - window->DC.CursorStartPos.x), (float)(start_pos_highp_y - window->DC.CursorStartPos.y)); window->DC.CursorPos = window->DC.CursorStartPos; window->DC.CursorPosPrevLine = window->DC.CursorPos; window->DC.CursorMaxPos = window->DC.CursorStartPos; window->DC.IdealMaxPos = window->DC.CursorStartPos; window->DC.CurrLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f); window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f; + window->DC.IsSameLine = false; window->DC.NavLayerCurrent = ImGuiNavLayer_Main; window->DC.NavLayersActiveMask = window->DC.NavLayersActiveMaskNext; - window->DC.NavLayersActiveMaskNext = 0x00; window->DC.NavHideHighlightOneFrame = false; window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f); @@ -6835,7 +7066,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) { window->Viewport->PlatformRequestClose = false; g.NavWindowingToggleLayer = false; // Assume user mapped PlatformRequestClose on ALT-F4 so we disable ALT for menu toggle. False positive not an issue. - IMGUI_DEBUG_LOG_VIEWPORT("Window '%s' PlatformRequestClose\n", window->Name); + IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Window '%s' PlatformRequestClose\n", window->Name); *p_open = false; } } @@ -6875,14 +7106,13 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) // We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin(). // This is useful to allow creating context menus on title bar only, etc. if (window->DockIsActive) - SetLastItemData(window->ID, g.CurrentItemFlags, window->DockTabItemStatusFlags, window->DockTabItemRect); + SetLastItemData(window->MoveId, g.CurrentItemFlags, window->DockTabItemStatusFlags, window->DockTabItemRect); else SetLastItemData(window->MoveId, g.CurrentItemFlags, IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0, title_bar_rect); -#ifdef IMGUI_ENABLE_TEST_ENGINE + // [Test Engine] Register title bar / tab if (!(window->Flags & ImGuiWindowFlags_NoTitleBar)) IMGUI_TEST_ENGINE_ITEM_ADD(g.LastItemData.Rect, g.LastItemData.ID); -#endif } else { @@ -6942,7 +7172,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) window->HiddenFramesCanSkipItems = 1; // Update the Hidden flag - window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0) || (window->HiddenFramesForRenderOnly > 0); + bool hidden_regular = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0); + window->Hidden = hidden_regular || (window->HiddenFramesForRenderOnly > 0); // Disable inputs for requested number of frames if (window->DisableInputsFrames > 0) @@ -6953,11 +7184,15 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) // Update the SkipItems flag, used to early out of all items functions (no layout required) bool skip_items = false; - if (window->Collapsed || !window->Active || window->Hidden) + if (window->Collapsed || !window->Active || hidden_regular) if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0) skip_items = true; window->SkipItems = skip_items; + // Only clear NavLayersActiveMaskNext when marked as visible, so a CTRL+Tab back can use a safe value. + if (!window->SkipItems) + window->DC.NavLayersActiveMaskNext = 0x00; + // Sanity check: there are two spots which can set Appearing = true // - when 'window_just_activated_by_user' is set -> HiddenFramesCannotSkipItems is set -> SkipItems always false // - in BeginDocked() path when DockNodeIsVisible == DockTabIsVisible == true -> hidden _should_ be all zero // FIXME: Not formally proven, hence the assert. @@ -7002,6 +7237,8 @@ void ImGui::End() // Pop from window stack g.LastItemData = g.CurrentWindowStack.back().ParentLastItemDataBackup; + if (window->Flags & ImGuiWindowFlags_ChildMenu) + g.BeginMenuCount--; if (window->Flags & ImGuiWindowFlags_Popup) g.BeginPopupStack.pop_back(); g.CurrentWindowStack.back().StackSizesOnBegin.CompareWithCurrentState(); @@ -7061,6 +7298,34 @@ void ImGui::BringWindowToDisplayBack(ImGuiWindow* window) } } +void ImGui::BringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* behind_window) +{ + IM_ASSERT(window != NULL && behind_window != NULL); + ImGuiContext& g = *GImGui; + window = window->RootWindow; + behind_window = behind_window->RootWindow; + int pos_wnd = FindWindowDisplayIndex(window); + int pos_beh = FindWindowDisplayIndex(behind_window); + if (pos_wnd < pos_beh) + { + size_t copy_bytes = (pos_beh - pos_wnd - 1) * sizeof(ImGuiWindow*); + memmove(&g.Windows.Data[pos_wnd], &g.Windows.Data[pos_wnd + 1], copy_bytes); + g.Windows[pos_beh - 1] = window; + } + else + { + size_t copy_bytes = (pos_wnd - pos_beh) * sizeof(ImGuiWindow*); + memmove(&g.Windows.Data[pos_beh + 1], &g.Windows.Data[pos_beh], copy_bytes); + g.Windows[pos_beh] = window; + } +} + +int ImGui::FindWindowDisplayIndex(ImGuiWindow* window) +{ + ImGuiContext& g = *GImGui; + return g.Windows.index_from_ptr(g.Windows.find(window)); +} + // Moving window to front of display and set focus (which happens to be back of our sorted list) void ImGui::FocusWindow(ImGuiWindow* window) { @@ -7068,16 +7333,13 @@ void ImGui::FocusWindow(ImGuiWindow* window) if (g.NavWindow != window) { - g.NavWindow = window; + SetNavWindow(window); if (window && g.NavDisableMouseHover) g.NavMousePosDirty = true; g.NavId = window ? window->NavLastIds[0] : 0; // Restore NavId + g.NavLayer = ImGuiNavLayer_Main; g.NavFocusScopeId = 0; g.NavIdIsAlive = false; - g.NavLayer = ImGuiNavLayer_Main; - g.NavInitRequest = g.NavMoveSubmitted = g.NavMoveScoringItems = false; - NavUpdateAnyRequestFlag(); - //IMGUI_DEBUG_LOG("FocusWindow(\"%s\")\n", window ? window->Name : NULL); } // Close popups if any @@ -7105,7 +7367,7 @@ void ImGui::FocusWindow(ImGuiWindow* window) // Select in dock node if (dock_node && dock_node->TabBar) - dock_node->TabBar->SelectedTabId = dock_node->TabBar->NextSelectedTabId = window->ID; + dock_node->TabBar->SelectedTabId = dock_node->TabBar->NextSelectedTabId = window->TabId; // Bring to front BringWindowToFocusFront(focus_front_window); @@ -7304,6 +7566,19 @@ bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, return false; } +bool ImGui::IsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent) +{ + if (window->RootWindow == potential_parent) + return true; + while (window != NULL) + { + if (window == potential_parent) + return true; + window = window->ParentWindowInBeginStack; + } + return false; +} + bool ImGui::IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below) { ImGuiContext& g = *GImGui; @@ -7434,6 +7709,10 @@ void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond) const ImVec2 old_pos = window->Pos; window->Pos = ImFloor(pos); ImVec2 offset = window->Pos - old_pos; + if (offset.x == 0.0f && offset.y == 0.0f) + return; + MarkIniSettingsDirty(window); + // FIXME: share code with TranslateWindow(), need to confirm whether the 3 rect modified by TranslateWindow() are desirable here. window->DC.CursorPos += offset; // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor window->DC.CursorMaxPos += offset; // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected. window->DC.IdealMaxPos += offset; @@ -7468,26 +7747,19 @@ void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond con window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing); // Set - if (size.x > 0.0f) - { - window->AutoFitFramesX = 0; - window->SizeFull.x = IM_FLOOR(size.x); - } - else - { - window->AutoFitFramesX = 2; + ImVec2 old_size = window->SizeFull; + window->AutoFitFramesX = (size.x <= 0.0f) ? 2 : 0; + window->AutoFitFramesY = (size.y <= 0.0f) ? 2 : 0; + if (size.x <= 0.0f) window->AutoFitOnlyGrows = false; - } - if (size.y > 0.0f) - { - window->AutoFitFramesY = 0; - window->SizeFull.y = IM_FLOOR(size.y); - } else - { - window->AutoFitFramesY = 2; + window->SizeFull.x = IM_FLOOR(size.x); + if (size.y <= 0.0f) window->AutoFitOnlyGrows = false; - } + else + window->SizeFull.y = IM_FLOOR(size.y); + if (old_size.x != window->SizeFull.x || old_size.y != window->SizeFull.y) + MarkIniSettingsDirty(window); } void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond) @@ -7693,170 +7965,646 @@ void ImGui::SetWindowFontScale(float scale) g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize(); } -void ImGui::ActivateItem(ImGuiID id) +void ImGui::ActivateItem(ImGuiID id) +{ + ImGuiContext& g = *GImGui; + g.NavNextActivateId = id; + g.NavNextActivateFlags = ImGuiActivateFlags_None; +} + +void ImGui::PushFocusScope(ImGuiID id) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + g.FocusScopeStack.push_back(window->DC.NavFocusScopeIdCurrent); + window->DC.NavFocusScopeIdCurrent = id; +} + +void ImGui::PopFocusScope() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + IM_ASSERT(g.FocusScopeStack.Size > 0); // Too many PopFocusScope() ? + window->DC.NavFocusScopeIdCurrent = g.FocusScopeStack.back(); + g.FocusScopeStack.pop_back(); +} + +// Note: this will likely be called ActivateItem() once we rework our Focus/Activation system! +void ImGui::SetKeyboardFocusHere(int offset) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + IM_ASSERT(offset >= -1); // -1 is allowed but not below + IMGUI_DEBUG_LOG_ACTIVEID("SetKeyboardFocusHere(%d) in window \"%s\"\n", offset, window->Name); + + // It makes sense in the vast majority of cases to never interrupt a drag and drop. + // When we refactor this function into ActivateItem() we may want to make this an option. + // MovingWindow is protected from most user inputs using SetActiveIdUsingNavAndKeys(), but + // is also automatically dropped in the event g.ActiveId is stolen. + if (g.DragDropActive || g.MovingWindow != NULL) + { + IMGUI_DEBUG_LOG_ACTIVEID("SetKeyboardFocusHere() ignored while DragDropActive!\n"); + return; + } + + SetNavWindow(window); + + ImGuiScrollFlags scroll_flags = window->Appearing ? ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_AlwaysCenterY : ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleEdgeY; + NavMoveRequestSubmit(ImGuiDir_None, offset < 0 ? ImGuiDir_Up : ImGuiDir_Down, ImGuiNavMoveFlags_Tabbing | ImGuiNavMoveFlags_FocusApi, scroll_flags); // FIXME-NAV: Once we refactor tabbing, add LegacyApi flag to not activate non-inputable. + if (offset == -1) + { + NavMoveRequestResolveWithLastItem(&g.NavMoveResultLocal); + } + else + { + g.NavTabbingDir = 1; + g.NavTabbingCounter = offset + 1; + } +} + +void ImGui::SetItemDefaultFocus() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + if (!window->Appearing) + return; + if (g.NavWindow != window->RootWindowForNav || (!g.NavInitRequest && g.NavInitResultId == 0) || g.NavLayer != window->DC.NavLayerCurrent) + return; + + g.NavInitRequest = false; + g.NavInitResultId = g.LastItemData.ID; + g.NavInitResultRectRel = WindowRectAbsToRel(window, g.LastItemData.Rect); + NavUpdateAnyRequestFlag(); + + // Scroll could be done in NavInitRequestApplyResult() via a opt-in flag (we however don't want regular init requests to scroll) + if (!IsItemVisible()) + ScrollToRectEx(window, g.LastItemData.Rect, ImGuiScrollFlags_None); +} + +void ImGui::SetStateStorage(ImGuiStorage* tree) +{ + ImGuiWindow* window = GImGui->CurrentWindow; + window->DC.StateStorage = tree ? tree : &window->StateStorage; +} + +ImGuiStorage* ImGui::GetStateStorage() +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->DC.StateStorage; +} + +void ImGui::PushID(const char* str_id) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + ImGuiID id = window->GetID(str_id); + window->IDStack.push_back(id); +} + +void ImGui::PushID(const char* str_id_begin, const char* str_id_end) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + ImGuiID id = window->GetID(str_id_begin, str_id_end); + window->IDStack.push_back(id); +} + +void ImGui::PushID(const void* ptr_id) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + ImGuiID id = window->GetID(ptr_id); + window->IDStack.push_back(id); +} + +void ImGui::PushID(int int_id) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + ImGuiID id = window->GetID(int_id); + window->IDStack.push_back(id); +} + +// Push a given id value ignoring the ID stack as a seed. +void ImGui::PushOverrideID(ImGuiID id) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + if (g.DebugHookIdInfo == id) + DebugHookIdInfo(id, ImGuiDataType_ID, NULL, NULL); + window->IDStack.push_back(id); +} + +// Helper to avoid a common series of PushOverrideID -> GetID() -> PopID() call +// (note that when using this pattern, TestEngine's "Stack Tool" will tend to not display the intermediate stack level. +// for that to work we would need to do PushOverrideID() -> ItemAdd() -> PopID() which would alter widget code a little more) +ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGuiID seed) +{ + ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed); + ImGuiContext& g = *GImGui; + if (g.DebugHookIdInfo == id) + DebugHookIdInfo(id, ImGuiDataType_String, str, str_end); + return id; +} + +void ImGui::PopID() +{ + ImGuiWindow* window = GImGui->CurrentWindow; + IM_ASSERT(window->IDStack.Size > 1); // Too many PopID(), or could be popping in a wrong/different window? + window->IDStack.pop_back(); +} + +ImGuiID ImGui::GetID(const char* str_id) +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->GetID(str_id); +} + +ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end) +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->GetID(str_id_begin, str_id_end); +} + +ImGuiID ImGui::GetID(const void* ptr_id) +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->GetID(ptr_id); +} + +bool ImGui::IsRectVisible(const ImVec2& size) +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size)); +} + +bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max) +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->ClipRect.Overlaps(ImRect(rect_min, rect_max)); +} + + +//----------------------------------------------------------------------------- +// [SECTION] INPUTS +//----------------------------------------------------------------------------- + +// Test if mouse cursor is hovering given rectangle +// NB- Rectangle is clipped by our current clip setting +// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding) +bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip) +{ + ImGuiContext& g = *GImGui; + + // Clip + ImRect rect_clipped(r_min, r_max); + if (clip) + rect_clipped.ClipWith(g.CurrentWindow->ClipRect); + + // Expand for touch input + const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding); + if (!rect_for_touch.Contains(g.IO.MousePos)) + return false; + if (!g.MouseViewport->GetMainRect().Overlaps(rect_clipped)) + return false; + return true; +} + +ImGuiKeyData* ImGui::GetKeyData(ImGuiKey key) +{ + ImGuiContext& g = *GImGui; + int index; +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + IM_ASSERT(key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_NamedKey_END); + if (IsLegacyKey(key)) + index = (g.IO.KeyMap[key] != -1) ? g.IO.KeyMap[key] : key; // Remap native->imgui or imgui->native + else + index = key; +#else + IM_ASSERT(IsNamedKey(key) && "Support for user key indices was dropped in favor of ImGuiKey. Please update backend & user code."); + index = key - ImGuiKey_NamedKey_BEGIN; +#endif + return &g.IO.KeysData[index]; +} + +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO +int ImGui::GetKeyIndex(ImGuiKey key) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(IsNamedKey(key)); + const ImGuiKeyData* key_data = GetKeyData(key); + return (int)(key_data - g.IO.KeysData); +} +#endif + +// Those names a provided for debugging purpose and are not meant to be saved persistently not compared. +static const char* const GKeyNames[] = +{ + "Tab", "LeftArrow", "RightArrow", "UpArrow", "DownArrow", "PageUp", "PageDown", + "Home", "End", "Insert", "Delete", "Backspace", "Space", "Enter", "Escape", + "LeftCtrl", "LeftShift", "LeftAlt", "LeftSuper", "RightCtrl", "RightShift", "RightAlt", "RightSuper", "Menu", + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", + "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", + "Apostrophe", "Comma", "Minus", "Period", "Slash", "Semicolon", "Equal", "LeftBracket", + "Backslash", "RightBracket", "GraveAccent", "CapsLock", "ScrollLock", "NumLock", "PrintScreen", + "Pause", "Keypad0", "Keypad1", "Keypad2", "Keypad3", "Keypad4", "Keypad5", "Keypad6", + "Keypad7", "Keypad8", "Keypad9", "KeypadDecimal", "KeypadDivide", "KeypadMultiply", + "KeypadSubtract", "KeypadAdd", "KeypadEnter", "KeypadEqual", + "GamepadStart", "GamepadBack", "GamepadFaceUp", "GamepadFaceDown", "GamepadFaceLeft", "GamepadFaceRight", + "GamepadDpadUp", "GamepadDpadDown", "GamepadDpadLeft", "GamepadDpadRight", + "GamepadL1", "GamepadR1", "GamepadL2", "GamepadR2", "GamepadL3", "GamepadR3", + "GamepadLStickUp", "GamepadLStickDown", "GamepadLStickLeft", "GamepadLStickRight", + "GamepadRStickUp", "GamepadRStickDown", "GamepadRStickLeft", "GamepadRStickRight", + "ModCtrl", "ModShift", "ModAlt", "ModSuper" +}; +IM_STATIC_ASSERT(ImGuiKey_NamedKey_COUNT == IM_ARRAYSIZE(GKeyNames)); + +const char* ImGui::GetKeyName(ImGuiKey key) +{ +#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO + IM_ASSERT((IsNamedKey(key) || key == ImGuiKey_None) && "Support for user key indices was dropped in favor of ImGuiKey. Please update backend and user code."); +#else + if (IsLegacyKey(key)) + { + ImGuiIO& io = GetIO(); + if (io.KeyMap[key] == -1) + return "N/A"; + IM_ASSERT(IsNamedKey((ImGuiKey)io.KeyMap[key])); + key = (ImGuiKey)io.KeyMap[key]; + } +#endif + if (key == ImGuiKey_None) + return "None"; + if (!IsNamedKey(key)) + return "Unknown"; + + return GKeyNames[key - ImGuiKey_NamedKey_BEGIN]; +} + +// t0 = previous time (e.g.: g.Time - g.IO.DeltaTime) +// t1 = current time (e.g.: g.Time) +// An event is triggered at: +// t = 0.0f t = repeat_delay, t = repeat_delay + repeat_rate*N +int ImGui::CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) +{ + if (t1 == 0.0f) + return 1; + if (t0 >= t1) + return 0; + if (repeat_rate <= 0.0f) + return (t0 < repeat_delay) && (t1 >= repeat_delay); + const int count_t0 = (t0 < repeat_delay) ? -1 : (int)((t0 - repeat_delay) / repeat_rate); + const int count_t1 = (t1 < repeat_delay) ? -1 : (int)((t1 - repeat_delay) / repeat_rate); + const int count = count_t1 - count_t0; + return count; +} + +int ImGui::GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float repeat_rate) +{ + ImGuiContext& g = *GImGui; + const ImGuiKeyData* key_data = GetKeyData(key); + const float t = key_data->DownDuration; + return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, repeat_delay, repeat_rate); +} + +// Note that Dear ImGui doesn't know the meaning/semantic of ImGuiKey from 0..511: they are legacy native keycodes. +// Consider transitioning from 'IsKeyDown(MY_ENGINE_KEY_A)' (<1.87) to IsKeyDown(ImGuiKey_A) (>= 1.87) +bool ImGui::IsKeyDown(ImGuiKey key) +{ + const ImGuiKeyData* key_data = GetKeyData(key); + if (!key_data->Down) + return false; + return true; +} + +bool ImGui::IsKeyPressed(ImGuiKey key, bool repeat) +{ + ImGuiContext& g = *GImGui; + const ImGuiKeyData* key_data = GetKeyData(key); + const float t = key_data->DownDuration; + if (t < 0.0f) + return false; + const bool pressed = (t == 0.0f) || (repeat && t > g.IO.KeyRepeatDelay && GetKeyPressedAmount(key, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0); + if (!pressed) + return false; + return true; +} + +bool ImGui::IsKeyReleased(ImGuiKey key) +{ + const ImGuiKeyData* key_data = GetKeyData(key); + if (key_data->DownDurationPrev < 0.0f || key_data->Down) + return false; + return true; +} + +bool ImGui::IsMouseDown(ImGuiMouseButton button) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseDown[button]; +} + +bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + const float t = g.IO.MouseDownDuration[button]; + if (t == 0.0f) + return true; + if (repeat && t > g.IO.KeyRepeatDelay) + return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0; + return false; +} + +bool ImGui::IsMouseReleased(ImGuiMouseButton button) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseReleased[button]; +} + +bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button) { ImGuiContext& g = *GImGui; - g.NavNextActivateId = id; - g.NavNextActivateFlags = ImGuiActivateFlags_None; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseClickedCount[button] == 2; } -void ImGui::PushFocusScope(ImGuiID id) +int ImGui::GetMouseClickedCount(ImGuiMouseButton button) { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - g.FocusScopeStack.push_back(window->DC.NavFocusScopeIdCurrent); - window->DC.NavFocusScopeIdCurrent = id; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseClickedCount[button]; } -void ImGui::PopFocusScope() +// Return if a mouse click/drag went past the given threshold. Valid to call during the MouseReleased frame. +// [Internal] This doesn't test if the button is pressed +bool ImGui::IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold) { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - IM_ASSERT(g.FocusScopeStack.Size > 0); // Too many PopFocusScope() ? - window->DC.NavFocusScopeIdCurrent = g.FocusScopeStack.back(); - g.FocusScopeStack.pop_back(); + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + if (lock_threshold < 0.0f) + lock_threshold = g.IO.MouseDragThreshold; + return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold; } -void ImGui::SetKeyboardFocusHere(int offset) +bool ImGui::IsMouseDragging(ImGuiMouseButton button, float lock_threshold) { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - IM_ASSERT(offset >= -1); // -1 is allowed but not below - g.NavWindow = window; - ImGuiScrollFlags scroll_flags = window->Appearing ? ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_AlwaysCenterY : ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleEdgeY; - NavMoveRequestSubmit(ImGuiDir_None, offset < 0 ? ImGuiDir_Up : ImGuiDir_Down, ImGuiNavMoveFlags_Tabbing | ImGuiNavMoveFlags_FocusApi, scroll_flags); // FIXME-NAV: Once we refactor tabbing, add LegacyApi flag to not activate non-inputable. - if (offset == -1) - { - NavMoveRequestResolveWithLastItem(&g.NavMoveResultLocal); - } - else - { - g.NavTabbingDir = 1; - g.NavTabbingCounter = offset + 1; - } + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + if (!g.IO.MouseDown[button]) + return false; + return IsMouseDragPastThreshold(button, lock_threshold); } -void ImGui::SetItemDefaultFocus() +ImVec2 ImGui::GetMousePos() { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (!window->Appearing) - return; - if (g.NavWindow != window->RootWindowForNav || (!g.NavInitRequest && g.NavInitResultId == 0) || g.NavLayer != window->DC.NavLayerCurrent) - return; - - g.NavInitRequest = false; - g.NavInitResultId = g.LastItemData.ID; - g.NavInitResultRectRel = WindowRectAbsToRel(window, g.LastItemData.Rect); - NavUpdateAnyRequestFlag(); - - // Scroll could be done in NavInitRequestApplyResult() via a opt-in flag (we however don't want regular init requests to scroll) - if (!IsItemVisible()) - ScrollToRectEx(window, g.LastItemData.Rect, ImGuiScrollFlags_None); + return g.IO.MousePos; } -void ImGui::SetStateStorage(ImGuiStorage* tree) +// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed! +ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup() { - ImGuiWindow* window = GImGui->CurrentWindow; - window->DC.StateStorage = tree ? tree : &window->StateStorage; + ImGuiContext& g = *GImGui; + if (g.BeginPopupStack.Size > 0) + return g.OpenPopupStack[g.BeginPopupStack.Size - 1].OpenMousePos; + return g.IO.MousePos; } -ImGuiStorage* ImGui::GetStateStorage() +// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position. +bool ImGui::IsMousePosValid(const ImVec2* mouse_pos) { - ImGuiWindow* window = GImGui->CurrentWindow; - return window->DC.StateStorage; + // The assert is only to silence a false-positive in XCode Static Analysis. + // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions). + IM_ASSERT(GImGui != NULL); + const float MOUSE_INVALID = -256000.0f; + ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos; + return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID; } -void ImGui::PushID(const char* str_id) +// [WILL OBSOLETE] This was designed for backends, but prefer having backend maintain a mask of held mouse buttons, because upcoming input queue system will make this invalid. +bool ImGui::IsAnyMouseDown() { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiID id = window->GetIDNoKeepAlive(str_id); - window->IDStack.push_back(id); + for (int n = 0; n < IM_ARRAYSIZE(g.IO.MouseDown); n++) + if (g.IO.MouseDown[n]) + return true; + return false; } -void ImGui::PushID(const char* str_id_begin, const char* str_id_end) +// Return the delta from the initial clicking position while the mouse button is clicked or was just released. +// This is locked and return 0.0f until the mouse moves past a distance threshold at least once. +// NB: This is only valid if IsMousePosValid(). backends in theory should always keep mouse position valid when dragging even outside the client window. +ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold) { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiID id = window->GetIDNoKeepAlive(str_id_begin, str_id_end); - window->IDStack.push_back(id); + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + if (lock_threshold < 0.0f) + lock_threshold = g.IO.MouseDragThreshold; + if (g.IO.MouseDown[button] || g.IO.MouseReleased[button]) + if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold) + if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button])) + return g.IO.MousePos - g.IO.MouseClickedPos[button]; + return ImVec2(0.0f, 0.0f); } -void ImGui::PushID(const void* ptr_id) +void ImGui::ResetMouseDragDelta(ImGuiMouseButton button) { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiID id = window->GetIDNoKeepAlive(ptr_id); - window->IDStack.push_back(id); + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr + g.IO.MouseClickedPos[button] = g.IO.MousePos; } -void ImGui::PushID(int int_id) +ImGuiMouseCursor ImGui::GetMouseCursor() { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiID id = window->GetIDNoKeepAlive(int_id); - window->IDStack.push_back(id); + return g.MouseCursor; } -// Push a given id value ignoring the ID stack as a seed. -void ImGui::PushOverrideID(ImGuiID id) +void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type) { ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (g.DebugHookIdInfo == id) - DebugHookIdInfo(id, ImGuiDataType_ID, NULL, NULL); - window->IDStack.push_back(id); + g.MouseCursor = cursor_type; } -// Helper to avoid a common series of PushOverrideID -> GetID() -> PopID() call -// (note that when using this pattern, TestEngine's "Stack Tool" will tend to not display the intermediate stack level. -// for that to work we would need to do PushOverrideID() -> ItemAdd() -> PopID() which would alter widget code a little more) -ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGuiID seed) +void ImGui::SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard) { - ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed); - KeepAliveID(id); ImGuiContext& g = *GImGui; - if (g.DebugHookIdInfo == id) - DebugHookIdInfo(id, ImGuiDataType_String, str, str_end); - return id; + g.WantCaptureKeyboardNextFrame = want_capture_keyboard ? 1 : 0; } -void ImGui::PopID() +void ImGui::SetNextFrameWantCaptureMouse(bool want_capture_mouse) { - ImGuiWindow* window = GImGui->CurrentWindow; - IM_ASSERT(window->IDStack.Size > 1); // Too many PopID(), or could be popping in a wrong/different window? - window->IDStack.pop_back(); + ImGuiContext& g = *GImGui; + g.WantCaptureMouseNextFrame = want_capture_mouse ? 1 : 0; } -ImGuiID ImGui::GetID(const char* str_id) +#ifndef IMGUI_DISABLE_DEBUG_TOOLS +static const char* GetInputSourceName(ImGuiInputSource source) { - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(str_id); + const char* input_source_names[] = { "None", "Mouse", "Keyboard", "Gamepad", "Nav", "Clipboard" }; + IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT); + return input_source_names[source]; } +#endif -ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end) +/*static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEvent* e) { - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(str_id_begin, str_id_end); -} + if (e->Type == ImGuiInputEventType_MousePos) { IMGUI_DEBUG_LOG_IO("%s: MousePos (%.1f %.1f)\n", prefix, e->MousePos.PosX, e->MousePos.PosY); return; } + if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG_IO("%s: MouseButton %d %s\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up"); return; } + if (e->Type == ImGuiInputEventType_MouseWheel) { IMGUI_DEBUG_LOG_IO("%s: MouseWheel (%.1f %.1f)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY); return; } + if (e->Type == ImGuiInputEventType_Key) { IMGUI_DEBUG_LOG_IO("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; } + if (e->Type == ImGuiInputEventType_Text) { IMGUI_DEBUG_LOG_IO("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; } + if (e->Type == ImGuiInputEventType_Focus) { IMGUI_DEBUG_LOG_IO("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; } +}*/ -ImGuiID ImGui::GetID(const void* ptr_id) +// Process input queue +// We always call this with the value of 'bool g.IO.ConfigInputTrickleEventQueue'. +// - trickle_fast_inputs = false : process all events, turn into flattened input state (e.g. successive down/up/down/up will be lost) +// - trickle_fast_inputs = true : process as many events as possible (successive down/up/down/up will be trickled over several frames so nothing is lost) (new feature in 1.87) +void ImGui::UpdateInputEvents(bool trickle_fast_inputs) { - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(ptr_id); -} + ImGuiContext& g = *GImGui; + ImGuiIO& io = g.IO; -bool ImGui::IsRectVisible(const ImVec2& size) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size)); -} + // Only trickle chars<>key when working with InputText() + // FIXME: InputText() could parse event trail? + // FIXME: Could specialize chars<>keys trickling rules for control keys (those not typically associated to characters) + const bool trickle_interleaved_keys_and_text = (trickle_fast_inputs && g.WantTextInputNextFrame == 1); -bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ClipRect.Overlaps(ImRect(rect_min, rect_max)); + bool mouse_moved = false, mouse_wheeled = false, key_changed = false, text_inputted = false; + int mouse_button_changed = 0x00; + ImBitArray key_changed_mask; + + int event_n = 0; + for (; event_n < g.InputEventsQueue.Size; event_n++) + { + const ImGuiInputEvent* e = &g.InputEventsQueue[event_n]; + if (e->Type == ImGuiInputEventType_MousePos) + { + ImVec2 event_pos(e->MousePos.PosX, e->MousePos.PosY); + if (IsMousePosValid(&event_pos)) + event_pos = ImVec2(ImFloorSigned(event_pos.x), ImFloorSigned(event_pos.y)); // Apply same flooring as UpdateMouseInputs() + if (io.MousePos.x != event_pos.x || io.MousePos.y != event_pos.y) + { + // Trickling Rule: Stop processing queued events if we already handled a mouse button change + if (trickle_fast_inputs && (mouse_button_changed != 0 || mouse_wheeled || key_changed || text_inputted)) + break; + io.MousePos = event_pos; + mouse_moved = true; + } + } + else if (e->Type == ImGuiInputEventType_MouseButton) + { + const ImGuiMouseButton button = e->MouseButton.Button; + IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); + if (io.MouseDown[button] != e->MouseButton.Down) + { + // Trickling Rule: Stop processing queued events if we got multiple action on the same button + if (trickle_fast_inputs && ((mouse_button_changed & (1 << button)) || mouse_wheeled)) + break; + io.MouseDown[button] = e->MouseButton.Down; + mouse_button_changed |= (1 << button); + } + } + else if (e->Type == ImGuiInputEventType_MouseWheel) + { + if (e->MouseWheel.WheelX != 0.0f || e->MouseWheel.WheelY != 0.0f) + { + // Trickling Rule: Stop processing queued events if we got multiple action on the event + if (trickle_fast_inputs && (mouse_moved || mouse_button_changed != 0)) + break; + io.MouseWheelH += e->MouseWheel.WheelX; + io.MouseWheel += e->MouseWheel.WheelY; + mouse_wheeled = true; + } + } + else if (e->Type == ImGuiInputEventType_MouseViewport) + { + io.MouseHoveredViewport = e->MouseViewport.HoveredViewportID; + } + else if (e->Type == ImGuiInputEventType_Key) + { + ImGuiKey key = e->Key.Key; + IM_ASSERT(key != ImGuiKey_None); + const int keydata_index = (key - ImGuiKey_KeysData_OFFSET); + ImGuiKeyData* keydata = &io.KeysData[keydata_index]; + if (keydata->Down != e->Key.Down || keydata->AnalogValue != e->Key.AnalogValue) + { + // Trickling Rule: Stop processing queued events if we got multiple action on the same button + if (trickle_fast_inputs && keydata->Down != e->Key.Down && (key_changed_mask.TestBit(keydata_index) || text_inputted || mouse_button_changed != 0)) + break; + keydata->Down = e->Key.Down; + keydata->AnalogValue = e->Key.AnalogValue; + key_changed = true; + key_changed_mask.SetBit(keydata_index); + + if (key == ImGuiKey_ModCtrl || key == ImGuiKey_ModShift || key == ImGuiKey_ModAlt || key == ImGuiKey_ModSuper) + { + if (key == ImGuiKey_ModCtrl) { io.KeyCtrl = keydata->Down; } + if (key == ImGuiKey_ModShift) { io.KeyShift = keydata->Down; } + if (key == ImGuiKey_ModAlt) { io.KeyAlt = keydata->Down; } + if (key == ImGuiKey_ModSuper) { io.KeySuper = keydata->Down; } + io.KeyMods = GetMergedModFlags(); + } + + // Allow legacy code using io.KeysDown[GetKeyIndex()] with new backends +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + io.KeysDown[key] = keydata->Down; + if (io.KeyMap[key] != -1) + io.KeysDown[io.KeyMap[key]] = keydata->Down; +#endif + } + } + else if (e->Type == ImGuiInputEventType_Text) + { + // Trickling Rule: Stop processing queued events if keys/mouse have been interacted with + if (trickle_fast_inputs && ((key_changed && trickle_interleaved_keys_and_text) || mouse_button_changed != 0 || mouse_moved || mouse_wheeled)) + break; + unsigned int c = e->Text.Char; + io.InputQueueCharacters.push_back(c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID); + if (trickle_interleaved_keys_and_text) + text_inputted = true; + } + else if (e->Type == ImGuiInputEventType_Focus) + { + // We intentionally overwrite this and process lower, in order to give a chance + // to multi-viewports backends to queue AddFocusEvent(false) + AddFocusEvent(true) in same frame. + io.AppFocusLost = !e->AppFocused.Focused; + } + else + { + IM_ASSERT(0 && "Unknown event!"); + } + } + + // Record trail (for domain-specific applications wanting to access a precise trail) + //if (event_n != 0) IMGUI_DEBUG_LOG_IO("Processed: %d / Remaining: %d\n", event_n, g.InputEventsQueue.Size - event_n); + for (int n = 0; n < event_n; n++) + g.InputEventsTrail.push_back(g.InputEventsQueue[n]); + + // [DEBUG] + /*if (event_n != 0) + for (int n = 0; n < g.InputEventsQueue.Size; n++) + DebugPrintInputEvent(n < event_n ? "Processed" : "Remaining", &g.InputEventsQueue[n]);*/ + + // Remaining events will be processed on the next frame + if (event_n == g.InputEventsQueue.Size) + g.InputEventsQueue.resize(0); + else + g.InputEventsQueue.erase(g.InputEventsQueue.Data, g.InputEventsQueue.Data + event_n); + + // Clear buttons state when focus is lost + // (this is useful so e.g. releasing Alt after focus loss on Alt-Tab doesn't trigger the Alt menu toggle) + if (g.IO.AppFocusLost) + { + g.IO.ClearInputKeys(); + g.IO.AppFocusLost = false; + } } @@ -7866,9 +8614,12 @@ bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max) // Helper function to verify ABI compatibility between caller code and compiled version of Dear ImGui. // Verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit -// If the user has inconsistent compilation settings, imgui configuration #define, packing pragma, etc. your user code -// may see different structures than what imgui.cpp sees, which is problematic. -// We usually require settings to be in imconfig.h to make sure that they are accessible to all compilation units involved with Dear ImGui. +// If this triggers you have an issue: +// - Most commonly: mismatched headers and compiled code version. +// - Or: mismatched configuration #define, compilation settings, packing pragma etc. +// The configuration settings mentioned in imconfig.h must be set for all compilation units involved with Dear ImGui, +// which is way it is required you put them in your imconfig file (and not just before including imgui.h). +// Otherwise it is possible that different compilation units would see different structure layout bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert, size_t sz_idx) { bool error = false; @@ -7902,16 +8653,19 @@ static void ImGui::ErrorCheckNewFrameSanityChecks() IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value!"); IM_ASSERT(g.IO.Fonts->IsBuilt() && "Font Atlas not built! Make sure you called ImGui_ImplXXXX_NewFrame() function for renderer backend, which should call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8()"); IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting!"); - IM_ASSERT(g.Style.CircleTessellationMaxError > 0.0f && "Invalid style setting!"); + IM_ASSERT(g.Style.CircleTessellationMaxError > 0.0f && "Invalid style setting!"); IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting!"); // Allows us to avoid a few clamps in color computations IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting."); IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right); - for (int n = 0; n < ImGuiKey_COUNT; n++) - IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)"); + IM_ASSERT(g.Style.ColorButtonPosition == ImGuiDir_Left || g.Style.ColorButtonPosition == ImGuiDir_Right); +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_COUNT; n++) + IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < ImGuiKey_LegacyNativeKey_END && "io.KeyMap[] contains an out of bound value (need to be 0..511, or -1 for unmapped key)"); // Check: required key mapping (we intentionally do NOT check all keys to not pressure user into setting up everything, but Space is required and was only added in 1.60 WIP) - if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) + if ((g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) && g.IO.BackendUsingLegacyKeyArrays == 1) IM_ASSERT(g.IO.KeyMap[ImGuiKey_Space] != -1 && "ImGuiKey_Space is not mapped, required for keyboard navigation."); +#endif // Check: the io.ConfigWindowsResizeFromEdges option requires backend to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly. if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors)) @@ -7968,11 +8722,11 @@ static void ImGui::ErrorCheckEndFrameSanityChecks() // send key release events mid-frame. This would normally trigger this assertion and lead to sheared inputs. // We silently accommodate for this case by ignoring/ the case where all io.KeyXXX modifiers were released (aka key_mod_flags == 0), // while still correctly asserting on mid-frame key press events. - const ImGuiKeyModFlags key_mod_flags = GetMergedKeyModFlags(); - IM_ASSERT((key_mod_flags == 0 || g.IO.KeyMods == key_mod_flags) && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods"); - IM_UNUSED(key_mod_flags); + const ImGuiModFlags key_mods = GetMergedModFlags(); + IM_ASSERT((key_mods == 0 || g.IO.KeyMods == key_mods) && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods"); + IM_UNUSED(key_mods); - // Recover from errors + // [EXPERIMENTAL] Recover from errors: You may call this yourself before EndFrame(). //ErrorCheckEndFrameRecover(); // Report when there is a mismatch of Begin/BeginChild vs End/EndChild calls. Important: Remember that the Begin/BeginChild API requires you @@ -8012,7 +8766,6 @@ void ImGui::ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, voi IM_ASSERT(window->IsFallbackWindow); break; } - IM_ASSERT(window == g.CurrentWindow); if (window->Flags & ImGuiWindowFlags_ChildWindow) { if (log_callback) log_callback(user_data, "Recovered from missing EndChild() for '%s'", window->Name); @@ -8155,7 +8908,7 @@ void ImGuiStackSizes::CompareWithCurrentState() // - GetWindowContentRegionMin(), GetWindowContentRegionMax() // - BeginGroup() // - EndGroup() -// Also see in imgui_widgets: tab bars, columns. +// Also see in imgui_widgets: tab bars, and in imgui_tables: tables, columns. //----------------------------------------------------------------------------- // Advance cursor given item size for layout. @@ -8172,14 +8925,16 @@ void ImGui::ItemSize(const ImVec2& size, float text_baseline_y) // In theory we should be offsetting the starting position (window->DC.CursorPos), that will be the topic of a larger refactor, // but since ItemSize() is not yet an API that moves the cursor (to handle e.g. wrapping) enlarging the height has the same effect. const float offset_to_match_baseline_y = (text_baseline_y >= 0) ? ImMax(0.0f, window->DC.CurrLineTextBaseOffset - text_baseline_y) : 0.0f; - const float line_height = ImMax(window->DC.CurrLineSize.y, size.y + offset_to_match_baseline_y); + + const float line_y1 = window->DC.IsSameLine ? window->DC.CursorPosPrevLine.y : window->DC.CursorPos.y; + const float line_height = ImMax(window->DC.CurrLineSize.y, /*ImMax(*/window->DC.CursorPos.y - line_y1/*, 0.0f)*/ + size.y + offset_to_match_baseline_y); // Always align ourselves on pixel boundaries //if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG] window->DC.CursorPosPrevLine.x = window->DC.CursorPos.x + size.x; - window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y; + window->DC.CursorPosPrevLine.y = line_y1; window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); // Next line - window->DC.CursorPos.y = IM_FLOOR(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y); // Next line + window->DC.CursorPos.y = IM_FLOOR(line_y1 + line_height + g.Style.ItemSpacing.y); // Next line window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x); window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y); //if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG] @@ -8188,17 +8943,13 @@ void ImGui::ItemSize(const ImVec2& size, float text_baseline_y) window->DC.CurrLineSize.y = 0.0f; window->DC.PrevLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, text_baseline_y); window->DC.CurrLineTextBaseOffset = 0.0f; + window->DC.IsSameLine = false; // Horizontal layout mode if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) SameLine(); } -void ImGui::ItemSize(const ImRect& bb, float text_baseline_y) -{ - ItemSize(bb.GetSize(), text_baseline_y); -} - // Declare item bounding box for clipping and interaction. // Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface // declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction. @@ -8218,6 +8969,8 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu // Directional navigation processing if (id != 0) { + KeepAliveID(id); + // Runs prior to clipping early-out // (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 @@ -8233,6 +8986,11 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened)) NavProcessItem(); + // [DEBUG] People keep stumbling on this problem and using "" as identifier in the root of a window instead of "##something". + // Empty identifier are valid and useful in a small amount of cases, but 99.9% of the time you want to use "##something". + // READ THE FAQ: https://dearimgui.org/faq + IM_ASSERT(id != window->ID && "Cannot have an empty ID at the root of a window. If you need an empty label, use ## and read the FAQ about how the ID Stack works!"); + // [DEBUG] Item Picker tool, when enabling the "extended" version we perform the check in ItemAdd() #ifdef IMGUI_DEBUG_TOOL_ITEM_PICKER_EX if (id == g.DebugItemPickerBreakId) @@ -8268,25 +9026,28 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu // spacing_w >= 0 : enforce spacing amount void ImGui::SameLine(float offset_from_start_x, float spacing_w) { - ImGuiWindow* window = GetCurrentWindow(); + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; if (window->SkipItems) return; - ImGuiContext& g = *GImGui; if (offset_from_start_x != 0.0f) { - if (spacing_w < 0.0f) spacing_w = 0.0f; + if (spacing_w < 0.0f) + spacing_w = 0.0f; window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + offset_from_start_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x; window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y; } else { - if (spacing_w < 0.0f) spacing_w = g.Style.ItemSpacing.x; + if (spacing_w < 0.0f) + spacing_w = g.Style.ItemSpacing.x; window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w; window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y; } window->DC.CurrLineSize = window->DC.PrevLineSize; window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset; + window->DC.IsSameLine = true; } ImVec2 ImGui::GetCursorScreenPos() @@ -8431,7 +9192,8 @@ float ImGui::CalcItemWidth() // The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable) ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h) { - ImGuiWindow* window = GImGui->CurrentWindow; + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; ImVec2 region_max; if (size.x < 0.0f || size.y < 0.0f) @@ -8575,7 +9337,7 @@ void ImGui::EndGroup() window->DC.CurrLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now. ItemSize(group_bb.GetSize()); - ItemAdd(group_bb, 0); + ItemAdd(group_bb, 0, NULL, ImGuiItemFlags_NoTabStop); // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group. // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets. @@ -8864,10 +9626,10 @@ void ImGui::SetScrollHereY(float center_y_ratio) void ImGui::BeginTooltip() { - BeginTooltipEx(ImGuiWindowFlags_None, ImGuiTooltipFlags_None); + BeginTooltipEx(ImGuiTooltipFlags_None, ImGuiWindowFlags_None); } -void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags) +void ImGui::BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags) { ImGuiContext& g = *GImGui; @@ -8896,7 +9658,7 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags toolt ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount); } ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDocking; - Begin(window_name, NULL, flags | extra_flags); + Begin(window_name, NULL, flags | extra_window_flags); } void ImGui::EndTooltip() @@ -8907,7 +9669,7 @@ void ImGui::EndTooltip() void ImGui::SetTooltipV(const char* fmt, va_list args) { - BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip); + BeginTooltipEx(ImGuiTooltipFlags_OverridePreviousTooltip, ImGuiWindowFlags_None); TextV(fmt, args); EndTooltip(); } @@ -8975,10 +9737,22 @@ ImGuiWindow* ImGui::GetTopMostPopupModal() return NULL; } +ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal() +{ + ImGuiContext& g = *GImGui; + for (int n = g.OpenPopupStack.Size - 1; n >= 0; n--) + if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window) + if ((popup->Flags & ImGuiWindowFlags_Modal) && IsWindowActiveAndVisible(popup)) + return popup; + return NULL; +} + void ImGui::OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags) { ImGuiContext& g = *GImGui; - OpenPopupEx(g.CurrentWindow->GetID(str_id), popup_flags); + ImGuiID id = g.CurrentWindow->GetID(str_id); + IMGUI_DEBUG_LOG_POPUP("[popup] OpenPopup(\"%s\" -> 0x%08X\n", str_id, id); + OpenPopupEx(id, popup_flags); } void ImGui::OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags) @@ -9009,7 +9783,7 @@ void ImGui::OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags) popup_ref.OpenPopupPos = NavCalcPreferredRefPos(); popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos; - IMGUI_DEBUG_LOG_POPUP("OpenPopupEx(0x%08X)\n", id); + IMGUI_DEBUG_LOG_POPUP("[popup] OpenPopupEx(0x%08X)\n", id); if (g.OpenPopupStack.Size < current_stack_size + 1) { g.OpenPopupStack.push_back(popup_ref); @@ -9067,7 +9841,8 @@ void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to bool ref_window_is_descendent_of_popup = false; for (int n = popup_count_to_keep; n < g.OpenPopupStack.Size; n++) if (ImGuiWindow* popup_window = g.OpenPopupStack[n].Window) - if (popup_window->RootWindowDockTree == ref_window->RootWindowDockTree) + //if (popup_window->RootWindowDockTree == ref_window->RootWindowDockTree) // FIXME-MERGE + if (IsWindowWithinBeginStackOf(ref_window, popup_window)) { ref_window_is_descendent_of_popup = true; break; @@ -9078,7 +9853,7 @@ void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to } if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below { - IMGUI_DEBUG_LOG_POPUP("ClosePopupsOverWindow(\"%s\") -> ClosePopupToLevel(%d)\n", ref_window->Name, popup_count_to_keep); + IMGUI_DEBUG_LOG_POPUP("[popup] ClosePopupsOverWindow(\"%s\")\n", ref_window ? ref_window->Name : ""); ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup); } } @@ -9101,7 +9876,7 @@ void ImGui::ClosePopupsExceptModals() void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup) { ImGuiContext& g = *GImGui; - IMGUI_DEBUG_LOG_POPUP("ClosePopupToLevel(%d), restore_focus_to_window_under_popup=%d\n", remaining, restore_focus_to_window_under_popup); + IMGUI_DEBUG_LOG_POPUP("[popup] ClosePopupToLevel(%d), restore_focus_to_window_under_popup=%d\n", remaining, restore_focus_to_window_under_popup); IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size); // Trim open popup stack @@ -9140,13 +9915,13 @@ void ImGui::CloseCurrentPopup() ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window; bool close_parent = false; if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu)) - if (parent_popup_window == NULL || !(parent_popup_window->Flags & ImGuiWindowFlags_Modal)) + if (parent_popup_window && !(parent_popup_window->Flags & ImGuiWindowFlags_MenuBar)) close_parent = true; if (!close_parent) break; popup_idx--; } - IMGUI_DEBUG_LOG_POPUP("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx); + IMGUI_DEBUG_LOG_POPUP("[popup] CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx); ClosePopupToLevel(popup_idx, true); // A common pattern is to close a popup when selecting a menu item/selectable that will open another window. @@ -9168,7 +9943,7 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags flags) char name[20]; if (flags & ImGuiWindowFlags_ChildMenu) - ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth + ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginMenuCount); // Recycle windows based on depth else ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame @@ -9189,7 +9964,8 @@ bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags) return false; } flags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings; - return BeginPopupEx(g.CurrentWindow->GetID(str_id), flags); + ImGuiID id = g.CurrentWindow->GetID(str_id); + return BeginPopupEx(id, flags); } // If 'p_open' is specified for a modal popup window, the popup will have a regular close button which will close the popup. @@ -9268,7 +10044,7 @@ void ImGui::OpenPopupOnItemClick(const char* str_id, ImGuiPopupFlags popup_flags // - You may want to handle the whole on user side if you have specific needs (e.g. tweaking IsItemHovered() parameters). // This is essentially the same as: // id = str_id ? GetID(str_id) : GetItemID(); -// OpenPopupOnItemClick(str_id); +// OpenPopupOnItemClick(str_id, ImGuiPopupFlags_MouseButtonRight); // return BeginPopup(id); // Which is essentially the same as: // id = str_id ? GetID(str_id) : GetItemID(); @@ -9439,8 +10215,7 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window) } if (window->Flags & ImGuiWindowFlags_Popup) { - ImRect r_avoid = ImRect(window->Pos.x - 1, window->Pos.y - 1, window->Pos.x + 1, window->Pos.y + 1); - return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid, ImGuiPopupPositionPolicy_Default); + return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, ImRect(window->Pos, window->Pos), ImGuiPopupPositionPolicy_Default); // Ideally we'd disable r_avoid here } if (window->Flags & ImGuiWindowFlags_Tooltip) { @@ -9462,8 +10237,22 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window) // [SECTION] KEYBOARD/GAMEPAD NAVIGATION //----------------------------------------------------------------------------- -// FIXME-NAV: The existence of SetNavID vs SetFocusID properly needs to be clarified/reworked. -// In our terminology those should be interchangeable. Those two functions are merely a legacy artifact, so at minimum naming should be clarified. +// FIXME-NAV: The existence of SetNavID vs SetFocusID vs FocusWindow() needs to be clarified/reworked. +// In our terminology those should be interchangeable, yet right now this is super confusing. +// Those two functions are merely a legacy artifact, so at minimum naming should be clarified. + +void ImGui::SetNavWindow(ImGuiWindow* window) +{ + ImGuiContext& g = *GImGui; + if (g.NavWindow != window) + { + IMGUI_DEBUG_LOG_FOCUS("[focus] SetNavWindow(\"%s\")\n", window ? window->Name : ""); + g.NavWindow = window; + } + g.NavInitRequest = g.NavMoveSubmitted = g.NavMoveScoringItems = false; + NavUpdateAnyRequestFlag(); +} + void ImGui::SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel) { ImGuiContext& g = *GImGui; @@ -9481,12 +10270,12 @@ void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window) ImGuiContext& g = *GImGui; IM_ASSERT(id != 0); + if (g.NavWindow != window) + SetNavWindow(window); + // Assume that SetFocusID() is called in the context where its window->DC.NavLayerCurrent and window->DC.NavFocusScopeIdCurrent are valid. // Note that window may be != g.CurrentWindow (e.g. SetFocusID call in InputTextEx for multi-line text) const ImGuiNavLayer nav_layer = window->DC.NavLayerCurrent; - if (g.NavWindow != window) - g.NavInitRequest = false; - g.NavWindow = window; g.NavId = id; g.NavLayer = nav_layer; g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent; @@ -9686,10 +10475,10 @@ static void ImGui::NavProcessItem() const ImGuiItemFlags item_flags = g.LastItemData.InFlags; // Process Init Request - if (g.NavInitRequest && g.NavLayer == window->DC.NavLayerCurrent) + if (g.NavInitRequest && g.NavLayer == window->DC.NavLayerCurrent && (item_flags & ImGuiItemFlags_Disabled) == 0) { // Even if 'ImGuiItemFlags_NoNavDefaultFocus' is on (typically collapse/close button) we record the first ResultId so they can be used as a fallback - const bool candidate_for_nav_default_focus = (item_flags & (ImGuiItemFlags_NoNavDefaultFocus | ImGuiItemFlags_Disabled)) == 0; + const bool candidate_for_nav_default_focus = (item_flags & ImGuiItemFlags_NoNavDefaultFocus) == 0; if (candidate_for_nav_default_focus || g.NavInitResultId == 0) { g.NavInitResultId = id; @@ -9734,7 +10523,8 @@ static void ImGui::NavProcessItem() // Update window-relative bounding box of navigated item if (g.NavId == id) { - g.NavWindow = window; // Always refresh g.NavWindow, because some operations such as FocusItem() don't have a window. + if (g.NavWindow != window) + SetNavWindow(window); // Always refresh g.NavWindow, because some operations such as FocusItem() may not have a window. g.NavLayer = window->DC.NavLayerCurrent; g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent; g.NavIdIsAlive = true; @@ -9812,10 +10602,11 @@ void ImGui::NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavM g.NavMoveScrollFlags = scroll_flags; g.NavMoveForwardToNextFrame = false; g.NavMoveKeyMods = g.IO.KeyMods; - g.NavTabbingCounter = 0; g.NavMoveResultLocal.Clear(); g.NavMoveResultLocalVisible.Clear(); g.NavMoveResultOther.Clear(); + g.NavTabbingCounter = 0; + g.NavTabbingResultFirst.Clear(); NavUpdateAnyRequestFlag(); } @@ -9885,7 +10676,12 @@ void ImGui::NavRestoreLayer(ImGuiNavLayer layer) { ImGuiContext& g = *GImGui; if (layer == ImGuiNavLayer_Main) - g.NavWindow = NavRestoreLastChildNavWindow(g.NavWindow); + { + ImGuiWindow* prev_nav_window = g.NavWindow; + g.NavWindow = NavRestoreLastChildNavWindow(g.NavWindow); // FIXME-NAV: Should clear ongoing nav requests? + if (prev_nav_window) + IMGUI_DEBUG_LOG_FOCUS("[focus] NavRestoreLayer: from \"%s\" to SetNavWindow(\"%s\")\n", prev_nav_window->Name, g.NavWindow->Name); + } ImGuiWindow* window = g.NavWindow; if (window->NavLastIds[layer] != 0) { @@ -9953,9 +10749,10 @@ static ImVec2 ImGui::NavCalcPreferredRefPos() if (g.NavDisableHighlight || !g.NavDisableMouseHover || !window) { // Mouse (we need a fallback in case the mouse becomes invalid after being used) - if (IsMousePosValid(&g.IO.MousePos)) - return g.IO.MousePos; - return g.MouseLastValidPos; + // The +1.0f offset when stored by OpenPopupEx() allows reopening this or another popup (same or another mouse button) while not moving the mouse, it is pretty standard. + // In theory we could move that +1.0f offset in OpenPopupEx() + ImVec2 p = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : g.MouseLastValidPos; + return ImVec2(p.x + 1.0f, p.y); } else { @@ -9973,33 +10770,45 @@ static ImVec2 ImGui::NavCalcPreferredRefPos() } } -float ImGui::GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode) +const char* ImGui::GetNavInputName(ImGuiNavInput n) +{ + static const char* names[] = + { + "Activate", "Cancel", "Input", "Menu", "DpadLeft", "DpadRight", "DpadUp", "DpadDown", "LStickLeft", "LStickRight", "LStickUp", "LStickDown", + "FocusPrev", "FocusNext", "TweakSlow", "TweakFast", "KeyLeft", "KeyRight", "KeyUp", "KeyDown" + }; + IM_ASSERT(IM_ARRAYSIZE(names) == ImGuiNavInput_COUNT); + IM_ASSERT(n >= 0 && n < ImGuiNavInput_COUNT); + return names[n]; +} + +float ImGui::GetNavInputAmount(ImGuiNavInput n, ImGuiNavReadMode mode) { ImGuiContext& g = *GImGui; - if (mode == ImGuiInputReadMode_Down) + if (mode == ImGuiNavReadMode_Down) return g.IO.NavInputs[n]; // Instant, read analog input (0.0f..1.0f, as provided by user) const float t = g.IO.NavInputsDownDuration[n]; - if (t < 0.0f && mode == ImGuiInputReadMode_Released) // Return 1.0f when just released, no repeat, ignore analog input. + if (t < 0.0f && mode == ImGuiNavReadMode_Released) // Return 1.0f when just released, no repeat, ignore analog input. return (g.IO.NavInputsDownDurationPrev[n] >= 0.0f ? 1.0f : 0.0f); if (t < 0.0f) return 0.0f; - if (mode == ImGuiInputReadMode_Pressed) // Return 1.0f when just pressed, no repeat, ignore analog input. + if (mode == ImGuiNavReadMode_Pressed) // Return 1.0f when just pressed, no repeat, ignore analog input. return (t == 0.0f) ? 1.0f : 0.0f; - if (mode == ImGuiInputReadMode_Repeat) + if (mode == ImGuiNavReadMode_Repeat) return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.80f); - if (mode == ImGuiInputReadMode_RepeatSlow) + if (mode == ImGuiNavReadMode_RepeatSlow) return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 1.25f, g.IO.KeyRepeatRate * 2.00f); - if (mode == ImGuiInputReadMode_RepeatFast) + if (mode == ImGuiNavReadMode_RepeatFast) return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.30f); return 0.0f; } -ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor, float fast_factor) +ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiNavReadMode mode, float slow_factor, float fast_factor) { ImVec2 delta(0.0f, 0.0f); if (dir_sources & ImGuiNavDirSourceFlags_RawKeyboard) - delta += ImVec2((float)IsKeyDown(GetKeyIndex(ImGuiKey_RightArrow)) - (float)IsKeyDown(GetKeyIndex(ImGuiKey_LeftArrow)), (float)IsKeyDown(GetKeyIndex(ImGuiKey_DownArrow)) - (float)IsKeyDown(GetKeyIndex(ImGuiKey_UpArrow))); + delta += ImVec2((float)IsKeyDown(ImGuiKey_RightArrow) - (float)IsKeyDown(ImGuiKey_LeftArrow), (float)IsKeyDown(ImGuiKey_DownArrow) - (float)IsKeyDown(ImGuiKey_UpArrow)); if (dir_sources & ImGuiNavDirSourceFlags_Keyboard) delta += ImVec2(GetNavInputAmount(ImGuiNavInput_KeyRight_, mode) - GetNavInputAmount(ImGuiNavInput_KeyLeft_, mode), GetNavInputAmount(ImGuiNavInput_KeyDown_, mode) - GetNavInputAmount(ImGuiNavInput_KeyUp_, mode)); if (dir_sources & ImGuiNavDirSourceFlags_PadDPad) @@ -10019,23 +10828,40 @@ static void ImGui::NavUpdate() ImGuiIO& io = g.IO; io.WantSetMousePos = false; - //if (g.NavScoringDebugCount > 0) IMGUI_DEBUG_LOG("NavScoringDebugCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.NavScoringDebugCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest); + //if (g.NavScoringDebugCount > 0) IMGUI_DEBUG_LOG_NAV("[nav] NavScoringDebugCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.NavScoringDebugCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest); + // Update Gamepad->Nav inputs mapping // Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard) - // (do it before we map Keyboard input!) - const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0; const bool nav_gamepad_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (io.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0; - if (nav_gamepad_active && g.NavInputSource != ImGuiInputSource_Gamepad) - { - if (io.NavInputs[ImGuiNavInput_Activate] > 0.0f || io.NavInputs[ImGuiNavInput_Input] > 0.0f || io.NavInputs[ImGuiNavInput_Cancel] > 0.0f || io.NavInputs[ImGuiNavInput_Menu] > 0.0f - || io.NavInputs[ImGuiNavInput_DpadLeft] > 0.0f || io.NavInputs[ImGuiNavInput_DpadRight] > 0.0f || io.NavInputs[ImGuiNavInput_DpadUp] > 0.0f || io.NavInputs[ImGuiNavInput_DpadDown] > 0.0f) - g.NavInputSource = ImGuiInputSource_Gamepad; + if (nav_gamepad_active && g.IO.BackendUsingLegacyNavInputArray == false) + { + for (int n = 0; n < ImGuiNavInput_COUNT; n++) + IM_ASSERT(io.NavInputs[n] == 0.0f && "Backend needs to either only use io.AddKeyEvent()/io.AddKeyAnalogEvent(), either only fill legacy io.NavInputs[]. Not both!"); + #define NAV_MAP_KEY(_KEY, _NAV_INPUT, _ACTIVATE_NAV) do { io.NavInputs[_NAV_INPUT] = io.KeysData[_KEY - ImGuiKey_KeysData_OFFSET].AnalogValue; if (_ACTIVATE_NAV && io.NavInputs[_NAV_INPUT] > 0.0f) { g.NavInputSource = ImGuiInputSource_Gamepad; } } while (0) + NAV_MAP_KEY(ImGuiKey_GamepadFaceDown, ImGuiNavInput_Activate, true); + NAV_MAP_KEY(ImGuiKey_GamepadFaceRight, ImGuiNavInput_Cancel, true); + NAV_MAP_KEY(ImGuiKey_GamepadFaceLeft, ImGuiNavInput_Menu, true); + NAV_MAP_KEY(ImGuiKey_GamepadFaceUp, ImGuiNavInput_Input, true); + NAV_MAP_KEY(ImGuiKey_GamepadDpadLeft, ImGuiNavInput_DpadLeft, true); + NAV_MAP_KEY(ImGuiKey_GamepadDpadRight, ImGuiNavInput_DpadRight, true); + NAV_MAP_KEY(ImGuiKey_GamepadDpadUp, ImGuiNavInput_DpadUp, true); + NAV_MAP_KEY(ImGuiKey_GamepadDpadDown, ImGuiNavInput_DpadDown, true); + NAV_MAP_KEY(ImGuiKey_GamepadL1, ImGuiNavInput_FocusPrev, false); + NAV_MAP_KEY(ImGuiKey_GamepadR1, ImGuiNavInput_FocusNext, false); + NAV_MAP_KEY(ImGuiKey_GamepadL1, ImGuiNavInput_TweakSlow, false); + NAV_MAP_KEY(ImGuiKey_GamepadR1, ImGuiNavInput_TweakFast, false); + NAV_MAP_KEY(ImGuiKey_GamepadLStickLeft, ImGuiNavInput_LStickLeft, false); + NAV_MAP_KEY(ImGuiKey_GamepadLStickRight, ImGuiNavInput_LStickRight, false); + NAV_MAP_KEY(ImGuiKey_GamepadLStickUp, ImGuiNavInput_LStickUp, false); + NAV_MAP_KEY(ImGuiKey_GamepadLStickDown, ImGuiNavInput_LStickDown, false); + #undef NAV_MAP_KEY } // Update Keyboard->Nav inputs mapping + const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0; if (nav_keyboard_active) { - #define NAV_MAP_KEY(_KEY, _NAV_INPUT) do { if (IsKeyDown(io.KeyMap[_KEY])) { io.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_Keyboard; } } while (0) + #define NAV_MAP_KEY(_KEY, _NAV_INPUT) do { if (IsKeyDown(_KEY)) { io.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_Keyboard; } } while (0) NAV_MAP_KEY(ImGuiKey_Space, ImGuiNavInput_Activate ); NAV_MAP_KEY(ImGuiKey_Enter, ImGuiNavInput_Input ); NAV_MAP_KEY(ImGuiKey_Escape, ImGuiNavInput_Cancel ); @@ -10098,8 +10924,8 @@ static void ImGui::NavUpdate() { bool activate_down = IsNavInputDown(ImGuiNavInput_Activate); bool input_down = IsNavInputDown(ImGuiNavInput_Input); - bool activate_pressed = activate_down && IsNavInputTest(ImGuiNavInput_Activate, ImGuiInputReadMode_Pressed); - bool input_pressed = input_down && IsNavInputTest(ImGuiNavInput_Input, ImGuiInputReadMode_Pressed); + bool activate_pressed = activate_down && IsNavInputTest(ImGuiNavInput_Activate, ImGuiNavReadMode_Pressed); + bool input_pressed = input_down && IsNavInputTest(ImGuiNavInput_Input, ImGuiNavReadMode_Pressed); if (g.ActiveId == 0 && activate_pressed) { g.NavActivateId = g.NavId; @@ -10156,7 +10982,7 @@ static void ImGui::NavUpdate() // *Normal* Manual scroll with NavScrollXXX keys // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds. - ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f / 10.0f, 10.0f); + ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiNavReadMode_Down, 1.0f / 10.0f, 10.0f); if (scroll_dir.x != 0.0f && window->ScrollbarX) SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed)); if (scroll_dir.y != 0.0f) @@ -10176,7 +11002,7 @@ static void ImGui::NavUpdate() { io.MousePos = io.MousePosPrev = NavCalcPreferredRefPos(); io.WantSetMousePos = true; - //IMGUI_DEBUG_LOG("SetMousePos: (%.1f,%.1f)\n", io.MousePos.x, io.MousePos.y); + //IMGUI_DEBUG_LOG_IO("SetMousePos: (%.1f,%.1f)\n", io.MousePos.x, io.MousePos.y); } // [DEBUG] @@ -10200,7 +11026,7 @@ void ImGui::NavInitRequestApplyResult() // Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called) // FIXME-NAV: On _NavFlattened windows, g.NavWindow will only be updated during subsequent frame. Not a problem currently. - IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: result NavID 0x%08X in Layer %d Window \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name); + IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: ApplyResult: NavID 0x%08X in Layer %d Window \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name); SetNavID(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel); g.NavIdIsAlive = true; // Mark as alive from previous frame as we got a result if (g.NavInitRequestFromMove) @@ -10229,7 +11055,7 @@ void ImGui::NavUpdateCreateMoveRequest() g.NavMoveScrollFlags = ImGuiScrollFlags_None; if (window && !g.NavWindowingTarget && !(window->Flags & ImGuiWindowFlags_NoNavInputs)) { - const ImGuiInputReadMode read_mode = ImGuiInputReadMode_Repeat; + const ImGuiNavReadMode read_mode = ImGuiNavReadMode_Repeat; if (!IsActiveIdUsingNavDir(ImGuiDir_Left) && (IsNavInputTest(ImGuiNavInput_DpadLeft, read_mode) || IsNavInputTest(ImGuiNavInput_KeyLeft_, read_mode))) { g.NavMoveDir = ImGuiDir_Left; } if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && (IsNavInputTest(ImGuiNavInput_DpadRight, read_mode) || IsNavInputTest(ImGuiNavInput_KeyRight_, read_mode))) { g.NavMoveDir = ImGuiDir_Right; } if (!IsActiveIdUsingNavDir(ImGuiDir_Up) && (IsNavInputTest(ImGuiNavInput_DpadUp, read_mode) || IsNavInputTest(ImGuiNavInput_KeyUp_, read_mode))) { g.NavMoveDir = ImGuiDir_Up; } @@ -10253,7 +11079,7 @@ void ImGui::NavUpdateCreateMoveRequest() // [DEBUG] Always send a request #if IMGUI_DEBUG_NAV_SCORING - if (io.KeyCtrl && IsKeyPressedMap(ImGuiKey_C)) + if (io.KeyCtrl && IsKeyPressed(ImGuiKey_C)) g.NavMoveDirForDebug = (ImGuiDir)((g.NavMoveDirForDebug + 1) & 3); if (io.KeyCtrl && g.NavMoveDir == ImGuiDir_None) { @@ -10270,7 +11096,7 @@ void ImGui::NavUpdateCreateMoveRequest() // Moving with no reference triggers a init request (will be used as a fallback if the direction fails to find a match) if (g.NavMoveSubmitted && g.NavId == 0) { - IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: from move, window \"%s\", layer=%d\n", g.NavWindow->Name, g.NavLayer); + IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: from move, window \"%s\", layer=%d\n", window ? window->Name : "", g.NavLayer); g.NavInitRequest = g.NavInitRequestFromMove = true; g.NavInitResultId = 0; g.NavDisableHighlight = false; @@ -10279,15 +11105,21 @@ void ImGui::NavUpdateCreateMoveRequest() // When using gamepad, we project the reference nav bounding box into window visible area. // This is to allow resuming navigation inside the visible area after doing a large amount of scrolling, since with gamepad every movements are relative // (can't focus a visible object like we can with the mouse). - if (g.NavMoveSubmitted && g.NavInputSource == ImGuiInputSource_Gamepad && g.NavLayer == ImGuiNavLayer_Main && window != NULL) + if (g.NavMoveSubmitted && g.NavInputSource == ImGuiInputSource_Gamepad && g.NavLayer == ImGuiNavLayer_Main && window != NULL)// && (g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded)) { - ImRect window_rect_rel = WindowRectAbsToRel(window, ImRect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1))); - if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer])) + bool clamp_x = (g.NavMoveFlags & (ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_WrapX)) == 0; + bool clamp_y = (g.NavMoveFlags & (ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapY)) == 0; + ImRect inner_rect_rel = WindowRectAbsToRel(window, ImRect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1))); + if ((clamp_x || clamp_y) && !inner_rect_rel.Contains(window->NavRectRel[g.NavLayer])) { - IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel\n"); - float pad = window->CalcFontSize() * 0.5f; - window_rect_rel.Expand(ImVec2(-ImMin(window_rect_rel.GetWidth(), pad), -ImMin(window_rect_rel.GetHeight(), pad))); // Terrible approximation for the intent of starting navigation from first fully visible item - window->NavRectRel[g.NavLayer].ClipWithFull(window_rect_rel); + //IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n"); + float pad_x = ImMin(inner_rect_rel.GetWidth(), window->CalcFontSize() * 0.5f); + float pad_y = ImMin(inner_rect_rel.GetHeight(), window->CalcFontSize() * 0.5f); // Terrible approximation for the intent of starting navigation from first fully visible item + inner_rect_rel.Min.x = clamp_x ? (inner_rect_rel.Min.x + pad_x) : -FLT_MAX; + inner_rect_rel.Max.x = clamp_x ? (inner_rect_rel.Max.x - pad_x) : +FLT_MAX; + inner_rect_rel.Min.y = clamp_y ? (inner_rect_rel.Min.y + pad_y) : -FLT_MAX; + inner_rect_rel.Max.y = clamp_y ? (inner_rect_rel.Max.y - pad_y) : +FLT_MAX; + window->NavRectRel[g.NavLayer].ClipWithFull(inner_rect_rel); g.NavId = g.NavFocusScopeId = 0; } } @@ -10317,7 +11149,7 @@ void ImGui::NavUpdateCreateTabbingRequest() if (window == NULL || g.NavWindowingTarget != NULL || (window->Flags & ImGuiWindowFlags_NoNavInputs)) return; - const bool tab_pressed = IsKeyPressedMap(ImGuiKey_Tab, true) && !IsActiveIdUsingKey(ImGuiKey_Tab) && !g.IO.KeyCtrl && !g.IO.KeyAlt; + const bool tab_pressed = IsKeyPressed(ImGuiKey_Tab, true) && !IsActiveIdUsingKey(ImGuiKey_Tab) && !g.IO.KeyCtrl && !g.IO.KeyAlt; if (!tab_pressed) return; @@ -10330,7 +11162,6 @@ void ImGui::NavUpdateCreateTabbingRequest() ImGuiScrollFlags scroll_flags = window->Appearing ? ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_AlwaysCenterY : ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleEdgeY; ImGuiDir clip_dir = (g.NavTabbingDir < 0) ? ImGuiDir_Up : ImGuiDir_Down; NavMoveRequestSubmit(ImGuiDir_None, clip_dir, ImGuiNavMoveFlags_Tabbing, scroll_flags); // FIXME-NAV: Once we refactor tabbing, add LegacyApi flag to not activate non-inputable. - g.NavTabbingResultFirst.Clear(); g.NavTabbingCounter = -1; } @@ -10388,7 +11219,11 @@ void ImGui::NavMoveRequestApplyResult() } } - g.NavWindow = result->Window; + if (g.NavWindow != result->Window) + { + IMGUI_DEBUG_LOG_FOCUS("[focus] NavMoveRequest: SetNavWindow(\"%s\")\n", result->Window->Name); + g.NavWindow = result->Window; + } if (g.ActiveId != result->ID) ClearActiveID(); if (g.NavId != result->ID) @@ -10430,7 +11265,7 @@ void ImGui::NavMoveRequestApplyResult() static void ImGui::NavUpdateCancelRequest() { ImGuiContext& g = *GImGui; - if (!IsNavInputTest(ImGuiNavInput_Cancel, ImGuiInputReadMode_Pressed)) + if (!IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed)) return; IMGUI_DEBUG_LOG_NAV("[nav] ImGuiNavInput_Cancel\n"); @@ -10456,11 +11291,10 @@ static void ImGui::NavUpdateCancelRequest() SetNavID(child_window->ChildId, ImGuiNavLayer_Main, 0, WindowRectAbsToRel(parent_window, child_rect)); NavRestoreHighlightAfterMove(); } - else if (g.OpenPopupStack.Size > 0) + else if (g.OpenPopupStack.Size > 0 && !(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal)) { // Close open popup/menu - if (!(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal)) - ClosePopupToLevel(g.OpenPopupStack.Size - 1, true); + ClosePopupToLevel(g.OpenPopupStack.Size - 1, true); } else { @@ -10478,16 +11312,14 @@ static void ImGui::NavUpdateCancelRequest() static float ImGui::NavUpdatePageUpPageDown() { ImGuiContext& g = *GImGui; - ImGuiIO& io = g.IO; - ImGuiWindow* window = g.NavWindow; if ((window->Flags & ImGuiWindowFlags_NoNavInputs) || g.NavWindowingTarget != NULL) return 0.0f; - const bool page_up_held = IsKeyDown(io.KeyMap[ImGuiKey_PageUp]) && !IsActiveIdUsingKey(ImGuiKey_PageUp); - const bool page_down_held = IsKeyDown(io.KeyMap[ImGuiKey_PageDown]) && !IsActiveIdUsingKey(ImGuiKey_PageDown); - const bool home_pressed = IsKeyPressed(io.KeyMap[ImGuiKey_Home]) && !IsActiveIdUsingKey(ImGuiKey_Home); - const bool end_pressed = IsKeyPressed(io.KeyMap[ImGuiKey_End]) && !IsActiveIdUsingKey(ImGuiKey_End); + const bool page_up_held = IsKeyDown(ImGuiKey_PageUp) && !IsActiveIdUsingKey(ImGuiKey_PageUp); + const bool page_down_held = IsKeyDown(ImGuiKey_PageDown) && !IsActiveIdUsingKey(ImGuiKey_PageDown); + const bool home_pressed = IsKeyPressed(ImGuiKey_Home) && !IsActiveIdUsingKey(ImGuiKey_Home); + const bool end_pressed = IsKeyPressed(ImGuiKey_End) && !IsActiveIdUsingKey(ImGuiKey_End); if (page_up_held == page_down_held && home_pressed == end_pressed) // Proceed if either (not both) are pressed, otherwise early out return 0.0f; @@ -10497,9 +11329,9 @@ static float ImGui::NavUpdatePageUpPageDown() if (window->DC.NavLayersActiveMask == 0x00 && window->DC.NavHasScroll) { // Fallback manual-scroll when window has no navigable item - if (IsKeyPressed(io.KeyMap[ImGuiKey_PageUp], true)) + if (IsKeyPressed(ImGuiKey_PageUp, true)) SetScrollY(window, window->Scroll.y - window->InnerRect.GetHeight()); - else if (IsKeyPressed(io.KeyMap[ImGuiKey_PageDown], true)) + else if (IsKeyPressed(ImGuiKey_PageDown, true)) SetScrollY(window, window->Scroll.y + window->InnerRect.GetHeight()); else if (home_pressed) SetScrollY(window, 0.0f); @@ -10511,14 +11343,14 @@ static float ImGui::NavUpdatePageUpPageDown() ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer]; const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight()); float nav_scoring_rect_offset_y = 0.0f; - if (IsKeyPressed(io.KeyMap[ImGuiKey_PageUp], true)) + if (IsKeyPressed(ImGuiKey_PageUp, true)) { nav_scoring_rect_offset_y = -page_offset_y; g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item) g.NavMoveClipDir = ImGuiDir_Up; g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet; } - else if (IsKeyPressed(io.KeyMap[ImGuiKey_PageDown], true)) + else if (IsKeyPressed(ImGuiKey_PageDown, true)) { nav_scoring_rect_offset_y = +page_offset_y; g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item) @@ -10682,8 +11514,8 @@ static void ImGui::NavUpdateWindowing() } // Start CTRL+Tab or Square+L/R window selection - const bool start_windowing_with_gamepad = allow_windowing && !g.NavWindowingTarget && IsNavInputTest(ImGuiNavInput_Menu, ImGuiInputReadMode_Pressed); - const bool start_windowing_with_keyboard = allow_windowing && !g.NavWindowingTarget && io.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab); + const bool start_windowing_with_gamepad = allow_windowing && !g.NavWindowingTarget && IsNavInputTest(ImGuiNavInput_Menu, ImGuiNavReadMode_Pressed); + const bool start_windowing_with_keyboard = allow_windowing && !g.NavWindowingTarget && io.KeyCtrl && IsKeyPressed(ImGuiKey_Tab); if (start_windowing_with_gamepad || start_windowing_with_keyboard) if (ImGuiWindow* window = g.NavWindow ? g.NavWindow : FindWindowNavFocusable(g.WindowsFocusOrder.Size - 1, -INT_MAX, -1)) { @@ -10701,7 +11533,7 @@ static void ImGui::NavUpdateWindowing() g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); // Select window to focus - const int focus_change_dir = (int)IsNavInputTest(ImGuiNavInput_FocusPrev, ImGuiInputReadMode_RepeatSlow) - (int)IsNavInputTest(ImGuiNavInput_FocusNext, ImGuiInputReadMode_RepeatSlow); + const int focus_change_dir = (int)IsNavInputTest(ImGuiNavInput_FocusPrev, ImGuiNavReadMode_RepeatSlow) - (int)IsNavInputTest(ImGuiNavInput_FocusNext, ImGuiNavReadMode_RepeatSlow); if (focus_change_dir != 0) { NavUpdateWindowingHighlightWindow(focus_change_dir); @@ -10725,7 +11557,7 @@ static void ImGui::NavUpdateWindowing() { // Visuals only appears after a brief time after pressing TAB the first time, so that a fast CTRL+TAB doesn't add visual noise g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); // 1.0f - if (IsKeyPressedMap(ImGuiKey_Tab, true)) + if (IsKeyPressed(ImGuiKey_Tab, true)) NavUpdateWindowingHighlightWindow(io.KeyShift ? +1 : -1); if (!io.KeyCtrl) apply_focus_window = g.NavWindowingTarget; @@ -10735,7 +11567,7 @@ static void ImGui::NavUpdateWindowing() // - Testing that only Alt is tested prevents Alt+Shift or AltGR from toggling menu layer. // - AltGR is normally Alt+Ctrl but we can't reliably detect it (not all backends/systems/layout emit it as Alt+Ctrl). But even on keyboards without AltGR we don't want Alt+Ctrl to open menu anyway. const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0; - if (nav_keyboard_active && io.KeyMods == ImGuiKeyModFlags_Alt && (io.KeyModsPrev & ImGuiKeyModFlags_Alt) == 0) + if (nav_keyboard_active && IsKeyPressed(ImGuiKey_ModAlt)) { g.NavWindowingToggleLayer = true; g.NavInputSource = ImGuiInputSource_Keyboard; @@ -10748,13 +11580,12 @@ static void ImGui::NavUpdateWindowing() g.NavWindowingToggleLayer = false; // Apply layer toggle on release - // Important: we don't assume that Alt was previously held in order to handle loss of focus when backend calls io.AddFocusEvent(false) // Important: as before version <18314 we lacked an explicit IO event for focus gain/loss, we also compare mouse validity to detect old backends clearing mouse pos on focus loss. - if (!(io.KeyMods & ImGuiKeyModFlags_Alt) && (io.KeyModsPrev & ImGuiKeyModFlags_Alt) && g.NavWindowingToggleLayer) + if (IsKeyReleased(ImGuiKey_ModAlt) && g.NavWindowingToggleLayer) if (g.ActiveId == 0 || g.ActiveIdAllowOverlap) if (IsMousePosValid(&io.MousePos) == IsMousePosValid(&io.MousePosPrev)) apply_toggle_layer = true; - if (!io.KeyAlt) + if (!IsKeyDown(ImGuiKey_ModAlt)) g.NavWindowingToggleLayer = false; } @@ -10763,16 +11594,15 @@ static void ImGui::NavUpdateWindowing() { ImVec2 move_delta; if (g.NavInputSource == ImGuiInputSource_Keyboard && !io.KeyShift) - move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_RawKeyboard, ImGuiInputReadMode_Down); + move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_RawKeyboard, ImGuiNavReadMode_Down); if (g.NavInputSource == ImGuiInputSource_Gamepad) - move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down); + move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiNavReadMode_Down); if (move_delta.x != 0.0f || move_delta.y != 0.0f) { const float NAV_MOVE_SPEED = 800.0f; const float move_speed = ImFloor(NAV_MOVE_SPEED * io.DeltaTime * ImMin(io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y)); // FIXME: Doesn't handle variable framerate very well ImGuiWindow* moving_window = g.NavWindowingTarget->RootWindowDockTree; SetWindowPos(moving_window, moving_window->Pos + move_delta * move_speed, ImGuiCond_Always); - MarkIniSettingsDirty(moving_window); g.NavDisableMouseHover = true; } } @@ -10887,6 +11717,12 @@ void ImGui::NavUpdateWindowingOverlay() // [SECTION] DRAG AND DROP //----------------------------------------------------------------------------- +bool ImGui::IsDragDropActive() +{ + ImGuiContext& g = *GImGui; + return g.DragDropActive; +} + void ImGui::ClearDragDrop() { ImGuiContext& g = *GImGui; @@ -10943,19 +11779,20 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags) return false; // If you want to use BeginDragDropSource() on an item with no unique identifier for interaction, such as Text() or Image(), you need to: - // A) Read the explanation below, B) Use the ImGuiDragDropFlags_SourceAllowNullID flag, C) Swallow your programmer pride. + // A) Read the explanation below, B) Use the ImGuiDragDropFlags_SourceAllowNullID flag. if (!(flags & ImGuiDragDropFlags_SourceAllowNullID)) { IM_ASSERT(0); return false; } - // Magic fallback (=somehow reprehensible) to handle items with no assigned ID, e.g. Text(), Image() + // Magic fallback to handle items with no assigned ID, e.g. Text(), Image() // We build a throwaway ID based on current ID stack + relative AABB of items in window. - // THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING OF THE WIDGET, so if your widget moves your dragging operation will be canceled. + // THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING/RESIZINGG OF THE WIDGET, so if your widget moves your dragging operation will be canceled. // We don't need to maintain/call ClearActiveID() as releasing the button will early out this function and trigger !ActiveIdIsAlive. // Rely on keeping other window->LastItemXXX fields intact. source_id = g.LastItemData.ID = window->GetIDFromRectangle(g.LastItemData.Rect); + KeepAliveID(source_id); bool is_hovered = ItemHoverable(g.LastItemData.Rect, source_id); if (is_hovered && g.IO.MouseClicked[mouse_button]) { @@ -11075,6 +11912,7 @@ bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_s } payload.DataFrameCount = g.FrameCount; + // Return whether the payload has been accepted return (g.DragDropAcceptFrameCount == g.FrameCount) || (g.DragDropAcceptFrameCount == g.FrameCount - 1); } @@ -11121,7 +11959,10 @@ bool ImGui::BeginDragDropTarget() const ImRect& display_rect = (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HasDisplayRect) ? g.LastItemData.DisplayRect : g.LastItemData.Rect; ImGuiID id = g.LastItemData.ID; if (id == 0) + { id = window->GetIDFromRectangle(display_rect); + KeepAliveID(id); + } if (g.DragDropPayload.SourceId == id) return false; @@ -11535,6 +12376,20 @@ ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name) return CreateNewWindowSettings(name); } +void ImGui::AddSettingsHandler(const ImGuiSettingsHandler* handler) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(FindSettingsHandler(handler->TypeName) == NULL); + g.SettingsHandlers.push_back(*handler); +} + +void ImGui::RemoveSettingsHandler(const char* type_name) +{ + ImGuiContext& g = *GImGui; + if (ImGuiSettingsHandler* handler = FindSettingsHandler(type_name)) + g.SettingsHandlers.erase(handler); +} + ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name) { ImGuiContext& g = *GImGui; @@ -11560,7 +12415,8 @@ void ImGui::LoadIniSettingsFromDisk(const char* ini_filename) char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_data_size); if (!file_data) return; - LoadIniSettingsFromMemory(file_data, (size_t)file_data_size); + if (file_data_size > 0) + LoadIniSettingsFromMemory(file_data, (size_t)file_data_size); IM_FREE(file_data); } @@ -11762,6 +12618,7 @@ static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandl buf->appendf("Collapsed=%d\n", settings->Collapsed); if (settings->DockId != 0) { + //buf->appendf("TabId=0x%08X\n", ImHashStr("#TAB", 4, settings->ID)); // window->TabId: this is not read back but writing it makes "debugging" the .ini data easier. if (settings->DockOrder == -1) buf->appendf("DockId=0x%08X\n", settings->DockId); else @@ -11838,7 +12695,7 @@ void ImGui::SetCurrentViewport(ImGuiWindow* current_window, ImGuiViewportP* view return; g.CurrentDpiScale = viewport ? viewport->DpiScale : 1.0f; g.CurrentViewport = viewport; - //IMGUI_DEBUG_LOG_VIEWPORT("SetCurrentViewport changed '%s' 0x%08X\n", current_window ? current_window->Name : NULL, viewport ? viewport->ID : 0); + //IMGUI_DEBUG_LOG_VIEWPORT("[viewport] SetCurrentViewport changed '%s' 0x%08X\n", current_window ? current_window->Name : NULL, viewport ? viewport->ID : 0); // Notify platform layer of viewport changes // FIXME-DPI: This is only currently used for experimenting with handling of multiple DPI @@ -11846,7 +12703,7 @@ void ImGui::SetCurrentViewport(ImGuiWindow* current_window, ImGuiViewportP* view g.PlatformIO.Platform_OnChangedViewport(g.CurrentViewport); } -static void SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport) +void ImGui::SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport) { // Abandon viewport if (window->ViewportOwned && window->Viewport->Window == window) @@ -11953,7 +12810,7 @@ void ImGui::ScaleWindowsInViewport(ImGuiViewportP* viewport, float scale) // If the backend doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves. // A) It won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window. // B) It requires Platform_GetWindowFocus to be implemented by backend. -static ImGuiViewportP* FindHoveredViewportFromPlatformWindowStack(const ImVec2 mouse_platform_pos) +ImGuiViewportP* ImGui::FindHoveredViewportFromPlatformWindowStack(const ImVec2& mouse_platform_pos) { ImGuiContext& g = *GImGui; ImGuiViewportP* best_candidate = NULL; @@ -12105,17 +12962,14 @@ static void ImGui::UpdateViewportsNewFrame() { viewport_hovered = g.IO.MouseHoveredViewport ? (ImGuiViewportP*)FindViewportByID(g.IO.MouseHoveredViewport) : NULL; if (viewport_hovered && (viewport_hovered->Flags & ImGuiViewportFlags_NoInputs)) - { - // Backend failed at honoring its contract if it returned a viewport with the _NoInputs flag. - IM_ASSERT(0); - viewport_hovered = FindHoveredViewportFromPlatformWindowStack(g.IO.MousePos); - } + viewport_hovered = FindHoveredViewportFromPlatformWindowStack(g.IO.MousePos); // Backend failed to handle _NoInputs viewport: revert to our fallback. } else { // If the backend doesn't know how to honor ImGuiViewportFlags_NoInputs, we do a search ourselves. Note that this search: // A) won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window. - // B) uses LastFrameAsRefViewport as a flawed replacement for the last time a window was focused (we could/should fix that by introducing Focus functions in PlatformIO) + // B) won't take account of how the backend apply parent<>child relationship to secondary viewports, which affects their Z order. + // C) uses LastFrameAsRefViewport as a flawed replacement for the last time a window was focused (we could/should fix that by introducing Focus functions in PlatformIO) viewport_hovered = FindHoveredViewportFromPlatformWindowStack(g.IO.MousePos); } if (viewport_hovered != NULL) @@ -12187,9 +13041,10 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const ImGuiViewportP* viewport = (ImGuiViewportP*)FindViewportByID(id); if (viewport) { - if (!viewport->PlatformRequestMove) + // Always update for main viewport as we are already pulling correct platform pos/size (see #4900) + if (!viewport->PlatformRequestMove || viewport->ID == IMGUI_VIEWPORT_DEFAULT_ID) viewport->Pos = pos; - if (!viewport->PlatformRequestResize) + if (!viewport->PlatformRequestResize || viewport->ID == IMGUI_VIEWPORT_DEFAULT_ID) viewport->Size = size; viewport->Flags = flags | (viewport->Flags & ImGuiViewportFlags_Minimized); // Preserve existing flags } @@ -12204,7 +13059,7 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const viewport->Flags = flags; UpdateViewportPlatformMonitor(viewport); g.Viewports.push_back(viewport); - IMGUI_DEBUG_LOG_VIEWPORT("Add Viewport %08X (%s)\n", id, window->Name); + IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Add Viewport %08X '%s'\n", id, window ? window->Name : ""); // We normally setup for all viewports in NewFrame() but here need to handle the mid-frame creation of a new viewport. // We need to extend the fullscreen clip rect so the OverlayDrawList clip is correct for that the first frame @@ -12246,7 +13101,7 @@ static void ImGui::DestroyViewport(ImGuiViewportP* viewport) g.MouseLastHoveredViewport = NULL; // Destroy - IMGUI_DEBUG_LOG_VIEWPORT("Delete Viewport %08X (%s)\n", viewport->ID, viewport->Window ? viewport->Window->Name : "n/a"); + IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Delete Viewport %08X '%s'\n", viewport->ID, viewport->Window ? viewport->Window->Name : "n/a"); DestroyPlatformWindow(viewport); // In most circumstances the platform window will already be destroyed here. IM_ASSERT(g.PlatformIO.Viewports.contains(viewport) == false); IM_ASSERT(g.Viewports[viewport->Idx] == viewport); @@ -12329,7 +13184,8 @@ static void ImGui::WindowSelectViewport(ImGuiWindow* window) { // Merge into host viewport? // We cannot test window->ViewportOwned as it set lower in the function. - bool try_to_merge_into_host_viewport = (window->Viewport && window == window->Viewport->Window && g.ActiveId == 0); + // Testing (g.ActiveId == 0 || g.ActiveIdAllowOverlap) to avoid merging during a short-term widget interaction. Main intent was to avoid during resize (see #4212) + bool try_to_merge_into_host_viewport = (window->Viewport && window == window->Viewport->Window && (g.ActiveId == 0 || g.ActiveIdAllowOverlap)); if (try_to_merge_into_host_viewport) UpdateTryMergeWindowIntoHostViewports(window); } @@ -12361,7 +13217,7 @@ static void ImGui::WindowSelectViewport(ImGuiWindow* window) if ((window->Flags & ImGuiWindowFlags_DockNodeHost) && window->Viewport->LastFrameActive < g.FrameCount && will_be_visible) { // Steal/transfer ownership - IMGUI_DEBUG_LOG_VIEWPORT("Window '%s' steal Viewport %08X from Window '%s'\n", window->Name, window->Viewport->ID, window->Viewport->Window->Name); + IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Window '%s' steal Viewport %08X from Window '%s'\n", window->Name, window->Viewport->ID, window->Viewport->Window->Name); window->Viewport->Window = window; window->Viewport->ID = window->ID; window->Viewport->LastNameHash = 0; @@ -12511,7 +13367,7 @@ void ImGui::UpdatePlatformWindows() bool is_new_platform_window = (viewport->PlatformWindowCreated == false); if (is_new_platform_window) { - IMGUI_DEBUG_LOG_VIEWPORT("Create Platform Window %08X (%s)\n", viewport->ID, viewport->Window ? viewport->Window->Name : "n/a"); + IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Create Platform Window %08X '%s'\n", viewport->ID, viewport->Window ? viewport->Window->Name : "n/a"); g.PlatformIO.Platform_CreateWindow(viewport); if (g.PlatformIO.Renderer_CreateWindow != NULL) g.PlatformIO.Renderer_CreateWindow(viewport); @@ -12794,6 +13650,9 @@ void ImGui::DestroyPlatformWindows() // | BeginDockableDragDropTarget() // | - DockNodePreviewDockRender() //----------------------------------------------------------------------------- +// - EndFrame() +// | DockContextEndFrame() +//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Docking: Internal Types @@ -12916,7 +13775,7 @@ namespace ImGui // ImGuiDockNode tree manipulations static void DockNodeTreeSplit(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImGuiAxis split_axis, int split_first_child, float split_ratio, ImGuiDockNode* new_node); static void DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImGuiDockNode* merge_lead_child); - static void DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 size, bool only_write_to_marked_nodes = false); + static void DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 size, ImGuiDockNode* only_write_to_single_node = NULL); static void DockNodeTreeUpdateSplitter(ImGuiDockNode* node); static ImGuiDockNode* DockNodeTreeFindVisibleNodeByPos(ImGuiDockNode* node, ImVec2 pos); static ImGuiDockNode* DockNodeTreeFindFallbackLeafNode(ImGuiDockNode* node); @@ -12948,6 +13807,7 @@ namespace ImGui // - DockContextRebuildNodes() // - DockContextNewFrameUpdateUndocking() // - DockContextNewFrameUpdateDocking() +// - DockContextEndFrame() // - DockContextFindNodeByID() // - DockContextBindNodeToWindow() // - DockContextGenNodeID() @@ -12996,8 +13856,9 @@ void ImGui::DockContextClearNodes(ImGuiContext* ctx, ImGuiID root_id, bool clear // (Different from DockSettingsHandler_ClearAll() + DockSettingsHandler_ApplyAll() because this reuses current settings!) void ImGui::DockContextRebuildNodes(ImGuiContext* ctx) { - IMGUI_DEBUG_LOG_DOCKING("DockContextRebuild()\n"); - ImGuiDockContext* dc = &ctx->DockContext; + ImGuiContext& g = *ctx; + ImGuiDockContext* dc = &ctx->DockContext; + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextRebuildNodes\n"); SaveIniSettingsToMemory(); ImGuiID root_id = 0; // Rebuild all DockContextClearNodes(ctx, root_id, false); @@ -13009,7 +13870,7 @@ void ImGui::DockContextRebuildNodes(ImGuiContext* ctx) void ImGui::DockContextNewFrameUpdateUndocking(ImGuiContext* ctx) { ImGuiContext& g = *ctx; - ImGuiDockContext* dc = &ctx->DockContext; + ImGuiDockContext* dc = &ctx->DockContext; if (!(g.IO.ConfigFlags & ImGuiConfigFlags_DockingEnable)) { if (dc->Nodes.Data.Size > 0 || dc->Requests.Size > 0) @@ -13083,6 +13944,22 @@ void ImGui::DockContextNewFrameUpdateDocking(ImGuiContext* ctx) DockNodeUpdate(node); } +void ImGui::DockContextEndFrame(ImGuiContext* ctx) +{ + // Draw backgrounds of node missing their window + ImGuiContext& g = *ctx; + ImGuiDockContext* dc = &g.DockContext; + for (int n = 0; n < dc->Nodes.Data.Size; n++) + if (ImGuiDockNode* node = (ImGuiDockNode*)dc->Nodes.Data[n].val_p) + if (node->LastFrameActive == g.FrameCount && node->IsVisible && node->HostWindow && node->IsLeafNode() && !node->IsBgDrawnThisFrame) + { + ImRect bg_rect(node->Pos + ImVec2(0.0f, GetFrameHeight()), node->Pos + node->Size); + ImDrawFlags bg_rounding_flags = CalcRoundingFlagsForRectInRect(bg_rect, node->HostWindow->Rect(), DOCKING_SPLITTER_SIZE); + node->HostWindow->DrawList->ChannelsSetCurrent(0); + node->HostWindow->DrawList->AddRectFilled(bg_rect.Min, bg_rect.Max, node->LastBgColor, node->HostWindow->WindowRounding, bg_rounding_flags); + } +} + static ImGuiDockNode* ImGui::DockContextFindNodeByID(ImGuiContext* ctx, ImGuiID id) { return (ImGuiDockNode*)ctx->DockContext.Nodes.GetVoidPtr(id); @@ -13102,13 +13979,14 @@ ImGuiID ImGui::DockContextGenNodeID(ImGuiContext* ctx) static ImGuiDockNode* ImGui::DockContextAddNode(ImGuiContext* ctx, ImGuiID id) { // Generate an ID for the new node (the exact ID value doesn't matter as long as it is not already used) and add the first window. + ImGuiContext& g = *ctx; if (id == 0) id = DockContextGenNodeID(ctx); else IM_ASSERT(DockContextFindNodeByID(ctx, id) == NULL); // We don't set node->LastFrameAlive on construction. Nodes are always created at all time to reflect .ini settings! - IMGUI_DEBUG_LOG_DOCKING("DockContextAddNode 0x%08X\n", id); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextAddNode 0x%08X\n", id); ImGuiDockNode* node = IM_NEW(ImGuiDockNode)(id); ctx->DockContext.Nodes.SetVoidPtr(node->ID, node); return node; @@ -13119,7 +13997,7 @@ static void ImGui::DockContextRemoveNode(ImGuiContext* ctx, ImGuiDockNode* node, ImGuiContext& g = *ctx; ImGuiDockContext* dc = &ctx->DockContext; - IMGUI_DEBUG_LOG_DOCKING("DockContextRemoveNode 0x%08X\n", node->ID); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextRemoveNode 0x%08X\n", node->ID); IM_ASSERT(DockContextFindNodeByID(ctx, node->ID) == node); IM_ASSERT(node->ChildNodes[0] == NULL && node->ChildNodes[1] == NULL); IM_ASSERT(node->Windows.Size == 0); @@ -13218,7 +14096,7 @@ static void ImGui::DockContextPruneUnusedSettingsNodes(ImGuiContext* ctx) remove |= (data_root->CountChildWindows == 0); if (remove) { - IMGUI_DEBUG_LOG_DOCKING("DockContextPruneUnusedSettingsNodes: Prune 0x%08X\n", settings->ID); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextPruneUnusedSettingsNodes: Prune 0x%08X\n", settings->ID); DockSettingsRemoveNodeReferences(&settings->ID, 1); settings->ID = 0; } @@ -13337,9 +14215,9 @@ void ImGui::DockContextProcessDock(ImGuiContext* ctx, ImGuiDockRequest* req) ImGuiWindow* target_window = req->DockTargetWindow; ImGuiDockNode* node = req->DockTargetNode; if (payload_window) - IMGUI_DEBUG_LOG_DOCKING("DockContextProcessDock node 0x%08X target '%s' dock window '%s', split_dir %d\n", node ? node->ID : 0, target_window ? target_window->Name : "NULL", payload_window ? payload_window->Name : "NULL", req->DockSplitDir); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextProcessDock node 0x%08X target '%s' dock window '%s', split_dir %d\n", node ? node->ID : 0, target_window ? target_window->Name : "NULL", payload_window ? payload_window->Name : "NULL", req->DockSplitDir); else - IMGUI_DEBUG_LOG_DOCKING("DockContextProcessDock node 0x%08X, split_dir %d\n", node ? node->ID : 0, req->DockSplitDir); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextProcessDock node 0x%08X, split_dir %d\n", node ? node->ID : 0, req->DockSplitDir); // Decide which Tab will be selected at the end of the operation ImGuiID next_selected_id = 0; @@ -13351,7 +14229,7 @@ void ImGui::DockContextProcessDock(ImGuiContext* ctx, ImGuiDockRequest* req) if (payload_node && payload_node->IsLeafNode()) next_selected_id = payload_node->TabBar->NextSelectedTabId ? payload_node->TabBar->NextSelectedTabId : payload_node->TabBar->SelectedTabId; if (payload_node == NULL) - next_selected_id = payload_window->ID; + next_selected_id = payload_window->TabId; } // FIXME-DOCK: When we are trying to dock an existing single-window node into a loose window, transfer Node ID as well @@ -13425,7 +14303,7 @@ void ImGui::DockContextProcessDock(ImGuiContext* ctx, ImGuiDockRequest* req) IM_ASSERT(last_focused_node != NULL); ImGuiDockNode* last_focused_root_node = DockNodeGetRootNode(last_focused_node); IM_ASSERT(last_focused_root_node == DockNodeGetRootNode(payload_node)); - last_focused_node->SetLocalFlags(last_focused_node->LocalFlags |= ImGuiDockNodeFlags_CentralNode); + last_focused_node->SetLocalFlags(last_focused_node->LocalFlags | ImGuiDockNodeFlags_CentralNode); node->SetLocalFlags(node->LocalFlags & ~ImGuiDockNodeFlags_CentralNode); last_focused_root_node->CentralNode = last_focused_node; } @@ -13488,8 +14366,8 @@ static ImVec2 FixLargeWindowsWhenUndocking(const ImVec2& size, ImGuiViewport* re void ImGui::DockContextProcessUndockWindow(ImGuiContext* ctx, ImGuiWindow* window, bool clear_persistent_docking_ref) { - IMGUI_DEBUG_LOG_DOCKING("DockContextProcessUndockWindow window '%s', clear_persistent_docking_ref = %d\n", window->Name, clear_persistent_docking_ref); - IM_UNUSED(ctx); + ImGuiContext& g = *ctx; + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextProcessUndockWindow window '%s', clear_persistent_docking_ref = %d\n", window->Name, clear_persistent_docking_ref); if (window->DockNode) DockNodeRemoveWindow(window->DockNode, window, clear_persistent_docking_ref ? 0 : window->DockId); else @@ -13504,7 +14382,8 @@ void ImGui::DockContextProcessUndockWindow(ImGuiContext* ctx, ImGuiWindow* windo void ImGui::DockContextProcessUndockNode(ImGuiContext* ctx, ImGuiDockNode* node) { - IMGUI_DEBUG_LOG_DOCKING("DockContextProcessUndockNode node %08X\n", node->ID); + ImGuiContext& g = *ctx; + IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextProcessUndockNode node %08X\n", node->ID); IM_ASSERT(node->IsLeafNode()); IM_ASSERT(node->Windows.Size >= 1); @@ -13600,6 +14479,7 @@ ImGuiDockNode::ImGuiDockNode(ImGuiID id) SplitAxis = ImGuiAxis_None; State = ImGuiDockNodeState_Unknown; + LastBgColor = IM_COL32_WHITE; HostWindow = VisibleWindow = NULL; CentralNode = OnlyNodeWithWindows = NULL; CountNodeWithWindows = 0; @@ -13611,8 +14491,8 @@ ImGuiDockNode::ImGuiDockNode(ImGuiID id) AuthorityForViewport = ImGuiDataAuthority_Auto; IsVisible = true; IsFocused = HasCloseButton = HasWindowMenuButton = HasCentralNodeChild = false; + IsBgDrawnThisFrame = false; WantCloseAll = WantLockSizeOnce = WantMouseMove = WantHiddenTabBarUpdate = WantHiddenTabBarToggle = false; - MarkedForPosSizeWrite = false; } ImGuiDockNode::~ImGuiDockNode() @@ -13627,7 +14507,7 @@ int ImGui::DockNodeGetTabOrder(ImGuiWindow* window) ImGuiTabBar* tab_bar = window->DockNode->TabBar; if (tab_bar == NULL) return -1; - ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, window->ID); + ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, window->TabId); return tab ? tab_bar->GetTabOrder(tab) : -1; } @@ -13647,7 +14527,7 @@ static void ImGui::DockNodeAddWindow(ImGuiDockNode* node, ImGuiWindow* window, b DockNodeRemoveWindow(window->DockNode, window, 0); } IM_ASSERT(window->DockNode == NULL || window->DockNodeAsHost == NULL); - IMGUI_DEBUG_LOG_DOCKING("DockNodeAddWindow node 0x%08X window '%s'\n", node->ID, window->Name); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockNodeAddWindow node 0x%08X window '%s'\n", node->ID, window->Name); // If more than 2 windows appeared on the same frame leading to the creation of a new hosting window, // we'll hide windows until the host window is ready. Hide the 1st window after its been output (so it is not visible for one frame). @@ -13703,7 +14583,7 @@ static void ImGui::DockNodeRemoveWindow(ImGuiDockNode* node, ImGuiWindow* window //IM_ASSERT(window->RootWindowDockTree == node->HostWindow); //IM_ASSERT(window->LastFrameActive < g.FrameCount); // We may call this from Begin() IM_ASSERT(save_dock_id == 0 || save_dock_id == node->ID); - IMGUI_DEBUG_LOG_DOCKING("DockNodeRemoveWindow node 0x%08X window '%s'\n", node->ID, window->Name); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockNodeRemoveWindow node 0x%08X window '%s'\n", node->ID, window->Name); window->DockNode = NULL; window->DockIsActive = window->DockTabWantClose = false; @@ -13731,7 +14611,7 @@ static void ImGui::DockNodeRemoveWindow(ImGuiDockNode* node, ImGuiWindow* window node->WantHiddenTabBarUpdate = true; if (node->TabBar) { - TabBarRemoveTab(node->TabBar, window->ID); + TabBarRemoveTab(node->TabBar, window->TabId); const int tab_count_threshold_for_tab_bar = node->IsCentralNode() ? 1 : 2; if (node->Windows.Size < tab_count_threshold_for_tab_bar) DockNodeRemoveTabBar(node); @@ -13750,7 +14630,7 @@ static void ImGui::DockNodeRemoveWindow(ImGuiDockNode* node, ImGuiWindow* window if (node->HostWindow->ViewportOwned && node->IsRootNode()) { // Transfer viewport back to the remaining loose window - IMGUI_DEBUG_LOG_VIEWPORT("Node %08X transfer Viewport %08X=>%08X for Window '%s'\n", node->ID, node->HostWindow->Viewport->ID, remaining_window->ID, remaining_window->Name); + IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Node %08X transfer Viewport %08X=>%08X for Window '%s'\n", node->ID, node->HostWindow->Viewport->ID, remaining_window->ID, remaining_window->Name); IM_ASSERT(node->HostWindow->Viewport->Window == node->HostWindow); node->HostWindow->Viewport->Window = remaining_window; node->HostWindow->Viewport->ID = remaining_window->ID; @@ -13914,7 +14794,7 @@ static void ImGui::DockNodeUpdateFlagsAndCollapse(ImGuiDockNode* node) bool node_was_active = (node->LastFrameActive + 1 == g.FrameCount); bool remove = false; remove |= node_was_active && (window->LastFrameActive + 1 < g.FrameCount); - remove |= node_was_active && (node->WantCloseAll || node->WantCloseTabId == window->ID) && window->HasCloseButton && !(window->Flags & ImGuiWindowFlags_UnsavedDocument); // Submit all _expected_ closure from last frame + remove |= node_was_active && (node->WantCloseAll || node->WantCloseTabId == window->TabId) && window->HasCloseButton && !(window->Flags & ImGuiWindowFlags_UnsavedDocument); // Submit all _expected_ closure from last frame remove |= (window->DockTabWantClose); if (remove) { @@ -14053,7 +14933,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) ImGuiContext& g = *GImGui; IM_ASSERT(node->LastFrameActive != g.FrameCount); node->LastFrameAlive = g.FrameCount; - node->MarkedForPosSizeWrite = false; + node->IsBgDrawnThisFrame = false; node->CentralNode = node->OnlyNodeWithWindows = NULL; if (node->IsRootNode()) @@ -14196,6 +15076,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) window_flags |= ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus | ImGuiWindowFlags_NoCollapse; window_flags |= ImGuiWindowFlags_NoTitleBar; + SetNextWindowBgAlpha(0.0f); // Don't set ImGuiWindowFlags_NoBackground because it disables borders PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); Begin(window_label, NULL, window_flags); PopStyleVar(); @@ -14234,15 +15115,6 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) if (g.NavWindow && g.NavWindow->RootWindow->DockNode && g.NavWindow->RootWindow->ParentWindow == host_window) node->LastFocusedNodeId = g.NavWindow->RootWindow->DockNode->ID; - // We need to draw a background at the root level if requested by ImGuiDockNodeFlags_PassthruCentralNode, but we will only know the correct pos/size - // _after_ processing the resizing splitters. So we are using the DrawList channel splitting facility to submit drawing primitives out of order! - const bool render_dockspace_bg = node->IsRootNode() && host_window && (node_flags & ImGuiDockNodeFlags_PassthruCentralNode) != 0; - if (render_dockspace_bg) - { - host_window->DrawList->ChannelsSplit(2); - host_window->DrawList->ChannelsSetCurrent(1); - } - // Register a hit-test hole in the window unless we are currently dragging a window that is compatible with our dockspace ImGuiDockNode* central_node = node->CentralNode; const bool central_node_hole = node->IsRootNode() && host_window && (node_flags & ImGuiDockNodeFlags_PassthruCentralNode) != 0 && central_node != NULL && central_node->IsEmpty(); @@ -14268,22 +15140,33 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) if (central_node_hole && !hole_rect.IsInverted()) { SetWindowHitTestHole(host_window, hole_rect.Min, hole_rect.Max - hole_rect.Min); - SetWindowHitTestHole(host_window->ParentWindow, hole_rect.Min, hole_rect.Max - hole_rect.Min); + if (host_window->ParentWindow) + SetWindowHitTestHole(host_window->ParentWindow, hole_rect.Min, hole_rect.Max - hole_rect.Min); } } // Update position/size, process and draw resizing splitters if (node->IsRootNode() && host_window) { + host_window->DrawList->ChannelsSetCurrent(1); DockNodeTreeUpdatePosSize(node, host_window->Pos, host_window->Size); DockNodeTreeUpdateSplitter(node); } // Draw empty node background (currently can only be the Central Node) - if (host_window && node->IsEmpty() && node->IsVisible && !(node_flags & ImGuiDockNodeFlags_PassthruCentralNode)) - host_window->DrawList->AddRectFilled(node->Pos, node->Pos + node->Size, GetColorU32(ImGuiCol_DockingEmptyBg)); + if (host_window && node->IsEmpty() && node->IsVisible) + { + host_window->DrawList->ChannelsSetCurrent(0); + node->LastBgColor = (node_flags & ImGuiDockNodeFlags_PassthruCentralNode) ? 0 : GetColorU32(ImGuiCol_DockingEmptyBg); + if (node->LastBgColor != 0) + host_window->DrawList->AddRectFilled(node->Pos, node->Pos + node->Size, node->LastBgColor); + node->IsBgDrawnThisFrame = true; + } // Draw whole dockspace background if ImGuiDockNodeFlags_PassthruCentralNode if set. + // We need to draw a background at the root level if requested by ImGuiDockNodeFlags_PassthruCentralNode, but we will only know the correct pos/size + // _after_ processing the resizing splitters. So we are using the DrawList channel splitting facility to submit drawing primitives out of order! + const bool render_dockspace_bg = node->IsRootNode() && host_window && (node_flags & ImGuiDockNodeFlags_PassthruCentralNode) != 0; if (render_dockspace_bg && node->IsVisible) { host_window->DrawList->ChannelsSetCurrent(0); @@ -14291,10 +15174,11 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) RenderRectFilledWithHole(host_window->DrawList, node->Rect(), central_node->Rect(), GetColorU32(ImGuiCol_WindowBg), 0.0f); else host_window->DrawList->AddRectFilled(node->Pos, node->Pos + node->Size, GetColorU32(ImGuiCol_WindowBg), 0.0f); - host_window->DrawList->ChannelsMerge(); } // Draw and populate Tab Bar + if (host_window) + host_window->DrawList->ChannelsSetCurrent(1); if (host_window && node->Windows.Size > 0) { DockNodeUpdateTabBar(node, host_window); @@ -14329,7 +15213,13 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) // Render outer borders last (after the tab bar) if (node->IsRootNode()) + { + host_window->DrawList->ChannelsSetCurrent(1); RenderWindowOuterBorders(host_window); + } + + // Further rendering (= hosted windows background) will be drawn on layer 0 + host_window->DrawList->ChannelsSetCurrent(0); } // End host window @@ -14404,6 +15294,21 @@ void ImGui::DockNodeEndAmendTabBar() End(); } +static bool IsDockNodeTitleBarHighlighted(ImGuiDockNode* node, ImGuiDockNode* root_node, ImGuiWindow* host_window) +{ + // CTRL+Tab highlight (only highlighting leaf node, not whole hierarchy) + ImGuiContext& g = *GImGui; + if (g.NavWindowingTarget) + return (g.NavWindowingTarget->DockNode == node); + + // FIXME-DOCKING: May want alternative to treat central node void differently? e.g. if (g.NavWindow == host_window) + if (g.NavWindow && g.NavWindow->RootWindowForTitleBarHighlight == host_window->RootWindowDockTree && root_node->LastFocusedNodeId == node->ID) + for (ImGuiDockNode* parent_node = g.NavWindow->RootWindow->DockNode; parent_node != NULL; parent_node = parent_node->HostWindow ? parent_node->HostWindow->RootWindow->DockNode : NULL) + if ((parent_node = ImGui::DockNodeGetRootNode(parent_node)) == root_node) + return true; + return false; +} + // Submit the tab bar corresponding to a dock node and various housekeeping details. static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_window) { @@ -14419,9 +15324,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w // Decide if we should use a focused title bar color bool is_focused = false; ImGuiDockNode* root_node = DockNodeGetRootNode(node); - if (g.NavWindowingTarget) - is_focused = (g.NavWindowingTarget->DockNode == node); - else if (g.NavWindow && g.NavWindow->RootWindowForTitleBarHighlight == host_window->RootWindowDockTree && root_node->LastFocusedNodeId == node->ID) + if (IsDockNodeTitleBarHighlighted(node, root_node, host_window)) is_focused = true; // Hidden tab bar will show a triangle on the upper-left (in Begin) @@ -14437,7 +15340,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w if (is_focused || root_node->VisibleWindow == NULL) root_node->VisibleWindow = node->VisibleWindow; if (node->TabBar) - node->TabBar->VisibleTabId = node->VisibleWindow->ID; + node->TabBar->VisibleTabId = node->VisibleWindow->TabId; } return; } @@ -14488,7 +15391,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w for (int window_n = 0; window_n < node->Windows.Size; window_n++) { ImGuiWindow* window = node->Windows[window_n]; - if (TabBarFindTabByID(tab_bar, window->ID) == NULL) + if (TabBarFindTabByID(tab_bar, window->TabId) == NULL) TabBarAddTab(tab_bar, ImGuiTabItemFlags_Unsorted, window); } @@ -14496,7 +15399,8 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w if (is_focused) node->LastFrameFocused = g.FrameCount; ImU32 title_bar_col = GetColorU32(host_window->Collapsed ? ImGuiCol_TitleBgCollapsed : is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); - host_window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, host_window->WindowRounding, ImDrawFlags_RoundCornersTop); + ImDrawFlags rounding_flags = CalcRoundingFlagsForRectInRect(title_bar_rect, host_window->Rect(), DOCKING_SPLITTER_SIZE); + host_window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, host_window->WindowRounding, rounding_flags); // Docking/Collapse button if (has_window_menu_button) @@ -14517,9 +15421,9 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w } if (tab_bar->Tabs.Size > tabs_unsorted_start) { - IMGUI_DEBUG_LOG_DOCKING("In node 0x%08X: %d new appearing tabs:%s\n", node->ID, tab_bar->Tabs.Size - tabs_unsorted_start, (tab_bar->Tabs.Size > tabs_unsorted_start + 1) ? " (will sort)" : ""); + IMGUI_DEBUG_LOG_DOCKING("[docking] In node 0x%08X: %d new appearing tabs:%s\n", node->ID, tab_bar->Tabs.Size - tabs_unsorted_start, (tab_bar->Tabs.Size > tabs_unsorted_start + 1) ? " (will sort)" : ""); for (int tab_n = tabs_unsorted_start; tab_n < tab_bar->Tabs.Size; tab_n++) - IMGUI_DEBUG_LOG_DOCKING(" - Tab '%s' Order %d\n", tab_bar->Tabs[tab_n].Window->Name, tab_bar->Tabs[tab_n].Window->DockOrder); + IMGUI_DEBUG_LOG_DOCKING("[docking] - Tab '%s' Order %d\n", tab_bar->Tabs[tab_n].Window->Name, tab_bar->Tabs[tab_n].Window->DockOrder); if (tab_bar->Tabs.Size > tabs_unsorted_start + 1) ImQsort(tab_bar->Tabs.Data + tabs_unsorted_start, tab_bar->Tabs.Size - tabs_unsorted_start, sizeof(ImGuiTabItem), TabItemComparerByDockOrder); } @@ -14532,7 +15436,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w if (tab_bar_is_recreated && TabBarFindTabByID(tab_bar, node->SelectedTabId) != NULL) tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = node->SelectedTabId; else if (tab_bar->Tabs.Size > tabs_count_old) - tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = tab_bar->Tabs.back().Window->ID; + tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = tab_bar->Tabs.back().Window->TabId; // Begin tab bar ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_Reorderable | ImGuiTabBarFlags_AutoSelectNewTabs; // | ImGuiTabBarFlags_NoTabListScrollingButtons); @@ -14552,7 +15456,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w for (int window_n = 0; window_n < node->Windows.Size; window_n++) { ImGuiWindow* window = node->Windows[window_n]; - if ((closed_all || closed_one == window->ID) && window->HasCloseButton && !(window->Flags & ImGuiWindowFlags_UnsavedDocument)) + if ((closed_all || closed_one == window->TabId) && window->HasCloseButton && !(window->Flags & ImGuiWindowFlags_UnsavedDocument)) continue; if (window->LastFrameActive + 1 >= g.FrameCount || !node_was_active) { @@ -14567,11 +15471,12 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w for (int color_n = 0; color_n < ImGuiWindowDockStyleCol_COUNT; color_n++) g.Style.Colors[GWindowDockStyleColors[color_n]] = ColorConvertU32ToFloat4(window->DockStyle.Colors[color_n]); + // Note that TabItemEx() calls TabBarCalcTabID() so our tab item ID will ignore the current ID stack (rightly so) bool tab_open = true; TabItemEx(tab_bar, window->Name, window->HasCloseButton ? &tab_open : NULL, tab_item_flags, window); if (!tab_open) - node->WantCloseTabId = window->ID; - if (tab_bar->VisibleTabId == window->ID) + node->WantCloseTabId = window->TabId; + if (tab_bar->VisibleTabId == window->TabId) node->VisibleWindow = window; // Store last item data so it can be queried with IsItemXXX functions after the user Begin() call @@ -14580,7 +15485,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w // Update navigation ID on menu layer if (g.NavWindow && g.NavWindow->RootWindow == window && (window->DC.NavLayersActiveMask & (1 << ImGuiNavLayer_Menu)) == 0) - host_window->NavLastIds[1] = window->ID; + host_window->NavLastIds[1] = window->TabId; } } @@ -14594,7 +15499,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w root_node->VisibleWindow = node->VisibleWindow; // Close button (after VisibleWindow was updated) - // Note that VisibleWindow may have been overrided by CTRL+Tabbing, so VisibleWindow->ID may be != from tab_bar->SelectedTabId + // Note that VisibleWindow may have been overrided by CTRL+Tabbing, so VisibleWindow->TabId may be != from tab_bar->SelectedTabId const bool close_button_is_enabled = node->HasCloseButton && node->VisibleWindow && node->VisibleWindow->HasCloseButton; const bool close_button_is_visible = node->HasCloseButton; //const bool close_button_is_visible = close_button_is_enabled; // Most people would expect this behavior of not even showing the button (leaving a hole since we can't claim that space as other windows in the tba bar have one) @@ -14704,12 +15609,23 @@ static bool DockNodeIsDropAllowedOne(ImGuiWindow* payload, ImGuiWindow* host_win return false; } + // Prevent docking any window created above a popup + // Technically we should support it (e.g. in the case of a long-lived modal window that had fancy docking features), + // by e.g. adding a 'if (!ImGui::IsWindowWithinBeginStackOf(host_window, popup_window))' test. + // But it would requires more work on our end because the dock host windows is technically created in NewFrame() + // and our ->ParentXXX and ->RootXXX pointers inside windows are currently mislading or lacking. + ImGuiContext& g = *GImGui; + for (int i = g.OpenPopupStack.Size - 1; i >= 0; i--) + if (ImGuiWindow* popup_window = g.OpenPopupStack[i].Window) + if (ImGui::IsWindowWithinBeginStackOf(payload, popup_window)) // Payload is created from within a popup begin stack. + return false; + return true; } static bool ImGui::DockNodeIsDropAllowed(ImGuiWindow* host_window, ImGuiWindow* root_payload) { - if (root_payload->DockNodeAsHost && root_payload->DockNodeAsHost->IsSplitNode()) + if (root_payload->DockNodeAsHost && root_payload->DockNodeAsHost->IsSplitNode()) // FIXME-DOCK: Missing filtering return true; const int payload_count = root_payload->DockNodeAsHost ? root_payload->DockNodeAsHost->Windows.Size : 1; @@ -14856,7 +15772,7 @@ static void ImGui::DockNodePreviewDockSetup(ImGuiWindow* host_window, ImGuiDockN ImGuiDockNode* root_payload_as_host = root_payload->DockNodeAsHost; ImGuiDockNode* ref_node_for_rect = (host_node && !host_node->IsVisible) ? DockNodeGetRootNode(host_node) : host_node; if (ref_node_for_rect) - IM_ASSERT(ref_node_for_rect->IsVisible); + IM_ASSERT(ref_node_for_rect->IsVisible == true); // Filter, figure out where we are allowed to dock ImGuiDockNodeFlags src_node_flags = root_payload_as_host ? root_payload_as_host->MergedFlags : root_payload->WindowClass.DockNodeFlagsOverrideSet; @@ -14964,7 +15880,7 @@ static void ImGui::DockNodePreviewDockRender(ImGuiWindow* host_window, ImGuiDock overlay_rect.Min.y += GetFrameHeight(); if (data->SplitDir != ImGuiDir_None || data->IsCenterAvailable) for (int overlay_n = 0; overlay_n < overlay_draw_lists_count; overlay_n++) - overlay_draw_lists[overlay_n]->AddRectFilled(overlay_rect.Min, overlay_rect.Max, overlay_col_main, host_window->WindowRounding); + overlay_draw_lists[overlay_n]->AddRectFilled(overlay_rect.Min, overlay_rect.Max, overlay_col_main, host_window->WindowRounding, CalcRoundingFlagsForRectInRect(overlay_rect, host_window->Rect(), DOCKING_SPLITTER_SIZE)); } // Display tab shape/label preview unless we are splitting node (it generally makes the situation harder to read) @@ -15108,6 +16024,7 @@ void ImGui::DockNodeTreeSplit(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImG void ImGui::DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImGuiDockNode* merge_lead_child) { // When called from DockContextProcessUndockNode() it is possible that one of the child is NULL. + ImGuiContext& g = *GImGui; ImGuiDockNode* child_0 = parent_node->ChildNodes[0]; ImGuiDockNode* child_1 = parent_node->ChildNodes[1]; IM_ASSERT(child_0 || child_1); @@ -15117,7 +16034,7 @@ void ImGui::DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImG IM_ASSERT(parent_node->TabBar == NULL); IM_ASSERT(parent_node->Windows.Size == 0); } - IMGUI_DEBUG_LOG_DOCKING("DockNodeTreeMerge 0x%08X & 0x%08X back into parent 0x%08X\n", child_0 ? child_0->ID : 0, child_1 ? child_1->ID : 0, parent_node->ID); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockNodeTreeMerge: 0x%08X + 0x%08X back into parent 0x%08X\n", child_0 ? child_0->ID : 0, child_1 ? child_1->ID : 0, parent_node->ID); ImVec2 backup_last_explicit_size = parent_node->SizeRef; DockNodeMoveChildNodes(parent_node, merge_lead_child); @@ -15157,11 +16074,11 @@ void ImGui::DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImG // Update Pos/Size for a node hierarchy (don't affect child Windows yet) // (Depth-first, Pre-Order) -void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 size, bool only_write_to_marked_nodes) +void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 size, ImGuiDockNode* only_write_to_single_node) { // During the regular dock node update we write to all nodes. - // 'only_write_to_marked_nodes' is only set when turning a node visible mid-frame and we need its size right-away. - const bool write_to_node = (only_write_to_marked_nodes == false) || (node->MarkedForPosSizeWrite); + // 'only_write_to_single_node' is only set when turning a node visible mid-frame and we need its size right-away. + const bool write_to_node = only_write_to_single_node == NULL || only_write_to_single_node == node; if (write_to_node) { node->Pos = pos; @@ -15175,15 +16092,21 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si ImGuiDockNode* child_1 = node->ChildNodes[1]; ImVec2 child_0_pos = pos, child_1_pos = pos; ImVec2 child_0_size = size, child_1_size = size; - if (child_0->IsVisible && child_1->IsVisible) + + const bool child_0_is_toward_single_node = (only_write_to_single_node != NULL && DockNodeIsInHierarchyOf(only_write_to_single_node, child_0)); + const bool child_1_is_toward_single_node = (only_write_to_single_node != NULL && DockNodeIsInHierarchyOf(only_write_to_single_node, child_1)); + const bool child_0_is_or_will_be_visible = child_0->IsVisible || child_0_is_toward_single_node; + const bool child_1_is_or_will_be_visible = child_1->IsVisible || child_1_is_toward_single_node; + + if (child_0_is_or_will_be_visible && child_1_is_or_will_be_visible) { + ImGuiContext& g = *GImGui; const float spacing = DOCKING_SPLITTER_SIZE; const ImGuiAxis axis = (ImGuiAxis)node->SplitAxis; const float size_avail = ImMax(size[axis] - spacing, 0.0f); // Size allocation policy // 1) The first 0..WindowMinSize[axis]*2 are allocated evenly to both windows. - ImGuiContext& g = *GImGui; const float size_min_each = ImFloor(ImMin(size_avail, g.Style.WindowMinSize[axis] * 2.0f) * 0.5f); // FIXME: Blocks 2) and 3) are essentially doing nearly the same thing. @@ -15234,11 +16157,15 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si child_1_pos[axis] += spacing + child_0_size[axis]; } - child_0->WantLockSizeOnce = child_1->WantLockSizeOnce = false; - if (child_0->IsVisible) + if (only_write_to_single_node == NULL) + child_0->WantLockSizeOnce = child_1->WantLockSizeOnce = false; + + const bool child_0_recurse = only_write_to_single_node ? child_0_is_toward_single_node : child_0->IsVisible; + const bool child_1_recurse = only_write_to_single_node ? child_1_is_toward_single_node : child_1->IsVisible; + if (child_0_recurse) DockNodeTreeUpdatePosSize(child_0, child_0_pos, child_0_size); - if (child_1->IsVisible) + if (child_1_recurse) DockNodeTreeUpdatePosSize(child_1, child_1_pos, child_1_size); } @@ -15329,7 +16256,8 @@ void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node) float cur_size_1 = child_1->Size[axis]; float min_size_0 = resize_limits[0] - child_0->Pos[axis]; float min_size_1 = child_1->Pos[axis] + child_1->Size[axis] - resize_limits[1]; - if (SplitterBehavior(bb, GetID("##Splitter"), axis, &cur_size_0, &cur_size_1, min_size_0, min_size_1, WINDOWS_HOVER_PADDING, WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER)) + ImU32 bg_col = GetColorU32(ImGuiCol_WindowBg); + if (SplitterBehavior(bb, GetID("##Splitter"), axis, &cur_size_0, &cur_size_1, min_size_0, min_size_1, WINDOWS_HOVER_PADDING, WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER, bg_col)) { if (touching_nodes[0].Size > 0 && touching_nodes[1].Size > 0) { @@ -15474,12 +16402,12 @@ ImGuiID ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags ImGuiDockNode* node = DockContextFindNodeByID(ctx, id); if (!node) { - IMGUI_DEBUG_LOG_DOCKING("DockSpace: dockspace node 0x%08X created\n", id); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockSpace: dockspace node 0x%08X created\n", id); node = DockContextAddNode(ctx, id); node->SetLocalFlags(ImGuiDockNodeFlags_CentralNode); } if (window_class && window_class->ClassId != node->WindowClass.ClassId) - IMGUI_DEBUG_LOG_DOCKING("DockSpace: dockspace node 0x%08X: setup WindowClass 0x%08X -> 0x%08X\n", id, node->WindowClass.ClassId, window_class->ClassId); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockSpace: dockspace node 0x%08X: setup WindowClass 0x%08X -> 0x%08X\n", id, node->WindowClass.ClassId, window_class->ClassId); node->SharedFlags = flags; node->WindowClass = window_class ? *window_class : ImGuiWindowClass(); @@ -15815,11 +16743,11 @@ void ImGui::DockBuilderRemoveNodeDockedWindows(ImGuiID root_id, bool clear_setti // FIXME-DOCK: We are not exposing nor using split_outer. ImGuiID ImGui::DockBuilderSplitNode(ImGuiID id, ImGuiDir split_dir, float size_ratio_for_node_at_dir, ImGuiID* out_id_at_dir, ImGuiID* out_id_at_opposite_dir) { - ImGuiContext* ctx = GImGui; + ImGuiContext& g = *GImGui; IM_ASSERT(split_dir != ImGuiDir_None); - IMGUI_DEBUG_LOG_DOCKING("DockBuilderSplitNode node 0x%08X, split_dir %d\n", id, split_dir); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockBuilderSplitNode: node 0x%08X, split_dir %d\n", id, split_dir); - ImGuiDockNode* node = DockContextFindNodeByID(ctx, id); + ImGuiDockNode* node = DockContextFindNodeByID(&g, id); if (node == NULL) { IM_ASSERT(node != NULL); @@ -15836,7 +16764,7 @@ ImGuiID ImGui::DockBuilderSplitNode(ImGuiID id, ImGuiDir split_dir, float size_r req.DockSplitDir = split_dir; req.DockSplitRatio = ImSaturate((split_dir == ImGuiDir_Left || split_dir == ImGuiDir_Up) ? size_ratio_for_node_at_dir : 1.0f - size_ratio_for_node_at_dir); req.DockSplitOuter = false; - DockContextProcessDock(ctx, &req); + DockContextProcessDock(&g, &req); ImGuiID id_at_dir = node->ChildNodes[(split_dir == ImGuiDir_Left || split_dir == ImGuiDir_Up) ? 0 : 1]->ID; ImGuiID id_at_opposite_dir = node->ChildNodes[(split_dir == ImGuiDir_Left || split_dir == ImGuiDir_Up) ? 1 : 0]->ID; @@ -15849,8 +16777,8 @@ ImGuiID ImGui::DockBuilderSplitNode(ImGuiID id, ImGuiDir split_dir, float size_r static ImGuiDockNode* DockBuilderCopyNodeRec(ImGuiDockNode* src_node, ImGuiID dst_node_id_if_known, ImVector* out_node_remap_pairs) { - ImGuiContext* ctx = GImGui; - ImGuiDockNode* dst_node = ImGui::DockContextAddNode(ctx, dst_node_id_if_known); + ImGuiContext& g = *GImGui; + ImGuiDockNode* dst_node = ImGui::DockContextAddNode(&g, dst_node_id_if_known); dst_node->SharedFlags = src_node->SharedFlags; dst_node->LocalFlags = src_node->LocalFlags; dst_node->LocalFlagsInWindows = ImGuiDockNodeFlags_None; @@ -15870,7 +16798,7 @@ static ImGuiDockNode* DockBuilderCopyNodeRec(ImGuiDockNode* src_node, ImGuiID ds dst_node->ChildNodes[child_n]->ParentNode = dst_node; } - IMGUI_DEBUG_LOG_DOCKING("Fork node %08X -> %08X (%d childs)\n", src_node->ID, dst_node->ID, dst_node->IsSplitNode() ? 2 : 0); + IMGUI_DEBUG_LOG_DOCKING("[docking] Fork node %08X -> %08X (%d childs)\n", src_node->ID, dst_node->ID, dst_node->IsSplitNode() ? 2 : 0); return dst_node; } @@ -15925,6 +16853,7 @@ void ImGui::DockBuilderCopyWindowSettings(const char* src_name, const char* dst_ // FIXME: Will probably want to change this signature, in particular how the window remapping pairs are passed. void ImGui::DockBuilderCopyDockSpace(ImGuiID src_dockspace_id, ImGuiID dst_dockspace_id, ImVector* in_window_remap_pairs) { + ImGuiContext& g = *GImGui; IM_ASSERT(src_dockspace_id != 0); IM_ASSERT(dst_dockspace_id != 0); IM_ASSERT(in_window_remap_pairs != NULL); @@ -15964,14 +16893,14 @@ void ImGui::DockBuilderCopyDockSpace(ImGuiID src_dockspace_id, ImGuiID dst_docks if (dst_dock_id != 0) { // Docked windows gets redocked into the new node hierarchy. - IMGUI_DEBUG_LOG_DOCKING("Remap live window '%s' 0x%08X -> '%s' 0x%08X\n", src_window_name, src_dock_id, dst_window_name, dst_dock_id); + IMGUI_DEBUG_LOG_DOCKING("[docking] Remap live window '%s' 0x%08X -> '%s' 0x%08X\n", src_window_name, src_dock_id, dst_window_name, dst_dock_id); DockBuilderDockWindow(dst_window_name, dst_dock_id); } else { // Floating windows gets their settings transferred (regardless of whether the new window already exist or not) // When this is leading to a Copy and not a Move, we would get two overlapping floating windows. Could we possibly dock them together? - IMGUI_DEBUG_LOG_DOCKING("Remap window settings '%s' -> '%s'\n", src_window_name, dst_window_name); + IMGUI_DEBUG_LOG_DOCKING("[docking] Remap window settings '%s' -> '%s'\n", src_window_name, dst_window_name); DockBuilderCopyWindowSettings(src_window_name, dst_window_name); } } @@ -15990,7 +16919,7 @@ void ImGui::DockBuilderCopyDockSpace(ImGuiID src_dockspace_id, ImGuiID dst_docks continue; // Docked windows gets redocked into the new node hierarchy. - IMGUI_DEBUG_LOG_DOCKING("Remap window '%s' %08X -> %08X\n", window->Name, src_dock_id, dst_dock_id); + IMGUI_DEBUG_LOG_DOCKING("[docking] Remap window '%s' %08X -> %08X\n", window->Name, src_dock_id, dst_dock_id); DockBuilderDockWindow(window->Name, dst_dock_id); } } @@ -16052,20 +16981,17 @@ static ImGuiDockNode* ImGui::DockContextBindNodeToWindow(ImGuiContext* ctx, ImGu if (!node->IsVisible) { ImGuiDockNode* ancestor_node = node; - while (!ancestor_node->IsVisible) - { - ancestor_node->IsVisible = true; - ancestor_node->MarkedForPosSizeWrite = true; - if (ancestor_node->ParentNode) - ancestor_node = ancestor_node->ParentNode; - } + while (!ancestor_node->IsVisible && ancestor_node->ParentNode) + ancestor_node = ancestor_node->ParentNode; IM_ASSERT(ancestor_node->Size.x > 0.0f && ancestor_node->Size.y > 0.0f); DockNodeUpdateHasCentralNodeChild(DockNodeGetRootNode(ancestor_node)); - DockNodeTreeUpdatePosSize(ancestor_node, ancestor_node->Pos, ancestor_node->Size, true); + DockNodeTreeUpdatePosSize(ancestor_node, ancestor_node->Pos, ancestor_node->Size, node); } // Add window to node + bool node_was_visible = node->IsVisible; DockNodeAddWindow(node, window, true); + node->IsVisible = node_was_visible; // Don't mark visible right away (so DockContextEndFrame() doesn't render it, maybe other side effects? will see) IM_ASSERT(node == window->DockNode); return node; } @@ -16156,7 +17082,7 @@ void ImGui::BeginDocked(ImGuiWindow* window, bool* p_open) node->State = ImGuiDockNodeState_HostWindowVisible; // Undock if we are submitted earlier than the host window - if (window->BeginOrderWithinContext < node->HostWindow->BeginOrderWithinContext) + if (!(node->MergedFlags & ImGuiDockNodeFlags_KeepAliveOnly) && window->BeginOrderWithinContext < node->HostWindow->BeginOrderWithinContext) { DockContextProcessUndockWindow(ctx, window); return; @@ -16189,7 +17115,7 @@ void ImGui::BeginDocked(ImGuiWindow* window, bool* p_open) if (node->TabBar && window->WasActive) window->DockOrder = (short)DockNodeGetTabOrder(window); - if ((node->WantCloseAll || node->WantCloseTabId == window->ID) && p_open != NULL) + if ((node->WantCloseAll || node->WantCloseTabId == window->TabId) && p_open != NULL) *p_open = false; // Update ChildId to allow returning from Child to Parent with Escape @@ -16317,7 +17243,7 @@ void ImGui::BeginDockableDragDropTarget(ImGuiWindow* window) static void ImGui::DockSettingsRenameNodeReferences(ImGuiID old_node_id, ImGuiID new_node_id) { ImGuiContext& g = *GImGui; - IMGUI_DEBUG_LOG_DOCKING("DockSettingsRenameNodeReferences: from 0x%08X -> to 0x%08X\n", old_node_id, new_node_id); + IMGUI_DEBUG_LOG_DOCKING("[docking] DockSettingsRenameNodeReferences: from 0x%08X -> to 0x%08X\n", old_node_id, new_node_id); for (int window_n = 0; window_n < g.Windows.Size; window_n++) { ImGuiWindow* window = g.Windows[window_n]; @@ -16655,26 +17581,74 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text) #endif +// Win32 API IME support (for Asian languages, etc.) +#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) + +#include +#ifdef _MSC_VER +#pragma comment(lib, "imm32") +#endif + +static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, ImGuiPlatformImeData* data) +{ + // Notify OS Input Method Editor of text input position + HWND hwnd = (HWND)viewport->PlatformHandleRaw; +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + if (hwnd == 0) + hwnd = (HWND)ImGui::GetIO().ImeWindowHandle; +#endif + if (hwnd == 0) + return; + + ::ImmAssociateContextEx(hwnd, NULL, data->WantVisible ? IACE_DEFAULT : 0); + + if (HIMC himc = ::ImmGetContext(hwnd)) + { + COMPOSITIONFORM composition_form = {}; + composition_form.ptCurrentPos.x = (LONG)(data->InputPos.x - viewport->Pos.x); + composition_form.ptCurrentPos.y = (LONG)(data->InputPos.y - viewport->Pos.y); + composition_form.dwStyle = CFS_FORCE_POSITION; + ::ImmSetCompositionWindow(himc, &composition_form); + CANDIDATEFORM candidate_form = {}; + candidate_form.dwStyle = CFS_CANDIDATEPOS; + candidate_form.ptCurrentPos.x = (LONG)(data->InputPos.x - viewport->Pos.x); + candidate_form.ptCurrentPos.y = (LONG)(data->InputPos.y - viewport->Pos.y); + ::ImmSetCandidateWindow(himc, &candidate_form); + ::ImmReleaseContext(hwnd, himc); + } +} + +#else + +static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport*, ImGuiPlatformImeData*) {} + +#endif + //----------------------------------------------------------------------------- // [SECTION] METRICS/DEBUGGER WINDOW //----------------------------------------------------------------------------- // - RenderViewportThumbnail() [Internal] // - RenderViewportsThumbnails() [Internal] +// - DebugTextEncoding() // - MetricsHelpMarker() [Internal] +// - ShowFontAtlas() [Internal] // - ShowMetricsWindow() // - DebugNodeColumns() [Internal] // - DebugNodeDockNode() [Internal] // - DebugNodeDrawList() [Internal] // - DebugNodeDrawCmdShowMeshAndBoundingBox() [Internal] +// - DebugNodeFont() [Internal] +// - DebugNodeFontGlyph() [Internal] // - DebugNodeStorage() [Internal] // - DebugNodeTabBar() [Internal] // - DebugNodeViewport() [Internal] // - DebugNodeWindow() [Internal] // - DebugNodeWindowSettings() [Internal] // - DebugNodeWindowsList() [Internal] +// - DebugNodeWindowsListByBeginStackParent() [Internal] //----------------------------------------------------------------------------- -#ifndef IMGUI_DISABLE_METRICS_WINDOW +#ifndef IMGUI_DISABLE_DEBUG_TOOLS void ImGui::DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb) { @@ -16731,11 +17705,47 @@ static void RenderViewportsThumbnails() static int IMGUI_CDECL ViewportComparerByFrontMostStampCount(const void* lhs, const void* rhs) { - const ImGuiViewportP* a = *(const ImGuiViewportP* const *)lhs; - const ImGuiViewportP* b = *(const ImGuiViewportP* const *)rhs; + const ImGuiViewportP* a = *(const ImGuiViewportP* const*)lhs; + const ImGuiViewportP* b = *(const ImGuiViewportP* const*)rhs; return b->LastFrontMostStampCount - a->LastFrontMostStampCount; } +// Helper tool to diagnose between text encoding issues and font loading issues. Pass your UTF-8 string and verify that there are correct. +void ImGui::DebugTextEncoding(const char* str) +{ + Text("Text: \"%s\"", str); + if (!BeginTable("list", 4, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit)) + return; + TableSetupColumn("Offset"); + TableSetupColumn("UTF-8"); + TableSetupColumn("Glyph"); + TableSetupColumn("Codepoint"); + TableHeadersRow(); + for (const char* p = str; *p != 0; ) + { + unsigned int c; + const int c_utf8_len = ImTextCharFromUtf8(&c, p, NULL); + TableNextColumn(); + Text("%d", (int)(p - str)); + TableNextColumn(); + for (int byte_index = 0; byte_index < c_utf8_len; byte_index++) + { + if (byte_index > 0) + SameLine(); + Text("0x%02X", (int)(unsigned char)p[byte_index]); + } + TableNextColumn(); + if (GetFont()->FindGlyphNoFallback((ImWchar)c)) + TextUnformatted(p, p + c_utf8_len); + else + TextUnformatted((c == IM_UNICODE_CODEPOINT_INVALID) ? "[invalid]" : "[missing]"); + TableNextColumn(); + Text("U+%04X", (int)c); + p += c_utf8_len; + } + EndTable(); +} + // Avoid naming collision with imgui_demo.cpp's HelpMarker() for unity builds. static void MetricsHelpMarker(const char* desc) { @@ -16750,15 +17760,32 @@ static void MetricsHelpMarker(const char* desc) } } -#ifndef IMGUI_DISABLE_DEMO_WINDOWS -namespace ImGui { void ShowFontAtlas(ImFontAtlas* atlas); } -#endif +// [DEBUG] List fonts in a font atlas and display its texture +void ImGui::ShowFontAtlas(ImFontAtlas* atlas) +{ + for (int i = 0; i < atlas->Fonts.Size; i++) + { + ImFont* font = atlas->Fonts[i]; + PushID(font); + DebugNodeFont(font); + PopID(); + } + if (TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight)) + { + ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); + ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f); + Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0.0f, 0.0f), ImVec2(1.0f, 1.0f), tint_col, border_col); + TreePop(); + } +} void ImGui::ShowMetricsWindow(bool* p_open) { ImGuiContext& g = *GImGui; ImGuiIO& io = g.IO; ImGuiMetricsConfig* cfg = &g.DebugMetricsConfig; + if (cfg->ShowDebugLog) + ShowDebugLogWindow(&cfg->ShowDebugLog); if (cfg->ShowStackTool) ShowStackToolWindow(&cfg->ShowStackTool); @@ -16791,19 +17818,20 @@ void ImGui::ShowMetricsWindow(bool* p_open) { static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n) { + ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent); // Always using last submitted instance if (rect_type == TRT_OuterRect) { return table->OuterRect; } else if (rect_type == TRT_InnerRect) { return table->InnerRect; } else if (rect_type == TRT_WorkRect) { return table->WorkRect; } else if (rect_type == TRT_HostClipRect) { return table->HostClipRect; } else if (rect_type == TRT_InnerClipRect) { return table->InnerClipRect; } else if (rect_type == TRT_BackgroundClipRect) { return table->BgClipRect; } - else if (rect_type == TRT_ColumnsRect) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table->LastOuterHeight); } + else if (rect_type == TRT_ColumnsRect) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table_instance->LastOuterHeight); } else if (rect_type == TRT_ColumnsWorkRect) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->WorkRect.Min.y, c->WorkMaxX, table->WorkRect.Max.y); } else if (rect_type == TRT_ColumnsClipRect) { ImGuiTableColumn* c = &table->Columns[n]; return c->ClipRect; } - else if (rect_type == TRT_ColumnsContentHeadersUsed){ ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXHeadersUsed, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } // Note: y1/y2 not always accurate - else if (rect_type == TRT_ColumnsContentHeadersIdeal){ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXHeadersIdeal, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } - else if (rect_type == TRT_ColumnsContentFrozen) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXFrozen, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } - else if (rect_type == TRT_ColumnsContentUnfrozen) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y + table->LastFirstRowHeight, c->ContentMaxXUnfrozen, table->InnerClipRect.Max.y); } + else if (rect_type == TRT_ColumnsContentHeadersUsed){ ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXHeadersUsed, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight); } // Note: y1/y2 not always accurate + else if (rect_type == TRT_ColumnsContentHeadersIdeal){ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXHeadersIdeal, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight); } + else if (rect_type == TRT_ColumnsContentFrozen) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXFrozen, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight); } + else if (rect_type == TRT_ColumnsContentUnfrozen) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight, c->ContentMaxXUnfrozen, table->InnerClipRect.Max.y); } IM_ASSERT(0); return ImRect(); } @@ -16826,8 +17854,32 @@ void ImGui::ShowMetricsWindow(bool* p_open) // Tools if (TreeNode("Tools")) { + bool show_encoding_viewer = TreeNode("UTF-8 Encoding viewer"); + SameLine(); + MetricsHelpMarker("You can also call ImGui::DebugTextEncoding() from your code with a given string to test that your UTF-8 encoding settings are correct."); + if (show_encoding_viewer) + { + static char buf[100] = ""; + SetNextItemWidth(-FLT_MIN); + InputText("##Text", buf, IM_ARRAYSIZE(buf)); + if (buf[0] != 0) + DebugTextEncoding(buf); + TreePop(); + } + + // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted. + if (Checkbox("Show Item Picker", &g.DebugItemPickerActive) && g.DebugItemPickerActive) + DebugStartItemPicker(); + SameLine(); + MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash."); + + // Stack Tool is your best friend! + Checkbox("Show Debug Log", &cfg->ShowDebugLog); + SameLine(); + MetricsHelpMarker("You can also call ImGui::ShowDebugLogWindow() from your code."); + // Stack Tool is your best friend! - Checkbox("Show stack tool", &cfg->ShowStackTool); + Checkbox("Show Stack Tool", &cfg->ShowStackTool); SameLine(); MetricsHelpMarker("You can also call ImGui::ShowStackToolWindow() from your code."); @@ -16893,18 +17945,31 @@ void ImGui::ShowMetricsWindow(bool* p_open) } } - // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted. - if (Button("Item Picker..")) - DebugStartItemPicker(); - SameLine(); - MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash."); - TreePop(); } // Windows - DebugNodeWindowsList(&g.Windows, "Windows"); - //DebugNodeWindowsList(&g.WindowsFocusOrder, "WindowsFocusOrder"); + if (TreeNode("Windows", "Windows (%d)", g.Windows.Size)) + { + //SetNextItemOpen(true, ImGuiCond_Once); + DebugNodeWindowsList(&g.Windows, "By display order"); + DebugNodeWindowsList(&g.WindowsFocusOrder, "By focus order (root windows)"); + if (TreeNode("By submission order (begin stack)")) + { + // Here we display windows in their submitted order/hierarchy, however note that the Begin stack doesn't constitute a Parent<>Child relationship! + ImVector& temp_buffer = g.WindowsTempSortBuffer; + temp_buffer.resize(0); + for (int i = 0; i < g.Windows.Size; i++) + if (g.Windows[i]->LastFrameActive + 1 >= g.FrameCount) + temp_buffer.push_back(g.Windows[i]); + struct Func { static int IMGUI_CDECL WindowComparerByBeginOrder(const void* lhs, const void* rhs) { return ((int)(*(const ImGuiWindow* const *)lhs)->BeginOrderWithinContext - (*(const ImGuiWindow* const*)rhs)->BeginOrderWithinContext); } }; + ImQsort(temp_buffer.Data, (size_t)temp_buffer.Size, sizeof(ImGuiWindow*), Func::WindowComparerByBeginOrder); + DebugNodeWindowsListByBeginStackParent(temp_buffer.Data, temp_buffer.Size, NULL); + TreePop(); + } + + TreePop(); + } // DrawLists int drawlist_count = 0; @@ -16953,7 +18018,8 @@ void ImGui::ShowMetricsWindow(bool* p_open) TreePop(); } - if (TreeNode("Inferred order (front-to-back)")) + BulletText("MouseViewport: 0x%08X (UserHovered 0x%08X, LastHovered 0x%08X)", g.MouseViewport ? g.MouseViewport->ID : 0, g.IO.MouseHoveredViewport, g.MouseLastHoveredViewport ? g.MouseLastHoveredViewport->ID : 0); + if (TreeNode("Inferred Z order (front-to-back)")) { static ImVector viewports; viewports.resize(g.Viewports.Size); @@ -17004,14 +18070,19 @@ void ImGui::ShowMetricsWindow(bool* p_open) } // Details for Fonts -#ifndef IMGUI_DISABLE_DEMO_WINDOWS ImFontAtlas* atlas = g.IO.Fonts; if (TreeNode("Fonts", "Fonts (%d)", atlas->Fonts.Size)) { ShowFontAtlas(atlas); TreePop(); } -#endif + + // Details for InputText + if (TreeNode("InputText")) + { + DebugNodeInputTextState(&g.InputTextState); + TreePop(); + } // Details for Docking #ifdef IMGUI_HAS_DOCK @@ -17106,8 +18177,6 @@ void ImGui::ShowMetricsWindow(bool* p_open) // Misc Details if (TreeNode("Internal state")) { - const char* input_source_names[] = { "None", "Mouse", "Keyboard", "Gamepad", "Nav", "Clipboard" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT); - Text("WINDOWING"); Indent(); Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL"); @@ -17120,9 +18189,13 @@ void ImGui::ShowMetricsWindow(bool* p_open) Text("ITEMS"); Indent(); - Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, input_source_names[g.ActiveIdSource]); + Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, GetInputSourceName(g.ActiveIdSource)); Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL"); - Text("ActiveIdUsing: Wheel: %d, NavDirMask: %X, NavInputMask: %X, KeyInputMask: %llX", g.ActiveIdUsingMouseWheel, g.ActiveIdUsingNavDirMask, g.ActiveIdUsingNavInputMask, g.ActiveIdUsingKeyInputMask); + + int active_id_using_key_input_count = 0; + for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++) + active_id_using_key_input_count += g.ActiveIdUsingKeyInputMask[n] ? 1 : 0; + Text("ActiveIdUsing: Wheel: %d, NavDirMask: %X, NavInputMask: %X, KeyInputMask: %d key(s)", g.ActiveIdUsingMouseWheel, g.ActiveIdUsingNavDirMask, g.ActiveIdUsingNavInputMask, active_id_using_key_input_count); Text("HoveredId: 0x%08X (%.2f sec), AllowOverlap: %d", g.HoveredIdPreviousFrame, g.HoveredIdTimer, g.HoveredIdAllowOverlap); // Not displaying g.HoveredId as it is update mid-frame Text("DragDrop: %d, SourceId = 0x%08X, Payload \"%s\" (%d bytes)", g.DragDropActive, g.DragDropPayload.SourceId, g.DragDropPayload.DataType, g.DragDropPayload.DataSize); Unindent(); @@ -17131,7 +18204,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) Indent(); Text("NavWindow: '%s'", g.NavWindow ? g.NavWindow->Name : "NULL"); Text("NavId: 0x%08X, NavLayer: %d", g.NavId, g.NavLayer); - Text("NavInputSource: %s", input_source_names[g.NavInputSource]); + Text("NavInputSource: %s", GetInputSourceName(g.NavInputSource)); Text("NavActive: %d, NavVisible: %d", g.IO.NavActive, g.IO.NavVisible); Text("NavActivateId/DownId/PressedId/InputId: %08X/%08X/%08X/%08X", g.NavActivateId, g.NavActivateDownId, g.NavActivatePressedId, g.NavActivateInputId); Text("NavActivateFlags: %04X", g.NavActivateFlags); @@ -17218,25 +18291,6 @@ void ImGui::ShowMetricsWindow(bool* p_open) End(); } -// [DEBUG] List fonts in a font atlas and display its texture -void ImGui::ShowFontAtlas(ImFontAtlas* atlas) -{ - for (int i = 0; i < atlas->Fonts.Size; i++) - { - ImFont* font = atlas->Fonts[i]; - PushID(font); - DebugNodeFont(font); - PopID(); - } - if (TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight)) - { - ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); - ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f); - Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0.0f, 0.0f), ImVec2(1.0f, 1.0f), tint_col, border_col); - TreePop(); - } -} - // [DEBUG] Display contents of Columns void ImGui::DebugNodeColumns(ImGuiOldColumns* columns) { @@ -17284,10 +18338,11 @@ void ImGui::DebugNodeDockNode(ImGuiDockNode* node, const char* label) const bool is_active = (g.FrameCount - node->LastFrameActive < 2); // Submitted if (!is_alive) { PushStyleColor(ImGuiCol_Text, GetStyleColorVec4(ImGuiCol_TextDisabled)); } bool open; + ImGuiTreeNodeFlags tree_node_flags = node->IsFocused ? ImGuiTreeNodeFlags_Selected : ImGuiTreeNodeFlags_None; if (node->Windows.Size > 0) - open = TreeNode((void*)(intptr_t)node->ID, "%s 0x%04X%s: %d windows (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", node->Windows.Size, node->VisibleWindow ? node->VisibleWindow->Name : "NULL"); + open = TreeNodeEx((void*)(intptr_t)node->ID, tree_node_flags, "%s 0x%04X%s: %d windows (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", node->Windows.Size, node->VisibleWindow ? node->VisibleWindow->Name : "NULL"); else - open = TreeNode((void*)(intptr_t)node->ID, "%s 0x%04X%s: %s split (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", (node->SplitAxis == ImGuiAxis_X) ? "horizontal" : (node->SplitAxis == ImGuiAxis_Y) ? "vertical" : "n/a", node->VisibleWindow ? node->VisibleWindow->Name : "NULL"); + open = TreeNodeEx((void*)(intptr_t)node->ID, tree_node_flags, "%s 0x%04X%s: %s split (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", (node->SplitAxis == ImGuiAxis_X) ? "horizontal" : (node->SplitAxis == ImGuiAxis_Y) ? "vertical" : "n/a", node->VisibleWindow ? node->VisibleWindow->Name : "NULL"); if (!is_alive) { PopStyleColor(); } if (is_active && IsItemHovered()) if (ImGuiWindow* window = node->HostWindow ? node->HostWindow : node->VisibleWindow) @@ -17301,10 +18356,10 @@ void ImGui::DebugNodeDockNode(ImGuiDockNode* node, const char* label) DebugNodeWindow(node->HostWindow, "HostWindow"); DebugNodeWindow(node->VisibleWindow, "VisibleWindow"); BulletText("SelectedTabID: 0x%08X, LastFocusedNodeID: 0x%08X", node->SelectedTabId, node->LastFocusedNodeId); - BulletText("Misc:%s%s%s%s%s%s", + BulletText("Misc:%s%s%s%s%s%s%s", node->IsDockSpace() ? " IsDockSpace" : "", node->IsCentralNode() ? " IsCentralNode" : "", - is_alive ? " IsAlive" : "", is_active ? " IsActive" : "", + is_alive ? " IsAlive" : "", is_active ? " IsActive" : "", node->IsFocused ? " IsFocused" : "", node->WantLockSizeOnce ? " WantLockSizeOnce" : "", node->HasCentralNodeChild ? " HasCentralNodeChild" : ""); if (TreeNode("flags", "Flags Merged: 0x%04X, Local: 0x%04X, InWindows: 0x%04X, Shared: 0x%04X", node->MergedFlags, node->LocalFlags, node->LocalFlagsInWindows, node->SharedFlags)) @@ -17351,7 +18406,7 @@ void ImGui::DebugNodeDrawList(ImGuiWindow* window, ImGuiViewportP* viewport, con } ImDrawList* fg_draw_list = viewport ? GetForegroundDrawList(viewport) : NULL; // Render additional visuals into the top-most draw list - if (window && fg_draw_list && IsItemHovered()) + if (window && IsItemHovered() && fg_draw_list) fg_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255)); if (!node_open) return; @@ -17530,17 +18585,13 @@ void ImGui::DebugNodeFont(ImFont* font) ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size); const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base + n)); draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255, 255, 255, 100) : IM_COL32(255, 255, 255, 50)); - if (glyph) - font->RenderChar(draw_list, cell_size, cell_p1, glyph_col, (ImWchar)(base + n)); - if (glyph && IsMouseHoveringRect(cell_p1, cell_p2)) + if (!glyph) + continue; + font->RenderChar(draw_list, cell_size, cell_p1, glyph_col, (ImWchar)(base + n)); + if (IsMouseHoveringRect(cell_p1, cell_p2)) { BeginTooltip(); - Text("Codepoint: U+%04X", base + n); - Separator(); - Text("Visible: %d", glyph->Visible); - Text("AdvanceX: %.1f", glyph->AdvanceX); - Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); - Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + DebugNodeFontGlyph(font, glyph); EndTooltip(); } } @@ -17552,6 +18603,16 @@ void ImGui::DebugNodeFont(ImFont* font) TreePop(); } +void ImGui::DebugNodeFontGlyph(ImFont*, const ImFontGlyph* glyph) +{ + Text("Codepoint: U+%04X", glyph->Codepoint); + Separator(); + Text("Visible: %d", glyph->Visible); + Text("AdvanceX: %.1f", glyph->AdvanceX); + Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); +} + // [DEBUG] Display contents of ImGuiStorage void ImGui::DebugNodeStorage(ImGuiStorage* storage, const char* label) { @@ -17717,7 +18778,6 @@ void ImGui::DebugNodeWindowsList(ImVector* windows, const char* la { if (!TreeNode(label, "%s (%d)", label, windows->Size)) return; - Text("(In front-to-back order:)"); for (int i = windows->Size - 1; i >= 0; i--) // Iterate front to back { PushID((*windows)[i]); @@ -17727,6 +18787,81 @@ void ImGui::DebugNodeWindowsList(ImVector* windows, const char* la TreePop(); } +// FIXME-OPT: This is technically suboptimal, but it is simpler this way. +void ImGui::DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int windows_size, ImGuiWindow* parent_in_begin_stack) +{ + for (int i = 0; i < windows_size; i++) + { + ImGuiWindow* window = windows[i]; + if (window->ParentWindowInBeginStack != parent_in_begin_stack) + continue; + char buf[20]; + ImFormatString(buf, IM_ARRAYSIZE(buf), "[%04d] Window", window->BeginOrderWithinContext); + //BulletText("[%04d] Window '%s'", window->BeginOrderWithinContext, window->Name); + DebugNodeWindow(window, buf); + Indent(); + DebugNodeWindowsListByBeginStackParent(windows + i + 1, windows_size - i - 1, window); + Unindent(); + } +} + +//----------------------------------------------------------------------------- +// [SECTION] DEBUG LOG +//----------------------------------------------------------------------------- + +void ImGui::DebugLog(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + DebugLogV(fmt, args); + va_end(args); +} + +void ImGui::DebugLogV(const char* fmt, va_list args) +{ + ImGuiContext& g = *GImGui; + const int old_size = g.DebugLogBuf.size(); + g.DebugLogBuf.appendf("[%05d] ", g.FrameCount); + g.DebugLogBuf.appendfv(fmt, args); + if (g.DebugLogFlags & ImGuiDebugLogFlags_OutputToTTY) + IMGUI_DEBUG_PRINTF("%s", g.DebugLogBuf.begin() + old_size); +} + +void ImGui::ShowDebugLogWindow(bool* p_open) +{ + ImGuiContext& g = *GImGui; + if (!(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)) + SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 12.0f), ImGuiCond_FirstUseEver); + if (!Begin("Dear ImGui Debug Log", p_open) || GetCurrentWindow()->BeginCount > 1) + { + End(); + return; + } + + AlignTextToFramePadding(); + Text("Log events:"); + SameLine(); CheckboxFlags("All", &g.DebugLogFlags, ImGuiDebugLogFlags_EventMask_); + SameLine(); CheckboxFlags("ActiveId", &g.DebugLogFlags, ImGuiDebugLogFlags_EventActiveId); + SameLine(); CheckboxFlags("Focus", &g.DebugLogFlags, ImGuiDebugLogFlags_EventFocus); + SameLine(); CheckboxFlags("Popup", &g.DebugLogFlags, ImGuiDebugLogFlags_EventPopup); + SameLine(); CheckboxFlags("Nav", &g.DebugLogFlags, ImGuiDebugLogFlags_EventNav); + SameLine(); CheckboxFlags("Docking", &g.DebugLogFlags, ImGuiDebugLogFlags_EventDocking); + SameLine(); CheckboxFlags("Viewport", &g.DebugLogFlags, ImGuiDebugLogFlags_EventViewport); + + if (SmallButton("Clear")) + g.DebugLogBuf.clear(); + SameLine(); + if (SmallButton("Copy")) + SetClipboardText(g.DebugLogBuf.c_str()); + BeginChild("##log", ImVec2(0.0f, 0.0f), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar); + TextUnformatted(g.DebugLogBuf.begin(), g.DebugLogBuf.end()); // FIXME-OPT: Could use a line index, but TextUnformatted() has a semi-decent fast path for large text. + if (GetScrollY() >= GetScrollMaxY()) + SetScrollHereY(1.0f); + EndChild(); + + End(); +} + //----------------------------------------------------------------------------- // [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL) //----------------------------------------------------------------------------- @@ -17741,7 +18876,7 @@ void ImGui::UpdateDebugToolItemPicker() const ImGuiID hovered_id = g.HoveredIdPreviousFrame; SetMouseCursor(ImGuiMouseCursor_Hand); - if (IsKeyPressedMap(ImGuiKey_Escape)) + if (IsKeyPressed(ImGuiKey_Escape)) g.DebugItemPickerActive = false; if (IsMouseClicked(0) && hovered_id) { @@ -17821,32 +18956,52 @@ void ImGui::DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* dat ImGuiStackLevelInfo* info = &tool->Results[tool->StackLevel]; IM_ASSERT(info->ID == id && info->QueryFrameCount > 0); - int data_len; switch (data_type) { case ImGuiDataType_S32: ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%d", (int)(intptr_t)data_id); break; case ImGuiDataType_String: - data_len = data_id_end ? (int)((const char*)data_id_end - (const char*)data_id) : (int)strlen((const char*)data_id); - ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "\"%.*s\"", data_len, (const char*)data_id); + ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%.*s", data_id_end ? (int)((const char*)data_id_end - (const char*)data_id) : (int)strlen((const char*)data_id), (const char*)data_id); break; case ImGuiDataType_Pointer: ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "(void*)0x%p", data_id); break; case ImGuiDataType_ID: - if (info->Desc[0] == 0) // PushOverrideID() is often used to avoid hashing twice, which would lead to 2 calls to DebugHookIdInfo(). We prioritize the first one. - ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "0x%08X [override]", id); + if (info->Desc[0] != 0) // PushOverrideID() is often used to avoid hashing twice, which would lead to 2 calls to DebugHookIdInfo(). We prioritize the first one. + return; + ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "0x%08X [override]", id); break; default: IM_ASSERT(0); } info->QuerySuccess = true; + info->DataType = data_type; +} + +static int StackToolFormatLevelInfo(ImGuiStackTool* tool, int n, bool format_for_ui, char* buf, size_t buf_size) +{ + ImGuiStackLevelInfo* info = &tool->Results[n]; + ImGuiWindow* window = (info->Desc[0] == 0 && n == 0) ? ImGui::FindWindowByID(info->ID) : NULL; + if (window) // Source: window name (because the root ID don't call GetID() and so doesn't get hooked) + return ImFormatString(buf, buf_size, format_for_ui ? "\"%s\" [window]" : "%s", window->Name); + if (info->QuerySuccess) // Source: GetID() hooks (prioritize over ItemInfo() because we frequently use patterns like: PushID(str), Button("") where they both have same id) + return ImFormatString(buf, buf_size, (format_for_ui && info->DataType == ImGuiDataType_String) ? "\"%s\"" : "%s", info->Desc); + if (tool->StackLevel < tool->Results.Size) // Only start using fallback below when all queries are done, so during queries we don't flickering ??? markers. + return (*buf = 0); +#ifdef IMGUI_ENABLE_TEST_ENGINE + if (const char* label = ImGuiTestEngine_FindItemDebugLabel(GImGui, info->ID)) // Source: ImGuiTestEngine's ItemInfo() + return ImFormatString(buf, buf_size, format_for_ui ? "??? \"%s\"" : "%s", label); +#endif + return ImFormatString(buf, buf_size, "???"); } // Stack Tool: Display UI void ImGui::ShowStackToolWindow(bool* p_open) { + ImGuiContext& g = *GImGui; + if (!(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)) + SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 8.0f), ImGuiCond_FirstUseEver); if (!Begin("Dear ImGui Stack Tool", p_open) || GetCurrentWindow()->BeginCount > 1) { End(); @@ -17854,7 +19009,7 @@ void ImGui::ShowStackToolWindow(bool* p_open) } // Display hovered/active status - ImGuiContext& g = *GImGui; + ImGuiStackTool* tool = &g.DebugStackTool; const ImGuiID hovered_id = g.HoveredIdPreviousFrame; const ImGuiID active_id = g.ActiveId; #ifdef IMGUI_ENABLE_TEST_ENGINE @@ -17865,8 +19020,33 @@ void ImGui::ShowStackToolWindow(bool* p_open) SameLine(); MetricsHelpMarker("Hover an item with the mouse to display elements of the ID Stack leading to the item's final ID.\nEach level of the stack correspond to a PushID() call.\nAll levels of the stack are hashed together to make the final ID of a widget (ID displayed at the bottom level of the stack).\nRead FAQ entry about the ID stack for details."); + // CTRL+C to copy path + const float time_since_copy = (float)g.Time - tool->CopyToClipboardLastTime; + Checkbox("Ctrl+C: copy path to clipboard", &tool->CopyToClipboardOnCtrlC); + SameLine(); + TextColored((time_since_copy >= 0.0f && time_since_copy < 0.75f && ImFmod(time_since_copy, 0.25f) < 0.25f * 0.5f) ? ImVec4(1.f, 1.f, 0.3f, 1.f) : ImVec4(), "*COPIED*"); + if (tool->CopyToClipboardOnCtrlC && IsKeyDown(ImGuiKey_ModCtrl) && IsKeyPressed(ImGuiKey_C)) + { + tool->CopyToClipboardLastTime = (float)g.Time; + char* p = g.TempBuffer.Data; + char* p_end = p + g.TempBuffer.Size; + for (int stack_n = 0; stack_n < tool->Results.Size && p + 3 < p_end; stack_n++) + { + *p++ = '/'; + char level_desc[256]; + StackToolFormatLevelInfo(tool, stack_n, false, level_desc, IM_ARRAYSIZE(level_desc)); + for (int n = 0; level_desc[n] && p + 2 < p_end; n++) + { + if (level_desc[n] == '/') + *p++ = '\\'; + *p++ = level_desc[n]; + } + } + *p = '\0'; + SetClipboardText(g.TempBuffer.Data); + } + // Display decorated stack - ImGuiStackTool* tool = &g.DebugStackTool; tool->LastActiveFrame = g.FrameCount; if (tool->Results.Size > 0 && BeginTable("##table", 3, ImGuiTableFlags_Borders)) { @@ -17880,23 +19060,9 @@ void ImGui::ShowStackToolWindow(bool* p_open) ImGuiStackLevelInfo* info = &tool->Results[n]; TableNextColumn(); Text("0x%08X", (n > 0) ? tool->Results[n - 1].ID : 0); - TableNextColumn(); - ImGuiWindow* window = (info->Desc[0] == 0 && n == 0) ? FindWindowByID(info->ID) : NULL; - if (window) // Source: window name (because the root ID don't call GetID() and so doesn't get hooked) - Text("\"%s\" [window]", window->Name); - else if (info->QuerySuccess) // Source: GetID() hooks (prioritize over ItemInfo() because we frequently use patterns like: PushID(str), Button("") where they both have same id) - TextUnformatted(info->Desc); - else if (tool->StackLevel >= tool->Results.Size) // Only start using fallback below when all queries are done, so during queries we don't flickering ??? markers. - { -#ifdef IMGUI_ENABLE_TEST_ENGINE - if (const char* label = ImGuiTestEngine_FindItemDebugLabel(&g, info->ID)) // Source: ImGuiTestEngine's ItemInfo() - Text("??? \"%s\"", label); - else -#endif - TextUnformatted("???"); - } - + StackToolFormatLevelInfo(tool, n, true, g.TempBuffer.Data, g.TempBuffer.Size); + TextUnformatted(g.TempBuffer.Data); TableNextColumn(); Text("0x%08X", info->ID); if (n == tool->Results.Size - 1) @@ -17922,12 +19088,15 @@ void ImGui::DebugNodeWindowSettings(ImGuiWindowSettings*) {} void ImGui::DebugNodeWindowsList(ImVector*, const char*) {} void ImGui::DebugNodeViewport(ImGuiViewportP*) {} +void ImGui::DebugLog(const char*, ...) {} +void ImGui::DebugLogV(const char*, va_list) {} +void ImGui::ShowDebugLogWindow(bool*) {} void ImGui::ShowStackToolWindow(bool*) {} void ImGui::DebugHookIdInfo(ImGuiID, ImGuiDataType, const void*, const void*) {} void ImGui::UpdateDebugToolItemPicker() {} void ImGui::UpdateDebugToolStackQueries() {} -#endif // #ifndef IMGUI_DISABLE_METRICS_WINDOW +#endif // #ifndef IMGUI_DISABLE_DEBUG_TOOLS //----------------------------------------------------------------------------- diff --git a/Code/ThirdParty/DearImgui/imgui.h b/Code/ThirdParty/DearImgui/imgui.h index f922fc0..a8a2f73 100644 --- a/Code/ThirdParty/DearImgui/imgui.h +++ b/Code/ThirdParty/DearImgui/imgui.h @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (headers) // Help: @@ -11,7 +11,7 @@ // - FAQ http://dearimgui.org/faq // - Homepage & latest https://github.com/ocornut/imgui // - Releases & changelog https://github.com/ocornut/imgui/releases -// - Gallery https://github.com/ocornut/imgui/issues/4451 (please post your screenshots/video there!) +// - Gallery https://github.com/ocornut/imgui/issues/5243 (please post your screenshots/video there!) // - Wiki https://github.com/ocornut/imgui/wiki (lots of good stuff there) // - Glossary https://github.com/ocornut/imgui/wiki/Glossary // - Issues & support https://github.com/ocornut/imgui/issues @@ -35,7 +35,7 @@ Index of this file: // [SECTION] Drawing API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawListFlags, ImDrawList, ImDrawData) // [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont) // [SECTION] Viewports (ImGuiViewportFlags, ImGuiViewport) -// [SECTION] Platform interface for multi-viewport support (ImGuiPlatformIO, ImGuiPlatformMonitor) +// [SECTION] Platform Dependent Interfaces (ImGuiPlatformIO, ImGuiPlatformMonitor, ImGuiPlatformImeData) // [SECTION] Obsolete functions and types */ @@ -64,8 +64,8 @@ Index of this file: // Version // (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens) -#define IMGUI_VERSION "1.86 WIP" -#define IMGUI_VERSION_NUM 18510 +#define IMGUI_VERSION "1.88" +#define IMGUI_VERSION_NUM 18800 #define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx)) #define IMGUI_HAS_TABLE #define IMGUI_HAS_VIEWPORT // Viewport WIP branch @@ -88,11 +88,7 @@ Index of this file: #endif #define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR) / sizeof(*(_ARR)))) // Size of a static C-style array. Don't use on pointers! #define IM_UNUSED(_VAR) ((void)(_VAR)) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds. -#if (__cplusplus >= 201100) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201100) #define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11 -#else -#define IM_OFFSETOF(_TYPE,_MEMBER) ((size_t)&(((_TYPE*)0)->_MEMBER)) // Offset of _MEMBER within _TYPE. Old style macro. -#endif // Helper Macros - IM_FMTARGS, IM_FMTLIST: Apply printf-style warnings to our formatting functions. #if !defined(IMGUI_USE_STB_SPRINTF) && defined(__MINGW32__) && !defined(__clang__) @@ -107,7 +103,7 @@ Index of this file: #endif // Disable some of MSVC most aggressive Debug runtime checks in function header/footer (used in some simple/low-level functions) -#if defined(_MSC_VER) && !defined(__clang__) && !defined(IMGUI_DEBUG_PARANOID) +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(IMGUI_DEBUG_PARANOID) #define IM_MSVC_RUNTIME_CHECKS_OFF __pragma(runtime_checks("",off)) __pragma(check_stack(off)) __pragma(strict_gs_check(push,off)) #define IM_MSVC_RUNTIME_CHECKS_RESTORE __pragma(runtime_checks("",restore)) __pragma(check_stack()) __pragma(strict_gs_check(pop)) #else @@ -154,11 +150,13 @@ struct ImColor; // Helper functions to create a color that c struct ImGuiContext; // Dear ImGui context (opaque structure, unless including imgui_internal.h) struct ImGuiIO; // Main configuration and I/O between your application and ImGui struct ImGuiInputTextCallbackData; // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use) +struct ImGuiKeyData; // Storage for ImGuiIO and IsKeyDown(), IsKeyPressed() etc functions. struct ImGuiListClipper; // Helper to manually clip large list of items struct ImGuiOnceUponAFrame; // Helper for running a block of code not more than once a frame struct ImGuiPayload; // User data payload for drag and drop operations struct ImGuiPlatformIO; // Multi-viewport support: interface for Platform/Renderer backends + viewports to render struct ImGuiPlatformMonitor; // Multi-viewport support: user-provided bounds for each connected monitor/display. Used when positioning popups and tooltips to avoid them straddling monitors +struct ImGuiPlatformImeData; // Platform IME data for io.SetPlatformImeDataFn() function. struct ImGuiSizeCallbackData; // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use) struct ImGuiStorage; // Helper for key->value storage struct ImGuiStyle; // Runtime data for styling/colors @@ -171,13 +169,13 @@ struct ImGuiWindowClass; // Window class (rare/advanced uses: provide // Enums/Flags (declared as int for compatibility with old C++, to allow using as flags without overhead, and to not pollute the top of this file) // - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists! -// In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. // With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. typedef int ImGuiCol; // -> enum ImGuiCol_ // Enum: A color identifier for styling typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for many Set*() functions typedef int ImGuiDataType; // -> enum ImGuiDataType_ // Enum: A primary data type typedef int ImGuiDir; // -> enum ImGuiDir_ // Enum: A cardinal direction -typedef int ImGuiKey; // -> enum ImGuiKey_ // Enum: A key identifier (ImGui-side enum) +typedef int ImGuiKey; // -> enum ImGuiKey_ // Enum: A key identifier typedef int ImGuiNavInput; // -> enum ImGuiNavInput_ // Enum: An input identifier for navigation typedef int ImGuiMouseButton; // -> enum ImGuiMouseButton_ // Enum: A mouse button identifier (0=left, 1=right, 2=middle) typedef int ImGuiMouseCursor; // -> enum ImGuiMouseCursor_ // Enum: A mouse cursor identifier @@ -197,7 +195,7 @@ typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: f typedef int ImGuiFocusedFlags; // -> enum ImGuiFocusedFlags_ // Flags: for IsWindowFocused() typedef int ImGuiHoveredFlags; // -> enum ImGuiHoveredFlags_ // Flags: for IsItemHovered(), IsWindowHovered() etc. typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText(), InputTextMultiline() -typedef int ImGuiKeyModFlags; // -> enum ImGuiKeyModFlags_ // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super) +typedef int ImGuiModFlags; // -> enum ImGuiModFlags_ // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super) typedef int ImGuiPopupFlags; // -> enum ImGuiPopupFlags_ // Flags: for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() typedef int ImGuiSelectableFlags; // -> enum ImGuiSelectableFlags_ // Flags: for Selectable() typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc. @@ -232,17 +230,8 @@ typedef signed short ImS16; // 16-bit signed integer typedef unsigned short ImU16; // 16-bit unsigned integer typedef signed int ImS32; // 32-bit signed integer == int typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors) -#if defined(_MSC_VER) && !defined(__clang__) -typedef signed __int64 ImS64; // 64-bit signed integer (pre and post C++11 with Visual Studio) -typedef unsigned __int64 ImU64; // 64-bit unsigned integer (pre and post C++11 with Visual Studio) -#elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100) -#include -typedef int64_t ImS64; // 64-bit signed integer (pre C++11) -typedef uint64_t ImU64; // 64-bit unsigned integer (pre C++11) -#else -typedef signed long long ImS64; // 64-bit signed integer (post C++11) -typedef unsigned long long ImU64; // 64-bit unsigned integer (post C++11) -#endif +typedef signed long long ImS64; // 64-bit signed integer +typedef unsigned long long ImU64; // 64-bit unsigned integer // Character types // (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display) @@ -266,8 +255,8 @@ IM_MSVC_RUNTIME_CHECKS_OFF struct ImVec2 { float x, y; - ImVec2() { x = y = 0.0f; } - ImVec2(float _x, float _y) { x = _x; y = _y; } + constexpr ImVec2() : x(0.0f), y(0.0f) { } + constexpr ImVec2(float _x, float _y) : x(_x), y(_y) { } float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine. float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine. #ifdef IM_VEC2_CLASS_EXTRA @@ -278,9 +267,9 @@ struct ImVec2 // ImVec4: 4D vector used to store clipping rectangles, colors etc. [Compile-time configurable type] struct ImVec4 { - float x, y, z, w; - ImVec4() { x = y = z = w = 0.0f; } - ImVec4(float _x, float _y, float _z, float _w) { x = _x; y = _y; z = _z; w = _w; } + float x, y, z, w; + constexpr ImVec4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { } + constexpr ImVec4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { } #ifdef IM_VEC4_CLASS_EXTRA IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4. #endif @@ -314,6 +303,7 @@ namespace ImGui // Demo, Debug, Information IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc. + IMGUI_API void ShowDebugLogWindow(bool* p_open = NULL); // create Debug Log window. display a simplified log of important dear imgui events. IMGUI_API void ShowStackToolWindow(bool* p_open = NULL); // create Stack Tool window. hover items with mouse to query information about the source of their unique ID. IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information. IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) @@ -534,7 +524,8 @@ namespace ImGui // Widgets: Drag Sliders // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp. - // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', + // the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. // - Format string may also be set to NULL or use the default format ("%f" or "%d"). // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision). @@ -602,7 +593,7 @@ namespace ImGui IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); - IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0, 0)); // display a color square/button, hover for details, return true when pressed. + IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // display a color square/button, hover for details, return true when pressed. IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. // Widgets: Trees @@ -700,6 +691,7 @@ namespace ImGui // - CloseCurrentPopup() is called by default by Selectable()/MenuItem() when activated (FIXME: need some options). // - Use ImGuiPopupFlags_NoOpenOverExistingPopup to avoid opening a popup if there's already one at the same level. This is equivalent to e.g. testing for !IsAnyPopupOpen() prior to OpenPopup(). // - Use IsWindowAppearing() after BeginPopup() to tell if a window just opened. + // - IMPORTANT: Notice that for OpenPopupOnItemClick() we exceptionally default flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter IMGUI_API void OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags = 0); // call to mark popup as open (don't call every frame!). IMGUI_API void OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags = 0); // id overload to facilitate calling from nested stacks IMGUI_API void OpenPopupOnItemClick(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // helper to open popup when clicked on last item. Default to ImGuiPopupFlags_MouseButtonRight == 1. (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors) @@ -709,7 +701,7 @@ namespace ImGui // - Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and right-clicking. // - They are convenient to easily create context menus, hence the name. // - IMPORTANT: Notice that BeginPopupContextXXX takes ImGuiPopupFlags just like OpenPopup() and unlike BeginPopup(). For full consistency, we may add ImGuiWindowFlags to the BeginPopupContextXXX functions in the future. - // - IMPORTANT: we exceptionally default their flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter, so if you add other flags remember to re-add the ImGuiPopupFlags_MouseButtonRight. + // - IMPORTANT: Notice that we exceptionally default their flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter, so if you add other flags remember to re-add the ImGuiPopupFlags_MouseButtonRight. IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked on last item. Use str_id==NULL to associate the popup to previous item. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);// open+begin popup when clicked on current window. IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked in void (where there are no windows). @@ -721,13 +713,11 @@ namespace ImGui IMGUI_API bool IsPopupOpen(const char* str_id, ImGuiPopupFlags flags = 0); // return true if the popup is open. // Tables - // [BETA API] API may evolve slightly! If you use this, please update to the next version when it comes out! // - Full-featured replacement for old Columns API. - // - See Demo->Tables for demo code. - // - See top of imgui_tables.cpp for general commentary. + // - See Demo->Tables for demo code. See top of imgui_tables.cpp for general commentary. // - See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags. // The typical call flow is: - // - 1. Call BeginTable(). + // - 1. Call BeginTable(), early out if returning false. // - 2. Optionally call TableSetupColumn() to submit column name/flags/defaults. // - 3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows. // - 4. Optionally call TableHeadersRow() to submit a header row. Names are pulled from TableSetupColumn() data. @@ -746,10 +736,10 @@ namespace ImGui // -------------------------------------------------------------------------------------------------------- // - 5. Call EndTable() IMGUI_API bool BeginTable(const char* str_id, int column, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0.0f, 0.0f), float inner_width = 0.0f); - IMGUI_API void EndTable(); // only call EndTable() if BeginTable() returns true! + IMGUI_API void EndTable(); // only call EndTable() if BeginTable() returns true! IMGUI_API void TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row. - IMGUI_API bool TableNextColumn(); // append into the next column (or first column of next row if currently in last column). Return true when column is visible. - IMGUI_API bool TableSetColumnIndex(int column_n); // append into the specified column. Return true when column is visible. + IMGUI_API bool TableNextColumn(); // append into the next column (or first column of next row if currently in last column). Return true when column is visible. + IMGUI_API bool TableSetColumnIndex(int column_n); // append into the specified column. Return true when column is visible. // Tables: Headers & Columns declaration // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc. @@ -760,20 +750,17 @@ namespace ImGui // some advanced use cases (e.g. adding custom widgets in header row). // - Use TableSetupScrollFreeze() to lock columns/rows so they stay visible when scrolled. IMGUI_API void TableSetupColumn(const char* label, ImGuiTableColumnFlags flags = 0, float init_width_or_weight = 0.0f, ImGuiID user_id = 0); - IMGUI_API void TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled. - IMGUI_API void TableHeadersRow(); // submit all headers cells based on data provided to TableSetupColumn() + submit context menu - IMGUI_API void TableHeader(const char* label); // submit one header cell manually (rarely used) - - // Tables: Sorting - // - Call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting. - // - When 'SpecsDirty == true' you should sort your data. It will be true when sorting specs have changed - // since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting, else you may - // wastefully sort your data every frame! - // - Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable(). - IMGUI_API ImGuiTableSortSpecs* TableGetSortSpecs(); // get latest sort specs for the table (NULL if not sorting). - - // Tables: Miscellaneous functions + IMGUI_API void TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled. + IMGUI_API void TableHeadersRow(); // submit all headers cells based on data provided to TableSetupColumn() + submit context menu + IMGUI_API void TableHeader(const char* label); // submit one header cell manually (rarely used) + + // Tables: Sorting & Miscellaneous functions + // - Sorting: call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting. + // When 'sort_specs->SpecsDirty == true' you should sort your data. It will be true when sorting specs have + // changed since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting, + // else you may wastefully sort your data every frame! // - Functions args 'int column_n' treat the default value of -1 as the same as passing the current column index. + IMGUI_API ImGuiTableSortSpecs* TableGetSortSpecs(); // get latest sort specs for the table (NULL if not sorting). Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable(). IMGUI_API int TableGetColumnCount(); // return number of columns (value passed to BeginTable) IMGUI_API int TableGetColumnIndex(); // return current column index. IMGUI_API int TableGetRowIndex(); // return current row index. @@ -838,7 +825,7 @@ namespace ImGui // - If you stop calling BeginDragDropSource() the payload is preserved however it won't have a preview tooltip (we currently display a fallback "..." tooltip, see #1725) // - An item can be both drag source and drop target. IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call after submitting an item which may be dragged. when this return true, you can call SetDragDropPayload() + EndDragDropSource() - IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0); // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0); // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. Return true when payload has been accepted. IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true! IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. @@ -889,15 +876,17 @@ namespace ImGui // - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode. IMGUI_API ImGuiViewport* GetMainViewport(); // return primary/default viewport. This can never be NULL. + // Background/Foreground Draw Lists + IMGUI_API ImDrawList* GetBackgroundDrawList(); // get background draw list for the viewport associated to the current window. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents. + IMGUI_API ImDrawList* GetForegroundDrawList(); // get foreground draw list for the viewport associated to the current window. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. + IMGUI_API ImDrawList* GetBackgroundDrawList(ImGuiViewport* viewport); // get background draw list for the given viewport. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents. + IMGUI_API ImDrawList* GetForegroundDrawList(ImGuiViewport* viewport); // get foreground draw list for the given viewport. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. + // Miscellaneous Utilities IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. IMGUI_API double GetTime(); // get global imgui time. incremented by io.DeltaTime every frame. IMGUI_API int GetFrameCount(); // get global imgui frame count. incremented by 1 every frame. - IMGUI_API ImDrawList* GetBackgroundDrawList(); // get background draw list for the viewport associated to the current window. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents. - IMGUI_API ImDrawList* GetForegroundDrawList(); // get foreground draw list for the viewport associated to the current window. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. - IMGUI_API ImDrawList* GetBackgroundDrawList(ImGuiViewport* viewport); // get background draw list for the given viewport. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents. - IMGUI_API ImDrawList* GetForegroundDrawList(ImGuiViewport* viewport); // get foreground draw list for the given viewport. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances. IMGUI_API const char* GetStyleColorName(ImGuiCol idx); // get a string corresponding to the enum value (for display, saving, etc.). IMGUI_API void SetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it) @@ -915,27 +904,30 @@ namespace ImGui IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); // Inputs Utilities: Keyboard - // - For 'int user_key_index' you can use your own indices/enums according to how your backend/engine stored them in io.KeysDown[]. - // - We don't know the meaning of those value. You can use GetKeyIndex() to map a ImGuiKey_ value into the user index. - IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] - IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. - IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate - IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down)? - IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate - IMGUI_API void CaptureKeyboardFromApp(bool want_capture_keyboard_value = true); // attention: misleading name! manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard_value"; after the next NewFrame() call. + // Without IMGUI_DISABLE_OBSOLETE_KEYIO: (legacy support) + // - For 'ImGuiKey key' you can still use your legacy native/user indices according to how your backend/engine stored them in io.KeysDown[]. + // With IMGUI_DISABLE_OBSOLETE_KEYIO: (this is the way forward) + // - Any use of 'ImGuiKey' will assert when key < 512 will be passed, previously reserved as native/user keys indices + // - GetKeyIndex() is pass-through and therefore deprecated (gone if IMGUI_DISABLE_OBSOLETE_KEYIO is defined) + IMGUI_API bool IsKeyDown(ImGuiKey key); // is key being held. + IMGUI_API bool IsKeyPressed(ImGuiKey key, bool repeat = true); // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + IMGUI_API bool IsKeyReleased(ImGuiKey key); // was key released (went from Down to !Down)? + IMGUI_API int GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + IMGUI_API const char* GetKeyName(ImGuiKey key); // [DEBUG] returns English name of the key. Those names a provided for debugging purpose and are not meant to be saved persistently not compared. + IMGUI_API void SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard); // Override io.WantCaptureKeyboard flag next frame (said flag is left for your application to handle, typically when true it instructs your app to ignore inputs). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard"; after the next NewFrame() call. // Inputs Utilities: Mouse // - To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right. // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle. // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold') IMGUI_API bool IsMouseDown(ImGuiMouseButton button); // is mouse button held? - IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down) + IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down). Same as GetMouseClickedCount() == 1. IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse button released? (went from Down to !Down) - IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? (note that a double-click will also report IsMouseClicked() == true) - IMGUI_API bool IsMouseTripleClicked(ImGuiMouseButton button); // did mouse button triple-clicked? (note that a triple-click will also report IsMouseClicked() == true) + IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? Same as GetMouseClickedCount() == 2. (note that a double-click will also report IsMouseClicked() == true) + IMGUI_API int GetMouseClickedCount(ImGuiMouseButton button); // return the number of successive mouse-clicks at the time where a click happen (otherwise 0). IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block. IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available - IMGUI_API bool IsAnyMouseDown(); // is any mouse button held? + IMGUI_API bool IsAnyMouseDown(); // [WILL OBSOLETE] is any mouse button held? This was designed for backends, but prefer having backend maintain a mask of held mouse buttons, because upcoming input queue system will make this invalid. IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves) IMGUI_API bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f); // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold) @@ -943,7 +935,7 @@ namespace ImGui IMGUI_API void ResetMouseDragDelta(ImGuiMouseButton button = 0); // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you IMGUI_API void SetMouseCursor(ImGuiMouseCursor cursor_type); // set desired cursor type - IMGUI_API void CaptureMouseFromApp(bool want_capture_mouse_value = true); // attention: misleading name! manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse_value;" after the next NewFrame() call. + IMGUI_API void SetNextFrameWantCaptureMouse(bool want_capture_mouse); // Override io.WantCaptureMouse flag next frame (said flag is left for your application to handle, typical when true it instucts your app to ignore inputs). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse;" after the next NewFrame() call. // Clipboard Utilities // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard. @@ -960,7 +952,7 @@ namespace ImGui IMGUI_API const char* SaveIniSettingsToMemory(size_t* out_ini_size = NULL); // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings. // Debug Utilities - // - This is used by the IMGUI_CHECKVERSION() macro. + IMGUI_API void DebugTextEncoding(const char* text); IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro. // Memory Allocators @@ -997,7 +989,7 @@ enum ImGuiWindowFlags_ ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programmatically) ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. - ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it. Also referred to as "window menu button" within a docking node. + ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it. Also referred to as Window Menu Button (e.g. within a docking node). ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame ImGuiWindowFlags_NoBackground = 1 << 7, // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f). ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file @@ -1019,7 +1011,7 @@ enum ImGuiWindowFlags_ ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, // [Internal] - ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!) + ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] On child window: allow gamepad/keyboard navigation to cross over parent border to this child or between sibling child windows. ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup() @@ -1028,7 +1020,7 @@ enum ImGuiWindowFlags_ ImGuiWindowFlags_DockNodeHost = 1 << 29 // Don't use! For internal use by Begin()/NewFrame() // [Obsolete] - //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by backend (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) + //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // [Obsolete] --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by backend (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) }; // Flags for ImGui::InputText() @@ -1163,8 +1155,7 @@ enum ImGuiTabItemFlags_ }; // Flags for ImGui::BeginTable() -// [BETA API] API may evolve slightly! If you use this, please update to the next version when it comes out! -// - Important! Sizing policies have complex and subtle side effects, more so than you would expect. +// - Important! Sizing policies have complex and subtle side effects, much more so than you would expect. // Read comments/demos carefully + experiment with live demos to get acquainted with them. // - The DEFAULT sizing policies are: // - Default to ImGuiTableFlags_SizingFixedFit if ScrollX is on, or if host window has ImGuiWindowFlags_AlwaysAutoResize. @@ -1172,8 +1163,8 @@ enum ImGuiTabItemFlags_ // - When ScrollX is off: // - Table defaults to ImGuiTableFlags_SizingStretchSame -> all Columns defaults to ImGuiTableColumnFlags_WidthStretch with same weight. // - Columns sizing policy allowed: Stretch (default), Fixed/Auto. -// - Fixed Columns will generally obtain their requested width (unless the table cannot fit them all). -// - Stretch Columns will share the remaining width. +// - Fixed Columns (if any) will generally obtain their requested width (unless the table cannot fit them all). +// - Stretch Columns will share the remaining width according to their respective weight. // - Mixed Fixed/Stretch columns is possible but has various side-effects on resizing behaviors. // The typical use of mixing sizing policies is: any number of LEADING Fixed columns, followed by one or two TRAILING Stretch columns. // (this is because the visible order of columns have subtle but necessary effects on how they react to manual resizing). @@ -1287,7 +1278,7 @@ enum ImGuiTableColumnFlags_ enum ImGuiTableRowFlags_ { ImGuiTableRowFlags_None = 0, - ImGuiTableRowFlags_Headers = 1 << 0 // Identify header row (set default background color + width of its contents accounted different for auto column width) + ImGuiTableRowFlags_Headers = 1 << 0 // Identify header row (set default background color + width of its contents accounted differently for auto column width) }; // Enum for ImGui::TableSetBgColor() @@ -1335,6 +1326,7 @@ enum ImGuiHoveredFlags_ ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 7, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 8, // IsItemHovered() only: Return true even if the position is obstructed or overlapped by another window ImGuiHoveredFlags_AllowWhenDisabled = 1 << 9, // IsItemHovered() only: Return true even if the item is disabled + ImGuiHoveredFlags_NoNavOverride = 1 << 10, // Disable using gamepad/keyboard navigation state when active, always query mouse. ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped, ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows }; @@ -1411,10 +1403,13 @@ enum ImGuiSortDirection_ ImGuiSortDirection_Descending = 2 // Descending = 9->0, Z->A etc. }; -// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +// Keys value 0 to 511 are left unused as legacy native/opaque key values (< 1.87) +// Keys value >= 512 are named keys (>= 1.87) enum ImGuiKey_ { - ImGuiKey_Tab, + // Keyboard + ImGuiKey_None = 0, + ImGuiKey_Tab = 512, // == ImGuiKey_NamedKey_BEGIN ImGuiKey_LeftArrow, ImGuiKey_RightArrow, ImGuiKey_UpArrow, @@ -1429,65 +1424,147 @@ enum ImGuiKey_ ImGuiKey_Space, ImGuiKey_Enter, ImGuiKey_Escape, - ImGuiKey_KeyPadEnter, - ImGuiKey_A, // for text edit CTRL+A: select all - ImGuiKey_C, // for text edit CTRL+C: copy - ImGuiKey_V, // for text edit CTRL+V: paste - ImGuiKey_X, // for text edit CTRL+X: cut - ImGuiKey_Y, // for text edit CTRL+Y: redo - ImGuiKey_Z, // for text edit CTRL+Z: undo - ImGuiKey_COUNT + ImGuiKey_LeftCtrl, ImGuiKey_LeftShift, ImGuiKey_LeftAlt, ImGuiKey_LeftSuper, + ImGuiKey_RightCtrl, ImGuiKey_RightShift, ImGuiKey_RightAlt, ImGuiKey_RightSuper, + ImGuiKey_Menu, + ImGuiKey_0, ImGuiKey_1, ImGuiKey_2, ImGuiKey_3, ImGuiKey_4, ImGuiKey_5, ImGuiKey_6, ImGuiKey_7, ImGuiKey_8, ImGuiKey_9, + ImGuiKey_A, ImGuiKey_B, ImGuiKey_C, ImGuiKey_D, ImGuiKey_E, ImGuiKey_F, ImGuiKey_G, ImGuiKey_H, ImGuiKey_I, ImGuiKey_J, + ImGuiKey_K, ImGuiKey_L, ImGuiKey_M, ImGuiKey_N, ImGuiKey_O, ImGuiKey_P, ImGuiKey_Q, ImGuiKey_R, ImGuiKey_S, ImGuiKey_T, + ImGuiKey_U, ImGuiKey_V, ImGuiKey_W, ImGuiKey_X, ImGuiKey_Y, ImGuiKey_Z, + ImGuiKey_F1, ImGuiKey_F2, ImGuiKey_F3, ImGuiKey_F4, ImGuiKey_F5, ImGuiKey_F6, + ImGuiKey_F7, ImGuiKey_F8, ImGuiKey_F9, ImGuiKey_F10, ImGuiKey_F11, ImGuiKey_F12, + ImGuiKey_Apostrophe, // ' + ImGuiKey_Comma, // , + ImGuiKey_Minus, // - + ImGuiKey_Period, // . + ImGuiKey_Slash, // / + ImGuiKey_Semicolon, // ; + ImGuiKey_Equal, // = + ImGuiKey_LeftBracket, // [ + ImGuiKey_Backslash, // \ (this text inhibit multiline comment caused by backslash) + ImGuiKey_RightBracket, // ] + ImGuiKey_GraveAccent, // ` + ImGuiKey_CapsLock, + ImGuiKey_ScrollLock, + ImGuiKey_NumLock, + ImGuiKey_PrintScreen, + ImGuiKey_Pause, + ImGuiKey_Keypad0, ImGuiKey_Keypad1, ImGuiKey_Keypad2, ImGuiKey_Keypad3, ImGuiKey_Keypad4, + ImGuiKey_Keypad5, ImGuiKey_Keypad6, ImGuiKey_Keypad7, ImGuiKey_Keypad8, ImGuiKey_Keypad9, + ImGuiKey_KeypadDecimal, + ImGuiKey_KeypadDivide, + ImGuiKey_KeypadMultiply, + ImGuiKey_KeypadSubtract, + ImGuiKey_KeypadAdd, + ImGuiKey_KeypadEnter, + ImGuiKey_KeypadEqual, + + // Gamepad (some of those are analog values, 0.0f to 1.0f) // NAVIGATION action + ImGuiKey_GamepadStart, // Menu (Xbox) + (Switch) Start/Options (PS) // -- + ImGuiKey_GamepadBack, // View (Xbox) - (Switch) Share (PS) // -- + ImGuiKey_GamepadFaceUp, // Y (Xbox) X (Switch) Triangle (PS) // -> ImGuiNavInput_Input + ImGuiKey_GamepadFaceDown, // A (Xbox) B (Switch) Cross (PS) // -> ImGuiNavInput_Activate + ImGuiKey_GamepadFaceLeft, // X (Xbox) Y (Switch) Square (PS) // -> ImGuiNavInput_Menu + ImGuiKey_GamepadFaceRight, // B (Xbox) A (Switch) Circle (PS) // -> ImGuiNavInput_Cancel + ImGuiKey_GamepadDpadUp, // D-pad Up // -> ImGuiNavInput_DpadUp + ImGuiKey_GamepadDpadDown, // D-pad Down // -> ImGuiNavInput_DpadDown + ImGuiKey_GamepadDpadLeft, // D-pad Left // -> ImGuiNavInput_DpadLeft + ImGuiKey_GamepadDpadRight, // D-pad Right // -> ImGuiNavInput_DpadRight + ImGuiKey_GamepadL1, // L Bumper (Xbox) L (Switch) L1 (PS) // -> ImGuiNavInput_FocusPrev + ImGuiNavInput_TweakSlow + ImGuiKey_GamepadR1, // R Bumper (Xbox) R (Switch) R1 (PS) // -> ImGuiNavInput_FocusNext + ImGuiNavInput_TweakFast + ImGuiKey_GamepadL2, // L Trigger (Xbox) ZL (Switch) L2 (PS) [Analog] + ImGuiKey_GamepadR2, // R Trigger (Xbox) ZR (Switch) R2 (PS) [Analog] + ImGuiKey_GamepadL3, // L Thumbstick (Xbox) L3 (Switch) L3 (PS) + ImGuiKey_GamepadR3, // R Thumbstick (Xbox) R3 (Switch) R3 (PS) + ImGuiKey_GamepadLStickUp, // [Analog] // -> ImGuiNavInput_LStickUp + ImGuiKey_GamepadLStickDown, // [Analog] // -> ImGuiNavInput_LStickDown + ImGuiKey_GamepadLStickLeft, // [Analog] // -> ImGuiNavInput_LStickLeft + ImGuiKey_GamepadLStickRight, // [Analog] // -> ImGuiNavInput_LStickRight + ImGuiKey_GamepadRStickUp, // [Analog] + ImGuiKey_GamepadRStickDown, // [Analog] + ImGuiKey_GamepadRStickLeft, // [Analog] + ImGuiKey_GamepadRStickRight, // [Analog] + + // Keyboard Modifiers (explicitly submitted by backend via AddKeyEvent() calls) + // - This is mirroring the data also written to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper, in a format allowing + // them to be accessed via standard key API, allowing calls such as IsKeyPressed(), IsKeyReleased(), querying duration etc. + // - Code polling every keys (e.g. an interface to detect a key press for input mapping) might want to ignore those + // and prefer using the real keys (e.g. ImGuiKey_LeftCtrl, ImGuiKey_RightCtrl instead of ImGuiKey_ModCtrl). + // - In theory the value of keyboard modifiers should be roughly equivalent to a logical or of the equivalent left/right keys. + // In practice: it's complicated; mods are often provided from different sources. Keyboard layout, IME, sticky keys and + // backends tend to interfere and break that equivalence. The safer decision is to relay that ambiguity down to the end-user... + ImGuiKey_ModCtrl, ImGuiKey_ModShift, ImGuiKey_ModAlt, ImGuiKey_ModSuper, + + // End of list + ImGuiKey_COUNT, // No valid ImGuiKey is ever greater than this value + + // [Internal] Prior to 1.87 we required user to fill io.KeysDown[512] using their own native index + a io.KeyMap[] array. + // We are ditching this method but keeping a legacy path for user code doing e.g. IsKeyPressed(MY_NATIVE_KEY_CODE) + ImGuiKey_NamedKey_BEGIN = 512, + ImGuiKey_NamedKey_END = ImGuiKey_COUNT, + ImGuiKey_NamedKey_COUNT = ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN, +#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO + ImGuiKey_KeysData_SIZE = ImGuiKey_NamedKey_COUNT, // Size of KeysData[]: only hold named keys + ImGuiKey_KeysData_OFFSET = ImGuiKey_NamedKey_BEGIN // First key stored in io.KeysData[0]. Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET). +#else + ImGuiKey_KeysData_SIZE = ImGuiKey_COUNT, // Size of KeysData[]: hold legacy 0..512 keycodes + named keys + ImGuiKey_KeysData_OFFSET = 0 // First key stored in io.KeysData[0]. Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET). +#endif + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + , ImGuiKey_KeyPadEnter = ImGuiKey_KeypadEnter // Renamed in 1.87 +#endif }; -// To test io.KeyMods (which is a combination of individual fields io.KeyCtrl, io.KeyShift, io.KeyAlt set by user/backend) -enum ImGuiKeyModFlags_ +// Helper "flags" version of key-mods to store and compare multiple key-mods easily. Sometimes used for storage (e.g. io.KeyMods) but otherwise not much used in public API. +enum ImGuiModFlags_ { - ImGuiKeyModFlags_None = 0, - ImGuiKeyModFlags_Ctrl = 1 << 0, - ImGuiKeyModFlags_Shift = 1 << 1, - ImGuiKeyModFlags_Alt = 1 << 2, - ImGuiKeyModFlags_Super = 1 << 3 + ImGuiModFlags_None = 0, + ImGuiModFlags_Ctrl = 1 << 0, + ImGuiModFlags_Shift = 1 << 1, + ImGuiModFlags_Alt = 1 << 2, // Menu + ImGuiModFlags_Super = 1 << 3 // Cmd/Super/Windows key }; // Gamepad/Keyboard navigation -// Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays. +// Since >= 1.87 backends you generally don't need to care about this enum since io.NavInputs[] is setup automatically. This might become private/internal some day. +// Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.AddKeyEvent() calls. // Gamepad: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Backend: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame(). // Read instructions in imgui.cpp for more details. Download PNG/PSD at http://dearimgui.org/controls_sheets. enum ImGuiNavInput_ { // Gamepad Mapping - ImGuiNavInput_Activate, // activate / open / toggle / tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard) - ImGuiNavInput_Cancel, // cancel / close / exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard) - ImGuiNavInput_Input, // text input / on-screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard) - ImGuiNavInput_Menu, // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard) - ImGuiNavInput_DpadLeft, // move / tweak / resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard) + ImGuiNavInput_Activate, // Activate / Open / Toggle / Tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard) + ImGuiNavInput_Cancel, // Cancel / Close / Exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard) + ImGuiNavInput_Input, // Text input / On-Screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard) + ImGuiNavInput_Menu, // Tap: Toggle menu / Hold: Focus, Move, Resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard) + ImGuiNavInput_DpadLeft, // Move / Tweak / Resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard) ImGuiNavInput_DpadRight, // ImGuiNavInput_DpadUp, // ImGuiNavInput_DpadDown, // - ImGuiNavInput_LStickLeft, // scroll / move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down + ImGuiNavInput_LStickLeft, // Scroll / Move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down ImGuiNavInput_LStickRight, // ImGuiNavInput_LStickUp, // ImGuiNavInput_LStickDown, // - ImGuiNavInput_FocusPrev, // next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) - ImGuiNavInput_FocusNext, // prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) - ImGuiNavInput_TweakSlow, // slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) - ImGuiNavInput_TweakFast, // faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) + ImGuiNavInput_FocusPrev, // Focus Next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) + ImGuiNavInput_FocusNext, // Focus Prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) + ImGuiNavInput_TweakSlow, // Slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) + ImGuiNavInput_TweakFast, // Faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them. - // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from io.KeysDown[] instead of io.NavInputs[]. - ImGuiNavInput_KeyLeft_, // move left // = Arrow keys - ImGuiNavInput_KeyRight_, // move right - ImGuiNavInput_KeyUp_, // move up - ImGuiNavInput_KeyDown_, // move down - ImGuiNavInput_COUNT, - ImGuiNavInput_InternalStart_ = ImGuiNavInput_KeyLeft_ + // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from keyboard keys instead of io.NavInputs[]. + ImGuiNavInput_KeyLeft_, // Move left // = Arrow keys + ImGuiNavInput_KeyRight_, // Move right + ImGuiNavInput_KeyUp_, // Move up + ImGuiNavInput_KeyDown_, // Move down + ImGuiNavInput_COUNT }; // Configuration flags stored in io.ConfigFlags. Set by user/application. enum ImGuiConfigFlags_ { ImGuiConfigFlags_None = 0, - ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[]. + ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.AddKeyEvent() calls ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. This is mostly to instruct your imgui backend to fill io.NavInputs[]. Backend also needs to set ImGuiBackendFlags_HasGamepad. ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your backend, otherwise ImGui will react as if the mouse is jumping around back and forth. ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set. @@ -1503,7 +1580,7 @@ enum ImGuiConfigFlags_ ImGuiConfigFlags_DpiEnableScaleViewports= 1 << 14, // [BETA: Don't use] FIXME-DPI: Reposition and resize imgui windows when the DpiScale of a viewport changed (mostly useful for the main viewport hosting other window). Note that resizing the main window itself is up to your application. ImGuiConfigFlags_DpiEnableScaleFonts = 1 << 15, // [BETA: Don't use] FIXME-DPI: Request bitmap-scaled fonts to match DpiScale. This is a very low-quality workaround. The correct way to handle DPI is _currently_ to replace the atlas and/or fonts in the Platform_OnChangedViewport callback, but this is all early work in progress. - // User storage (to allow your backend/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core Dear ImGui) + // User storage (to allow your backend/engine to communicate to code that may be shared between multiple projects. Those flags are NOT used by core Dear ImGui) ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware. ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse. }; @@ -1519,7 +1596,7 @@ enum ImGuiBackendFlags_ // [BETA] Viewports ImGuiBackendFlags_PlatformHasViewports = 1 << 10, // Backend Platform supports multiple viewports. - ImGuiBackendFlags_HasMouseHoveredViewport=1 << 11, // Backend Platform supports setting io.MouseHoveredViewport to the viewport directly under the mouse _IGNORING_ viewports with the ImGuiViewportFlags_NoInputs flag and _REGARDLESS_ of whether another viewport is focused and may be capturing the mouse. This information is _NOT EASY_ to provide correctly with most high-level engines! Don't set this without studying _carefully_ how the backends handle ImGuiViewportFlags_NoInputs! + ImGuiBackendFlags_HasMouseHoveredViewport=1 << 11, // Backend Platform supports calling io.AddMouseViewportEvent() with the viewport under the mouse. IF POSSIBLE, ignore viewports with the ImGuiViewportFlags_NoInputs flag (Win32 backend, GLFW 3.30+ backend can do this, SDL backend cannot). If this cannot be done, Dear ImGui needs to use a flawed heuristic to find the viewport under. ImGuiBackendFlags_RendererHasViewports = 1 << 12 // Backend Renderer supports multiple viewports. }; @@ -1556,10 +1633,10 @@ enum ImGuiCol_ ImGuiCol_Separator, ImGuiCol_SeparatorHovered, ImGuiCol_SeparatorActive, - ImGuiCol_ResizeGrip, + ImGuiCol_ResizeGrip, // Resize grip in lower-right and lower-left corners of windows. ImGuiCol_ResizeGripHovered, ImGuiCol_ResizeGripActive, - ImGuiCol_Tab, + ImGuiCol_Tab, // TabItem in a TabBar ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, @@ -1576,7 +1653,7 @@ enum ImGuiCol_ ImGuiCol_TableRowBg, // Table row background (even rows) ImGuiCol_TableRowBgAlt, // Table row background (odd rows) ImGuiCol_TextSelectedBg, - ImGuiCol_DragDropTarget, + ImGuiCol_DragDropTarget, // Rectangle highlighting a drop target ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB ImGuiCol_NavWindowingDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active @@ -1588,7 +1665,7 @@ enum ImGuiCol_ // - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. // During initialization or between frames, feel free to just poke into ImGuiStyle directly. // - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description. -// In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. // With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. // - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. enum ImGuiStyleVar_ @@ -1676,9 +1753,7 @@ enum ImGuiColorEditFlags_ ImGuiColorEditFlags_InputMask_ = ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV // Obsolete names (will be removed) -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - , ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex // [renamed in 1.69] -#endif + // ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex // [renamed in 1.69] }; // Flags for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc. @@ -1813,13 +1888,14 @@ struct ImVector inline void resize(int new_size, const T& v) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; } inline void shrink(int new_size) { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation inline void reserve(int new_capacity) { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; } + inline void reserve_discard(int new_capacity) { if (new_capacity <= Capacity) return; if (Data) IM_FREE(Data); Data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); Capacity = new_capacity; } // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden. inline void push_back(const T& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; } inline void pop_back() { IM_ASSERT(Size > 0); Size--; } inline void push_front(const T& v) { if (Size == 0) push_back(v); else insert(Data, v); } inline T* erase(const T* it) { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; } - inline T* erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data + Size && it_last > it && it_last <= Data + Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - (size_t)count) * sizeof(T)); Size -= (int)count; return Data + off; } + inline T* erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data + Size && it_last >= it && it_last <= Data + Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - (size_t)count) * sizeof(T)); Size -= (int)count; return Data + off; } inline T* erase_unsorted(const T* it) { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; if (it < Data + Size - 1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; } inline T* insert(const T* it, const T& v) { IM_ASSERT(it >= Data && it <= Data + Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; } inline bool contains(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } @@ -1877,7 +1953,7 @@ struct ImGuiStyle ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly! float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). We apply per-monitor DPI scaling over this scale. May be removed later. bool AntiAliasedLines; // Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList). - bool AntiAliasedLinesUseTex; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering. Latched at the beginning of the frame (copied to ImDrawList). + bool AntiAliasedLinesUseTex; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). Latched at the beginning of the frame (copied to ImDrawList). bool AntiAliasedFill; // Enable anti-aliased edges around filled shapes (rounded rectangles, circles, etc.). Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList). float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. float CircleTessellationMaxError; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry. @@ -1894,23 +1970,32 @@ struct ImGuiStyle // Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage. //----------------------------------------------------------------------------- +// [Internal] Storage used by IsKeyDown(), IsKeyPressed() etc functions. +// If prior to 1.87 you used io.KeysDownDuration[] (which was marked as internal), you should use GetKeyData(key)->DownDuration and not io.KeysData[key]->DownDuration. +struct ImGuiKeyData +{ + bool Down; // True for if key is down + float DownDuration; // Duration the key has been down (<0.0f: not pressed, 0.0f: just pressed, >0.0f: time held) + float DownDurationPrev; // Last frame duration the key has been down + float AnalogValue; // 0.0f..1.0f for gamepad values +}; + struct ImGuiIO { //------------------------------------------------------------------ - // Configuration (fill once) // Default value + // Configuration // Default value //------------------------------------------------------------------ ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc. ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by backend (imgui_impl_xxx files or custom backend) to communicate features supported by the backend. - ImVec2 DisplaySize; // // Main display size, in pixels (generally == GetMainViewport()->Size) - float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + ImVec2 DisplaySize; // // Main display size, in pixels (generally == GetMainViewport()->Size). May change every frame. + float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. May change every frame. float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds. const char* IniFilename; // = "imgui.ini" // Path to .ini file (important: default "imgui.ini" is relative to current working dir!). Set NULL to disable automatic .ini loading/saving or if you want to manually call LoadIniSettingsXXX() / SaveIniSettingsXXX() functions. const char* LogFilename; // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified). float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging. - int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. void* UserData; // = NULL // Store your own data for retrieval by callbacks. @@ -1936,6 +2021,7 @@ struct ImGuiIO // Miscellaneous options bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by backend implementations. bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl. + bool ConfigInputTrickleEventQueue; // = true // Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates. bool ConfigInputTextCursorBlink; // = true // Enable blinking cursor (optional as some users consider it to be distracting). bool ConfigDragClickToInputText; // = false // [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard. bool ConfigWindowsResizeFromEdges; // = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag) @@ -1960,29 +2046,35 @@ struct ImGuiIO void (*SetClipboardTextFn)(void* user_data, const char* text); void* ClipboardUserData; + // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows) + // (default to use native imm32 api on Windows) + void (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data); +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + void* ImeWindowHandle; // = NULL // [Obsolete] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning. +#else + void* _UnusedPadding; // Unused field to keep data structure the same size. +#endif + //------------------------------------------------------------------ - // Input - Fill before calling NewFrame() + // Input - Call before calling NewFrame() //------------------------------------------------------------------ - ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX, -FLT_MAX) if mouse is unavailable (on another screen, etc.) - bool MouseDown[5]; // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. - float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text. - float MouseWheelH; // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all backends. - ImGuiID MouseHoveredViewport; // (Optional) When using multiple viewports: viewport the OS mouse cursor is hovering _IGNORING_ viewports with the ImGuiViewportFlags_NoInputs flag, and _REGARDLESS_ of whether another viewport is focused. Set io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport if you can provide this info. If you don't imgui will infer the value using the rectangles and last focused time of the viewports it knows about (ignoring other OS windows). - bool KeyCtrl; // Keyboard modifier pressed: Control - bool KeyShift; // Keyboard modifier pressed: Shift - bool KeyAlt; // Keyboard modifier pressed: Alt - bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows - bool KeysDown[512]; // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). - float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame(). - - // Functions - IMGUI_API void AddInputCharacter(unsigned int c); // Queue new character input - IMGUI_API void AddInputCharacterUTF16(ImWchar16 c); // Queue new character input from an UTF-16 character, it can be a surrogate - IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue new characters input from an UTF-8 string - IMGUI_API void AddFocusEvent(bool focused); // Notifies Dear ImGui when hosting platform windows lose or gain input focus - IMGUI_API void ClearInputCharacters(); // [Internal] Clear the text input buffer manually - IMGUI_API void ClearInputKeys(); // [Internal] Release all keys + // Input Functions + IMGUI_API void AddKeyEvent(ImGuiKey key, bool down); // Queue a new key down/up event. Key should be "translated" (as in, generally ImGuiKey_A matches the key end-user would use to emit an 'A' character) + IMGUI_API void AddKeyAnalogEvent(ImGuiKey key, bool down, float v); // Queue a new key down/up event for analog values (e.g. ImGuiKey_Gamepad_ values). Dead-zones should be handled by the backend. + IMGUI_API void AddMousePosEvent(float x, float y); // Queue a mouse position update. Use -FLT_MAX,-FLT_MAX to signify no mouse (e.g. app not focused and not hovered) + IMGUI_API void AddMouseButtonEvent(int button, bool down); // Queue a mouse button change + IMGUI_API void AddMouseWheelEvent(float wh_x, float wh_y); // Queue a mouse wheel update + IMGUI_API void AddMouseViewportEvent(ImGuiID id); // Queue a mouse hovered viewport. Requires backend to set ImGuiBackendFlags_HasMouseHoveredViewport to call this (for multi-viewport support). + IMGUI_API void AddFocusEvent(bool focused); // Queue a gain/loss of focus for the application (generally based on OS/platform focus of your window) + IMGUI_API void AddInputCharacter(unsigned int c); // Queue a new character input + IMGUI_API void AddInputCharacterUTF16(ImWchar16 c); // Queue a new character input from an UTF-16 character, it can be a surrogate + IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue a new characters input from an UTF-8 string + + IMGUI_API void SetKeyEventNativeData(ImGuiKey key, int native_keycode, int native_scancode, int native_legacy_index = -1); // [Optional] Specify index for legacy <1.87 IsKeyXXX() functions with native indices + specify native keycode, scancode. + IMGUI_API void SetAppAcceptingEvents(bool accepting_events); // Set master flag for accepting key/mouse/text events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen. + IMGUI_API void ClearInputCharacters(); // [Internal] Clear the text input buffer manually + IMGUI_API void ClearInputKeys(); // [Internal] Release all keys //------------------------------------------------------------------ // Output - Updated by NewFrame() or EndFrame()/Render() @@ -1990,50 +2082,73 @@ struct ImGuiIO // generally easier and more correct to use their state BEFORE calling NewFrame(). See FAQ for details!) //------------------------------------------------------------------ - bool WantCaptureMouse; // Set when Dear ImGui will use mouse inputs, in this case do not dispatch them to your main game/application (either way, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.). - bool WantCaptureKeyboard; // Set when Dear ImGui will use keyboard inputs, in this case do not dispatch them to your main game/application (either way, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.). - bool WantTextInput; // Mobile/console: when set, you may display an on-screen keyboard. This is set by Dear ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). - bool WantSetMousePos; // MousePos has been altered, backend should reposition mouse on next frame. Rarely used! Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled. - bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. Important: clear io.WantSaveIniSettings yourself after saving! - bool NavActive; // Keyboard/Gamepad navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag. - bool NavVisible; // Keyboard/Gamepad navigation is visible and allowed (will handle ImGuiKey_NavXXX events). - float Framerate; // Rough estimate of application framerate, in frame per second. Solely for convenience. Rolling average estimation based on io.DeltaTime over 120 frames. - int MetricsRenderVertices; // Vertices output during last call to Render() - int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 - int MetricsRenderWindows; // Number of visible windows - int MetricsActiveWindows; // Number of active windows - int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts. - ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + bool WantCaptureMouse; // Set when Dear ImGui will use mouse inputs, in this case do not dispatch them to your main game/application (either way, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.). + bool WantCaptureKeyboard; // Set when Dear ImGui will use keyboard inputs, in this case do not dispatch them to your main game/application (either way, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.). + bool WantTextInput; // Mobile/console: when set, you may display an on-screen keyboard. This is set by Dear ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + bool WantSetMousePos; // MousePos has been altered, backend should reposition mouse on next frame. Rarely used! Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled. + bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. Important: clear io.WantSaveIniSettings yourself after saving! + bool NavActive; // Keyboard/Gamepad navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag. + bool NavVisible; // Keyboard/Gamepad navigation is visible and allowed (will handle ImGuiKey_NavXXX events). + float Framerate; // Rough estimate of application framerate, in frame per second. Solely for convenience. Rolling average estimation based on io.DeltaTime over 120 frames. + int MetricsRenderVertices; // Vertices output during last call to Render() + int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + int MetricsRenderWindows; // Number of visible windows + int MetricsActiveWindows; // Number of active windows + int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts. + ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + + // Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame. + // This is still temporarily supported as a legacy feature. However the new preferred scheme is for backend to call io.AddKeyEvent(). +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + int KeyMap[ImGuiKey_COUNT]; // [LEGACY] Input: map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. The first 512 are now unused and should be kept zero. Legacy backend will write into KeyMap[] using ImGuiKey_ indices which are always >512. + bool KeysDown[ImGuiKey_COUNT]; // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow. +#endif //------------------------------------------------------------------ // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed! //------------------------------------------------------------------ - bool WantCaptureMouseUnlessPopupClose;// Alternative to WantCaptureMouse: (WantCaptureMouse == true && WantCaptureMouseUnlessPopupClose == false) when a click over void is expected to close a popup. - ImGuiKeyModFlags KeyMods; // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame() - ImGuiKeyModFlags KeyModsPrev; // Previous key mods - ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid) - ImVec2 MouseClickedPos[5]; // Position at time of clicking - double MouseClickedTime[5]; // Time of last click (used to figure out double-click) - bool MouseClicked[5]; // Mouse button went from !Down to Down (same as MouseClickedCount[x] != 0) - bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? (same as MouseClickedCount[x] == 2) - ImU16 MouseClickedCount[5]; // == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down - ImU16 MouseClickedLastCount[5]; // Count successive number of clicks. Stays valid after mouse release. Reset after another click is done. - bool MouseReleased[5]; // Mouse button went from Down to !Down - bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds. - bool MouseDownOwnedUnlessPopupClose[5];//Track if button was clicked inside a dear imgui window. - float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) - float MouseDownDurationPrev[5]; // Previous time the mouse button has been down - ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point - float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point - float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) - float KeysDownDurationPrev[512]; // Previous duration the key has been down + // Main Input State + // (this block used to be written by backend, since 1.87 it is best to NOT write to those directly, call the AddXXX functions above instead) + // (reading from those variables is fair game, as they are extremely unlikely to be moving anywhere) + ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX, -FLT_MAX) if mouse is unavailable (on another screen, etc.) + bool MouseDown[5]; // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text. + float MouseWheelH; // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all backends. + ImGuiID MouseHoveredViewport; // (Optional) Modify using io.AddMouseViewportEvent(). With multi-viewports: viewport the OS mouse is hovering. If possible _IGNORING_ viewports with the ImGuiViewportFlags_NoInputs flag is much better (few backends can handle that). Set io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport if you can provide this info. If you don't imgui will infer the value using the rectangles and last focused time of the viewports it knows about (ignoring other OS windows). + bool KeyCtrl; // Keyboard modifier down: Control + bool KeyShift; // Keyboard modifier down: Shift + bool KeyAlt; // Keyboard modifier down: Alt + bool KeySuper; // Keyboard modifier down: Cmd/Super/Windows + float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame(). + + // Other state maintained from data above + IO function calls + ImGuiModFlags KeyMods; // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame() + ImGuiKeyData KeysData[ImGuiKey_KeysData_SIZE]; // Key state for all known keys. Use IsKeyXXX() functions to access this. + bool WantCaptureMouseUnlessPopupClose; // Alternative to WantCaptureMouse: (WantCaptureMouse == true && WantCaptureMouseUnlessPopupClose == false) when a click over void is expected to close a popup. + ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid) + ImVec2 MouseClickedPos[5]; // Position at time of clicking + double MouseClickedTime[5]; // Time of last click (used to figure out double-click) + bool MouseClicked[5]; // Mouse button went from !Down to Down (same as MouseClickedCount[x] != 0) + bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? (same as MouseClickedCount[x] == 2) + ImU16 MouseClickedCount[5]; // == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down + ImU16 MouseClickedLastCount[5]; // Count successive number of clicks. Stays valid after mouse release. Reset after another click is done. + bool MouseReleased[5]; // Mouse button went from Down to !Down + bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds. + bool MouseDownOwnedUnlessPopupClose[5]; // Track if button was clicked inside a dear imgui window. + float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point (used for moving thresholds) float NavInputsDownDuration[ImGuiNavInput_COUNT]; float NavInputsDownDurationPrev[ImGuiNavInput_COUNT]; - float PenPressure; // Touch/Pen pressure (0.0f to 1.0f, should be >0.0f only when MouseDown[0] == true). Helper storage currently unused by Dear ImGui. - bool AppFocusLost; - ImWchar16 InputQueueSurrogate; // For AddInputCharacterUTF16 - ImVector InputQueueCharacters; // Queue of _characters_ input (obtained by platform backend). Fill using AddInputCharacter() helper. + float PenPressure; // Touch/Pen pressure (0.0f to 1.0f, should be >0.0f only when MouseDown[0] == true). Helper storage currently unused by Dear ImGui. + bool AppFocusLost; // Only modify via AddFocusEvent() + bool AppAcceptingEvents; // Only modify via SetAppAcceptingEvents() + ImS8 BackendUsingLegacyKeyArrays; // -1: unknown, 0: using AddKeyEvent(), 1: using legacy io.KeysDown[] + bool BackendUsingLegacyNavInputArray; // 0: using AddKeyAnalogEvent(), 1: writing to legacy io.NavInputs[] directly + ImWchar16 InputQueueSurrogate; // For AddInputCharacterUTF16() + ImVector InputQueueCharacters; // Queue of _characters_ input (obtained by platform backend). Fill using AddInputCharacter() helper. IMGUI_API ImGuiIO(); }; @@ -2322,6 +2437,8 @@ struct ImGuiListClipper }; // Helpers macros to generate 32-bit encoded colors +// User can declare their own format by #defining the 5 _SHIFT/_MASK macros in their imconfig file. +#ifndef IM_COL32_R_SHIFT #ifdef IMGUI_USE_BGRA_PACKED_COLOR #define IM_COL32_R_SHIFT 16 #define IM_COL32_G_SHIFT 8 @@ -2335,6 +2452,7 @@ struct ImGuiListClipper #define IM_COL32_A_SHIFT 24 #define IM_COL32_A_MASK 0xFF000000 #endif +#endif #define IM_COL32(R,G,B,A) (((ImU32)(A)<> IM_COL32_R_SHIFT) & 0xFF) * sc; Value.y = (float)((rgba >> IM_COL32_G_SHIFT) & 0xFF) * sc; Value.z = (float)((rgba >> IM_COL32_B_SHIFT) & 0xFF) * sc; Value.w = (float)((rgba >> IM_COL32_A_SHIFT) & 0xFF) * sc; } - ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } - ImColor(const ImVec4& col) { Value = col; } inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } inline operator ImVec4() const { return Value; } @@ -2389,16 +2507,16 @@ typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* c #define ImDrawCallback_ResetRenderState (ImDrawCallback)(-1) // Typically, 1 command = 1 GPU draw call (unless command is a callback) -// - VtxOffset/IdxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled, -// those fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices. -// Pre-1.71 backends will typically ignore the VtxOffset/IdxOffset fields. +// - VtxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled, +// this fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices. +// Backends made for <1.71. will typically ignore the VtxOffset fields. // - The ClipRect/TextureId/VtxOffset fields must be contiguous as we memcmp() them together (this is asserted for). struct ImDrawCmd { ImVec4 ClipRect; // 4*4 // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates ImTextureID TextureId; // 4-8 // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. unsigned int VtxOffset; // 4 // Start offset in vertex buffer. ImGuiBackendFlags_RendererHasVtxOffset: always 0, otherwise may be >0 to support meshes larger than 64K vertices with 16-bit indices. - unsigned int IdxOffset; // 4 // Start offset in index buffer. Always equal to sum of ElemCount drawn so far. + unsigned int IdxOffset; // 4 // Start offset in index buffer. unsigned int ElemCount; // 4 // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. ImDrawCallback UserCallback; // 4-8 // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. void* UserCallbackData; // 4-8 // The draw callback code can access this. @@ -2484,7 +2602,7 @@ enum ImDrawListFlags_ { ImDrawListFlags_None = 0, ImDrawListFlags_AntiAliasedLines = 1 << 0, // Enable anti-aliased lines/borders (*2 the number of triangles for 1.0f wide line or lines thin enough to be drawn using textures, otherwise *3 the number of triangles) - ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1, // Enable anti-aliased lines/borders using textures when possible. Require backend to render with bilinear filtering. + ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1, // Enable anti-aliased lines/borders using textures when possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). ImDrawListFlags_AntiAliasedFill = 1 << 2, // Enable anti-aliased edge around filled shapes (rounded rectangles, circles). ImDrawListFlags_AllowVtxOffset = 1 << 3 // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled. }; @@ -2523,7 +2641,7 @@ struct ImDrawList ImDrawList(const ImDrawListSharedData* shared_data) { memset(this, 0, sizeof(*this)); _Data = shared_data; } ~ImDrawList() { _ClearFreeMemory(); } - IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) IMGUI_API void PushClipRectFullScreen(); IMGUI_API void PopClipRect(); IMGUI_API void PushTextureID(ImTextureID texture_id); @@ -2532,6 +2650,7 @@ struct ImDrawList inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } // Primitives + // - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing. // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners. // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred). // In older versions (until Dear ImGui 1.77) the AddCircle functions defaulted to num_segments == 12. @@ -2552,7 +2671,7 @@ struct ImDrawList IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); IMGUI_API void AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness); - IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order. + IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); IMGUI_API void AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0); // Cubic Bezier (4 control points) IMGUI_API void AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness, int num_segments = 0); // Quadratic Bezier (3 control points) @@ -2565,10 +2684,11 @@ struct ImDrawList IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawFlags flags = 0); // Stateful path API, add points then finish with PathFillConvex() or PathStroke() + // - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing. inline void PathClear() { _Path.Size = 0; } inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size - 1], &pos, 8) != 0) _Path.push_back(pos); } - inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; } // Note: Anti-aliased filling requires points to be in clockwise order. + inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; } inline void PathStroke(ImU32 col, ImDrawFlags flags = 0, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, flags, thickness); _Path.Size = 0; } IMGUI_API void PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 0); IMGUI_API void PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle @@ -2604,8 +2724,8 @@ struct ImDrawList inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } // Write vertex with unique index #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - inline void AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0) { AddBezierCubic(p1, p2, p3, p4, col, thickness, num_segments); } - inline void PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0) { PathBezierCubicCurveTo(p2, p3, p4, num_segments); } + inline void AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0) { AddBezierCubic(p1, p2, p3, p4, col, thickness, num_segments); } // OBSOLETED in 1.80 (Jan 2021) + inline void PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0) { PathBezierCubicCurveTo(p2, p3, p4, num_segments); } // OBSOLETED in 1.80 (Jan 2021) #endif // [Internal helpers] @@ -2721,7 +2841,7 @@ enum ImFontAtlasFlags_ ImFontAtlasFlags_None = 0, ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two ImFontAtlasFlags_NoMouseCursors = 1 << 1, // Don't build software mouse cursors into the atlas (save a little texture memory) - ImFontAtlasFlags_NoBakedLines = 1 << 2 // Don't build thick line textures into the atlas (save a little texture memory). The AntiAliasedLinesUseTex features uses them, otherwise they will be rendered using polygons (more expensive for CPU/GPU). + ImFontAtlasFlags_NoBakedLines = 1 << 2 // Don't build thick line textures into the atlas (save a little texture memory, allow support for point/nearest filtering). The AntiAliasedLinesUseTex features uses them, otherwise they will be rendered using polygons (more expensive for CPU/GPU). }; // Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding: @@ -2809,7 +2929,7 @@ struct ImFontAtlas ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_) ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. - int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0. + int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0 (will also need to set AntiAliasedLinesUseTex = false). bool Locked; // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert. // [Internal] @@ -2835,10 +2955,9 @@ struct ImFontAtlas int PackIdMouseCursors; // Custom texture rectangle ID for white pixel and mouse cursors int PackIdLines; // Custom texture rectangle ID for baked anti-aliased lines -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+ + // [Obsolete] + //typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+ //typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+ -#endif }; // Font runtime data and rendering @@ -2881,8 +3000,8 @@ struct ImFont // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; - IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const; - IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + IMGUI_API void RenderChar(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, ImWchar c) const; + IMGUI_API void RenderText(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; // [Internal] Don't use! IMGUI_API void BuildLookupTable(); @@ -2936,6 +3055,7 @@ struct ImGuiViewport ImGuiID ParentViewportId; // (Advanced) 0: no parent. Instruct the platform backend to setup a parent/child relationship between platform windows. ImDrawData* DrawData; // The ImDrawData corresponding to this viewport. Valid after Render() and until the next call to NewFrame(). + // Platform/Backend Dependent Data // Our design separate the Renderer and Platform backends to facilitate combining default backends with each others. // When our create your own backend for a custom engine, it is possible that both Renderer and Platform will be handled // by the same system and you may not need to use all the UserData/Handle fields. @@ -2943,7 +3063,7 @@ struct ImGuiViewport void* RendererUserData; // void* to hold custom data structure for the renderer (e.g. swap chain, framebuffers etc.). generally set by your Renderer_CreateWindow function. void* PlatformUserData; // void* to hold custom data structure for the OS / platform (e.g. windowing info, render context). generally set by your Platform_CreateWindow function. void* PlatformHandle; // void* for FindViewportByPlatformHandle(). (e.g. suggested to use natural platform handle such as HWND, GLFWWindow*, SDL_Window*) - void* PlatformHandleRaw; // void* to hold lower-level, platform-native window handle (e.g. the HWND) when using an abstraction layer like GLFW or SDL (where PlatformHandle would be a SDL_Window*) + void* PlatformHandleRaw; // void* to hold lower-level, platform-native window handle (under Win32 this is expected to be a HWND, unused for other platforms), when using an abstraction layer like GLFW or SDL (where PlatformHandle would be a SDL_Window*) bool PlatformRequestMove; // Platform window requested move (e.g. window was moved by the OS / host window manager, authoritative position will be OS window position) bool PlatformRequestResize; // Platform window requested resize (e.g. window was resized by the OS / host window manager, authoritative size will be OS window size) bool PlatformRequestClose; // Platform window requested closure (e.g. window was moved by the OS / host window manager, e.g. pressing ALT-F4) @@ -2957,7 +3077,7 @@ struct ImGuiViewport }; //----------------------------------------------------------------------------- -// [SECTION] Platform interface for multi-viewport support +// [SECTION] Platform Dependent Interfaces (for e.g. multi-viewport support) //----------------------------------------------------------------------------- // [BETA] (Optional) This is completely optional, for advanced users! // If you are new to Dear ImGui and trying to integrate it into your engine, you can probably ignore this for now. @@ -3043,7 +3163,6 @@ struct ImGuiPlatformIO void (*Platform_SwapBuffers)(ImGuiViewport* vp, void* render_arg); // . . . R . // (Optional) Call Present/SwapBuffers (platform side! This is often unused!). 'render_arg' is the value passed to RenderPlatformWindowsDefault(). float (*Platform_GetWindowDpiScale)(ImGuiViewport* vp); // N . . . . // (Optional) [BETA] FIXME-DPI: DPI handling: Return DPI scale for this viewport. 1.0f = 96 DPI. void (*Platform_OnChangedViewport)(ImGuiViewport* vp); // . F . . . // (Optional) [BETA] FIXME-DPI: DPI handling: Called during Begin() every time the viewport we are outputting into changes, so backend has a chance to swap fonts to adjust style. - void (*Platform_SetImeInputPos)(ImGuiViewport* vp, ImVec2 pos); // . F . . . // (Optional) Set IME (Input Method Editor, e.g. for Asian languages) input position, so text preview appears over the imgui input box. FIXME: The call timing of this is inconsistent because we want to support without multi-viewports. int (*Platform_CreateVkSurface)(ImGuiViewport* vp, ImU64 vk_inst, const void* vk_allocators, ImU64* out_vk_surface); // (Optional) For a Vulkan Renderer to call into Platform code (since the surface creation needs to tie them both). // (Optional) Renderer functions (e.g. DirectX, OpenGL, Vulkan) @@ -3078,25 +3197,47 @@ struct ImGuiPlatformMonitor ImGuiPlatformMonitor() { MainPos = MainSize = WorkPos = WorkSize = ImVec2(0, 0); DpiScale = 1.0f; } }; +// (Optional) Support for IME (Input Method Editor) via the io.SetPlatformImeDataFn() function. +struct ImGuiPlatformImeData +{ + bool WantVisible; // A widget wants the IME to be visible + ImVec2 InputPos; // Position of the input cursor + float InputLineHeight; // Line height + + ImGuiPlatformImeData() { memset(this, 0, sizeof(*this)); } +}; + //----------------------------------------------------------------------------- // [SECTION] Obsolete functions and types // (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details) // Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead. //----------------------------------------------------------------------------- +namespace ImGui +{ +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + IMGUI_API int GetKeyIndex(ImGuiKey key); // map ImGuiKey_* values into legacy native key index. == io.KeyMap[key] +#else + static inline int GetKeyIndex(ImGuiKey key) { IM_ASSERT(key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END && "ImGuiKey and native_index was merged together and native_index is disabled by IMGUI_DISABLE_OBSOLETE_KEYIO. Please switch to ImGuiKey."); return key; } +#endif +} + #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS namespace ImGui { + // OBSOLETED in 1.88 (from May 2022) + static inline void CaptureKeyboardFromApp(bool want_capture_keyboard = true) { SetNextFrameWantCaptureKeyboard(want_capture_keyboard); } // Renamed as name was misleading + removed default value. + static inline void CaptureMouseFromApp(bool want_capture_mouse = true) { SetNextFrameWantCaptureMouse(want_capture_mouse); } // Renamed as name was misleading + removed default value. // OBSOLETED in 1.86 (from November 2021) IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // Calculate coarse clipping for large list of evenly sized items. Prefer using ImGuiListClipper. // OBSOLETED in 1.85 (from August 2021) - static inline float GetWindowContentRegionWidth() { return GetWindowContentRegionMax().x - GetWindowContentRegionMin().x; } + static inline float GetWindowContentRegionWidth() { return GetWindowContentRegionMax().x - GetWindowContentRegionMin().x; } // OBSOLETED in 1.81 (from February 2021) IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // Helper to calculate size from items_count and height_in_items - static inline bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0, 0)) { return BeginListBox(label, size); } + static inline bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0, 0)) { return BeginListBox(label, size); } static inline void ListBoxFooter() { EndListBox(); } // OBSOLETED in 1.79 (from August 2020) - static inline void OpenPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mb = 1) { OpenPopupOnItemClick(str_id, mb); } // Bool return value removed. Use IsWindowAppearing() in BeginPopup() instead. Renamed in 1.77, renamed back in 1.79. Sorry! + static inline void OpenPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mb = 1) { OpenPopupOnItemClick(str_id, mb); } // Bool return value removed. Use IsWindowAppearing() in BeginPopup() instead. Renamed in 1.77, renamed back in 1.79. Sorry! // OBSOLETED in 1.78 (from June 2020) // Old drag/sliders functions that took a 'float power = 1.0' argument instead of flags. // For shared code, you can version check at compile-time with `#if IMGUI_VERSION_NUM >= 17704`. @@ -3114,24 +3255,21 @@ namespace ImGui static inline bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); } // OBSOLETED in 1.77 (from June 2020) static inline bool BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mb, bool over_items) { return BeginPopupContextWindow(str_id, mb | (over_items ? 0 : ImGuiPopupFlags_NoOpenOverItems)); } - // OBSOLETED in 1.72 (from April 2019) - static inline void TreeAdvanceToLabelPos() { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); } - // OBSOLETED in 1.71 (from June 2019) - static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); } - // OBSOLETED in 1.70 (from May 2019) - static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; } // Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE) - //static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); } // OBSOLETED in 1.69 (from Mar 2019) - //static inline void SetScrollHere(float ratio = 0.5f) { SetScrollHereY(ratio); } // OBSOLETED in 1.66 (from Nov 2018) - //static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); } // OBSOLETED in 1.63 (from Aug 2018) - //static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); } // OBSOLETED in 1.60 (from Apr 2018) - //static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018) - //static inline void ShowTestWindow() { return ShowDemoWindow(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) - //static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) - //static inline bool IsRootWindowOrAnyChildFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) - //static inline void SetNextWindowContentWidth(float w) { SetNextWindowContentSize(ImVec2(w, 0.0f)); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) - //static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline void TreeAdvanceToLabelPos() { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); } // OBSOLETED in 1.72 (from July 2019) + //static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); } // OBSOLETED in 1.71 (from June 2019) + //static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; } // OBSOLETED in 1.70 (from May 2019) + //static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); } // OBSOLETED in 1.69 (from Mar 2019) + //static inline void SetScrollHere(float ratio = 0.5f) { SetScrollHereY(ratio); } // OBSOLETED in 1.66 (from Nov 2018) + //static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); } // OBSOLETED in 1.63 (from Aug 2018) + //static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); } // OBSOLETED in 1.60 (from Apr 2018) + //static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018) + //static inline void ShowTestWindow() { return ShowDemoWindow(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline bool IsRootWindowOrAnyChildFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline void SetNextWindowContentWidth(float w) { SetNextWindowContentSize(ImVec2(w, 0.0f)); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) } // OBSOLETED in 1.82 (from Mars 2021): flags for AddRect(), AddRectFilled(), AddImageRounded(), PathRect() @@ -3150,8 +3288,20 @@ enum ImDrawCornerFlags_ ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight }; +// RENAMED ImGuiKeyModFlags -> ImGuiModFlags in 1.88 (from April 2022) +typedef int ImGuiKeyModFlags; +enum ImGuiKeyModFlags_ { ImGuiKeyModFlags_None = ImGuiModFlags_None, ImGuiKeyModFlags_Ctrl = ImGuiModFlags_Ctrl, ImGuiKeyModFlags_Shift = ImGuiModFlags_Shift, ImGuiKeyModFlags_Alt = ImGuiModFlags_Alt, ImGuiKeyModFlags_Super = ImGuiModFlags_Super }; + #endif // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS +// RENAMED IMGUI_DISABLE_METRICS_WINDOW > IMGUI_DISABLE_DEBUG_TOOLS in 1.88 (from June 2022) +#if defined(IMGUI_DISABLE_METRICS_WINDOW) && !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && !defined(IMGUI_DISABLE_DEBUG_TOOLS) +#define IMGUI_DISABLE_DEBUG_TOOLS +#endif +#if defined(IMGUI_DISABLE_METRICS_WINDOW) && defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) +#error IMGUI_DISABLE_METRICS_WINDOW was renamed to IMGUI_DISABLE_DEBUG_TOOLS, please use new name. +#endif + //----------------------------------------------------------------------------- #if defined(__clang__) diff --git a/Code/ThirdParty/DearImgui/imgui_demo.cpp b/Code/ThirdParty/DearImgui/imgui_demo.cpp index c14bda5..da687a5 100644 --- a/Code/ThirdParty/DearImgui/imgui_demo.cpp +++ b/Code/ThirdParty/DearImgui/imgui_demo.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (demo code) // Help: @@ -39,7 +39,7 @@ // Because we can't assume anything about your support of maths operators, we cannot use them in imgui_demo.cpp. // Navigating this file: -// - In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// - In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. // - With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. /* @@ -93,6 +93,7 @@ Index of this file: // 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: 26451) // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2). #endif @@ -240,7 +241,6 @@ void ImGui::ShowUserGuide() ImGui::BulletText("CTRL+X/C/V to use clipboard cut/copy/paste."); ImGui::BulletText("CTRL+Z,CTRL+Y to undo/redo."); ImGui::BulletText("ESCAPE to revert."); - ImGui::BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); ImGui::Unindent(); ImGui::BulletText("With keyboard navigation enabled:"); ImGui::Indent(); @@ -316,13 +316,19 @@ void ImGui::ShowDemoWindow(bool* p_open) // Dear ImGui Apps (accessible from the "Tools" menu) static bool show_app_metrics = false; + static bool show_app_debug_log = false; static bool show_app_stack_tool = false; - static bool show_app_style_editor = false; static bool show_app_about = false; + static bool show_app_style_editor = false; - if (show_app_metrics) { ImGui::ShowMetricsWindow(&show_app_metrics); } - if (show_app_stack_tool) { ImGui::ShowStackToolWindow(&show_app_stack_tool); } - if (show_app_about) { ImGui::ShowAboutWindow(&show_app_about); } + if (show_app_metrics) + ImGui::ShowMetricsWindow(&show_app_metrics); + if (show_app_debug_log) + ImGui::ShowDebugLogWindow(&show_app_debug_log); + if (show_app_stack_tool) + ImGui::ShowStackToolWindow(&show_app_stack_tool); + if (show_app_about) + ImGui::ShowAboutWindow(&show_app_about); if (show_app_style_editor) { ImGui::Begin("Dear ImGui Style Editor", &show_app_style_editor); @@ -412,10 +418,14 @@ void ImGui::ShowDemoWindow(bool* p_open) if (ImGui::BeginMenu("Tools")) { IMGUI_DEMO_MARKER("Menu/Tools"); -#ifndef IMGUI_DISABLE_METRICS_WINDOW - ImGui::MenuItem("Metrics/Debugger", NULL, &show_app_metrics); - ImGui::MenuItem("Stack Tool", NULL, &show_app_stack_tool); +#ifndef IMGUI_DISABLE_DEBUG_TOOLS + const bool has_debug_tools = true; +#else + const bool has_debug_tools = false; #endif + ImGui::MenuItem("Metrics/Debugger", NULL, &show_app_metrics, has_debug_tools); + ImGui::MenuItem("Debug Log", NULL, &show_app_debug_log, has_debug_tools); + ImGui::MenuItem("Stack Tool", NULL, &show_app_stack_tool, has_debug_tools); ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor); ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about); ImGui::EndMenu(); @@ -423,7 +433,7 @@ void ImGui::ShowDemoWindow(bool* p_open) ImGui::EndMenuBar(); } - ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION); + ImGui::Text("dear imgui says hello! (%s) (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM); ImGui::Spacing(); IMGUI_DEMO_MARKER("Help"); @@ -471,7 +481,7 @@ void ImGui::ShowDemoWindow(bool* p_open) ImGui::SameLine(); ImGui::Text("<>"); } - if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Space))) + if (ImGui::IsKeyPressed(ImGuiKey_Space)) io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse; } ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", &io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange); @@ -513,8 +523,10 @@ void ImGui::ShowDemoWindow(bool* p_open) ImGui::Unindent(); } + ImGui::Checkbox("io.ConfigInputTrickleEventQueue", &io.ConfigInputTrickleEventQueue); + ImGui::SameLine(); HelpMarker("Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates."); ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink); - ImGui::SameLine(); HelpMarker("Enable blinking cursor (optional as some users consider it to be distracting)"); + ImGui::SameLine(); HelpMarker("Enable blinking cursor (optional as some users consider it to be distracting)."); ImGui::Checkbox("io.ConfigDragClickToInputText", &io.ConfigDragClickToInputText); ImGui::SameLine(); HelpMarker("Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving)."); ImGui::Checkbox("io.ConfigWindowsResizeFromEdges", &io.ConfigWindowsResizeFromEdges); @@ -535,6 +547,7 @@ void ImGui::ShowDemoWindow(bool* p_open) "Here we expose them as read-only fields to avoid breaking interactions with your backend."); // Make a local copy to avoid modifying actual backend flags. + // FIXME: We don't use BeginDisabled() to keep label bright, maybe we need a BeginReadonly() equivalent.. ImGuiBackendFlags backend_flags = io.BackendFlags; ImGui::CheckboxFlags("io.BackendFlags: HasGamepad", &backend_flags, ImGuiBackendFlags_HasGamepad); ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors", &backend_flags, ImGuiBackendFlags_HasMouseCursors); @@ -731,10 +744,6 @@ static void ShowDemoWindowWidgets() IMGUI_DEMO_MARKER("Widgets/Basic/InputInt, InputFloat"); static int i0 = 123; ImGui::InputInt("input int", &i0); - ImGui::SameLine(); HelpMarker( - "You can apply arithmetic operators +,*,/ on numerical values.\n" - " e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\n" - "Use +- to subtract."); static float f0 = 0.001f; ImGui::InputFloat("input float", &f0, 0.01f, 1.0f, "%.3f"); @@ -1914,10 +1923,9 @@ static void ShowDemoWindowWidgets() ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0"); ImGui::SameLine(); HelpMarker( "ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, " - "but the user can change it with a right-click.\n\nColorPicker defaults to displaying RGB+HSV+Hex " + "but the user can change it with a right-click on those inputs.\n\nColorPicker defaults to displaying RGB+HSV+Hex " "if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions()."); - ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); - ImGui::SameLine(); HelpMarker("User can right-click the picker to change mode."); + ImGui::SameLine(); HelpMarker("When not specified explicitly (Auto/Current mode), user can right-click the picker to change mode."); ImGuiColorEditFlags flags = misc_flags; if (!alpha) flags |= ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar; @@ -1941,6 +1949,15 @@ static void ShowDemoWindowWidgets() if (ImGui::Button("Default: Float + HDR + Hue Wheel")) ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel); + // Always both a small version of both types of pickers (to make it more visible in the demo to people who are skimming quickly through it) + ImGui::Text("Both types:"); + float w = (ImGui::GetContentRegionAvail().x - ImGui::GetStyle().ItemSpacing.y) * 0.40f; + ImGui::SetNextItemWidth(w); + ImGui::ColorPicker3("##MyColor##5", (float*)&color, ImGuiColorEditFlags_PickerHueBar | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoAlpha); + ImGui::SameLine(); + ImGui::SetNextItemWidth(w); + ImGui::ColorPicker3("##MyColor##6", (float*)&color, ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoAlpha); + // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0) static ImVec4 color_hsv(0.23f, 1.0f, 1.0f, 1.0f); // Stored as HSV! ImGui::Spacing(); @@ -2063,6 +2080,7 @@ static void ShowDemoWindowWidgets() ImGui::DragScalar("drag s16", ImGuiDataType_S16, &s16_v, drag_speed, drag_clamp ? &s16_zero : NULL, drag_clamp ? &s16_fifty : NULL); ImGui::DragScalar("drag u16", ImGuiDataType_U16, &u16_v, drag_speed, drag_clamp ? &u16_zero : NULL, drag_clamp ? &u16_fifty : NULL, "%u ms"); ImGui::DragScalar("drag s32", ImGuiDataType_S32, &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL); + ImGui::DragScalar("drag s32 hex", ImGuiDataType_S32, &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL, "0x%08X"); ImGui::DragScalar("drag u32", ImGuiDataType_U32, &u32_v, drag_speed, drag_clamp ? &u32_zero : NULL, drag_clamp ? &u32_fifty : NULL, "%u ms"); ImGui::DragScalar("drag s64", ImGuiDataType_S64, &s64_v, drag_speed, drag_clamp ? &s64_zero : NULL, drag_clamp ? &s64_fifty : NULL); ImGui::DragScalar("drag u64", ImGuiDataType_U64, &u64_v, drag_speed, drag_clamp ? &u64_zero : NULL, drag_clamp ? &u64_fifty : NULL); @@ -2080,6 +2098,7 @@ static void ShowDemoWindowWidgets() ImGui::SliderScalar("slider s32 low", ImGuiDataType_S32, &s32_v, &s32_zero, &s32_fifty,"%d"); ImGui::SliderScalar("slider s32 high", ImGuiDataType_S32, &s32_v, &s32_hi_a, &s32_hi_b, "%d"); ImGui::SliderScalar("slider s32 full", ImGuiDataType_S32, &s32_v, &s32_min, &s32_max, "%d"); + ImGui::SliderScalar("slider s32 hex", ImGuiDataType_S32, &s32_v, &s32_zero, &s32_fifty, "0x%04X"); ImGui::SliderScalar("slider u32 low", ImGuiDataType_U32, &u32_v, &u32_zero, &u32_fifty,"%u"); ImGui::SliderScalar("slider u32 high", ImGuiDataType_U32, &u32_v, &u32_hi_a, &u32_hi_b, "%u"); ImGui::SliderScalar("slider u32 full", ImGuiDataType_U32, &u32_v, &u32_min, &u32_max, "%u"); @@ -2113,9 +2132,9 @@ static void ShowDemoWindowWidgets() ImGui::InputScalar("input s16", ImGuiDataType_S16, &s16_v, inputs_step ? &s16_one : NULL, NULL, "%d"); ImGui::InputScalar("input u16", ImGuiDataType_U16, &u16_v, inputs_step ? &u16_one : NULL, NULL, "%u"); ImGui::InputScalar("input s32", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%d"); - ImGui::InputScalar("input s32 hex", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal); + ImGui::InputScalar("input s32 hex", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%04X"); ImGui::InputScalar("input u32", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%u"); - ImGui::InputScalar("input u32 hex", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal); + ImGui::InputScalar("input u32 hex", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%08X"); ImGui::InputScalar("input s64", ImGuiDataType_S64, &s64_v, inputs_step ? &s64_one : NULL); ImGui::InputScalar("input u64", ImGuiDataType_U64, &u64_v, inputs_step ? &u64_one : NULL); ImGui::InputScalar("input float", ImGuiDataType_Float, &f32_v, inputs_step ? &f32_one : NULL); @@ -2343,7 +2362,7 @@ static void ShowDemoWindowWidgets() // Select an item type const char* item_names[] = { - "Text", "Button", "Button (w/ repeat)", "Checkbox", "SliderFloat", "InputText", "InputFloat", + "Text", "Button", "Button (w/ repeat)", "Checkbox", "SliderFloat", "InputText", "InputTextMultiline", "InputFloat", "InputFloat3", "ColorEdit4", "Selectable", "MenuItem", "TreeNode", "TreeNode (w/ double-click)", "Combo", "ListBox" }; static int item_type = 4; @@ -2366,15 +2385,16 @@ static void ShowDemoWindowWidgets() if (item_type == 3) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); } // Testing checkbox if (item_type == 4) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); } // Testing basic item if (item_type == 5) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); } // Testing input text (which handles tabbing) - if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); } // Testing +/- buttons on scalar input - if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged) - if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged) - if (item_type == 9) { ret = ImGui::Selectable("ITEM: Selectable"); } // Testing selectable item - if (item_type == 10){ ret = ImGui::MenuItem("ITEM: MenuItem"); } // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy) - if (item_type == 11){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); } // Testing tree node - if (item_type == 12){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy. - if (item_type == 13){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::Combo("ITEM: Combo", ¤t, items, IM_ARRAYSIZE(items)); } - if (item_type == 14){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", ¤t, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); } + if (item_type == 6) { ret = ImGui::InputTextMultiline("ITEM: InputTextMultiline", &str[0], IM_ARRAYSIZE(str)); } // Testing input text (which uses a child window) + if (item_type == 7) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); } // Testing +/- buttons on scalar input + if (item_type == 8) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged) + if (item_type == 9) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged) + if (item_type == 10){ ret = ImGui::Selectable("ITEM: Selectable"); } // Testing selectable item + if (item_type == 11){ ret = ImGui::MenuItem("ITEM: MenuItem"); } // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy) + if (item_type == 12){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); } // Testing tree node + if (item_type == 13){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy. + if (item_type == 14){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::Combo("ITEM: Combo", ¤t, items, IM_ARRAYSIZE(items)); } + if (item_type == 15){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", ¤t, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); } // Display the values of IsItemHovered() and other common item state functions. // Note that the ImGuiHoveredFlags_XXX flags can be combined. @@ -3265,59 +3285,58 @@ static void ShowDemoWindowLayout() ImGui::DragFloat2("size", (float*)&size, 0.5f, 1.0f, 200.0f, "%.0f"); ImGui::TextWrapped("(Click and drag to scroll)"); + HelpMarker( + "(Left) Using ImGui::PushClipRect():\n" + "Will alter ImGui hit-testing logic + ImDrawList rendering.\n" + "(use this if you want your clipping rectangle to affect interactions)\n\n" + "(Center) Using ImDrawList::PushClipRect():\n" + "Will alter ImDrawList rendering only.\n" + "(use this as a shortcut if you are only using ImDrawList calls)\n\n" + "(Right) Using ImDrawList::AddText() with a fine ClipRect:\n" + "Will alter only this specific ImDrawList::AddText() rendering.\n" + "This is often used internally to avoid altering the clipping rectangle and minimize draw calls."); + for (int n = 0; n < 3; n++) { if (n > 0) ImGui::SameLine(); - ImGui::PushID(n); - ImGui::BeginGroup(); // Lock X position - ImGui::InvisibleButton("##empty", size); + ImGui::PushID(n); + ImGui::InvisibleButton("##canvas", size); if (ImGui::IsItemActive() && ImGui::IsMouseDragging(ImGuiMouseButton_Left)) { offset.x += ImGui::GetIO().MouseDelta.x; offset.y += ImGui::GetIO().MouseDelta.y; } + ImGui::PopID(); + if (!ImGui::IsItemVisible()) // Skip rendering as ImDrawList elements are not clipped. + continue; + const ImVec2 p0 = ImGui::GetItemRectMin(); const ImVec2 p1 = ImGui::GetItemRectMax(); const char* text_str = "Line 1 hello\nLine 2 clip me!"; const ImVec2 text_pos = ImVec2(p0.x + offset.x, p0.y + offset.y); ImDrawList* draw_list = ImGui::GetWindowDrawList(); - switch (n) { case 0: - HelpMarker( - "Using ImGui::PushClipRect():\n" - "Will alter ImGui hit-testing logic + ImDrawList rendering.\n" - "(use this if you want your clipping rectangle to affect interactions)"); ImGui::PushClipRect(p0, p1, true); draw_list->AddRectFilled(p0, p1, IM_COL32(90, 90, 120, 255)); draw_list->AddText(text_pos, IM_COL32_WHITE, text_str); ImGui::PopClipRect(); break; case 1: - HelpMarker( - "Using ImDrawList::PushClipRect():\n" - "Will alter ImDrawList rendering only.\n" - "(use this as a shortcut if you are only using ImDrawList calls)"); draw_list->PushClipRect(p0, p1, true); draw_list->AddRectFilled(p0, p1, IM_COL32(90, 90, 120, 255)); draw_list->AddText(text_pos, IM_COL32_WHITE, text_str); draw_list->PopClipRect(); break; case 2: - HelpMarker( - "Using ImDrawList::AddText() with a fine ClipRect:\n" - "Will alter only this specific ImDrawList::AddText() rendering.\n" - "(this is often used internally to avoid altering the clipping rectangle and minimize draw calls)"); ImVec4 clip_rect(p0.x, p0.y, p1.x, p1.y); // AddText() takes a ImVec4* here so let's convert. draw_list->AddRectFilled(p0, p1, IM_COL32(90, 90, 120, 255)); draw_list->AddText(ImGui::GetFont(), ImGui::GetFontSize(), text_pos, IM_COL32_WHITE, text_str, NULL, 0.0f, &clip_rect); break; } - ImGui::EndGroup(); - ImGui::PopID(); } ImGui::TreePop(); @@ -3417,11 +3436,26 @@ static void ShowDemoWindowPopups() } // Call the more complete ShowExampleMenuFile which we use in various places of this demo - if (ImGui::Button("File Menu..")) + if (ImGui::Button("With a menu..")) ImGui::OpenPopup("my_file_popup"); - if (ImGui::BeginPopup("my_file_popup")) + if (ImGui::BeginPopup("my_file_popup", ImGuiWindowFlags_MenuBar)) { - ShowExampleMenuFile(); + if (ImGui::BeginMenuBar()) + { + if (ImGui::BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Edit")) + { + ImGui::MenuItem("Dummy"); + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); + } + ImGui::Text("Hello from popup!"); + ImGui::Button("This is a dummy button.."); ImGui::EndPopup(); } @@ -3468,7 +3502,7 @@ static void ShowDemoWindowPopups() { HelpMarker("Text() elements don't have stable identifiers so we need to provide one."); static float value = 0.5f; - ImGui::Text("Value = %.3f <-- (1) right-click this value", value); + ImGui::Text("Value = %.3f <-- (1) right-click this text", value); if (ImGui::BeginPopupContextItem("my popup")) { if (ImGui::Selectable("Set to zero")) value = 0.0f; @@ -3595,19 +3629,12 @@ static void ShowDemoWindowPopups() ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); ImGui::Separator(); - // Note: As a quirk in this very specific example, we want to differentiate the parent of this menu from the - // parent of the various popup menus above. To do so we are encloding the items in a PushID()/PopID() block - // to make them two different menusets. If we don't, opening any popup above and hovering our menu here would - // open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, - // which is the desired behavior for regular menus. - ImGui::PushID("foo"); ImGui::MenuItem("Menu item", "CTRL+M"); if (ImGui::BeginMenu("Menu inside a regular window")) { ShowExampleMenuFile(); ImGui::EndMenu(); } - ImGui::PopID(); ImGui::Separator(); ImGui::TreePop(); } @@ -3931,7 +3958,7 @@ static void ShowDemoWindowTables() sprintf(buf, "Hello %d,%d", column, row); if (contents_type == CT_Text) ImGui::TextUnformatted(buf); - else if (contents_type) + else if (contents_type == CT_FillButton) ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f)); } } @@ -4475,14 +4502,16 @@ static void ShowDemoWindowTables() { ImGui::TableNextColumn(); ImGui::PushID(column); - ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation + ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation across columns ImGui::Text("'%s'", column_names[column]); ImGui::Spacing(); ImGui::Text("Input flags:"); EditTableColumnsFlags(&column_flags[column]); ImGui::Spacing(); ImGui::Text("Output flags:"); + ImGui::BeginDisabled(); ShowTableColumnsStatusFlags(column_flags_out[column]); + ImGui::EndDisabled(); ImGui::PopID(); } PopStyleCompact(); @@ -4887,7 +4916,7 @@ static void ShowDemoWindowTables() ImGui::TableSetColumnIndex(1); ImGui::SliderFloat("float1", &dummy_f, 0.0f, 1.0f); ImGui::TableSetColumnIndex(2); - ImGui::SliderFloat("float2", &dummy_f, 0.0f, 1.0f); + ImGui::SliderFloat("##float2", &dummy_f, 0.0f, 1.0f); // No visible label since right-aligned ImGui::PopID(); } ImGui::EndTable(); @@ -5696,6 +5725,8 @@ static void ShowDemoWindowColumns() ImGui::TreePop(); } +namespace ImGui { extern ImGuiKeyData* GetKeyData(ImGuiKey key); } + static void ShowDemoWindowMisc() { IMGUI_DEMO_MARKER("Filtering"); @@ -5722,12 +5753,18 @@ static void ShowDemoWindowMisc() ImGuiIO& io = ImGui::GetIO(); // Display ImGuiIO output flags - ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse); - ImGui::Text("WantCaptureMouseUnlessPopupClose: %d", io.WantCaptureMouseUnlessPopupClose); - ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard); - ImGui::Text("WantTextInput: %d", io.WantTextInput); - ImGui::Text("WantSetMousePos: %d", io.WantSetMousePos); - ImGui::Text("NavActive: %d, NavVisible: %d", io.NavActive, io.NavVisible); + IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Output"); + ImGui::SetNextItemOpen(true, ImGuiCond_Once); + if (ImGui::TreeNode("Output")) + { + ImGui::Text("io.WantCaptureMouse: %d", io.WantCaptureMouse); + ImGui::Text("io.WantCaptureMouseUnlessPopupClose: %d", io.WantCaptureMouseUnlessPopupClose); + ImGui::Text("io.WantCaptureKeyboard: %d", io.WantCaptureKeyboard); + ImGui::Text("io.WantTextInput: %d", io.WantTextInput); + ImGui::Text("io.WantSetMousePos: %d", io.WantSetMousePos); + ImGui::Text("io.NavActive: %d, io.NavVisible: %d", io.NavActive, io.NavVisible); + ImGui::TreePop(); + } // Display Mouse state IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Mouse State"); @@ -5740,39 +5777,119 @@ static void ShowDemoWindowMisc() ImGui::Text("Mouse delta: (%g, %g)", io.MouseDelta.x, io.MouseDelta.y); int count = IM_ARRAYSIZE(io.MouseDown); - ImGui::Text("Mouse down:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseDown(i)) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); } - ImGui::Text("Mouse clicked:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } - ImGui::Text(" - clicked double:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } - ImGui::Text(" - clicked triple:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseTripleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } - ImGui::Text(" - clicked count:"); for (int i = 0; i < count; i++) if (io.MouseClickedCount[i]) { ImGui::SameLine(); ImGui::Text("b%d (%d)", i, io.MouseClickedCount[i]); } - //ImGui::Text(" - last count:"); for (int i = 0; i < count; i++) if (io.MouseClickedLastCount[i]) { ImGui::SameLine(); ImGui::Text("b%d (%d)", i, io.MouseClickedLastCount[i]); } - - ImGui::Text("Mouse released:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } + ImGui::Text("Mouse down:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseDown(i)) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); } + ImGui::Text("Mouse clicked:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d (%d)", i, ImGui::GetMouseClickedCount(i)); } + ImGui::Text("Mouse released:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } ImGui::Text("Mouse wheel: %.1f", io.MouseWheel); ImGui::Text("Pen Pressure: %.1f", io.PenPressure); // Note: currently unused ImGui::TreePop(); } // Display Keyboard/Mouse state - IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Keyboard & Navigation State"); - if (ImGui::TreeNode("Keyboard & Navigation State")) - { - ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyDown(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X) (%.02f secs)", i, i, io.KeysDownDuration[i]); } - ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); } - ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); } + IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Keyboard, Gamepad & Navigation State"); + if (ImGui::TreeNode("Keyboard, Gamepad & Navigation State")) + { + // We iterate both legacy native range and named ImGuiKey ranges, which is a little odd but this allow displaying the data for old/new backends. + // User code should never have to go through such hoops: old code may use native keycodes, new code may use ImGuiKey codes. +#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO + struct funcs { static bool IsLegacyNativeDupe(ImGuiKey) { return false; } }; + const ImGuiKey key_first = ImGuiKey_NamedKey_BEGIN; +#else + struct funcs { static bool IsLegacyNativeDupe(ImGuiKey key) { return key < 512 && ImGui::GetIO().KeyMap[key] != -1; } }; // Hide Native<>ImGuiKey duplicates when both exists in the array + const ImGuiKey key_first = 0; + //ImGui::Text("Legacy raw:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (io.KeysDown[key]) { ImGui::SameLine(); ImGui::Text("\"%s\" %d", ImGui::GetKeyName(key), key); } } +#endif + ImGui::Text("Keys down:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (funcs::IsLegacyNativeDupe(key)) continue; if (ImGui::IsKeyDown(key)) { ImGui::SameLine(); ImGui::Text("\"%s\" %d (%.02f secs)", ImGui::GetKeyName(key), key, ImGui::GetKeyData(key)->DownDuration); } } + ImGui::Text("Keys pressed:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (funcs::IsLegacyNativeDupe(key)) continue; if (ImGui::IsKeyPressed(key)) { ImGui::SameLine(); ImGui::Text("\"%s\" %d", ImGui::GetKeyName(key), key); } } + ImGui::Text("Keys released:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (funcs::IsLegacyNativeDupe(key)) continue; if (ImGui::IsKeyReleased(key)) { ImGui::SameLine(); ImGui::Text("\"%s\" %d", ImGui::GetKeyName(key), key); } } ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : ""); ImGui::Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine(); ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public. - ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f (%.02f secs)", i, io.NavInputs[i], io.NavInputsDownDuration[i]); } ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); } - ImGui::Button("Hovering me sets the\nkeyboard capture flag"); - if (ImGui::IsItemHovered()) - ImGui::CaptureKeyboardFromApp(true); - ImGui::SameLine(); - ImGui::Button("Holding me clears the\nthe keyboard capture flag"); - if (ImGui::IsItemActive()) - ImGui::CaptureKeyboardFromApp(false); + // Draw an arbitrary US keyboard layout to visualize translated keys + { + const ImVec2 key_size = ImVec2(35.0f, 35.0f); + const float key_rounding = 3.0f; + const ImVec2 key_face_size = ImVec2(25.0f, 25.0f); + const ImVec2 key_face_pos = ImVec2(5.0f, 3.0f); + const float key_face_rounding = 2.0f; + const ImVec2 key_label_pos = ImVec2(7.0f, 4.0f); + const ImVec2 key_step = ImVec2(key_size.x - 1.0f, key_size.y - 1.0f); + const float key_row_offset = 9.0f; + + ImVec2 board_min = ImGui::GetCursorScreenPos(); + ImVec2 board_max = ImVec2(board_min.x + 3 * key_step.x + 2 * key_row_offset + 10.0f, board_min.y + 3 * key_step.y + 10.0f); + ImVec2 start_pos = ImVec2(board_min.x + 5.0f - key_step.x, board_min.y); + + struct KeyLayoutData { int Row, Col; const char* Label; ImGuiKey Key; }; + const KeyLayoutData keys_to_display[] = + { + { 0, 0, "", ImGuiKey_Tab }, { 0, 1, "Q", ImGuiKey_Q }, { 0, 2, "W", ImGuiKey_W }, { 0, 3, "E", ImGuiKey_E }, { 0, 4, "R", ImGuiKey_R }, + { 1, 0, "", ImGuiKey_CapsLock }, { 1, 1, "A", ImGuiKey_A }, { 1, 2, "S", ImGuiKey_S }, { 1, 3, "D", ImGuiKey_D }, { 1, 4, "F", ImGuiKey_F }, + { 2, 0, "", ImGuiKey_LeftShift },{ 2, 1, "Z", ImGuiKey_Z }, { 2, 2, "X", ImGuiKey_X }, { 2, 3, "C", ImGuiKey_C }, { 2, 4, "V", ImGuiKey_V } + }; + + // Elements rendered manually via ImDrawList API are not clipped automatically. + // While not strictly necessary, here IsItemVisible() is used to avoid rendering these shapes when they are out of view. + ImGui::Dummy(ImVec2(board_max.x - board_min.x, board_max.y - board_min.y)); + if (ImGui::IsItemVisible()) + { + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + draw_list->PushClipRect(board_min, board_max, true); + for (int n = 0; n < IM_ARRAYSIZE(keys_to_display); n++) + { + const KeyLayoutData* key_data = &keys_to_display[n]; + ImVec2 key_min = ImVec2(start_pos.x + key_data->Col * key_step.x + key_data->Row * key_row_offset, start_pos.y + key_data->Row * key_step.y); + ImVec2 key_max = ImVec2(key_min.x + key_size.x, key_min.y + key_size.y); + draw_list->AddRectFilled(key_min, key_max, IM_COL32(204, 204, 204, 255), key_rounding); + draw_list->AddRect(key_min, key_max, IM_COL32(24, 24, 24, 255), key_rounding); + ImVec2 face_min = ImVec2(key_min.x + key_face_pos.x, key_min.y + key_face_pos.y); + ImVec2 face_max = ImVec2(face_min.x + key_face_size.x, face_min.y + key_face_size.y); + draw_list->AddRect(face_min, face_max, IM_COL32(193, 193, 193, 255), key_face_rounding, ImDrawFlags_None, 2.0f); + draw_list->AddRectFilled(face_min, face_max, IM_COL32(252, 252, 252, 255), key_face_rounding); + ImVec2 label_min = ImVec2(key_min.x + key_label_pos.x, key_min.y + key_label_pos.y); + draw_list->AddText(label_min, IM_COL32(64, 64, 64, 255), key_data->Label); + if (ImGui::IsKeyDown(key_data->Key)) + draw_list->AddRectFilled(key_min, key_max, IM_COL32(255, 0, 0, 128), key_rounding); + } + draw_list->PopClipRect(); + } + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Capture override")) + { + HelpMarker( + "The value of io.WantCaptureMouse and io.WantCaptureKeyboard are normally set by Dear ImGui " + "to instruct your application of how to route inputs. Typically, when a value is true, it means " + "Dear ImGui wants the corresponding inputs and we expect the underlying application to ignore them.\n\n" + "The most typical case is: when hovering a window, Dear ImGui set io.WantCaptureMouse to true, " + "and underlying application should ignore mouse inputs (in practice there are many and more subtle " + "rules leading to how those flags are set)."); + + ImGui::Text("io.WantCaptureMouse: %d", io.WantCaptureMouse); + ImGui::Text("io.WantCaptureMouseUnlessPopupClose: %d", io.WantCaptureMouseUnlessPopupClose); + ImGui::Text("io.WantCaptureKeyboard: %d", io.WantCaptureKeyboard); + + HelpMarker( + "Hovering the colored canvas will override io.WantCaptureXXX fields.\n" + "Notice how normally (when set to none), the value of io.WantCaptureKeyboard would be false when hovering and true when clicking."); + static int capture_override_mouse = -1; + static int capture_override_keyboard = -1; + const char* capture_override_desc[] = { "None", "Set to false", "Set to true" }; + ImGui::SetNextItemWidth(ImGui::GetFontSize() * 15); + ImGui::SliderInt("SetNextFrameWantCaptureMouse()", &capture_override_mouse, -1, +1, capture_override_desc[capture_override_mouse + 1], ImGuiSliderFlags_AlwaysClamp); + ImGui::SetNextItemWidth(ImGui::GetFontSize() * 15); + ImGui::SliderInt("SetNextFrameWantCaptureKeyboard()", &capture_override_keyboard, -1, +1, capture_override_desc[capture_override_keyboard + 1], ImGuiSliderFlags_AlwaysClamp); + + ImGui::ColorButton("##panel", ImVec4(0.7f, 0.1f, 0.7f, 1.0f), ImGuiColorEditFlags_NoTooltip | ImGuiColorEditFlags_NoDragDrop, ImVec2(256.0f, 192.0f)); // Dummy item + if (ImGui::IsItemHovered() && capture_override_mouse != -1) + ImGui::SetNextFrameWantCaptureMouse(capture_override_mouse == 1); + if (ImGui::IsItemHovered() && capture_override_keyboard != -1) + ImGui::SetNextFrameWantCaptureKeyboard(capture_override_keyboard == 1); + ImGui::TreePop(); } @@ -5930,6 +6047,9 @@ void ImGui::ShowAboutWindow(bool* p_open) #ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_FUNCTIONS"); #endif +#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO + ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_KEYIO"); +#endif #ifdef IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS"); #endif @@ -6064,7 +6184,7 @@ void ImGui::ShowAboutWindow(bool* p_open) namespace ImGui { IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas); } // Demo helper function to select among loaded fonts. -// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +// Here we use the regular BeginCombo()/EndCombo() api which is the more flexible one. void ImGui::ShowFontSelector(const char* label) { ImGuiIO& io = ImGui::GetIO(); @@ -7342,7 +7462,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open) static void ShowExampleAppFullscreen(bool* p_open) { static bool use_work_area = true; - static ImGuiWindowFlags flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings; + static ImGuiWindowFlags flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings; // We demonstrate using the full viewport area or the work area (without menu-bars, task-bars etc.) // Based on your use case you may want one of the other. @@ -7595,8 +7715,8 @@ static void ShowExampleAppCustomRendering(bool* p_open) // Context menu (under default mouse threshold) ImVec2 drag_delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right); - if (opt_enable_context_menu && ImGui::IsMouseReleased(ImGuiMouseButton_Right) && drag_delta.x == 0.0f && drag_delta.y == 0.0f) - ImGui::OpenPopupOnItemClick("context"); + if (opt_enable_context_menu && drag_delta.x == 0.0f && drag_delta.y == 0.0f) + ImGui::OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); if (ImGui::BeginPopup("context")) { if (adding_line) diff --git a/Code/ThirdParty/DearImgui/imgui_draw.cpp b/Code/ThirdParty/DearImgui/imgui_draw.cpp index 0854b1a..830ae3f 100644 --- a/Code/ThirdParty/DearImgui/imgui_draw.cpp +++ b/Code/ThirdParty/DearImgui/imgui_draw.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (drawing and font code) /* @@ -90,7 +90,7 @@ Index of this file: #endif //------------------------------------------------------------------------- -// [SECTION] STB libraries implementation +// [SECTION] STB libraries implementation (for stb_truetype and stb_rect_pack) //------------------------------------------------------------------------- // Compile time options: @@ -399,7 +399,7 @@ void ImDrawListSharedData::SetCircleTessellationMaxError(float max_error) for (int i = 0; i < IM_ARRAYSIZE(CircleSegmentCounts); i++) { const float radius = (float)i; - CircleSegmentCounts[i] = (ImU8)((i > 0) ? IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError) : 0); + CircleSegmentCounts[i] = (ImU8)((i > 0) ? IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError) : IM_DRAWLIST_ARCFAST_SAMPLE_MAX); } ArcFastRadiusCutoff = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(IM_DRAWLIST_ARCFAST_SAMPLE_MAX, CircleSegmentMaxError); } @@ -408,10 +408,11 @@ void ImDrawListSharedData::SetCircleTessellationMaxError(float max_error) void ImDrawList::_ResetForNewFrame() { // Verify that the ImDrawCmd fields we want to memcmp() are contiguous in memory. - // (those should be IM_STATIC_ASSERT() in theory but with our pre C++11 setup the whole check doesn't compile with GCC) - IM_ASSERT(IM_OFFSETOF(ImDrawCmd, ClipRect) == 0); - IM_ASSERT(IM_OFFSETOF(ImDrawCmd, TextureId) == sizeof(ImVec4)); - IM_ASSERT(IM_OFFSETOF(ImDrawCmd, VtxOffset) == sizeof(ImVec4) + sizeof(ImTextureID)); + IM_STATIC_ASSERT(IM_OFFSETOF(ImDrawCmd, ClipRect) == 0); + IM_STATIC_ASSERT(IM_OFFSETOF(ImDrawCmd, TextureId) == sizeof(ImVec4)); + IM_STATIC_ASSERT(IM_OFFSETOF(ImDrawCmd, VtxOffset) == sizeof(ImVec4) + sizeof(ImTextureID)); + if (_Splitter._Count > 1) + _Splitter.Merge(this); CmdBuffer.resize(0); IdxBuffer.resize(0); @@ -479,6 +480,7 @@ void ImDrawList::_PopUnusedDrawCmd() void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data) { + IM_ASSERT_PARANOID(CmdBuffer.Size > 0); ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; IM_ASSERT(curr_cmd->UserCallback == NULL); if (curr_cmd->ElemCount != 0) @@ -493,16 +495,18 @@ void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data) } // Compare ClipRect, TextureId and VtxOffset with a single memcmp() -#define ImDrawCmd_HeaderSize (IM_OFFSETOF(ImDrawCmd, VtxOffset) + sizeof(unsigned int)) -#define ImDrawCmd_HeaderCompare(CMD_LHS, CMD_RHS) (memcmp(CMD_LHS, CMD_RHS, ImDrawCmd_HeaderSize)) // Compare ClipRect, TextureId, VtxOffset -#define ImDrawCmd_HeaderCopy(CMD_DST, CMD_SRC) (memcpy(CMD_DST, CMD_SRC, ImDrawCmd_HeaderSize)) // Copy ClipRect, TextureId, VtxOffset +#define ImDrawCmd_HeaderSize (IM_OFFSETOF(ImDrawCmd, VtxOffset) + sizeof(unsigned int)) +#define ImDrawCmd_HeaderCompare(CMD_LHS, CMD_RHS) (memcmp(CMD_LHS, CMD_RHS, ImDrawCmd_HeaderSize)) // Compare ClipRect, TextureId, VtxOffset +#define ImDrawCmd_HeaderCopy(CMD_DST, CMD_SRC) (memcpy(CMD_DST, CMD_SRC, ImDrawCmd_HeaderSize)) // Copy ClipRect, TextureId, VtxOffset +#define ImDrawCmd_AreSequentialIdxOffset(CMD_0, CMD_1) (CMD_0->IdxOffset + CMD_0->ElemCount == CMD_1->IdxOffset) // Try to merge two last draw commands void ImDrawList::_TryMergeDrawCmds() { + IM_ASSERT_PARANOID(CmdBuffer.Size > 0); ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; ImDrawCmd* prev_cmd = curr_cmd - 1; - if (ImDrawCmd_HeaderCompare(curr_cmd, prev_cmd) == 0 && curr_cmd->UserCallback == NULL && prev_cmd->UserCallback == NULL) + if (ImDrawCmd_HeaderCompare(curr_cmd, prev_cmd) == 0 && ImDrawCmd_AreSequentialIdxOffset(prev_cmd, curr_cmd) && curr_cmd->UserCallback == NULL && prev_cmd->UserCallback == NULL) { prev_cmd->ElemCount += curr_cmd->ElemCount; CmdBuffer.pop_back(); @@ -514,6 +518,7 @@ void ImDrawList::_TryMergeDrawCmds() void ImDrawList::_OnChangedClipRect() { // If current command is used with different settings we need to add a new command + IM_ASSERT_PARANOID(CmdBuffer.Size > 0); ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; if (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &_CmdHeader.ClipRect, sizeof(ImVec4)) != 0) { @@ -524,7 +529,7 @@ void ImDrawList::_OnChangedClipRect() // Try to merge with previous command if it matches, else use current command ImDrawCmd* prev_cmd = curr_cmd - 1; - if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && prev_cmd->UserCallback == NULL) + if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && ImDrawCmd_AreSequentialIdxOffset(prev_cmd, curr_cmd) && prev_cmd->UserCallback == NULL) { CmdBuffer.pop_back(); return; @@ -536,6 +541,7 @@ void ImDrawList::_OnChangedClipRect() void ImDrawList::_OnChangedTextureID() { // If current command is used with different settings we need to add a new command + IM_ASSERT_PARANOID(CmdBuffer.Size > 0); ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; if (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != _CmdHeader.TextureId) { @@ -546,7 +552,7 @@ void ImDrawList::_OnChangedTextureID() // Try to merge with previous command if it matches, else use current command ImDrawCmd* prev_cmd = curr_cmd - 1; - if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && prev_cmd->UserCallback == NULL) + if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && ImDrawCmd_AreSequentialIdxOffset(prev_cmd, curr_cmd) && prev_cmd->UserCallback == NULL) { CmdBuffer.pop_back(); return; @@ -559,6 +565,7 @@ void ImDrawList::_OnChangedVtxOffset() { // We don't need to compare curr_cmd->VtxOffset != _CmdHeader.VtxOffset because we know it'll be different at the time we call this. _VtxCurrentIdx = 0; + IM_ASSERT_PARANOID(CmdBuffer.Size > 0); ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; //IM_ASSERT(curr_cmd->VtxOffset != _CmdHeader.VtxOffset); // See #3349 if (curr_cmd->ElemCount != 0) @@ -581,7 +588,7 @@ int ImDrawList::_CalcCircleAutoSegmentCount(float radius) const } // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) -void ImDrawList::PushClipRect(ImVec2 cr_min, ImVec2 cr_max, bool intersect_with_current_clip_rect) +void ImDrawList::PushClipRect(const ImVec2& cr_min, const ImVec2& cr_max, bool intersect_with_current_clip_rect) { ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y); if (intersect_with_current_clip_rect) @@ -974,7 +981,8 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 } } -// We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds. +// - We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds. +// - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing. void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col) { if (points_count < 3) @@ -1058,7 +1066,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun void ImDrawList::_PathArcToFastEx(const ImVec2& center, float radius, int a_min_sample, int a_max_sample, int a_step) { - if (radius <= 0.0f) + if (radius < 0.5f) { _Path.push_back(center); return; @@ -1150,7 +1158,7 @@ void ImDrawList::_PathArcToFastEx(const ImVec2& center, float radius, int a_min_ void ImDrawList::_PathArcToN(const ImVec2& center, float radius, float a_min, float a_max, int num_segments) { - if (radius <= 0.0f) + if (radius < 0.5f) { _Path.push_back(center); return; @@ -1169,7 +1177,7 @@ void ImDrawList::_PathArcToN(const ImVec2& center, float radius, float a_min, fl // 0: East, 3: South, 6: West, 9: North, 12: East void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12) { - if (radius <= 0.0f) + if (radius < 0.5f) { _Path.push_back(center); return; @@ -1179,7 +1187,7 @@ void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_ void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments) { - if (radius <= 0.0f) + if (radius < 0.5f) { _Path.push_back(center); return; @@ -1207,8 +1215,8 @@ void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, floa const float a_min_segment_angle = a_min_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX; const float a_max_segment_angle = a_max_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX; - const bool a_emit_start = (a_min_segment_angle - a_min) != 0.0f; - const bool a_emit_end = (a_max - a_max_segment_angle) != 0.0f; + const bool a_emit_start = ImAbs(a_min_segment_angle - a_min) >= 1e-5f; + const bool a_emit_end = ImAbs(a_max - a_max_segment_angle) >= 1e-5f; _Path.reserve(_Path.Size + (a_mid_samples + 1 + (a_emit_start ? 1 : 0) + (a_emit_end ? 1 : 0))); if (a_emit_start) @@ -1360,7 +1368,7 @@ void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, ImDr rounding = ImMin(rounding, ImFabs(b.x - a.x) * ( ((flags & ImDrawFlags_RoundCornersTop) == ImDrawFlags_RoundCornersTop) || ((flags & ImDrawFlags_RoundCornersBottom) == ImDrawFlags_RoundCornersBottom) ? 0.5f : 1.0f ) - 1.0f); rounding = ImMin(rounding, ImFabs(b.y - a.y) * ( ((flags & ImDrawFlags_RoundCornersLeft) == ImDrawFlags_RoundCornersLeft) || ((flags & ImDrawFlags_RoundCornersRight) == ImDrawFlags_RoundCornersRight) ? 0.5f : 1.0f ) - 1.0f); - if (rounding <= 0.0f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone) + if (rounding < 0.5f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone) { PathLineTo(a); PathLineTo(ImVec2(b.x, a.y)); @@ -1406,7 +1414,7 @@ void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 c { if ((col & IM_COL32_A_MASK) == 0) return; - if (rounding <= 0.0f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone) + if (rounding < 0.5f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone) { PrimReserve(6, 4); PrimRect(p_min, p_max, col); @@ -1482,7 +1490,7 @@ void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImV void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness) { - if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f) + if ((col & IM_COL32_A_MASK) == 0 || radius < 0.5f) return; if (num_segments <= 0) @@ -1506,7 +1514,7 @@ void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int nu void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments) { - if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f) + if ((col & IM_COL32_A_MASK) == 0 || radius < 0.5f) return; if (num_segments <= 0) @@ -1646,7 +1654,7 @@ void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_mi return; flags = FixRectCornerFlags(flags); - if (rounding <= 0.0f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone) + if (rounding < 0.5f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone) { AddImage(user_texture_id, p_min, p_max, uv_min, uv_max, col); return; @@ -1734,13 +1742,13 @@ void ImDrawListSplitter::Merge(ImDrawList* draw_list) for (int i = 1; i < _Count; i++) { ImDrawChannel& ch = _Channels[i]; - - // Equivalent of PopUnusedDrawCmd() for this channel's cmdbuffer and except we don't need to test for UserCallback. - if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0) + if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0 && ch._CmdBuffer.back().UserCallback == NULL) // Equivalent of PopUnusedDrawCmd() ch._CmdBuffer.pop_back(); if (ch._CmdBuffer.Size > 0 && last_cmd != NULL) { + // Do not include ImDrawCmd_AreSequentialIdxOffset() in the compare as we rebuild IdxOffset values ourselves. + // Manipulating IdxOffset (e.g. by reordering draw commands like done by RenderDimmedBackgroundBehindWindow()) is not supported within a splitter. ImDrawCmd* next_cmd = &ch._CmdBuffer[0]; if (ImDrawCmd_HeaderCompare(last_cmd, next_cmd) == 0 && last_cmd->UserCallback == NULL && next_cmd->UserCallback == NULL) { @@ -1925,37 +1933,38 @@ ImFontConfig::ImFontConfig() // A work of art lies ahead! (. = white layer, X = black layer, others are blank) // The 2x2 white texels on the top left are the ones we'll use everywhere in Dear ImGui to render filled shapes. -const int FONT_ATLAS_DEFAULT_TEX_DATA_W = 108; // Actual texture will be 2 times that + 1 spacing. +// (This is used when io.MouseDrawCursor = true) +const int FONT_ATLAS_DEFAULT_TEX_DATA_W = 122; // Actual texture will be 2 times that + 1 spacing. const int FONT_ATLAS_DEFAULT_TEX_DATA_H = 27; static const char FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[FONT_ATLAS_DEFAULT_TEX_DATA_W * FONT_ATLAS_DEFAULT_TEX_DATA_H + 1] = { - "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX- XX " - "..- -X.....X- X.X - X.X -X.....X - X.....X- X..X " - "--- -XXX.XXX- X...X - X...X -X....X - X....X- X..X " - "X - X.X - X.....X - X.....X -X...X - X...X- X..X " - "XX - X.X -X.......X- X.......X -X..X.X - X.X..X- X..X " - "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X- X..XXX " - "X..X - X.X - X.X - X.X -XX X.X - X.X XX- X..X..XXX " - "X...X - X.X - X.X - XX X.X XX - X.X - X.X - X..X..X..XX " - "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X - X..X..X..X.X " - "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X -XXX X..X..X..X..X" - "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X -X..XX........X..X" - "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X -X...X...........X" - "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X - X..............X" - "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X - X.............X" - "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X - X.............X" - "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X - X............X" - "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX - X...........X " - "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------- X..........X " - "X.X X..X - -X.......X- X.......X - XX XX - - X..........X " - "XX X..X - - X.....X - X.....X - X.X X.X - - X........X " - " X..X - X...X - X...X - X..X X..X - - X........X " - " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - - XXXXXXXXXX " - "------------ - X - X -X.....................X- ------------------" - " ----------------------------------- X...XXXXXXXXXXXXX...X - " - " - X..X X..X - " - " - X.X X.X - " - " - XX XX - " + "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX- XX - XX XX " + "..- -X.....X- X.X - X.X -X.....X - X.....X- X..X -X..X X..X" + "--- -XXX.XXX- X...X - X...X -X....X - X....X- X..X -X...X X...X" + "X - X.X - X.....X - X.....X -X...X - X...X- X..X - X...X X...X " + "XX - X.X -X.......X- X.......X -X..X.X - X.X..X- X..X - X...X...X " + "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X- X..XXX - X.....X " + "X..X - X.X - X.X - X.X -XX X.X - X.X XX- X..X..XXX - X...X " + "X...X - X.X - X.X - XX X.X XX - X.X - X.X - X..X..X..XX - X.X " + "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X - X..X..X..X.X - X...X " + "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X -XXX X..X..X..X..X- X.....X " + "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X -X..XX........X..X- X...X...X " + "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X -X...X...........X- X...X X...X " + "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X - X..............X-X...X X...X" + "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X - X.............X-X..X X..X" + "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X - X.............X- XX XX " + "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X - X............X--------------" + "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX - X...........X - " + "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------- X..........X - " + "X.X X..X - -X.......X- X.......X - XX XX - - X..........X - " + "XX X..X - - X.....X - X.....X - X.X X.X - - X........X - " + " X..X - - X...X - X...X - X..X X..X - - X........X - " + " XX - - X.X - X.X - X...XXXXXXXXXXXXX...X - - XXXXXXXXXX - " + "------------- - X - X -X.....................X- ------------------- " + " ----------------------------------- X...XXXXXXXXXXXXX...X - " + " - X..X X..X - " + " - X.X X.X - " + " - XX XX - " }; static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_COUNT][3] = @@ -1969,6 +1978,7 @@ static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_COUNT][3 { ImVec2(73,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNESW { ImVec2(55,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNWSE { ImVec2(91,0), ImVec2(17,22), ImVec2( 5, 0) }, // ImGuiMouseCursor_Hand + { ImVec2(109,0),ImVec2(13,15), ImVec2( 6, 7) }, // ImGuiMouseCursor_NotAllowed }; ImFontAtlas::ImFontAtlas() @@ -2636,8 +2646,8 @@ void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opa for (int i = 0; i < pack_rects.Size; i++) if (pack_rects[i].was_packed) { - user_rects[i].X = pack_rects[i].x; - user_rects[i].Y = pack_rects[i].y; + user_rects[i].X = (unsigned short)pack_rects[i].x; + user_rects[i].Y = (unsigned short)pack_rects[i].y; IM_ASSERT(pack_rects[i].w == user_rects[i].Width && pack_rects[i].h == user_rects[i].Height); atlas->TexHeight = ImMax(atlas->TexHeight, pack_rects[i].y + pack_rects[i].h); } @@ -2737,13 +2747,13 @@ static void ImFontAtlasBuildRenderLinesTexData(ImFontAtlas* atlas) { unsigned int* write_ptr = &atlas->TexPixelsRGBA32[r->X + ((r->Y + y) * atlas->TexWidth)]; for (unsigned int i = 0; i < pad_left; i++) - *(write_ptr + i) = IM_COL32_BLACK_TRANS; + *(write_ptr + i) = IM_COL32(255, 255, 255, 0); for (unsigned int i = 0; i < line_width; i++) *(write_ptr + pad_left + i) = IM_COL32_WHITE; for (unsigned int i = 0; i < pad_right; i++) - *(write_ptr + pad_left + line_width + i) = IM_COL32_BLACK_TRANS; + *(write_ptr + pad_left + line_width + i) = IM_COL32(255, 255, 255, 0); } // Calculate UVs for this line @@ -3079,8 +3089,8 @@ void ImFontGlyphRangesBuilder::AddText(const char* text, const char* text_end) void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges) { for (; ranges[0]; ranges += 2) - for (ImWchar c = ranges[0]; c <= ranges[1]; c++) - AddChar(c); + for (unsigned int c = ranges[0]; c <= ranges[1] && c <= IM_UNICODE_CODEPOINT_MAX; c++) //-V560 + AddChar((ImWchar)c); } void ImFontGlyphRangesBuilder::BuildRanges(ImVector* out_ranges) @@ -3522,7 +3532,7 @@ ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, cons } // Note: as with every ImDrawList drawing function, this expects that the font atlas texture is bound. -void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const +void ImFont::RenderChar(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, ImWchar c) const { const ImFontGlyph* glyph = FindGlyph(c); if (!glyph || !glyph->Visible) @@ -3530,26 +3540,25 @@ void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col if (glyph->Colored) col |= ~IM_COL32_A_MASK; float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f; - pos.x = IM_FLOOR(pos.x); - pos.y = IM_FLOOR(pos.y); + float x = IM_FLOOR(pos.x); + float y = IM_FLOOR(pos.y); draw_list->PrimReserve(6, 4); - draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col); + draw_list->PrimRectUV(ImVec2(x + glyph->X0 * scale, y + glyph->Y0 * scale), ImVec2(x + glyph->X1 * scale, y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col); } // Note: as with every ImDrawList drawing function, this expects that the font atlas texture is bound. -void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const +void ImFont::RenderText(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const { if (!text_end) text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls. // Align to be pixel perfect - pos.x = IM_FLOOR(pos.x); - pos.y = IM_FLOOR(pos.y); - float x = pos.x; - float y = pos.y; + float x = IM_FLOOR(pos.x); + float y = IM_FLOOR(pos.y); if (y > clip_rect.w) return; + const float start_x = x; const float scale = size / FontSize; const float line_height = FontSize * scale; const bool word_wrap_enabled = (wrap_width > 0.0f); @@ -3601,14 +3610,14 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature. if (!word_wrap_eol) { - word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - pos.x)); + word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - start_x)); if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity. word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below } if (s >= word_wrap_eol) { - x = pos.x; + x = start_x; y += line_height; word_wrap_eol = NULL; @@ -3639,7 +3648,7 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col { if (c == '\n') { - x = pos.x; + x = start_x; y += line_height; if (y > clip_rect.w) break; // break out of main loop @@ -3735,7 +3744,6 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col // - RenderArrow() // - RenderBullet() // - RenderCheckMark() -// - RenderMouseCursor() // - RenderArrowDockMenu() // - RenderArrowPointingAt() // - RenderRectFilledRangeH() @@ -3797,27 +3805,6 @@ void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float draw_list->PathStroke(col, 0, thickness); } -void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) -{ - if (mouse_cursor == ImGuiMouseCursor_None) - return; - IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT); - - ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas; - ImVec2 offset, size, uv[4]; - if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2])) - { - pos -= offset; - ImTextureID tex_id = font_atlas->TexID; - draw_list->PushTextureID(tex_id); - draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale, uv[2], uv[3], col_shadow); - draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale, uv[2], uv[3], col_shadow); - draw_list->AddImage(tex_id, pos, pos + size * scale, uv[2], uv[3], col_border); - draw_list->AddImage(tex_id, pos, pos + size * scale, uv[0], uv[1], col_fill); - draw_list->PopTextureID(); - } -} - // Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side. void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) { @@ -3908,22 +3895,33 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im draw_list->PathFillConvex(col); } -void ImGui::RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding) +void ImGui::RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding) { const bool fill_L = (inner.Min.x > outer.Min.x); const bool fill_R = (inner.Max.x < outer.Max.x); const bool fill_U = (inner.Min.y > outer.Min.y); const bool fill_D = (inner.Max.y < outer.Max.y); - if (fill_L) draw_list->AddRectFilled(ImVec2(outer.Min.x, inner.Min.y), ImVec2(inner.Min.x, inner.Max.y), col, rounding, (fill_U ? 0 : ImDrawFlags_RoundCornersTopLeft) | (fill_D ? 0 : ImDrawFlags_RoundCornersBottomLeft)); - if (fill_R) draw_list->AddRectFilled(ImVec2(inner.Max.x, inner.Min.y), ImVec2(outer.Max.x, inner.Max.y), col, rounding, (fill_U ? 0 : ImDrawFlags_RoundCornersTopRight) | (fill_D ? 0 : ImDrawFlags_RoundCornersBottomRight)); - if (fill_U) draw_list->AddRectFilled(ImVec2(inner.Min.x, outer.Min.y), ImVec2(inner.Max.x, inner.Min.y), col, rounding, (fill_L ? 0 : ImDrawFlags_RoundCornersTopLeft) | (fill_R ? 0 : ImDrawFlags_RoundCornersTopRight)); - if (fill_D) draw_list->AddRectFilled(ImVec2(inner.Min.x, inner.Max.y), ImVec2(inner.Max.x, outer.Max.y), col, rounding, (fill_L ? 0 : ImDrawFlags_RoundCornersBottomLeft) | (fill_R ? 0 : ImDrawFlags_RoundCornersBottomRight)); + if (fill_L) draw_list->AddRectFilled(ImVec2(outer.Min.x, inner.Min.y), ImVec2(inner.Min.x, inner.Max.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_U ? 0 : ImDrawFlags_RoundCornersTopLeft) | (fill_D ? 0 : ImDrawFlags_RoundCornersBottomLeft)); + if (fill_R) draw_list->AddRectFilled(ImVec2(inner.Max.x, inner.Min.y), ImVec2(outer.Max.x, inner.Max.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_U ? 0 : ImDrawFlags_RoundCornersTopRight) | (fill_D ? 0 : ImDrawFlags_RoundCornersBottomRight)); + if (fill_U) draw_list->AddRectFilled(ImVec2(inner.Min.x, outer.Min.y), ImVec2(inner.Max.x, inner.Min.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_L ? 0 : ImDrawFlags_RoundCornersTopLeft) | (fill_R ? 0 : ImDrawFlags_RoundCornersTopRight)); + if (fill_D) draw_list->AddRectFilled(ImVec2(inner.Min.x, inner.Max.y), ImVec2(inner.Max.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_L ? 0 : ImDrawFlags_RoundCornersBottomLeft) | (fill_R ? 0 : ImDrawFlags_RoundCornersBottomRight)); if (fill_L && fill_U) draw_list->AddRectFilled(ImVec2(outer.Min.x, outer.Min.y), ImVec2(inner.Min.x, inner.Min.y), col, rounding, ImDrawFlags_RoundCornersTopLeft); if (fill_R && fill_U) draw_list->AddRectFilled(ImVec2(inner.Max.x, outer.Min.y), ImVec2(outer.Max.x, inner.Min.y), col, rounding, ImDrawFlags_RoundCornersTopRight); if (fill_L && fill_D) draw_list->AddRectFilled(ImVec2(outer.Min.x, inner.Max.y), ImVec2(inner.Min.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersBottomLeft); if (fill_R && fill_D) draw_list->AddRectFilled(ImVec2(inner.Max.x, inner.Max.y), ImVec2(outer.Max.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersBottomRight); } +ImDrawFlags ImGui::CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold) +{ + bool round_l = r_in.Min.x <= r_outer.Min.x + threshold; + bool round_r = r_in.Max.x >= r_outer.Max.x - threshold; + bool round_t = r_in.Min.y <= r_outer.Min.y + threshold; + bool round_b = r_in.Max.y >= r_outer.Max.y - threshold; + return ImDrawFlags_RoundCornersNone + | ((round_t && round_l) ? ImDrawFlags_RoundCornersTopLeft : 0) | ((round_t && round_r) ? ImDrawFlags_RoundCornersTopRight : 0) + | ((round_b && round_l) ? ImDrawFlags_RoundCornersBottomLeft : 0) | ((round_b && round_r) ? ImDrawFlags_RoundCornersBottomRight : 0); +} + // Helper for ColorPicker4() // NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that. // Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding altogether. diff --git a/Code/ThirdParty/DearImgui/imgui_internal.h b/Code/ThirdParty/DearImgui/imgui_internal.h index 446b7ae..145236d 100644 --- a/Code/ThirdParty/DearImgui/imgui_internal.h +++ b/Code/ThirdParty/DearImgui/imgui_internal.h @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (internal structures/api) // You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility! @@ -18,6 +18,7 @@ Index of this file: // [SECTION] Generic helpers // [SECTION] ImDrawList support // [SECTION] Widgets support: flags, enums, data structures +// [SECTION] Inputs support // [SECTION] Clipper support // [SECTION] Navigation support // [SECTION] Columns support @@ -139,6 +140,7 @@ struct ImGuiTabBar; // Storage for a tab bar struct ImGuiTabItem; // Storage for a tab item (within a tab bar) struct ImGuiTable; // Storage for a table struct ImGuiTableColumn; // Storage for one column of a table +struct ImGuiTableInstanceData; // Storage for one instance of a same table struct ImGuiTableTempData; // Temporary storage for one table (one per table in the stack), shared between tables. struct ImGuiTableSettings; // Storage for a table .ini settings struct ImGuiTableColumnsSettings; // Storage for a column .ini settings @@ -150,6 +152,7 @@ struct ImGuiWindowSettings; // Storage for a window .ini settings (we ke typedef int ImGuiDataAuthority; // -> enum ImGuiDataAuthority_ // Enum: for storing the source authority (dock node vs window) of a field typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later) +typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag() typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns() @@ -199,27 +202,28 @@ namespace ImStb // Internal Drag and Drop payload types. String starting with '_' are reserved for Dear ImGui. #define IMGUI_PAYLOAD_TYPE_WINDOW "_IMWINDOW" // Payload == ImGuiWindow* -// Debug Logging -#ifndef IMGUI_DEBUG_LOG -#define IMGUI_DEBUG_LOG(_FMT,...) printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__) +// Debug Printing Into TTY +// (since IMGUI_VERSION_NUM >= 18729: IMGUI_DEBUG_LOG was reworked into IMGUI_DEBUG_PRINTF (and removed framecount from it). If you were using a #define IMGUI_DEBUG_LOG please rename) +#ifndef IMGUI_DEBUG_PRINTF +#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS +#define IMGUI_DEBUG_PRINTF(_FMT,...) printf(_FMT, __VA_ARGS__) +#else +#define IMGUI_DEBUG_PRINTF(_FMT,...) +#endif #endif -// Debug Logging for selected systems. Remove the '((void)0) //' to enable. -//#define IMGUI_DEBUG_LOG_POPUP IMGUI_DEBUG_LOG // Enable log -//#define IMGUI_DEBUG_LOG_NAV IMGUI_DEBUG_LOG // Enable log -//#define IMGUI_DEBUG_LOG_VIEWPORT IMGUI_DEBUG_LOG // Enable log -//#define IMGUI_DEBUG_LOG_DOCKING IMGUI_DEBUG_LOG // Enable log -#define IMGUI_DEBUG_LOG_POPUP(...) ((void)0) // Disable log -#define IMGUI_DEBUG_LOG_NAV(...) ((void)0) // Disable log -#define IMGUI_DEBUG_LOG_VIEWPORT(...) ((void)0) // Disable log -#define IMGUI_DEBUG_LOG_DOCKING(...) ((void)0) // Disable log +// Debug Logging for ShowDebugLogWindow(). This is designed for relatively rare events so please don't spam. +#define IMGUI_DEBUG_LOG(...) ImGui::DebugLog(__VA_ARGS__); +#define IMGUI_DEBUG_LOG_ACTIVEID(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_FOCUS(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_POPUP(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_NAV(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_IO(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_DOCKING(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventDocking) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_VIEWPORT(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventViewport) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) // Static Asserts -#if (__cplusplus >= 201100) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201100) #define IM_STATIC_ASSERT(_COND) static_assert(_COND, "") -#else -#define IM_STATIC_ASSERT(_COND) typedef char static_assertion_##__line__[(_COND)?1:-1] -#endif // "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much. // We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code. @@ -244,7 +248,7 @@ namespace ImStb #define IM_NEWLINE "\n" #endif #define IM_TABSIZE (4) -#define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + (_ALIGN - 1)) & ~(_ALIGN - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8 +#define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8 #define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose #define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255 #define IM_FLOOR(_VAL) ((float)(int)(_VAL)) // ImFloor() is not inlined in MSVC debug builds @@ -265,12 +269,19 @@ namespace ImStb #endif // Debug Tools -// Use 'Metrics->Tools->Item Picker' to break into the call-stack of a specific item. +// Use 'Metrics/Debugger->Tools->Item Picker' to break into the call-stack of a specific item. +// This will call IM_DEBUG_BREAK() which you may redefine yourself. See https://github.com/scottt/debugbreak for more reference. #ifndef IM_DEBUG_BREAK -#if defined(__clang__) -#define IM_DEBUG_BREAK() __builtin_debugtrap() -#elif defined (_MSC_VER) +#if defined (_MSC_VER) #define IM_DEBUG_BREAK() __debugbreak() +#elif defined(__clang__) +#define IM_DEBUG_BREAK() __builtin_debugtrap() +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#define IM_DEBUG_BREAK() __asm__ volatile("int $0x03") +#elif defined(__GNUC__) && defined(__thumb__) +#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xde01") +#elif defined(__GNUC__) && defined(__arm__) && !defined(__thumb__) +#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xe7f001f0"); #else #define IM_DEBUG_BREAK() IM_ASSERT(0) // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger! #endif @@ -284,7 +295,8 @@ namespace ImStb // - Helpers: Hashing // - Helpers: Sorting // - Helpers: Bit manipulation -// - Helpers: String, Formatting +// - Helpers: String +// - Helpers: Formatting // - Helpers: UTF-8 <> wchar conversions // - Helpers: ImVec2/ImVec4 operators // - Helpers: Maths @@ -302,12 +314,11 @@ namespace ImStb // Helpers: Hashing IMGUI_API ImGuiID ImHashData(const void* data, size_t data_size, ImU32 seed = 0); IMGUI_API ImGuiID ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0); -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS -static inline ImGuiID ImHash(const void* data, int size, ImU32 seed = 0) { return size ? ImHashData(data, (size_t)size, seed) : ImHashStr((const char*)data, 0, seed); } // [moved to ImHashStr/ImHashData in 1.68] -#endif // Helpers: Sorting -#define ImQsort qsort +#ifndef ImQsort +static inline void ImQsort(void* base, size_t count, size_t size_of_element, int(IMGUI_CDECL *compare_func)(void const*, void const*)) { if (count > 1) qsort(base, count, size_of_element, compare_func); } +#endif // Helpers: Color Blending IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b); @@ -317,7 +328,7 @@ static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & static inline bool ImIsPowerOfTwo(ImU64 v) { return v != 0 && (v & (v - 1)) == 0; } static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; } -// Helpers: String, Formatting +// Helpers: String IMGUI_API int ImStricmp(const char* str1, const char* str2); IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count); IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count); @@ -330,14 +341,20 @@ IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* bu IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end); IMGUI_API void ImStrTrimBlanks(char* str); IMGUI_API const char* ImStrSkipBlank(const char* str); +static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; } +static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; } + +// Helpers: Formatting IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3); IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3); +IMGUI_API void ImFormatStringToTempBuffer(const char** out_buf, const char** out_buf_end, const char* fmt, ...) IM_FMTARGS(3); +IMGUI_API void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end, const char* fmt, va_list args) IM_FMTLIST(3); IMGUI_API const char* ImParseFormatFindStart(const char* format); IMGUI_API const char* ImParseFormatFindEnd(const char* format); IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size); +IMGUI_API void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out, size_t fmt_out_size); +IMGUI_API const char* ImParseFormatSanitizeForScanning(const char* fmt_in, char* fmt_out, size_t fmt_out_size); IMGUI_API int ImParseFormatPrecision(const char* format, int default_value); -static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; } -static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; } // Helpers: UTF-8 <> wchar conversions IMGUI_API const char* ImTextCharToUtf8(char out_buf[5], unsigned int c); // return out_buf @@ -414,8 +431,8 @@ static inline double ImLog(double x) { return log(x); } static inline int ImAbs(int x) { return x < 0 ? -x : x; } static inline float ImAbs(float x) { return fabsf(x); } static inline double ImAbs(double x) { return fabs(x); } -static inline float ImSign(float x) { return (x < 0.0f) ? -1.0f : ((x > 0.0f) ? 1.0f : 0.0f); } // Sign operator - returns -1, 0 or 1 based on sign of argument -static inline double ImSign(double x) { return (x < 0.0) ? -1.0 : ((x > 0.0) ? 1.0 : 0.0); } +static inline float ImSign(float x) { return (x < 0.0f) ? -1.0f : (x > 0.0f) ? 1.0f : 0.0f; } // Sign operator - returns -1, 0 or 1 based on sign of argument +static inline double ImSign(double x) { return (x < 0.0) ? -1.0 : (x > 0.0) ? 1.0 : 0.0; } #ifdef IMGUI_ENABLE_SSE static inline float ImRsqrt(float x) { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(x))); } #else @@ -444,13 +461,15 @@ static inline float ImLengthSqr(const ImVec2& lhs) static inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); } static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return ImRsqrt(d); return fail_value; } static inline float ImFloor(float f) { return (float)(int)(f); } -static inline float ImFloorSigned(float f) { return (float)((f >= 0 || (int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf() +static inline float ImFloorSigned(float f) { return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf() static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); } +static inline ImVec2 ImFloorSigned(const ImVec2& v) { return ImVec2(ImFloorSigned(v.x), ImFloorSigned(v.y)); } static inline int ImModPositive(int a, int b) { return (a + b) % b; } static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; } static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); } static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; } static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } +static inline bool ImIsFloatAboveGuaranteedIntegerPrecision(float f) { return f <= -16777216 || f >= 16777216; } IM_MSVC_RUNTIME_CHECKS_RESTORE // Helpers: Geometry @@ -471,17 +490,17 @@ IM_MSVC_RUNTIME_CHECKS_OFF struct ImVec1 { float x; - ImVec1() { x = 0.0f; } - ImVec1(float _x) { x = _x; } + constexpr ImVec1() : x(0.0f) { } + constexpr ImVec1(float _x) : x(_x) { } }; // Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage) struct ImVec2ih { short x, y; - ImVec2ih() { x = y = 0; } - ImVec2ih(short _x, short _y) { x = _x; y = _y; } - explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs.y; } + constexpr ImVec2ih() : x(0), y(0) {} + constexpr ImVec2ih(short _x, short _y) : x(_x), y(_y) {} + constexpr explicit ImVec2ih(const ImVec2& rhs) : x((short)rhs.x), y((short)rhs.y) {} }; // Helper: ImRect (2D axis aligned bounding-box) @@ -491,10 +510,10 @@ struct IMGUI_API ImRect ImVec2 Min; // Upper-left ImVec2 Max; // Lower-right - ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {} - ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {} - ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {} - ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {} + constexpr ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {} + constexpr ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {} + constexpr ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {} + constexpr ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {} ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); } ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); } @@ -542,17 +561,18 @@ inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on ran // Helper: ImBitArray class (wrapper over ImBitArray functions) // Store 1-bit per value. -template -struct IMGUI_API ImBitArray +template +struct ImBitArray { ImU32 Storage[(BITCOUNT + 31) >> 5]; ImBitArray() { ClearAllBits(); } void ClearAllBits() { memset(Storage, 0, sizeof(Storage)); } void SetAllBits() { memset(Storage, 255, sizeof(Storage)); } - bool TestBit(int n) const { IM_ASSERT(n < BITCOUNT); return ImBitArrayTestBit(Storage, n); } - void SetBit(int n) { IM_ASSERT(n < BITCOUNT); ImBitArraySetBit(Storage, n); } - void ClearBit(int n) { IM_ASSERT(n < BITCOUNT); ImBitArrayClearBit(Storage, n); } - void SetBitRange(int n, int n2) { ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2) + bool TestBit(int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return ImBitArrayTestBit(Storage, n); } + void SetBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArraySetBit(Storage, n); } + void ClearBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArrayClearBit(Storage, n); } + void SetBitRange(int n, int n2) { n += OFFSET; n2 += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT && n2 > n && n2 <= BITCOUNT); ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2) + bool operator[](int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return ImBitArrayTestBit(Storage, n); } }; // Helper: ImBitVector @@ -623,7 +643,7 @@ struct ImSpanAllocator // Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object. typedef int ImPoolIdx; template -struct IMGUI_API ImPool +struct ImPool { ImVector Buf; // Contiguous data ImGuiStorage Map; // ID->Index @@ -660,7 +680,7 @@ struct IMGUI_API ImPool // We store the chunk size first, and align the final size on 4 bytes boundaries. // The tedious/zealous amount of casting is to avoid -Wcast-align warnings. template -struct IMGUI_API ImChunkStream +struct ImChunkStream { ImVector Buf; @@ -692,7 +712,6 @@ struct IMGUI_API ImChunkStream // // Rendering circles with an odd number of segments, while mathematically correct will produce // asymmetrical results on the raster grid. Therefore we're rounding N to next even number (7->8, 8->8, 9->10 etc.) -// #define IM_ROUNDUP_TO_EVEN(_V) ((((_V) + 1) / 2) * 2) #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 4 #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512 @@ -776,9 +795,9 @@ enum ImGuiItemStatusFlags_ #ifdef IMGUI_ENABLE_TEST_ENGINE , // [imgui_tests only] - ImGuiItemStatusFlags_Openable = 1 << 20, // + ImGuiItemStatusFlags_Openable = 1 << 20, // Item is an openable (e.g. TreeNode) ImGuiItemStatusFlags_Opened = 1 << 21, // - ImGuiItemStatusFlags_Checkable = 1 << 22, // + ImGuiItemStatusFlags_Checkable = 1 << 22, // Item is a checkable (e.g. CheckBox, MenuItem) ImGuiItemStatusFlags_Checked = 1 << 23 // #endif }; @@ -899,28 +918,6 @@ enum ImGuiPlotType ImGuiPlotType_Histogram }; -enum ImGuiInputSource -{ - ImGuiInputSource_None = 0, - ImGuiInputSource_Mouse, - ImGuiInputSource_Keyboard, - ImGuiInputSource_Gamepad, - ImGuiInputSource_Nav, // Stored in g.ActiveIdSource only - ImGuiInputSource_Clipboard, // Currently only used by InputText() - ImGuiInputSource_COUNT -}; - -// FIXME-NAV: Clarify/expose various repeat delay/rate -enum ImGuiInputReadMode -{ - ImGuiInputReadMode_Down, - ImGuiInputReadMode_Pressed, - ImGuiInputReadMode_Released, - ImGuiInputReadMode_Repeat, - ImGuiInputReadMode_RepeatSlow, - ImGuiInputReadMode_RepeatFast -}; - enum ImGuiPopupPositionPolicy { ImGuiPopupPositionPolicy_Default, @@ -953,8 +950,8 @@ enum ImGuiDataTypePrivate_ // Stacked color modifier, backup of modified data so we can restore it struct ImGuiColorMod { - ImGuiCol Col; - ImVec4 BackupValue; + ImGuiCol Col; + ImVec4 BackupValue; }; // Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable. @@ -1032,8 +1029,6 @@ struct IMGUI_API ImGuiInputTextState bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection bool Edited; // edited this frame ImGuiInputTextFlags Flags; // copy of InputText() flags - ImGuiInputTextCallback UserCallback; // " - void* UserCallbackData; // " ImGuiInputTextState() { memset(this, 0, sizeof(*this)); } void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); } @@ -1059,12 +1054,13 @@ struct ImGuiPopupData ImGuiID PopupId; // Set on OpenPopup() ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup() ImGuiWindow* SourceWindow; // Set on OpenPopup() copy of NavWindow at the time of opening the popup + int ParentNavLayer; // Resolved on BeginPopup(). Actually a ImGuiNavLayer type (declared down below), initialized to -1 which is not part of an enum, but serves well-enough as "not any of layers" value int OpenFrameCount; // Set on OpenPopup() ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items) ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse) ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup - ImGuiPopupData() { memset(this, 0, sizeof(*this)); OpenFrameCount = -1; } + ImGuiPopupData() { memset(this, 0, sizeof(*this)); ParentNavLayer = OpenFrameCount = -1; } }; enum ImGuiNextWindowDataFlags_ @@ -1172,6 +1168,7 @@ struct ImGuiShrinkWidthItem { int Index; float Width; + float InitialWidth; }; struct ImGuiPtrOrIndex @@ -1183,6 +1180,84 @@ struct ImGuiPtrOrIndex ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; } }; +//----------------------------------------------------------------------------- +// [SECTION] Inputs support +//----------------------------------------------------------------------------- + +typedef ImBitArray ImBitArrayForNamedKeys; + +enum ImGuiKeyPrivate_ +{ + ImGuiKey_LegacyNativeKey_BEGIN = 0, + ImGuiKey_LegacyNativeKey_END = 512, + ImGuiKey_Gamepad_BEGIN = ImGuiKey_GamepadStart, + ImGuiKey_Gamepad_END = ImGuiKey_GamepadRStickRight + 1 +}; + +enum ImGuiInputEventType +{ + ImGuiInputEventType_None = 0, + ImGuiInputEventType_MousePos, + ImGuiInputEventType_MouseWheel, + ImGuiInputEventType_MouseButton, + ImGuiInputEventType_MouseViewport, + ImGuiInputEventType_Key, + ImGuiInputEventType_Text, + ImGuiInputEventType_Focus, + ImGuiInputEventType_COUNT +}; + +enum ImGuiInputSource +{ + ImGuiInputSource_None = 0, + ImGuiInputSource_Mouse, + ImGuiInputSource_Keyboard, + ImGuiInputSource_Gamepad, + ImGuiInputSource_Clipboard, // Currently only used by InputText() + ImGuiInputSource_Nav, // Stored in g.ActiveIdSource only + ImGuiInputSource_COUNT +}; + +// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension? +// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor' +struct ImGuiInputEventMousePos { float PosX, PosY; }; +struct ImGuiInputEventMouseWheel { float WheelX, WheelY; }; +struct ImGuiInputEventMouseButton { int Button; bool Down; }; +struct ImGuiInputEventMouseViewport { ImGuiID HoveredViewportID; }; +struct ImGuiInputEventKey { ImGuiKey Key; bool Down; float AnalogValue; }; +struct ImGuiInputEventText { unsigned int Char; }; +struct ImGuiInputEventAppFocused { bool Focused; }; + +struct ImGuiInputEvent +{ + ImGuiInputEventType Type; + ImGuiInputSource Source; + union + { + ImGuiInputEventMousePos MousePos; // if Type == ImGuiInputEventType_MousePos + ImGuiInputEventMouseWheel MouseWheel; // if Type == ImGuiInputEventType_MouseWheel + ImGuiInputEventMouseButton MouseButton; // if Type == ImGuiInputEventType_MouseButton + ImGuiInputEventMouseViewport MouseViewport; // if Type == ImGuiInputEventType_MouseViewport + ImGuiInputEventKey Key; // if Type == ImGuiInputEventType_Key + ImGuiInputEventText Text; // if Type == ImGuiInputEventType_Text + ImGuiInputEventAppFocused AppFocused; // if Type == ImGuiInputEventType_Focus + }; + bool AddedByTestEngine; + + ImGuiInputEvent() { memset(this, 0, sizeof(*this)); } +}; + +// FIXME-NAV: Clarify/expose various repeat delay/rate +enum ImGuiNavReadMode +{ + ImGuiNavReadMode_Down, + ImGuiNavReadMode_Pressed, + ImGuiNavReadMode_Released, + ImGuiNavReadMode_Repeat, + ImGuiNavReadMode_RepeatSlow, + ImGuiNavReadMode_RepeatFast +}; + //----------------------------------------------------------------------------- // [SECTION] Clipper support //----------------------------------------------------------------------------- @@ -1203,6 +1278,7 @@ struct ImGuiListClipperRange struct ImGuiListClipperData { ImGuiListClipper* ListClipper; + float LossynessOffset; int StepNo; int ItemsFrozen; ImVector Ranges; @@ -1250,7 +1326,7 @@ enum ImGuiNavHighlightFlags_ enum ImGuiNavDirSourceFlags_ { ImGuiNavDirSourceFlags_None = 0, - ImGuiNavDirSourceFlags_RawKeyboard = 1 << 0, // Raw keyboard (not pulled from nav), faciliate use of some functions before we can unify nav and keys + ImGuiNavDirSourceFlags_RawKeyboard = 1 << 0, // Raw keyboard (not pulled from nav), facilitate use of some functions before we can unify nav and keys ImGuiNavDirSourceFlags_Keyboard = 1 << 1, ImGuiNavDirSourceFlags_PadDPad = 1 << 2, ImGuiNavDirSourceFlags_PadLStick = 1 << 3 @@ -1425,6 +1501,7 @@ struct IMGUI_API ImGuiDockNode ImVec2 SizeRef; // [Split node only] Last explicitly written-to size (overridden when using a splitter affecting the node), used to calculate Size. ImGuiAxis SplitAxis; // [Split node only] Split axis (X or Y) ImGuiWindowClass WindowClass; // [Root node only] + ImU32 LastBgColor; ImGuiWindow* HostWindow; ImGuiWindow* VisibleWindow; // Generally point to window which is ID is == SelectedTabID, but when CTRL+Tabbing this can be a different window. @@ -1442,6 +1519,7 @@ struct IMGUI_API ImGuiDockNode ImGuiDataAuthority AuthorityForViewport :3; bool IsVisible :1; // Set to false when the node is hidden (usually disabled as it has no active window) bool IsFocused :1; + bool IsBgDrawnThisFrame :1; bool HasCloseButton :1; // Provide space for a close button (if any of the docked window has one). Note that button may be hidden on window without one. bool HasWindowMenuButton :1; bool HasCentralNodeChild :1; @@ -1450,7 +1528,6 @@ struct IMGUI_API ImGuiDockNode bool WantMouseMove :1; // After a node extraction we need to transition toward moving the newly created host window bool WantHiddenTabBarUpdate :1; bool WantHiddenTabBarToggle :1; - bool MarkedForPosSizeWrite :1; // Update by DockNodeTreeUpdatePosSize() write-filtering ImGuiDockNode(ImGuiID id); ~ImGuiDockNode(); @@ -1588,8 +1665,24 @@ struct ImGuiSettingsHandler // [SECTION] Metrics, Debug Tools //----------------------------------------------------------------------------- +enum ImGuiDebugLogFlags_ +{ + // Event types + ImGuiDebugLogFlags_None = 0, + ImGuiDebugLogFlags_EventActiveId = 1 << 0, + ImGuiDebugLogFlags_EventFocus = 1 << 1, + ImGuiDebugLogFlags_EventPopup = 1 << 2, + ImGuiDebugLogFlags_EventNav = 1 << 3, + ImGuiDebugLogFlags_EventIO = 1 << 4, + ImGuiDebugLogFlags_EventDocking = 1 << 5, + ImGuiDebugLogFlags_EventViewport = 1 << 6, + ImGuiDebugLogFlags_EventMask_ = ImGuiDebugLogFlags_EventActiveId | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav | ImGuiDebugLogFlags_EventIO | ImGuiDebugLogFlags_EventDocking | ImGuiDebugLogFlags_EventViewport, + ImGuiDebugLogFlags_OutputToTTY = 1 << 10 // Also send output to TTY +}; + struct ImGuiMetricsConfig { + bool ShowDebugLog; bool ShowStackTool; bool ShowWindowsRects; bool ShowWindowsBeginOrder; @@ -1602,15 +1695,11 @@ struct ImGuiMetricsConfig ImGuiMetricsConfig() { - ShowStackTool = false; - ShowWindowsRects = false; - ShowWindowsBeginOrder = false; - ShowTablesRects = false; + ShowDebugLog = ShowStackTool = ShowWindowsRects = ShowWindowsBeginOrder = ShowTablesRects = false; ShowDrawCmdMesh = true; ShowDrawCmdBoundingBoxes = true; ShowDockingNodes = false; - ShowWindowsRectsType = -1; - ShowTablesRectsType = -1; + ShowWindowsRectsType = ShowTablesRectsType = -1; } }; @@ -1619,7 +1708,8 @@ struct ImGuiStackLevelInfo ImGuiID ID; ImS8 QueryFrameCount; // >= 1: Query in progress bool QuerySuccess; // Obtained result from DebugHookIdInfo() - char Desc[58]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?) + ImGuiDataType DataType : 8; + char Desc[57]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?) FIXME: Now that we added CTRL+C this should be fixed. ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); } }; @@ -1631,8 +1721,10 @@ struct ImGuiStackTool int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level ImGuiID QueryId; // ID to query details for ImVector Results; + bool CopyToClipboardOnCtrlC; + float CopyToClipboardLastTime; - ImGuiStackTool() { memset(this, 0, sizeof(*this)); } + ImGuiStackTool() { memset(this, 0, sizeof(*this)); CopyToClipboardLastTime = -FLT_MAX; } }; //----------------------------------------------------------------------------- @@ -1654,7 +1746,7 @@ struct ImGuiContextHook }; //----------------------------------------------------------------------------- -// [SECTION] ImGuiContext (main imgui context) +// [SECTION] ImGuiContext (main Dear ImGui context) //----------------------------------------------------------------------------- struct ImGuiContext @@ -1663,6 +1755,8 @@ struct ImGuiContext bool FontAtlasOwnedByContext; // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it. ImGuiIO IO; ImGuiPlatformIO PlatformIO; + ImVector InputEventsQueue; // Input events which will be tricked/written into IO structure. + ImVector InputEventsTrail; // Past input events processed in NewFrame(). This is to allow domain-specific application to access e.g mouse/pen trail. ImGuiStyle Style; ImGuiConfigFlags ConfigFlagsCurrFrame; // = g.IO.ConfigFlags at the time of NewFrame() ImGuiConfigFlags ConfigFlagsLastFrame; @@ -1718,10 +1812,6 @@ struct ImGuiContext bool ActiveIdHasBeenPressedBefore; // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch. bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state. bool ActiveIdHasBeenEditedThisFrame; - bool ActiveIdUsingMouseWheel; // Active widget will want to read mouse wheel. Blocks scrolling the underlying window. - ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it) - ImU32 ActiveIdUsingNavInputMask; // Active widget will want to read those nav inputs. - ImU64 ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array. ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior) ImGuiWindow* ActiveIdWindow; ImGuiInputSource ActiveIdSource; // Activating with mouse or nav (gamepad/keyboard) @@ -1733,6 +1823,12 @@ struct ImGuiContext ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation. float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation. + // Input Ownership + bool ActiveIdUsingMouseWheel; // Active widget will want to read mouse wheel. Blocks scrolling the underlying window. + ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it) + ImU32 ActiveIdUsingNavInputMask; // Active widget will want to read those nav inputs. + ImBitArrayForNamedKeys ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array. + // Next window/item data ImGuiItemFlags CurrentItemFlags; // == g.ItemFlagsStack.back() ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions @@ -1748,6 +1844,7 @@ struct ImGuiContext ImVectorGroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin() ImVectorOpenPopupStack; // Which popups are open (persistent) ImVectorBeginPopupStack; // Which level of BeginPopup() we are in (reset every frame) + int BeginMenuCount; // Viewports ImVector Viewports; // Active viewports (always 1+, and generally 1 unless multi-viewports are enabled). Each viewports hold their copy of ImDrawData. @@ -1760,7 +1857,7 @@ struct ImGuiContext int ViewportFrontMostStampCount; // Every time the front-most window changes, we stamp its viewport with an incrementing counter // Gamepad/keyboard Navigation - ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusWindow' + ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusedWindow' ImGuiID NavId; // Focused item for navigation ImGuiID NavFocusScopeId; // Identify a selection scope (selection code often wants to "clear other items" when landing on an item of the selection set) ImGuiID NavActivateId; // ~~ (g.ActiveId == 0) && IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0, also set when calling ActivateItem() @@ -1770,7 +1867,7 @@ struct ImGuiContext ImGuiActivateFlags NavActivateFlags; ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest). ImGuiID NavJustMovedToFocusScopeId; // Just navigated to this focus scope id (result of a successfully MoveRequest). - ImGuiKeyModFlags NavJustMovedToKeyMods; + ImGuiModFlags NavJustMovedToKeyMods; ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame. ImGuiActivateFlags NavNextActivateFlags; ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard. @@ -1791,7 +1888,7 @@ struct ImGuiContext bool NavMoveForwardToNextFrame; ImGuiNavMoveFlags NavMoveFlags; ImGuiScrollFlags NavMoveScrollFlags; - ImGuiKeyModFlags NavMoveKeyMods; + ImGuiModFlags NavMoveKeyMods; ImGuiDir NavMoveDir; // Direction of the move request (left/right/up/down) ImGuiDir NavMoveDirForDebug; ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename? @@ -1840,7 +1937,7 @@ struct ImGuiContext int ClipperTempDataStacked; ImVector ClipperTempData; - // Table + // Tables ImGuiTable* CurrentTable; int TablesTempDataStacked; // Temporary table data size (because we leave previous instances undestructed, we generally don't use TablesTempData.Size) ImVector TablesTempData; // Temporary table data (buffers reused/shared across instances, support nesting) @@ -1865,6 +1962,7 @@ struct ImGuiContext ImU32 ColorEditLastColor; // RGB value with alpha set to 0. ImVec4 ColorPickerRef; // Initial/reference color at the time of opening the color picker. ImGuiComboPreviewData ComboPreviewData; + float SliderGrabClickOffset; float SliderCurrentAccum; // Accumulated slider delta when using navigation controls. bool SliderCurrentAccumDirty; // Has the accumulated slider delta changed since last time we tried to apply it? bool DragCurrentAccumDirty; @@ -1879,9 +1977,9 @@ struct ImGuiContext ImVector MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once // Platform support - ImVec2 PlatformImePos; // Cursor position request & last passed to the OS Input Method Editor - ImVec2 PlatformImeLastPos; - ImGuiViewportP* PlatformImePosViewport; + ImGuiPlatformImeData PlatformImeData; // Data updated by current frame + ImGuiPlatformImeData PlatformImeDataPrev; // Previous frame data (when changing we will call io.SetPlatformImeDataFn + ImGuiID PlatformImeViewport; char PlatformLocaleDecimalPoint; // '.' or *localeconv()->decimal_point // Extensions @@ -1912,6 +2010,8 @@ struct ImGuiContext int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call. // Debug Tools + ImGuiDebugLogFlags DebugLogFlags; + ImGuiTextBuffer DebugLogBuf; bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker()) ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID ImGuiMetricsConfig DebugMetricsConfig; @@ -1922,10 +2022,10 @@ struct ImGuiContext int FramerateSecPerFrameIdx; int FramerateSecPerFrameCount; float FramerateSecPerFrameAccum; - int WantCaptureMouseNextFrame; // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags - int WantCaptureKeyboardNextFrame; + int WantCaptureMouseNextFrame; // Explicit capture override via SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard(). Default to -1. + int WantCaptureKeyboardNextFrame; // " int WantTextInputNextFrame; - char TempBuffer[1024 * 3 + 1]; // Temporary text buffer + ImVector TempBuffer; // Temporary text buffer ImGuiContext(ImFontAtlas* shared_font_atlas) { @@ -1967,10 +2067,6 @@ struct ImGuiContext ActiveIdHasBeenPressedBefore = false; ActiveIdHasBeenEditedBefore = false; ActiveIdHasBeenEditedThisFrame = false; - ActiveIdUsingMouseWheel = false; - ActiveIdUsingNavDirMask = 0x00; - ActiveIdUsingNavInputMask = 0x00; - ActiveIdUsingKeyInputMask = 0x00; ActiveIdClickOffset = ImVec2(-1, -1); ActiveIdWindow = NULL; ActiveIdSource = ImGuiInputSource_None; @@ -1982,7 +2078,13 @@ struct ImGuiContext LastActiveId = 0; LastActiveIdTimer = 0.0f; + ActiveIdUsingMouseWheel = false; + ActiveIdUsingNavDirMask = 0x00; + ActiveIdUsingNavInputMask = 0x00; + ActiveIdUsingKeyInputMask.ClearAllBits(); + CurrentItemFlags = ImGuiItemFlags_None; + BeginMenuCount = 0; CurrentDpiScale = 0.0f; CurrentViewport = NULL; @@ -1994,7 +2096,7 @@ struct ImGuiContext NavId = NavFocusScopeId = NavActivateId = NavActivateDownId = NavActivatePressedId = NavActivateInputId = 0; NavJustMovedToId = NavJustMovedToFocusScopeId = NavNextActivateId = 0; NavActivateFlags = NavNextActivateFlags = ImGuiActivateFlags_None; - NavJustMovedToKeyMods = ImGuiKeyModFlags_None; + NavJustMovedToKeyMods = ImGuiModFlags_None; NavInputSource = ImGuiInputSource_None; NavLayer = ImGuiNavLayer_Main; NavIdIsAlive = false; @@ -2010,7 +2112,7 @@ struct ImGuiContext NavMoveForwardToNextFrame = false; NavMoveFlags = ImGuiNavMoveFlags_None; NavMoveScrollFlags = ImGuiScrollFlags_None; - NavMoveKeyMods = ImGuiKeyModFlags_None; + NavMoveKeyMods = ImGuiModFlags_None; NavMoveDir = NavMoveDirForDebug = NavMoveClipDir = ImGuiDir_None; NavScoringDebugCount = 0; NavTabbingDir = 0; @@ -2045,6 +2147,7 @@ struct ImGuiContext ColorEditOptions = ImGuiColorEditFlags_DefaultOptions_; ColorEditLastHue = ColorEditLastSat = 0.0f; ColorEditLastColor = 0; + SliderGrabClickOffset = 0.0f; SliderCurrentAccum = 0.0f; SliderCurrentAccumDirty = false; DragCurrentAccumDirty = false; @@ -2056,8 +2159,9 @@ struct ImGuiContext TooltipOverrideCount = 0; TooltipSlowDelay = 0.50f; - PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX); - PlatformImePosViewport = 0; + PlatformImeData.InputPos = ImVec2(0.0f, 0.0f); + PlatformImeDataPrev.InputPos = ImVec2(-1.0f, -1.0f); // Different to ensure initial submission + PlatformImeViewport = 0; PlatformLocaleDecimalPoint = '.'; SettingsLoaded = false; @@ -2073,6 +2177,7 @@ struct ImGuiContext LogDepthRef = 0; LogDepthToExpand = LogDepthToExpandDefault = 2; + DebugLogFlags = ImGuiDebugLogFlags_OutputToTTY; DebugItemPickerActive = false; DebugItemPickerBreakId = 0; @@ -2080,7 +2185,6 @@ struct ImGuiContext FramerateSecPerFrameIdx = FramerateSecPerFrameCount = 0; FramerateSecPerFrameAccum = 0.0f; WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1; - memset(TempBuffer, 0, sizeof(TempBuffer)); } }; @@ -2103,9 +2207,11 @@ struct IMGUI_API ImGuiWindowTempData ImVec2 PrevLineSize; float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added). float PrevLineTextBaseOffset; + bool IsSameLine; ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.) ImVec1 ColumnsOffset; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API. ImVec1 GroupOffset; + ImVec2 CursorStartPosLossyness;// Record the loss of precision of CursorStartPos due to really large scrolling amount. This is used by clipper to compensentate and fix the most common use case of large scroll area. // Keyboard/Gamepad navigation ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1) @@ -2143,7 +2249,7 @@ struct IMGUI_API ImGuiWindow ImGuiID ID; // == ImHashStr(Name) ImGuiWindowFlags Flags, FlagsPreviousFrame; // See enum ImGuiWindowFlags_ ImGuiWindowClass WindowClass; // Advanced users only. Set with SetNextWindowClass() - ImGuiViewportP* Viewport; // Always set in Begin(), only inactive windows may have a NULL value here + ImGuiViewportP* Viewport; // Always set in Begin(). Inactive windows may have a NULL value here if their viewport was discarded. ImGuiID ViewportId; // We backup the viewport id (since the viewport may disappear or never be created if the window is inactive) ImVec2 ViewportPos; // We backup the viewport position (since the viewport may disappear or never be created if the window is inactive) int ViewportAllowPlatformMonitorExtend; // Reset to -1 every frame (index is guaranteed to be valid between NewFrame..EndFrame), only used in the Appearing frame of a tooltip/popup to enforce clamping to a given monitor @@ -2158,6 +2264,7 @@ struct IMGUI_API ImGuiWindow float WindowBorderSize; // Window border size at the time of Begin(). int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)! ImGuiID MoveId; // == window->GetID("#MOVE") + ImGuiID TabId; // == window->GetID("#TAB") ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window) ImVec2 Scroll; ImVec2 ScrollMax; @@ -2176,6 +2283,7 @@ struct IMGUI_API ImGuiWindow bool Appearing; // Set during the frame where the window is appearing (or re-appearing) bool Hidden; // Do not display (== HiddenFrames*** > 0) bool IsFallbackWindow; // Set on the "Debug##Default" window. + bool IsExplicitChild; // Set when passed _ChildWindow, left to false by BeginDocked() bool HasCloseButton; // Set when the window has a close button (p_open != NULL) signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3) short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs) @@ -2226,6 +2334,7 @@ struct IMGUI_API ImGuiWindow ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer) ImDrawList DrawListInst; ImGuiWindow* ParentWindow; // If we are a child _or_ popup _or_ docked window, this is pointing to our parent. Otherwise NULL. + ImGuiWindow* ParentWindowInBeginStack; ImGuiWindow* RootWindow; // Point to ourself or first ancestor that is not a child window. Doesn't cross through popups/dock nodes. ImGuiWindow* RootWindowPopupTree; // Point to ourself or first ancestor that is not a child window. Cross through popups parent<>child. ImGuiWindow* RootWindowDockTree; // Point to ourself or first ancestor that is not a child window. Cross through dock nodes. @@ -2260,9 +2369,6 @@ struct IMGUI_API ImGuiWindow ImGuiID GetID(const char* str, const char* str_end = NULL); ImGuiID GetID(const void* ptr); ImGuiID GetID(int n); - ImGuiID GetIDNoKeepAlive(const char* str, const char* str_end = NULL); - ImGuiID GetIDNoKeepAlive(const void* ptr); - ImGuiID GetIDNoKeepAlive(int n); ImGuiID GetIDFromRectangle(const ImRect& r_abs); // We don't use g.FontSize because the window may be != g.CurrentWidow. @@ -2307,6 +2413,7 @@ struct ImGuiTabItem float Offset; // Position relative to beginning of tab float Width; // Width currently displayed float ContentWidth; // Width of label, stored during BeginTabItem() call + float RequestedWidth; // Width optionally requested by caller, -1.0f is unused ImS32 NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable ImS16 IndexDuringLayout; // Index only used during TabBarLayout() @@ -2442,6 +2549,15 @@ struct ImGuiTableCellData ImGuiTableColumnIdx Column; // Column number }; +// Per-instance data that needs preserving across frames (seemingly most others do not need to be preserved aside from debug needs, does that needs they could be moved to ImGuiTableTempData ?) +struct ImGuiTableInstanceData +{ + float LastOuterHeight; // Outer height from last frame // FIXME: multi-instance issue (#3955) + float LastFirstRowHeight; // Height of first row from last frame // FIXME: possible multi-instance issue? + + ImGuiTableInstanceData() { LastOuterHeight = LastFirstRowHeight = 0.0f; } +}; + // FIXME-TABLE: more transient data could be stored in a per-stacked table structure: DrawSplitter, SortSpecs, incoming RowData struct IMGUI_API ImGuiTable { @@ -2484,11 +2600,10 @@ struct IMGUI_API ImGuiTable float CellPaddingY; float CellSpacingX1; // Spacing between non-bordered cells float CellSpacingX2; - float LastOuterHeight; // Outer height from last frame - float LastFirstRowHeight; // Height of first row from last frame float InnerWidth; // User value passed to BeginTable(), see comments at the top of BeginTable() for details. float ColumnsGivenWidth; // Sum of current column width float ColumnsAutoFitWidth; // Sum of ideal column width in order nothing to be clipped, used for auto-fitting and content width submission in outer window + float ColumnsStretchSumWeights; // Sum of weight of all enabled stretching columns float ResizedColumnNextWidth; float ResizeLockMinContentsX2; // Lock minimum contents width while resizing down in order to not create feedback loops. But we allow growing the table. float RefScale; // Reference scale to be able to rescale columns on font/dpi changes. @@ -2496,7 +2611,7 @@ struct IMGUI_API ImGuiTable ImRect InnerRect; // InnerRect but without decoration. As with OuterRect, for non-scrolling tables, InnerRect.Max.y is ImRect WorkRect; ImRect InnerClipRect; - ImRect BgClipRect; // We use this to cpu-clip cell background color fill + ImRect BgClipRect; // We use this to cpu-clip cell background color fill, evolve during the frame as we cross frozen rows boundaries ImRect Bg0ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG0/1 channel. This tends to be == OuterWindow->ClipRect at BeginTable() because output in BG0/BG1 is cpu-clipped ImRect Bg2ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG2 channel. This tends to be a correct, tight-fit, because output to BG2 are done by widgets relying on regular ClipRect. ImRect HostClipRect; // This is used to check if we can eventually merge our columns draw calls into the current draw call of the current window. @@ -2505,6 +2620,8 @@ struct IMGUI_API ImGuiTable ImGuiWindow* InnerWindow; // Window holding the table data (== OuterWindow or a child window) ImGuiTextBuffer ColumnsNames; // Contiguous buffer holding columns names ImDrawListSplitter* DrawSplitter; // Shortcut to TempData->DrawSplitter while in table. Isolate draw commands per columns to avoid switching clip rect constantly + ImGuiTableInstanceData InstanceDataFirst; + ImVector InstanceDataExtra; // FIXME-OPT: Using a small-vector pattern would be good. ImGuiTableColumnSortSpecs SortSpecsSingle; ImVector SortSpecsMulti; // FIXME-OPT: Using a small-vector pattern would be good. ImGuiTableSortSpecs SortSpecs; // Public facing sorts specs, this is what we return in TableGetSortSpecs() @@ -2633,6 +2750,7 @@ namespace ImGui IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window); IMGUI_API ImVec2 CalcWindowNextAutoFitSize(ImGuiWindow* window); IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy, bool dock_hierarchy); + IMGUI_API bool IsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent); IMGUI_API bool IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below); IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window); IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0); @@ -2648,6 +2766,9 @@ namespace ImGui IMGUI_API void BringWindowToFocusFront(ImGuiWindow* window); IMGUI_API void BringWindowToDisplayFront(ImGuiWindow* window); IMGUI_API void BringWindowToDisplayBack(ImGuiWindow* window); + IMGUI_API void BringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* above_window); + IMGUI_API int FindWindowDisplayIndex(ImGuiWindow* window); + IMGUI_API ImGuiWindow* FindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow* window); // Fonts, drawing IMGUI_API void SetCurrentFont(ImFont* font); @@ -2655,10 +2776,11 @@ namespace ImGui inline ImDrawList* GetForegroundDrawList(ImGuiWindow* window) { return GetForegroundDrawList(window->Viewport); } // Init - IMGUI_API void Initialize(ImGuiContext* context); - IMGUI_API void Shutdown(ImGuiContext* context); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext(). + IMGUI_API void Initialize(); + IMGUI_API void Shutdown(); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext(). // NewFrame + IMGUI_API void UpdateInputEvents(bool trickle_fast_inputs); IMGUI_API void UpdateHoveredWindowAndCaptureFlags(); IMGUI_API void StartMouseMovingWindow(ImGuiWindow* window); IMGUI_API void StartMouseMovingWindowOrNode(ImGuiWindow* window, ImGuiDockNode* node, bool undock_floating_node); @@ -2674,8 +2796,10 @@ namespace ImGui IMGUI_API void TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& old_pos, const ImVec2& new_pos); IMGUI_API void ScaleWindowsInViewport(ImGuiViewportP* viewport, float scale); IMGUI_API void DestroyPlatformWindow(ImGuiViewportP* viewport); + IMGUI_API void SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport); IMGUI_API void SetCurrentViewport(ImGuiWindow* window, ImGuiViewportP* viewport); - IMGUI_API const ImGuiPlatformMonitor* GetViewportPlatformMonitor(ImGuiViewport* viewport); + IMGUI_API const ImGuiPlatformMonitor* GetViewportPlatformMonitor(ImGuiViewport* viewport); + IMGUI_API ImGuiViewportP* FindHoveredViewportFromPlatformWindowStack(const ImVec2& mouse_platform_pos); // Settings IMGUI_API void MarkIniSettingsDirty(); @@ -2684,6 +2808,8 @@ namespace ImGui IMGUI_API ImGuiWindowSettings* CreateNewWindowSettings(const char* name); IMGUI_API ImGuiWindowSettings* FindWindowSettings(ImGuiID id); IMGUI_API ImGuiWindowSettings* FindOrCreateWindowSettings(const char* name); + IMGUI_API void AddSettingsHandler(const ImGuiSettingsHandler* handler); + IMGUI_API void RemoveSettingsHandler(const char* type_name); IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name); // Scrolling @@ -2719,7 +2845,7 @@ namespace ImGui // Basic Helpers for widget code IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = -1.0f); - IMGUI_API void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f); + inline void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f) { ItemSize(bb.GetSize(), text_baseline_y); } // FIXME: This is a misleading API since we expect CursorPos to be bb.Min. IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL, ImGuiItemFlags extra_flags = 0); IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id); IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id); @@ -2760,9 +2886,10 @@ namespace ImGui IMGUI_API void ClosePopupsExceptModals(); IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags); IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags); - IMGUI_API void BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags); + IMGUI_API void BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags); IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window); IMGUI_API ImGuiWindow* GetTopMostPopupModal(); + IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal(); IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow* window); IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy); @@ -2786,10 +2913,12 @@ namespace ImGui IMGUI_API void NavMoveRequestCancel(); IMGUI_API void NavMoveRequestApplyResult(); IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags); - IMGUI_API float GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode); - IMGUI_API ImVec2 GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f); + IMGUI_API const char* GetNavInputName(ImGuiNavInput n); + IMGUI_API float GetNavInputAmount(ImGuiNavInput n, ImGuiNavReadMode mode); + IMGUI_API ImVec2 GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiNavReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f); IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate); IMGUI_API void ActivateItem(ImGuiID id); // Remotely activate a button, checkbox, tree node etc. given its unique ID. activation is queued and processed on the next frame when the item is encountered again. + IMGUI_API void SetNavWindow(ImGuiWindow* window); IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel); // Focus Scope (WIP) @@ -2802,16 +2931,23 @@ namespace ImGui // Inputs // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions. + inline bool IsNamedKey(ImGuiKey key) { return key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END; } + inline bool IsLegacyKey(ImGuiKey key) { return key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_LegacyNativeKey_END; } + inline bool IsGamepadKey(ImGuiKey key) { return key >= ImGuiKey_Gamepad_BEGIN && key < ImGuiKey_Gamepad_END; } + IMGUI_API ImGuiKeyData* GetKeyData(ImGuiKey key); IMGUI_API void SetItemUsingMouseWheel(); IMGUI_API void SetActiveIdUsingNavAndKeys(); inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; } inline bool IsActiveIdUsingNavInput(ImGuiNavInput input) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; } - inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; IM_ASSERT(key < 64); return (g.ActiveIdUsingKeyInputMask & ((ImU64)1 << key)) != 0; } + inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; return g.ActiveIdUsingKeyInputMask[key]; } + inline void SetActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; g.ActiveIdUsingKeyInputMask.SetBit(key); } IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f); - inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { ImGuiContext& g = *GImGui; const int key_index = g.IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; } inline bool IsNavInputDown(ImGuiNavInput n) { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; } - inline bool IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm) { return (GetNavInputAmount(n, rm) > 0.0f); } - IMGUI_API ImGuiKeyModFlags GetMergedKeyModFlags(); + inline bool IsNavInputTest(ImGuiNavInput n, ImGuiNavReadMode rm) { return (GetNavInputAmount(n, rm) > 0.0f); } + IMGUI_API ImGuiModFlags GetMergedModFlags(); +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { IM_ASSERT(IsNamedKey(key)); return IsKeyPressed(key, repeat); } // [removed in 1.87] +#endif // Docking // (some functions are only declared in imgui.cpp, see Docking section) @@ -2821,6 +2957,7 @@ namespace ImGui IMGUI_API void DockContextRebuildNodes(ImGuiContext* ctx); IMGUI_API void DockContextNewFrameUpdateUndocking(ImGuiContext* ctx); IMGUI_API void DockContextNewFrameUpdateDocking(ImGuiContext* ctx); + IMGUI_API void DockContextEndFrame(ImGuiContext* ctx); IMGUI_API ImGuiID DockContextGenNodeID(ImGuiContext* ctx); IMGUI_API void DockContextQueueDock(ImGuiContext* ctx, ImGuiWindow* target, ImGuiDockNode* target_node, ImGuiWindow* payload, ImGuiDir split_dir, float split_ratio, bool split_outer); IMGUI_API void DockContextQueueUndockWindow(ImGuiContext* ctx, ImGuiWindow* window); @@ -2829,6 +2966,7 @@ namespace ImGui IMGUI_API bool DockNodeBeginAmendTabBar(ImGuiDockNode* node); IMGUI_API void DockNodeEndAmendTabBar(); inline ImGuiDockNode* DockNodeGetRootNode(ImGuiDockNode* node) { while (node->ParentNode) node = node->ParentNode; return node; } + inline bool DockNodeIsInHierarchyOf(ImGuiDockNode* node, ImGuiDockNode* parent) { while (node) { if (node == parent) return true; node = node->ParentNode; } return false; } inline int DockNodeGetDepth(const ImGuiDockNode* node) { int depth = 0; while (node->ParentNode) { node = node->ParentNode; depth++; } return depth; } inline ImGuiID DockNodeGetWindowMenuButtonId(const ImGuiDockNode* node) { return ImHashStr("#COLLAPSE", 0, node->ID); } inline ImGuiDockNode* GetWindowDockNode() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DockNode; } @@ -2863,6 +3001,7 @@ namespace ImGui IMGUI_API void DockBuilderFinish(ImGuiID node_id); // Drag and Drop + IMGUI_API bool IsDragDropActive(); IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id); IMGUI_API void ClearDragDrop(); IMGUI_API bool IsDragDropPayloadBeingAccepted(); @@ -2901,6 +3040,7 @@ namespace ImGui IMGUI_API void TableDrawBorders(ImGuiTable* table); IMGUI_API void TableDrawContextMenu(ImGuiTable* table); IMGUI_API void TableMergeDrawChannels(ImGuiTable* table); + inline ImGuiTableInstanceData* TableGetInstanceData(ImGuiTable* table, int instance_no) { if (instance_no == 0) return &table->InstanceDataFirst; return &table->InstanceDataExtra[instance_no - 1]; } IMGUI_API void TableSortSpecsSanitize(ImGuiTable* table); IMGUI_API void TableSortSpecsBuild(ImGuiTable* table); IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn* column); @@ -2926,7 +3066,7 @@ namespace ImGui IMGUI_API void TableSaveSettings(ImGuiTable* table); IMGUI_API void TableResetSettings(ImGuiTable* table); IMGUI_API ImGuiTableSettings* TableGetBoundSettings(ImGuiTable* table); - IMGUI_API void TableSettingsInstallHandler(ImGuiContext* context); + IMGUI_API void TableSettingsAddSettingsHandler(); IMGUI_API ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count); IMGUI_API ImGuiTableSettings* TableSettingsFindByID(ImGuiID id); @@ -2958,22 +3098,17 @@ namespace ImGui IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0); IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text. + IMGUI_API void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); // Render helpers (those functions don't access any ImGui state!) IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f); IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col); IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz); - IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col); IMGUI_API void RenderArrowDockMenu(ImDrawList* draw_list, ImVec2 p_min, float sz, ImU32 col); IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding); - IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding); - -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - // [1.71: 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while] - inline void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale=1.0f) { ImGuiWindow* window = GetCurrentWindow(); RenderArrow(window->DrawList, pos, GetColorU32(ImGuiCol_Text), dir, scale); } - inline void RenderBullet(ImVec2 pos) { ImGuiWindow* window = GetCurrentWindow(); RenderBullet(window->DrawList, pos, GetColorU32(ImGuiCol_Text)); } -#endif + IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding); + IMGUI_API ImDrawFlags CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold); // Widgets IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0); @@ -2982,7 +3117,7 @@ namespace ImGui IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_node); IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0); IMGUI_API void Scrollbar(ImGuiAxis axis); - IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float avail_v, float contents_v, ImDrawFlags flags); + IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags flags); IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec2& padding, const ImVec4& bg_col, const ImVec4& tint_col); IMGUI_API ImRect GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis); IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis); @@ -2996,7 +3131,7 @@ namespace ImGui IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0); IMGUI_API bool DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags); IMGUI_API bool SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb); - IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f); + IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f, ImU32 bg_col = 0); IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL); IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextItemOpen() data, if any. May return true when logging IMGUI_API void TreePushOverrideID(ImGuiID id); @@ -3008,14 +3143,14 @@ namespace ImGui template IMGUI_API T ScaleValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size); template IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, ImGuiSliderFlags flags); template IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb); - template IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v); + template IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v); template IMGUI_API bool CheckboxFlagsT(const char* label, T* flags, T flags_value); // Data type helpers IMGUI_API const ImGuiDataTypeInfo* DataTypeGetInfo(ImGuiDataType data_type); IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format); IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg_1, const void* arg_2); - IMGUI_API bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format); + IMGUI_API bool DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void* p_data, const char* format); IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void* arg_1, const void* arg_2); IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max); @@ -3043,12 +3178,15 @@ namespace ImGui IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window); IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window); + // Debug Log + IMGUI_API void DebugLog(const char* fmt, ...) IM_FMTARGS(1); + IMGUI_API void DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1); + // Debug Tools IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL); IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL); inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(g.LastItemData.Rect.Min, g.LastItemData.Rect.Max, col); } inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; } - IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas); IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end); IMGUI_API void DebugNodeColumns(ImGuiOldColumns* columns); @@ -3056,13 +3194,16 @@ namespace ImGui IMGUI_API void DebugNodeDrawList(ImGuiWindow* window, ImGuiViewportP* viewport, const ImDrawList* draw_list, const char* label); IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, const ImDrawList* draw_list, const ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb); IMGUI_API void DebugNodeFont(ImFont* font); + IMGUI_API void DebugNodeFontGlyph(ImFont* font, const ImFontGlyph* glyph); IMGUI_API void DebugNodeStorage(ImGuiStorage* storage, const char* label); IMGUI_API void DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label); IMGUI_API void DebugNodeTable(ImGuiTable* table); IMGUI_API void DebugNodeTableSettings(ImGuiTableSettings* settings); + IMGUI_API void DebugNodeInputTextState(ImGuiInputTextState* state); IMGUI_API void DebugNodeWindow(ImGuiWindow* window, const char* label); IMGUI_API void DebugNodeWindowSettings(ImGuiWindowSettings* settings); IMGUI_API void DebugNodeWindowsList(ImVector* windows, const char* label); + IMGUI_API void DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int windows_size, ImGuiWindow* parent_in_begin_stack); IMGUI_API void DebugNodeViewport(ImGuiViewportP* viewport); IMGUI_API void DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb); @@ -3080,7 +3221,9 @@ struct ImFontBuilderIO }; // Helper for font builder +#ifdef IMGUI_ENABLE_STB_TRUETYPE IMGUI_API const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype(); +#endif IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas); IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent); IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque); @@ -3104,7 +3247,8 @@ extern const char* ImGuiTestEngine_FindItemDebugLabel(ImGuiContext* ctx, ImGuiI #define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS) // Register item label and status flags (optional) #define IMGUI_TEST_ENGINE_LOG(_FMT,...) if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log #else -#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) ((void)0) +#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID) ((void)0) +#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) ((void)g) #endif //----------------------------------------------------------------------------- diff --git a/Code/ThirdParty/DearImgui/imgui_tables.cpp b/Code/ThirdParty/DearImgui/imgui_tables.cpp index 1c61180..c3e24af 100644 --- a/Code/ThirdParty/DearImgui/imgui_tables.cpp +++ b/Code/ThirdParty/DearImgui/imgui_tables.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (tables and columns code) /* @@ -24,7 +24,7 @@ Index of this file: */ // Navigating this file: -// - In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// - In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. // - With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. //----------------------------------------------------------------------------- @@ -361,6 +361,8 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG table->IsLayoutLocked = false; table->InnerWidth = inner_width; temp_data->UserOuterSize = outer_size; + if (instance_no > 0 && table->InstanceDataExtra.Size < instance_no) + table->InstanceDataExtra.push_back(ImGuiTableInstanceData()); // When not using a child window, WorkRect.Max will grow as we append contents. if (use_child_window) @@ -537,7 +539,7 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG if (table->RefScale != 0.0f && table->RefScale != new_ref_scale_unit) { const float scale_factor = new_ref_scale_unit / table->RefScale; - //IMGUI_DEBUG_LOG("[table] %08X RefScaleUnit %.3f -> %.3f, scaling width by %.3f\n", table->ID, table->RefScaleUnit, new_ref_scale_unit, scale_factor); + //IMGUI_DEBUG_PRINT("[table] %08X RefScaleUnit %.3f -> %.3f, scaling width by %.3f\n", table->ID, table->RefScaleUnit, new_ref_scale_unit, scale_factor); for (int n = 0; n < columns_count; n++) table->Columns[n].WidthRequest = table->Columns[n].WidthRequest * scale_factor; } @@ -886,6 +888,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) sum_width_requests += table->CellPaddingX * 2.0f; } table->ColumnsEnabledFixedCount = (ImGuiTableColumnIdx)count_fixed; + table->ColumnsStretchSumWeights = stretch_sum_weights; // [Part 4] Apply final widths based on requested widths const ImRect work_rect = table->WorkRect; @@ -933,9 +936,10 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) width_remaining_for_stretched_columns -= 1.0f; } + ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent); table->HoveredColumnBody = -1; table->HoveredColumnBorder = -1; - const ImRect mouse_hit_rect(table->OuterRect.Min.x, table->OuterRect.Min.y, table->OuterRect.Max.x, ImMax(table->OuterRect.Max.y, table->OuterRect.Min.y + table->LastOuterHeight)); + const ImRect mouse_hit_rect(table->OuterRect.Min.x, table->OuterRect.Min.y, table->OuterRect.Max.x, ImMax(table->OuterRect.Max.y, table->OuterRect.Min.y + table_instance->LastOuterHeight)); const bool is_hovering_table = ItemHoverable(mouse_hit_rect, 0); // [Part 6] Setup final position, offset, skip/clip states and clipping rectangles, detect hovered column @@ -1096,7 +1100,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) // [Part 10] Hit testing on borders if (table->Flags & ImGuiTableFlags_Resizable) TableUpdateBorders(table); - table->LastFirstRowHeight = 0.0f; + table_instance->LastFirstRowHeight = 0.0f; table->IsLayoutLocked = true; table->IsUsingHeaders = false; @@ -1141,10 +1145,11 @@ void ImGui::TableUpdateBorders(ImGuiTable* table) // use the final height from last frame. Because this is only affecting _interaction_ with columns, it is not // really problematic (whereas the actual visual will be displayed in EndTable() and using the current frame height). // Actual columns highlight/render will be performed in EndTable() and not be affected. + ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent); const float hit_half_width = TABLE_RESIZE_SEPARATOR_HALF_THICKNESS; const float hit_y1 = table->OuterRect.Min.y; - const float hit_y2_body = ImMax(table->OuterRect.Max.y, hit_y1 + table->LastOuterHeight); - const float hit_y2_head = hit_y1 + table->LastFirstRowHeight; + const float hit_y2_body = ImMax(table->OuterRect.Max.y, hit_y1 + table_instance->LastOuterHeight); + const float hit_y2_head = hit_y1 + table_instance->LastFirstRowHeight; for (int order_n = 0; order_n < table->ColumnsCount; order_n++) { @@ -1223,6 +1228,7 @@ void ImGui::EndTable() TableOpenContextMenu((int)table->HoveredColumnBody); // Finalize table height + ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent); inner_window->DC.PrevLineSize = temp_data->HostBackupPrevLineSize; inner_window->DC.CurrLineSize = temp_data->HostBackupCurrLineSize; inner_window->DC.CursorMaxPos = temp_data->HostBackupCursorMaxPos; @@ -1233,7 +1239,7 @@ void ImGui::EndTable() else if (!(flags & ImGuiTableFlags_NoHostExtendY)) table->OuterRect.Max.y = table->InnerRect.Max.y = ImMax(table->OuterRect.Max.y, inner_content_max_y); // Patch OuterRect/InnerRect height table->WorkRect.Max.y = ImMax(table->WorkRect.Max.y, table->OuterRect.Max.y); - table->LastOuterHeight = table->OuterRect.GetHeight(); + table_instance->LastOuterHeight = table->OuterRect.GetHeight(); // Setup inner scrolling range // FIXME: This ideally should be done earlier, in BeginTable() SetNextWindowContentSize call, just like writing to inner_window->DC.CursorMaxPos.y, @@ -1279,17 +1285,23 @@ void ImGui::EndTable() splitter->Merge(inner_window->DrawList); // Update ColumnsAutoFitWidth to get us ahead for host using our size to auto-resize without waiting for next BeginTable() - const float width_spacings = (table->OuterPaddingX * 2.0f) + (table->CellSpacingX1 + table->CellSpacingX2) * (table->ColumnsEnabledCount - 1); - table->ColumnsAutoFitWidth = width_spacings + (table->CellPaddingX * 2.0f) * table->ColumnsEnabledCount; + float auto_fit_width_for_fixed = 0.0f; + float auto_fit_width_for_stretched = 0.0f; + float auto_fit_width_for_stretched_min = 0.0f; for (int column_n = 0; column_n < table->ColumnsCount; column_n++) if (table->EnabledMaskByIndex & ((ImU64)1 << column_n)) { ImGuiTableColumn* column = &table->Columns[column_n]; - if ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && !(column->Flags & ImGuiTableColumnFlags_NoResize)) - table->ColumnsAutoFitWidth += column->WidthRequest; + float column_width_request = ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && !(column->Flags & ImGuiTableColumnFlags_NoResize)) ? column->WidthRequest : TableGetColumnWidthAuto(table, column); + if (column->Flags & ImGuiTableColumnFlags_WidthFixed) + auto_fit_width_for_fixed += column_width_request; else - table->ColumnsAutoFitWidth += TableGetColumnWidthAuto(table, column); + auto_fit_width_for_stretched += column_width_request; + if ((column->Flags & ImGuiTableColumnFlags_WidthStretch) && (column->Flags & ImGuiTableColumnFlags_NoResize) != 0) + auto_fit_width_for_stretched_min = ImMax(auto_fit_width_for_stretched_min, column_width_request / (column->StretchWeight / table->ColumnsStretchSumWeights)); } + const float width_spacings = (table->OuterPaddingX * 2.0f) + (table->CellSpacingX1 + table->CellSpacingX2) * (table->ColumnsEnabledCount - 1); + table->ColumnsAutoFitWidth = width_spacings + (table->CellPaddingX * 2.0f) * table->ColumnsEnabledCount + auto_fit_width_for_fixed + ImMax(auto_fit_width_for_stretched, auto_fit_width_for_stretched_min); // Update scroll if ((table->Flags & ImGuiTableFlags_ScrollX) == 0 && inner_window != outer_window) @@ -1569,18 +1581,21 @@ ImGuiTableColumnFlags ImGui::TableGetColumnFlags(int column_n) // Return the cell rectangle based on currently known height. // - Important: we generally don't know our row height until the end of the row, so Max.y will be incorrect in many situations. -// The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it. +// The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it, or in TableEndRow() when we locked that height. // - Important: if ImGuiTableFlags_PadOuterX is set but ImGuiTableFlags_PadInnerX is not set, the outer-most left and right // columns report a small offset so their CellBgRect can extend up to the outer border. +// FIXME: But the rendering code in TableEndRow() nullifies that with clamping required for scrolling. ImRect ImGui::TableGetCellBgRect(const ImGuiTable* table, int column_n) { const ImGuiTableColumn* column = &table->Columns[column_n]; float x1 = column->MinX; float x2 = column->MaxX; - if (column->PrevEnabledColumn == -1) - x1 -= table->CellSpacingX1; - if (column->NextEnabledColumn == -1) - x2 += table->CellSpacingX2; + //if (column->PrevEnabledColumn == -1) + // x1 -= table->OuterPaddingX; + //if (column->NextEnabledColumn == -1) + // x2 += table->OuterPaddingX; + x1 = ImMax(x1, table->WorkRect.Min.x); + x2 = ImMin(x2, table->WorkRect.Max.x); return ImRect(x1, table->RowPosY1, x2, table->RowPosY2); } @@ -1746,7 +1761,7 @@ void ImGui::TableEndRow(ImGuiTable* table) const bool unfreeze_rows_actual = (table->CurrentRow + 1 == table->FreezeRowsCount); const bool unfreeze_rows_request = (table->CurrentRow + 1 == table->FreezeRowsRequest); if (table->CurrentRow == 0) - table->LastFirstRowHeight = bg_y2 - bg_y1; + TableGetInstanceData(table, table->InstanceCurrent)->LastFirstRowHeight = bg_y2 - bg_y1; const bool is_visible = (bg_y2 >= table->InnerClipRect.Min.y && bg_y1 <= table->InnerClipRect.Max.y); if (is_visible) @@ -1797,10 +1812,12 @@ void ImGui::TableEndRow(ImGuiTable* table) ImGuiTableCellData* cell_data_end = &table->RowCellData[table->RowCellDataCurrent]; for (ImGuiTableCellData* cell_data = &table->RowCellData[0]; cell_data <= cell_data_end; cell_data++) { + // As we render the BG here we need to clip things (for layout we would not) + // FIXME: This cancels the OuterPadding addition done by TableGetCellBgRect(), need to keep it while rendering correctly while scrolling. const ImGuiTableColumn* column = &table->Columns[cell_data->Column]; ImRect cell_bg_rect = TableGetCellBgRect(table, cell_data->Column); cell_bg_rect.ClipWith(table->BgClipRect); - cell_bg_rect.Min.x = ImMax(cell_bg_rect.Min.x, column->ClipRect.Min.x); // So that first column after frozen one gets clipped + cell_bg_rect.Min.x = ImMax(cell_bg_rect.Min.x, column->ClipRect.Min.x); // So that first column after frozen one gets clipped when scrolling cell_bg_rect.Max.x = ImMin(cell_bg_rect.Max.x, column->MaxX); window->DrawList->AddRectFilled(cell_bg_rect.Min, cell_bg_rect.Max, cell_data->BgColor); } @@ -2083,7 +2100,7 @@ void ImGui::TableSetColumnWidth(int column_n, float width) if (column_0->WidthGiven == column_0_width || column_0->WidthRequest == column_0_width) return; - //IMGUI_DEBUG_LOG("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthGiven, column_0_width); + //IMGUI_DEBUG_PRINT("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthGiven, column_0_width); ImGuiTableColumn* column_1 = (column_0->NextEnabledColumn != -1) ? &table->Columns[column_0->NextEnabledColumn] : NULL; // In this surprisingly not simple because of how we support mixing Fixed and multiple Stretch columns. @@ -2353,7 +2370,7 @@ void ImGui::TableMergeDrawChannels(ImGuiTable* table) // Don't attempt to merge if there are multiple draw calls within the column ImDrawChannel* src_channel = &splitter->_Channels[channel_no]; - if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0) + if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0 && src_channel->_CmdBuffer.back().UserCallback == NULL) // Equivalent of PopUnusedDrawCmd() src_channel->_CmdBuffer.pop_back(); if (src_channel->_CmdBuffer.Size != 1) continue; @@ -2497,10 +2514,11 @@ void ImGui::TableDrawBorders(ImGuiTable* table) inner_drawlist->PushClipRect(table->Bg0ClipRectForDrawCmd.Min, table->Bg0ClipRectForDrawCmd.Max, false); // Draw inner border and resizing feedback + ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent); const float border_size = TABLE_BORDER_SIZE; const float draw_y1 = table->InnerRect.Min.y; const float draw_y2_body = table->InnerRect.Max.y; - const float draw_y2_head = table->IsUsingHeaders ? ImMin(table->InnerRect.Max.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table->LastFirstRowHeight) : draw_y1; + const float draw_y2_head = table->IsUsingHeaders ? ImMin(table->InnerRect.Max.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table_instance->LastFirstRowHeight) : draw_y1; if (table->Flags & ImGuiTableFlags_BordersInnerV) { for (int order_n = 0; order_n < table->ColumnsCount; order_n++) @@ -3422,9 +3440,8 @@ static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandle } } -void ImGui::TableSettingsInstallHandler(ImGuiContext* context) +void ImGui::TableSettingsAddSettingsHandler() { - ImGuiContext& g = *context; ImGuiSettingsHandler ini_handler; ini_handler.TypeName = "Table"; ini_handler.TypeHash = ImHashStr("Table"); @@ -3433,7 +3450,7 @@ void ImGui::TableSettingsInstallHandler(ImGuiContext* context) ini_handler.ReadLineFn = TableSettingsHandler_ReadLine; ini_handler.ApplyAllFn = TableSettingsHandler_ApplyAll; ini_handler.WriteAllFn = TableSettingsHandler_WriteAll; - g.SettingsHandlers.push_back(ini_handler); + AddSettingsHandler(&ini_handler); } //------------------------------------------------------------------------- @@ -3447,7 +3464,7 @@ void ImGui::TableSettingsInstallHandler(ImGuiContext* context) // Remove Table (currently only used by TestEngine) void ImGui::TableRemove(ImGuiTable* table) { - //IMGUI_DEBUG_LOG("TableRemove() id=0x%08X\n", table->ID); + //IMGUI_DEBUG_PRINT("TableRemove() id=0x%08X\n", table->ID); ImGuiContext& g = *GImGui; int table_idx = g.Tables.GetIndex(table); //memset(table->RawData.Data, 0, table->RawData.size_in_bytes()); @@ -3459,7 +3476,7 @@ void ImGui::TableRemove(ImGuiTable* table) // Free up/compact internal Table buffers for when it gets unused void ImGui::TableGcCompactTransientBuffers(ImGuiTable* table) { - //IMGUI_DEBUG_LOG("TableGcCompactTransientBuffers() id=0x%08X\n", table->ID); + //IMGUI_DEBUG_PRINT("TableGcCompactTransientBuffers() id=0x%08X\n", table->ID); ImGuiContext& g = *GImGui; IM_ASSERT(table->MemoryCompacted == false); table->SortSpecs.Specs = NULL; @@ -3503,7 +3520,7 @@ void ImGui::TableGcCompactSettings() // - DebugNodeTable() [Internal] //------------------------------------------------------------------------- -#ifndef IMGUI_DISABLE_METRICS_WINDOW +#ifndef IMGUI_DISABLE_DEBUG_TOOLS static const char* DebugNodeTableGetSizingPolicyDesc(ImGuiTableFlags sizing_policy) { @@ -3531,6 +3548,8 @@ void ImGui::DebugNodeTable(ImGuiTable* table) GetForegroundDrawList()->AddRect(GetItemRectMin(), GetItemRectMax(), IM_COL32(255, 255, 0, 255)); if (!open) return; + if (table->InstanceCurrent > 0) + ImGui::Text("** %d instances of same table! Some data below will refer to last instance.", table->InstanceCurrent + 1); bool clear_settings = SmallButton("Clear settings"); BulletText("OuterRect: Pos: (%.1f,%.1f) Size: (%.1f,%.1f) Sizing: '%s'", table->OuterRect.Min.x, table->OuterRect.Min.y, table->OuterRect.GetWidth(), table->OuterRect.GetHeight(), DebugNodeTableGetSizingPolicyDesc(table->Flags)); BulletText("ColumnsGivenWidth: %.1f, ColumnsAutoFitWidth: %.1f, InnerWidth: %.1f%s", table->ColumnsGivenWidth, table->ColumnsAutoFitWidth, table->InnerWidth, table->InnerWidth == 0.0f ? " (auto)" : ""); @@ -3595,7 +3614,7 @@ void ImGui::DebugNodeTableSettings(ImGuiTableSettings* settings) TreePop(); } -#else // #ifndef IMGUI_DISABLE_METRICS_WINDOW +#else // #ifndef IMGUI_DISABLE_DEBUG_TOOLS void ImGui::DebugNodeTable(ImGuiTable*) {} void ImGui::DebugNodeTableSettings(ImGuiTableSettings*) {} diff --git a/Code/ThirdParty/DearImgui/imgui_widgets.cpp b/Code/ThirdParty/DearImgui/imgui_widgets.cpp index d67fa3f..7cb9366 100644 --- a/Code/ThirdParty/DearImgui/imgui_widgets.cpp +++ b/Code/ThirdParty/DearImgui/imgui_widgets.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.86 WIP +// dear imgui, v1.88 // (widgets code) /* @@ -82,6 +82,7 @@ Index of this file: #pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind #pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked #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 +#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated #endif //------------------------------------------------------------------------- @@ -166,7 +167,21 @@ void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags) const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset); const float wrap_pos_x = window->DC.TextWrapPos; const bool wrap_enabled = (wrap_pos_x >= 0.0f); - if (text_end - text > 2000 && !wrap_enabled) + if (text_end - text <= 2000 || wrap_enabled) + { + // Common case + const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f; + const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width); + + ImRect bb(text_pos, text_pos + text_size); + ItemSize(text_size, 0.0f); + if (!ItemAdd(bb, 0)) + return; + + // Render (we don't hide text after ## in this end-user function) + RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width); + } + else { // Long text! // Perform manual coarse clipping to optimize for long multi-line text @@ -239,19 +254,6 @@ void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags) ItemSize(text_size, 0.0f); ItemAdd(bb, 0); } - else - { - const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f; - const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width); - - ImRect bb(text_pos, text_pos + text_size); - ItemSize(text_size, 0.0f); - if (!ItemAdd(bb, 0)) - return; - - // Render (we don't hide text after ## in this end-user function) - RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width); - } } void ImGui::TextUnformatted(const char* text, const char* text_end) @@ -274,9 +276,9 @@ void ImGui::TextV(const char* fmt, va_list args) return; // FIXME-OPT: Handle the %s shortcut? - ImGuiContext& g = *GImGui; - const char* text_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - TextEx(g.TempBuffer, text_end, ImGuiTextFlags_NoWidthForLargeClippedText); + const char* text, *text_end; + ImFormatStringToTempBufferV(&text, &text_end, fmt, args); + TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText); } void ImGui::TextColored(const ImVec4& col, const char* fmt, ...) @@ -357,8 +359,8 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args) const ImGuiStyle& style = g.Style; const float w = CalcItemWidth(); - const char* value_text_begin = &g.TempBuffer[0]; - const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + const char* value_text_begin, *value_text_end; + ImFormatStringToTempBufferV(&value_text_begin, &value_text_end, fmt, args); const ImVec2 value_size = CalcTextSize(value_text_begin, value_text_end, false); const ImVec2 label_size = CalcTextSize(label, NULL, true); @@ -393,8 +395,8 @@ void ImGui::BulletTextV(const char* fmt, va_list args) ImGuiContext& g = *GImGui; const ImGuiStyle& style = g.Style; - const char* text_begin = g.TempBuffer; - const char* text_end = text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + const char* text_begin, *text_end; + ImFormatStringToTempBufferV(&text_begin, &text_end, fmt, args); const ImVec2 label_size = CalcTextSize(text_begin, text_end, false); const ImVec2 total_size = ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x * 2) : 0.0f), label_size.y); // Empty text doesn't add padding ImVec2 pos = window->DC.CursorPos; @@ -546,13 +548,9 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool { // Poll buttons int mouse_button_clicked = -1; - int mouse_button_released = -1; if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseClicked[0]) { mouse_button_clicked = 0; } else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseClicked[1]) { mouse_button_clicked = 1; } else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseClicked[2]) { mouse_button_clicked = 2; } - if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseReleased[0]) { mouse_button_released = 0; } - else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseReleased[1]) { mouse_button_released = 1; } - else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseReleased[2]) { mouse_button_released = 2; } if (mouse_button_clicked != -1 && g.ActiveId != id) { @@ -577,15 +575,21 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool FocusWindow(window); } } - if ((flags & ImGuiButtonFlags_PressedOnRelease) && mouse_button_released != -1) + if (flags & ImGuiButtonFlags_PressedOnRelease) { - // Repeat mode trumps on release behavior - const bool has_repeated_at_least_once = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button_released] >= g.IO.KeyRepeatDelay; - if (!has_repeated_at_least_once) - pressed = true; - if (!(flags & ImGuiButtonFlags_NoNavFocus)) - SetFocusID(id, window); - ClearActiveID(); + int mouse_button_released = -1; + if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseReleased[0]) { mouse_button_released = 0; } + else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseReleased[1]) { mouse_button_released = 1; } + else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseReleased[2]) { mouse_button_released = 2; } + if (mouse_button_released != -1) + { + const bool has_repeated_at_least_once = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button_released] >= g.IO.KeyRepeatDelay; // Repeat mode trumps on release behavior + if (!has_repeated_at_least_once) + pressed = true; + if (!(flags & ImGuiButtonFlags_NoNavFocus)) + SetFocusID(id, window); + ClearActiveID(); + } } // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above). @@ -607,7 +611,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool if (g.NavActivateDownId == id) { bool nav_activated_by_code = (g.NavActivateId == id); - bool nav_activated_by_inputs = IsNavInputTest(ImGuiNavInput_Activate, (flags & ImGuiButtonFlags_Repeat) ? ImGuiInputReadMode_Repeat : ImGuiInputReadMode_Pressed); + bool nav_activated_by_inputs = IsNavInputTest(ImGuiNavInput_Activate, (flags & ImGuiButtonFlags_Repeat) ? ImGuiNavReadMode_Repeat : ImGuiNavReadMode_Pressed); if (nav_activated_by_code || nav_activated_by_inputs) { // Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button. @@ -731,6 +735,7 @@ bool ImGui::SmallButton(const char* label) // Then you can keep 'str_id' empty or the same for all your buttons (instead of creating a string based on a non-string id) bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg, ImGuiButtonFlags flags) { + ImGuiContext& g = *GImGui; ImGuiWindow* window = GetCurrentWindow(); if (window->SkipItems) return false; @@ -748,16 +753,17 @@ bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg, ImGuiBut bool hovered, held; bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags); + IMGUI_TEST_ENGINE_ITEM_INFO(id, str_id, g.LastItemData.StatusFlags); return pressed; } bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiButtonFlags flags) { + ImGuiContext& g = *GImGui; ImGuiWindow* window = GetCurrentWindow(); if (window->SkipItems) return false; - ImGuiContext& g = *GImGui; const ImGuiID id = window->GetID(str_id); const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); const float default_size = GetFrameHeight(); @@ -778,6 +784,7 @@ bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiBu RenderFrame(bb.Min, bb.Max, bg_col, true, g.Style.FrameRounding); RenderArrow(window->DrawList, bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), text_col, dir); + IMGUI_TEST_ENGINE_ITEM_INFO(id, str_id, g.LastItemData.StatusFlags); return pressed; } @@ -841,9 +848,8 @@ bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_no //bool is_dock_menu = (window->DockNodeAsHost && !window->Collapsed); ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); ImU32 text_col = GetColorU32(ImGuiCol_Text); - ImVec2 center = bb.GetCenter(); if (hovered || held) - window->DrawList->AddCircleFilled(center + ImVec2(0,-0.5f), g.FontSize * 0.5f + 1.0f, bg_col, 12); + window->DrawList->AddCircleFilled(bb.GetCenter() + ImVec2(0,-0.5f), g.FontSize * 0.5f + 1.0f, bg_col, 12); if (dock_node) RenderArrowDockMenu(window->DrawList, bb.Min + g.Style.FramePadding, g.FontSize, text_col); @@ -859,7 +865,7 @@ bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_no ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis) { - return window->GetIDNoKeepAlive(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY"); + return window->GetID(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY"); } // Return scrollbar rectangle, must only be called for corresponding axis if window->ScrollbarX/Y is set. @@ -880,9 +886,7 @@ void ImGui::Scrollbar(ImGuiAxis axis) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; - const ImGuiID id = GetWindowScrollbarID(window, axis); - KeepAliveID(id); // Calculate scrollbar bounding box ImRect bb = GetWindowScrollbarRect(window, axis); @@ -902,7 +906,9 @@ void ImGui::Scrollbar(ImGuiAxis axis) } float size_avail = window->InnerRect.Max[axis] - window->InnerRect.Min[axis]; float size_contents = window->ContentSize[axis] + window->WindowPadding[axis] * 2.0f; - ScrollbarEx(bb, id, axis, &window->Scroll[axis], size_avail, size_contents, rounding_corners); + ImS64 scroll = (ImS64)window->Scroll[axis]; + ScrollbarEx(bb, id, axis, &scroll, (ImS64)size_avail, (ImS64)size_contents, rounding_corners); + window->Scroll[axis] = (float)scroll; } // Vertical/Horizontal scrollbar @@ -911,13 +917,15 @@ void ImGui::Scrollbar(ImGuiAxis axis) // - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar // - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal. // Still, the code should probably be made simpler.. -bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float size_avail_v, float size_contents_v, ImDrawFlags flags) +bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, ImS64 size_avail_v, ImS64 size_contents_v, ImDrawFlags flags) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; if (window->SkipItems) return false; + KeepAliveID(id); + const float bb_frame_width = bb_frame.GetWidth(); const float bb_frame_height = bb_frame.GetHeight(); if (bb_frame_width <= 0.0f || bb_frame_height <= 0.0f) @@ -942,8 +950,8 @@ bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, floa // Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount) // But we maintain a minimum size in pixel to allow for the user to still aim inside. IM_ASSERT(ImMax(size_contents_v, size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers. - const float win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), 1.0f); - const float grab_h_pixels = ImClamp(scrollbar_size_v * (size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v); + const ImS64 win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), (ImS64)1); + const float grab_h_pixels = ImClamp(scrollbar_size_v * ((float)size_avail_v / (float)win_size_v), style.GrabMinSize, scrollbar_size_v); const float grab_h_norm = grab_h_pixels / scrollbar_size_v; // Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar(). @@ -951,13 +959,13 @@ bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, floa bool hovered = false; ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_NoNavFocus); - float scroll_max = ImMax(1.0f, size_contents_v - size_avail_v); - float scroll_ratio = ImSaturate(*p_scroll_v / scroll_max); + const ImS64 scroll_max = ImMax((ImS64)1, size_contents_v - size_avail_v); + float scroll_ratio = ImSaturate((float)*p_scroll_v / (float)scroll_max); float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; // Grab position in normalized space if (held && allow_interaction && grab_h_norm < 1.0f) { - float scrollbar_pos_v = bb.Min[axis]; - float mouse_pos_v = g.IO.MousePos[axis]; + const float scrollbar_pos_v = bb.Min[axis]; + const float mouse_pos_v = g.IO.MousePos[axis]; // Click position in scrollbar normalized space (0.0f->1.0f) const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v); @@ -977,10 +985,10 @@ bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, floa // Apply scroll (p_scroll_v will generally point on one member of window->Scroll) // It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position const float scroll_v_norm = ImSaturate((clicked_v_norm - g.ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f) / (1.0f - grab_h_norm)); - *p_scroll_v = IM_ROUND(scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v)); + *p_scroll_v = (ImS64)(scroll_v_norm * scroll_max); // Update values for rendering - scroll_ratio = ImSaturate(*p_scroll_v / scroll_max); + scroll_ratio = ImSaturate((float)*p_scroll_v / (float)scroll_max); grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; // Update distance to grab now that we have seeked and saturated @@ -1286,7 +1294,7 @@ void ImGui::Bullet() ImGuiContext& g = *GImGui; const ImGuiStyle& style = g.Style; - const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2), g.FontSize); + const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y * 2), g.FontSize); const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height)); ItemSize(bb); if (!ItemAdd(bb, 0)) @@ -1342,6 +1350,7 @@ void ImGui::NewLine() ImGuiContext& g = *GImGui; const ImGuiLayoutType backup_layout_type = window->DC.LayoutType; window->DC.LayoutType = ImGuiLayoutType_Vertical; + window->DC.IsSameLine = false; if (window->DC.CurrLineSize.y > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height. ItemSize(ImVec2(0, 0)); else @@ -1397,11 +1406,20 @@ void ImGui::SeparatorEx(ImGuiSeparatorFlags flags) if (g.GroupStack.Size > 0 && g.GroupStack.back().WindowID == window->ID) x1 += window->DC.Indent.x; + // FIXME-WORKRECT: In theory we should simply be using WorkRect.Min.x/Max.x everywhere but it isn't aesthetically what we want, + // need to introduce a variant of WorkRect for that purpose. (#4787) + if (ImGuiTable* table = g.CurrentTable) + { + x1 = table->Columns[table->CurrentColumn].MinX; + x2 = table->Columns[table->CurrentColumn].MaxX; + } + ImGuiOldColumns* columns = (flags & ImGuiSeparatorFlags_SpanAllColumns) ? window->DC.CurrentColumns : NULL; if (columns) PushColumnsBackground(); // We don't provide our width to the layout so that it doesn't get feed back into AutoFit + // FIXME: This prevents ->CursorMaxPos based bounding box evaluation from working (e.g. TableEndCell) const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y + thickness_draw)); ItemSize(ImVec2(0.0f, thickness_layout)); const bool item_visible = ItemAdd(bb, 0); @@ -1430,12 +1448,12 @@ void ImGui::Separator() // Those flags should eventually be overridable by the user ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal; - flags |= ImGuiSeparatorFlags_SpanAllColumns; + flags |= ImGuiSeparatorFlags_SpanAllColumns; // NB: this only applies to legacy Columns() api as they relied on Separator() a lot. SeparatorEx(flags); } // Using 'hover_visibility_delay' allows us to hide the highlight and mouse cursor for a short time, which can be convenient to reduce visual noise. -bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay) +bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay, ImU32 bg_col) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; @@ -1487,7 +1505,9 @@ bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float } } - // Render + // Render at new position + if (bg_col & IM_COL32_A_MASK) + window->DrawList->AddRectFilled(bb_render.Min, bb_render.Max, bg_col, 0.0f); const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator); window->DrawList->AddRectFilled(bb_render.Min, bb_render.Max, col, 0.0f); @@ -1528,7 +1548,7 @@ void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_exc width_excess -= width_to_remove_per_item * count_same_width; } - // Round width and redistribute remainder left-to-right (could make it an option of the function?) + // Round width and redistribute remainder // Ensure that e.g. the right-most tab of a shrunk tab-bar always reaches exactly at the same distance from the right-most edge of the tab bar separator. width_excess = 0.0f; for (int n = 0; n < count; n++) @@ -1537,10 +1557,13 @@ void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_exc width_excess += items[n].Width - width_rounded; items[n].Width = width_rounded; } - if (width_excess > 0.0f) + while (width_excess > 0.0f) for (int n = 0; n < count; n++) - if (items[n].Index < (int)(width_excess + 0.01f)) + if (items[n].Width + 1.0f <= items[n].InitialWidth) + { items[n].Width += 1.0f; + width_excess -= 1.0f; + } } //------------------------------------------------------------------------- @@ -1725,6 +1748,7 @@ bool ImGui::BeginComboPreview() window->DC.CursorPos = preview_data->PreviewRect.Min + g.Style.FramePadding; window->DC.CursorMaxPos = window->DC.CursorPos; window->DC.LayoutType = ImGuiLayoutType_Horizontal; + window->DC.IsSameLine = false; PushClipRect(preview_data->PreviewRect.Min, preview_data->PreviewRect.Max, true); return true; @@ -1750,6 +1774,7 @@ void ImGui::EndComboPreview() window->DC.CursorPosPrevLine = preview_data->BackupCursorPosPrevLine; window->DC.PrevLineTextBaseOffset = preview_data->BackupPrevLineTextBaseOffset; window->DC.LayoutType = preview_data->BackupLayout; + window->DC.IsSameLine = false; preview_data->PreviewRect = ImRect(); } @@ -1896,9 +1921,9 @@ static const char* PatchFormatStringFloatToInt(const char* fmt) #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS if (fmt_start == fmt && fmt_end[0] == 0) return "%d"; - ImGuiContext& g = *GImGui; - ImFormatString(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), "%.*s%%d%s", (int)(fmt_start - fmt), fmt, fmt_end); // Honor leading and trailing decorations, but lose alignment/precision. - return g.TempBuffer; + const char* tmp_format; + ImFormatStringToTempBuffer(&tmp_format, NULL, "%.*s%%d%s", (int)(fmt_start - fmt), fmt, fmt_end); // Honor leading and trailing decorations, but lose alignment/precision. + return tmp_format; #else IM_ASSERT(0 && "DragInt(): Invalid format string!"); // Old versions used a default parameter of "%.0f", please replace with e.g. "%d" #endif @@ -1987,24 +2012,10 @@ void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const // User can input math operators (e.g. +100) to edit a numerical values. // NB: This is _not_ a full expression evaluator. We should probably add one and replace this dumb mess.. -bool ImGui::DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format) +bool ImGui::DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void* p_data, const char* format) { while (ImCharIsBlankA(*buf)) buf++; - - // We don't support '-' op because it would conflict with inputing negative value. - // Instead you can use +-100 to subtract from an existing value - char op = buf[0]; - if (op == '+' || op == '*' || op == '/') - { - buf++; - while (ImCharIsBlankA(*buf)) - buf++; - } - else - { - op = 0; - } if (!buf[0]) return false; @@ -2013,66 +2024,20 @@ bool ImGui::DataTypeApplyOpFromText(const char* buf, const char* initial_value_b ImGuiDataTypeTempStorage data_backup; memcpy(&data_backup, p_data, type_info->Size); - if (format == NULL) + // Sanitize format + // For float/double we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in, so force them into %f and %lf + char format_sanitized[32]; + if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) format = type_info->ScanFmt; - - // FIXME-LEGACY: The aim is to remove those operators and write a proper expression evaluator at some point.. - int arg1i = 0; - if (data_type == ImGuiDataType_S32) - { - int* v = (int*)p_data; - int arg0i = *v; - float arg1f = 0.0f; - if (op && sscanf(initial_value_buf, format, &arg0i) < 1) - return false; - // Store operand in a float so we can use fractional value for multipliers (*1.1), but constant always parsed as integer so we can fit big integers (e.g. 2000000003) past float precision - if (op == '+') { if (sscanf(buf, "%d", &arg1i)) *v = (int)(arg0i + arg1i); } // Add (use "+-" to subtract) - else if (op == '*') { if (sscanf(buf, "%f", &arg1f)) *v = (int)(arg0i * arg1f); } // Multiply - else if (op == '/') { if (sscanf(buf, "%f", &arg1f) && arg1f != 0.0f) *v = (int)(arg0i / arg1f); } // Divide - else { if (sscanf(buf, format, &arg1i) == 1) *v = arg1i; } // Assign constant - } - else if (data_type == ImGuiDataType_Float) - { - // For floats we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in - format = "%f"; - float* v = (float*)p_data; - float arg0f = *v, arg1f = 0.0f; - if (op && sscanf(initial_value_buf, format, &arg0f) < 1) - return false; - if (sscanf(buf, format, &arg1f) < 1) - return false; - if (op == '+') { *v = arg0f + arg1f; } // Add (use "+-" to subtract) - else if (op == '*') { *v = arg0f * arg1f; } // Multiply - else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide - else { *v = arg1f; } // Assign constant - } - else if (data_type == ImGuiDataType_Double) - { - format = "%lf"; // scanf differentiate float/double unlike printf which forces everything to double because of ellipsis - double* v = (double*)p_data; - double arg0f = *v, arg1f = 0.0; - if (op && sscanf(initial_value_buf, format, &arg0f) < 1) - return false; - if (sscanf(buf, format, &arg1f) < 1) - return false; - if (op == '+') { *v = arg0f + arg1f; } // Add (use "+-" to subtract) - else if (op == '*') { *v = arg0f * arg1f; } // Multiply - else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide - else { *v = arg1f; } // Assign constant - } - else if (data_type == ImGuiDataType_U32 || data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64) - { - // All other types assign constant - // We don't bother handling support for legacy operators since they are a little too crappy. Instead we will later implement a proper expression evaluator in the future. - if (sscanf(buf, format, p_data) < 1) - return false; - } else + format = ImParseFormatSanitizeForScanning(format, format_sanitized, IM_ARRAYSIZE(format_sanitized)); + + // Small types need a 32-bit buffer to receive the result from scanf() + int v32 = 0; + if (sscanf(buf, format, type_info->Size >= 4 ? p_data : &v32) < 1) + return false; + if (type_info->Size < 4) { - // Small types need a 32-bit buffer to receive the result from scanf() - int v32; - if (sscanf(buf, format, &v32) < 1) - return false; if (data_type == ImGuiDataType_S8) *(ImS8*)p_data = (ImS8)ImClamp(v32, (int)IM_S8_MIN, (int)IM_S8_MAX); else if (data_type == ImGuiDataType_U8) @@ -2154,45 +2119,17 @@ static float GetMinimumStepAtDecimalPrecision(int decimal_precision) } template -static const char* ImAtoi(const char* src, TYPE* output) -{ - int negative = 0; - if (*src == '-') { negative = 1; src++; } - if (*src == '+') { src++; } - TYPE v = 0; - while (*src >= '0' && *src <= '9') - v = (v * 10) + (*src++ - '0'); - *output = negative ? -v : v; - return src; -} - -// Sanitize format -// - Zero terminate so extra characters after format (e.g. "%f123") don't confuse atof/atoi -// - stb_sprintf.h supports several new modifiers which format numbers in a way that also makes them incompatible atof/atoi. -static void SanitizeFormatString(const char* fmt, char* fmt_out, size_t fmt_out_size) -{ - IM_UNUSED(fmt_out_size); - const char* fmt_end = ImParseFormatFindEnd(fmt); - IM_ASSERT((size_t)(fmt_end - fmt + 1) < fmt_out_size); // Format is too long, let us know if this happens to you! - while (fmt < fmt_end) - { - char c = *(fmt++); - if (c != '\'' && c != '$' && c != '_') // Custom flags provided by stb_sprintf.h. POSIX 2008 also supports '. - *(fmt_out++) = c; - } - *fmt_out = 0; // Zero-terminate -} - -template TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, TYPE v) { + IM_UNUSED(data_type); + IM_ASSERT(data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double); const char* fmt_start = ImParseFormatFindStart(format); if (fmt_start[0] != '%' || fmt_start[1] == '%') // Don't apply if the value is not visible in the format string return v; // Sanitize format char fmt_sanitized[32]; - SanitizeFormatString(fmt_start, fmt_sanitized, IM_ARRAYSIZE(fmt_sanitized)); + ImParseFormatSanitizeForPrinting(fmt_start, fmt_sanitized, IM_ARRAYSIZE(fmt_sanitized)); fmt_start = fmt_sanitized; // Format value with our rounding, and read back @@ -2201,10 +2138,8 @@ TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, const char* p = v_str; while (*p == ' ') p++; - if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) - v = (TYPE)ImAtof(p); - else - ImAtoi(p, (SIGNEDTYPE*)&v); + v = (TYPE)ImAtof(p); + return v; } @@ -2254,7 +2189,7 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const else if (g.ActiveIdSource == ImGuiInputSource_Nav) { const int decimal_precision = is_floating_point ? ImParseFormatPrecision(format, 3) : 0; - adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 1.0f / 10.0f, 10.0f)[axis]; + adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiNavReadMode_RepeatFast, 1.0f / 10.0f, 10.0f)[axis]; v_speed = ImMax(v_speed, GetMinimumStepAtDecimalPrecision(decimal_precision)); } adjust_delta *= v_speed; @@ -2308,8 +2243,8 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const } // Round to user desired precision based on format string - if (!(flags & ImGuiSliderFlags_NoRoundToFormat)) - v_cur = RoundScalarWithFormatT(format, data_type, v_cur); + if (is_floating_point && !(flags & ImGuiSliderFlags_NoRoundToFormat)) + v_cur = RoundScalarWithFormatT(format, data_type, v_cur); // Preserve remainder after rounding has been applied. This also allow slow tweaking of values. g.DragCurrentAccumDirty = false; @@ -2408,26 +2343,20 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) format = PatchFormatStringFloatToInt(format); - // Tabbing or CTRL-clicking on Drag turns it into an InputText const bool hovered = ItemHoverable(frame_bb, id); bool temp_input_is_active = temp_input_allowed && TempInputIsActive(id); if (!temp_input_is_active) { + // Tabbing or CTRL-clicking on Drag turns it into an InputText const bool input_requested_by_tabbing = temp_input_allowed && (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing) != 0; const bool clicked = (hovered && g.IO.MouseClicked[0]); const bool double_clicked = (hovered && g.IO.MouseClickedCount[0] == 2); - if (input_requested_by_tabbing || clicked || double_clicked || g.NavActivateId == id || g.NavActivateInputId == id) - { - SetActiveID(id, window); - SetFocusID(id, window); - FocusWindow(window); - g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); - if (temp_input_allowed) - if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavActivateInputId == id) - temp_input_is_active = true; - } + const bool make_active = (input_requested_by_tabbing || clicked || double_clicked || g.NavActivateId == id || g.NavActivateInputId == id); + if (make_active && temp_input_allowed) + if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavActivateInputId == id) + temp_input_is_active = true; - // Experimental: simple click (without moving) turns Drag into an InputText + // (Optional) simple click (without moving) turns Drag into an InputText if (g.IO.ConfigDragClickToInputText && temp_input_allowed && !temp_input_is_active) if (g.ActiveId == id && hovered && g.IO.MouseReleased[0] && !IsMouseDragPastThreshold(0, g.IO.MouseDragThreshold * DRAG_MOUSE_THRESHOLD_FACTOR)) { @@ -2435,6 +2364,14 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, g.NavActivateFlags = ImGuiActivateFlags_PreferInput; temp_input_is_active = true; } + + if (make_active && !temp_input_is_active) + { + SetActiveID(id, window); + SetFocusID(id, window); + FocusWindow(window); + g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); + } } if (temp_input_is_active) @@ -2689,7 +2626,6 @@ float ImGui::ScaleRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, T v_max_fudged = -logarithmic_zero_epsilon; float result; - if (v_clamped <= v_min_fudged) result = 0.0f; // Workaround for values that are in-range but below our fudge else if (v_clamped >= v_max_fudged) @@ -2713,91 +2649,81 @@ float ImGui::ScaleRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, T return flipped ? (1.0f - result) : result; } - - // Linear slider - return (float)((FLOATTYPE)(SIGNEDTYPE)(v_clamped - v_min) / (FLOATTYPE)(SIGNEDTYPE)(v_max - v_min)); + else + { + // Linear slider + return (float)((FLOATTYPE)(SIGNEDTYPE)(v_clamped - v_min) / (FLOATTYPE)(SIGNEDTYPE)(v_max - v_min)); + } } // Convert a parametric position on a slider into a value v in the output space (the logical opposite of ScaleRatioFromValueT) template TYPE ImGui::ScaleValueFromRatioT(ImGuiDataType data_type, float t, TYPE v_min, TYPE v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_halfsize) { - if (v_min == v_max) + // We special-case the extents because otherwise our logarithmic fudging can lead to "mathematically correct" + // but non-intuitive behaviors like a fully-left slider not actually reaching the minimum value. Also generally simpler. + if (t <= 0.0f || v_min == v_max) return v_min; - const bool is_floating_point = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); + if (t >= 1.0f) + return v_max; - TYPE result; + TYPE result = (TYPE)0; if (is_logarithmic) { - // We special-case the extents because otherwise our fudging can lead to "mathematically correct" but non-intuitive behaviors like a fully-left slider not actually reaching the minimum value - if (t <= 0.0f) - result = v_min; - else if (t >= 1.0f) - result = v_max; - else - { - bool flipped = v_max < v_min; // Check if range is "backwards" - - // Fudge min/max to avoid getting silly results close to zero - FLOATTYPE v_min_fudged = (ImAbs((FLOATTYPE)v_min) < logarithmic_zero_epsilon) ? ((v_min < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_min; - FLOATTYPE v_max_fudged = (ImAbs((FLOATTYPE)v_max) < logarithmic_zero_epsilon) ? ((v_max < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_max; + // Fudge min/max to avoid getting silly results close to zero + FLOATTYPE v_min_fudged = (ImAbs((FLOATTYPE)v_min) < logarithmic_zero_epsilon) ? ((v_min < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_min; + FLOATTYPE v_max_fudged = (ImAbs((FLOATTYPE)v_max) < logarithmic_zero_epsilon) ? ((v_max < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_max; - if (flipped) - ImSwap(v_min_fudged, v_max_fudged); + const bool flipped = v_max < v_min; // Check if range is "backwards" + if (flipped) + ImSwap(v_min_fudged, v_max_fudged); - // Awkward special case - we need ranges of the form (-100 .. 0) to convert to (-100 .. -epsilon), not (-100 .. epsilon) - if ((v_max == 0.0f) && (v_min < 0.0f)) - v_max_fudged = -logarithmic_zero_epsilon; + // Awkward special case - we need ranges of the form (-100 .. 0) to convert to (-100 .. -epsilon), not (-100 .. epsilon) + if ((v_max == 0.0f) && (v_min < 0.0f)) + v_max_fudged = -logarithmic_zero_epsilon; - float t_with_flip = flipped ? (1.0f - t) : t; // t, but flipped if necessary to account for us flipping the range + float t_with_flip = flipped ? (1.0f - t) : t; // t, but flipped if necessary to account for us flipping the range - if ((v_min * v_max) < 0.0f) // Range crosses zero, so we have to do this in two parts - { - float zero_point_center = (-(float)ImMin(v_min, v_max)) / ImAbs((float)v_max - (float)v_min); // The zero point in parametric space - float zero_point_snap_L = zero_point_center - zero_deadzone_halfsize; - float zero_point_snap_R = zero_point_center + zero_deadzone_halfsize; - if (t_with_flip >= zero_point_snap_L && t_with_flip <= zero_point_snap_R) - result = (TYPE)0.0f; // Special case to make getting exactly zero possible (the epsilon prevents it otherwise) - else if (t_with_flip < zero_point_center) - result = (TYPE)-(logarithmic_zero_epsilon * ImPow(-v_min_fudged / logarithmic_zero_epsilon, (FLOATTYPE)(1.0f - (t_with_flip / zero_point_snap_L)))); - else - result = (TYPE)(logarithmic_zero_epsilon * ImPow(v_max_fudged / logarithmic_zero_epsilon, (FLOATTYPE)((t_with_flip - zero_point_snap_R) / (1.0f - zero_point_snap_R)))); - } - else if ((v_min < 0.0f) || (v_max < 0.0f)) // Entirely negative slider - result = (TYPE)-(-v_max_fudged * ImPow(-v_min_fudged / -v_max_fudged, (FLOATTYPE)(1.0f - t_with_flip))); + if ((v_min * v_max) < 0.0f) // Range crosses zero, so we have to do this in two parts + { + float zero_point_center = (-(float)ImMin(v_min, v_max)) / ImAbs((float)v_max - (float)v_min); // The zero point in parametric space + float zero_point_snap_L = zero_point_center - zero_deadzone_halfsize; + float zero_point_snap_R = zero_point_center + zero_deadzone_halfsize; + if (t_with_flip >= zero_point_snap_L && t_with_flip <= zero_point_snap_R) + result = (TYPE)0.0f; // Special case to make getting exactly zero possible (the epsilon prevents it otherwise) + else if (t_with_flip < zero_point_center) + result = (TYPE)-(logarithmic_zero_epsilon * ImPow(-v_min_fudged / logarithmic_zero_epsilon, (FLOATTYPE)(1.0f - (t_with_flip / zero_point_snap_L)))); else - result = (TYPE)(v_min_fudged * ImPow(v_max_fudged / v_min_fudged, (FLOATTYPE)t_with_flip)); + result = (TYPE)(logarithmic_zero_epsilon * ImPow(v_max_fudged / logarithmic_zero_epsilon, (FLOATTYPE)((t_with_flip - zero_point_snap_R) / (1.0f - zero_point_snap_R)))); } + else if ((v_min < 0.0f) || (v_max < 0.0f)) // Entirely negative slider + result = (TYPE)-(-v_max_fudged * ImPow(-v_min_fudged / -v_max_fudged, (FLOATTYPE)(1.0f - t_with_flip))); + else + result = (TYPE)(v_min_fudged * ImPow(v_max_fudged / v_min_fudged, (FLOATTYPE)t_with_flip)); } else { // Linear slider + const bool is_floating_point = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); if (is_floating_point) { result = ImLerp(v_min, v_max, t); } - else + else if (t < 1.0) { // - For integer values we want the clicking position to match the grab box so we round above // This code is carefully tuned to work with large values (e.g. high ranges of U64) while preserving this property.. // - Not doing a *1.0 multiply at the end of a range as it tends to be lossy. While absolute aiming at a large s64/u64 // range is going to be imprecise anyway, with this check we at least make the edge values matches expected limits. - if (t < 1.0) - { - FLOATTYPE v_new_off_f = (SIGNEDTYPE)(v_max - v_min) * t; - result = (TYPE)((SIGNEDTYPE)v_min + (SIGNEDTYPE)(v_new_off_f + (FLOATTYPE)(v_min > v_max ? -0.5 : 0.5))); - } - else - { - result = v_max; - } + FLOATTYPE v_new_off_f = (SIGNEDTYPE)(v_max - v_min) * t; + result = (TYPE)((SIGNEDTYPE)v_min + (SIGNEDTYPE)(v_new_off_f + (FLOATTYPE)(v_min > v_max ? -0.5 : 0.5))); } } return result; } -// FIXME: Move more of the code into SliderBehavior() +// FIXME: Try to move more of the code into shared SliderBehavior() template bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb) { @@ -2807,13 +2733,14 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; const bool is_logarithmic = (flags & ImGuiSliderFlags_Logarithmic) != 0; const bool is_floating_point = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); + const SIGNEDTYPE v_range = (v_min < v_max ? v_max - v_min : v_min - v_max); - const float grab_padding = 2.0f; + // Calculate bounds + const float grab_padding = 2.0f; // FIXME: Should be part of style. const float slider_sz = (bb.Max[axis] - bb.Min[axis]) - grab_padding * 2.0f; float grab_sz = style.GrabMinSize; - SIGNEDTYPE v_range = (v_min < v_max ? v_max - v_min : v_min - v_max); - if (!is_floating_point && v_range >= 0) // v_range < 0 may happen on integer overflows - grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize); // For integer sliders: if possible have the grab size represent 1 unit + if (!is_floating_point && v_range >= 0) // v_range < 0 may happen on integer overflows + grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize); // For integer sliders: if possible have the grab size represent 1 unit grab_sz = ImMin(grab_sz, slider_sz); const float slider_usable_sz = slider_sz - grab_sz; const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz * 0.5f; @@ -2844,7 +2771,17 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ else { const float mouse_abs_pos = g.IO.MousePos[axis]; - clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f; + if (g.ActiveIdIsJustActivated) + { + float grab_t = ScaleRatioFromValueT(data_type, *v, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize); + if (axis == ImGuiAxis_Y) + grab_t = 1.0f - grab_t; + const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t); + const bool clicked_around_grab = (mouse_abs_pos >= grab_pos - grab_sz * 0.5f - 1.0f) && (mouse_abs_pos <= grab_pos + grab_sz * 0.5f + 1.0f); // No harm being extra generous here. + g.SliderGrabClickOffset = (clicked_around_grab && is_floating_point) ? mouse_abs_pos - grab_pos : 0.0f; + } + if (slider_usable_sz > 0.0f) + clicked_t = ImSaturate((mouse_abs_pos - g.SliderGrabClickOffset - slider_usable_pos_min) / slider_usable_sz); if (axis == ImGuiAxis_Y) clicked_t = 1.0f - clicked_t; set_new_value = true; @@ -2858,7 +2795,7 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ g.SliderCurrentAccumDirty = false; } - const ImVec2 input_delta2 = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 0.0f, 0.0f); + const ImVec2 input_delta2 = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiNavReadMode_RepeatFast, 0.0f, 0.0f); float input_delta = (axis == ImGuiAxis_X) ? input_delta2.x : -input_delta2.y; if (input_delta != 0.0f) { @@ -2905,8 +2842,8 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ // Calculate what our "new" clicked_t will be, and thus how far we actually moved the slider, and subtract this from the accumulator TYPE v_new = ScaleValueFromRatioT(data_type, clicked_t, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize); - if (!(flags & ImGuiSliderFlags_NoRoundToFormat)) - v_new = RoundScalarWithFormatT(format, data_type, v_new); + if (is_floating_point && !(flags & ImGuiSliderFlags_NoRoundToFormat)) + v_new = RoundScalarWithFormatT(format, data_type, v_new); float new_clicked_t = ScaleRatioFromValueT(data_type, v_new, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize); if (delta > 0) @@ -2924,8 +2861,8 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ TYPE v_new = ScaleValueFromRatioT(data_type, clicked_t, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize); // Round to user desired precision based on format string - if (!(flags & ImGuiSliderFlags_NoRoundToFormat)) - v_new = RoundScalarWithFormatT(format, data_type, v_new); + if (is_floating_point && !(flags & ImGuiSliderFlags_NoRoundToFormat)) + v_new = RoundScalarWithFormatT(format, data_type, v_new); // Apply result if (*v != v_new) @@ -3026,21 +2963,24 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) format = PatchFormatStringFloatToInt(format); - // Tabbing or CTRL-clicking on Slider turns it into an input box const bool hovered = ItemHoverable(frame_bb, id); bool temp_input_is_active = temp_input_allowed && TempInputIsActive(id); if (!temp_input_is_active) { + // Tabbing or CTRL-clicking on Slider turns it into an input box const bool input_requested_by_tabbing = temp_input_allowed && (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing) != 0; const bool clicked = (hovered && g.IO.MouseClicked[0]); - if (input_requested_by_tabbing || clicked || g.NavActivateId == id || g.NavActivateInputId == id) + const bool make_active = (input_requested_by_tabbing || clicked || g.NavActivateId == id || g.NavActivateInputId == id); + if (make_active && temp_input_allowed) + if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || g.NavActivateInputId == id) + temp_input_is_active = true; + + if (make_active && !temp_input_is_active) { SetActiveID(id, window); SetFocusID(id, window); FocusWindow(window); g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); - if (temp_input_allowed && (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || g.NavActivateInputId == id)) - temp_input_is_active = true; } } @@ -3268,6 +3208,8 @@ bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, i // - ImParseFormatFindStart() [Internal] // - ImParseFormatFindEnd() [Internal] // - ImParseFormatTrimDecorations() [Internal] +// - ImParseFormatSanitizeForPrinting() [Internal] +// - ImParseFormatSanitizeForScanning() [Internal] // - ImParseFormatPrecision() [Internal] // - TempInputTextScalar() [Internal] // - InputScalar() @@ -3331,6 +3273,57 @@ const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, size_t buf_ return buf; } +// Sanitize format +// - Zero terminate so extra characters after format (e.g. "%f123") don't confuse atof/atoi +// - stb_sprintf.h supports several new modifiers which format numbers in a way that also makes them incompatible atof/atoi. +void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out, size_t fmt_out_size) +{ + const char* fmt_end = ImParseFormatFindEnd(fmt_in); + IM_UNUSED(fmt_out_size); + IM_ASSERT((size_t)(fmt_end - fmt_in + 1) < fmt_out_size); // Format is too long, let us know if this happens to you! + while (fmt_in < fmt_end) + { + char c = *fmt_in++; + if (c != '\'' && c != '$' && c != '_') // Custom flags provided by stb_sprintf.h. POSIX 2008 also supports '. + *(fmt_out++) = c; + } + *fmt_out = 0; // Zero-terminate +} + +// - For scanning we need to remove all width and precision fields "%3.7f" -> "%f". BUT don't strip types like "%I64d" which includes digits. ! "%07I64d" -> "%I64d" +const char* ImParseFormatSanitizeForScanning(const char* fmt_in, char* fmt_out, size_t fmt_out_size) +{ + const char* fmt_end = ImParseFormatFindEnd(fmt_in); + const char* fmt_out_begin = fmt_out; + IM_UNUSED(fmt_out_size); + IM_ASSERT((size_t)(fmt_end - fmt_in + 1) < fmt_out_size); // Format is too long, let us know if this happens to you! + bool has_type = false; + while (fmt_in < fmt_end) + { + char c = *fmt_in++; + if (!has_type && ((c >= '0' && c <= '9') || c == '.')) + continue; + has_type |= ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); // Stop skipping digits + if (c != '\'' && c != '$' && c != '_') // Custom flags provided by stb_sprintf.h. POSIX 2008 also supports '. + *(fmt_out++) = c; + } + *fmt_out = 0; // Zero-terminate + return fmt_out_begin; +} + +template +static const char* ImAtoi(const char* src, TYPE* output) +{ + int negative = 0; + if (*src == '-') { negative = 1; src++; } + if (*src == '+') { src++; } + TYPE v = 0; + while (*src >= '0' && *src <= '9') + v = (v * 10) + (*src++ - '0'); + *output = negative ? -v : v; + return src; +} + // Parse display precision back from the display format string // FIXME: This is still used by some navigation code path to infer a minimum tweak step, but we should aim to rework widgets so it isn't needed. int ImParseFormatPrecision(const char* fmt, int default_precision) @@ -3377,13 +3370,19 @@ bool ImGui::TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* return value_changed; } +static inline ImGuiInputTextFlags InputScalar_DefaultCharsFilter(ImGuiDataType data_type, const char* format) +{ + if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) + return ImGuiInputTextFlags_CharsScientific; + const char format_last_char = format[0] ? format[strlen(format) - 1] : 0; + return (format_last_char == 'x' || format_last_char == 'X') ? ImGuiInputTextFlags_CharsHexadecimal : ImGuiInputTextFlags_CharsDecimal; +} + // Note that Drag/Slider functions are only forwarding the min/max values clamping values if the ImGuiSliderFlags_AlwaysClamp flag is set! // This is intended: this way we allow CTRL+Click manual input to set a value out of bounds, for maximum flexibility. // However this may not be ideal for all uses, as some user code may break on out of bound values. bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format, const void* p_clamp_min, const void* p_clamp_max) { - ImGuiContext& g = *GImGui; - char fmt_buf[32]; char data_buf[32]; format = ImParseFormatTrimDecorations(format, fmt_buf, IM_ARRAYSIZE(fmt_buf)); @@ -3391,7 +3390,8 @@ bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImG ImStrTrimBlanks(data_buf); ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited; - flags |= ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal); + flags |= InputScalar_DefaultCharsFilter(data_type, format); + bool value_changed = false; if (TempInputText(bb, id, label, data_buf, IM_ARRAYSIZE(data_buf), flags)) { @@ -3401,7 +3401,7 @@ bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImG memcpy(&data_backup, p_data, data_type_size); // Apply new value (or operations) then clamp - DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, p_data, NULL); + DataTypeApplyFromText(data_buf, data_type, p_data, format); if (p_clamp_min || p_clamp_max) { if (p_clamp_min && p_clamp_max && DataTypeCompare(data_type, p_clamp_min, p_clamp_max) > 0) @@ -3434,12 +3434,12 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data char buf[64]; DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format); - bool value_changed = false; - if ((flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0) - flags |= ImGuiInputTextFlags_CharsDecimal; - flags |= ImGuiInputTextFlags_AutoSelectAll; - flags |= ImGuiInputTextFlags_NoMarkEdited; // We call MarkItemEdited() ourselves by comparing the actual data rather than the string. + // Testing ActiveId as a minor optimization as filtering is not needed until active + if (g.ActiveId == 0 && (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0) + flags |= InputScalar_DefaultCharsFilter(data_type, format); + flags |= ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited; // We call MarkItemEdited() ourselves by comparing the actual data rather than the string. + bool value_changed = false; if (p_step != NULL) { const float button_size = GetFrameHeight(); @@ -3448,7 +3448,7 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data PushID(label); SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2)); if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view - value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format); + value_changed = DataTypeApplyFromText(buf, data_type, p_data, format); // Step buttons const ImVec2 backup_frame_padding = style.FramePadding; @@ -3485,7 +3485,7 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data else { if (InputText(label, buf, IM_ARRAYSIZE(buf), flags)) - value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format); + value_changed = DataTypeApplyFromText(buf, data_type, p_data, format); } if (value_changed) MarkItemEdited(g.LastItemData.ID); @@ -3583,7 +3583,11 @@ bool ImGui::InputDouble(const char* label, double* v, double step, double step_f // - InputText() // - InputTextWithHint() // - InputTextMultiline() +// - InputTextGetCharInfo() [Internal] +// - InputTextReindexLines() [Internal] +// - InputTextReindexLinesRange() [Internal] // - InputTextEx() [Internal] +// - DebugNodeInputTextState() [Internal] //------------------------------------------------------------------------- bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) @@ -3690,11 +3694,11 @@ static int is_word_boundary_from_right(ImGuiInputTextState* obj, int idx) static int is_word_boundary_from_left(ImGuiInputTextState* obj, int idx) { if (obj->Flags & ImGuiInputTextFlags_Password) return 0; return idx > 0 ? (!is_separator(obj->TextW[idx - 1]) && is_separator(obj->TextW[idx])) : 1; } static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, int idx) { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; } static int STB_TEXTEDIT_MOVEWORDRIGHT_MAC(ImGuiInputTextState* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; } -static int STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; } #define STB_TEXTEDIT_MOVEWORDLEFT STB_TEXTEDIT_MOVEWORDLEFT_IMPL // They need to be #define for stb_textedit.h #ifdef __APPLE__ // FIXME: Move setting to IO structure #define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_MAC #else +static int STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; } #define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_WIN #endif @@ -3863,7 +3867,7 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f if (c < 0x20) { bool pass = false; - pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline)); + pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline)); // Note that an Enter KEY will emit \r and be ignored (we poll for KEY in InputText() code) pass |= (c == '\t' && (flags & ImGuiInputTextFlags_AllowTabInput)); if (!pass) return false; @@ -3941,6 +3945,41 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f return true; } +// Find the shortest single replacement we can make to get the new text from the old text. +// Important: needs to be run before TextW is rewritten with the new characters because calling STB_TEXTEDIT_GETCHAR() at the end. +// FIXME: Ideally we should transition toward (1) making InsertChars()/DeleteChars() update undo-stack (2) discourage (and keep reconcile) or obsolete (and remove reconcile) accessing buffer directly. +static void InputTextReconcileUndoStateAfterUserCallback(ImGuiInputTextState* state, const char* new_buf_a, int new_length_a) +{ + ImGuiContext& g = *GImGui; + const ImWchar* old_buf = state->TextW.Data; + const int old_length = state->CurLenW; + const int new_length = ImTextCountCharsFromUtf8(new_buf_a, new_buf_a + new_length_a); + g.TempBuffer.reserve_discard((new_length + 1) * sizeof(ImWchar)); + ImWchar* new_buf = (ImWchar*)(void*)g.TempBuffer.Data; + ImTextStrFromUtf8(new_buf, new_length + 1, new_buf_a, new_buf_a + new_length_a); + + const int shorter_length = ImMin(old_length, new_length); + int first_diff; + for (first_diff = 0; first_diff < shorter_length; first_diff++) + if (old_buf[first_diff] != new_buf[first_diff]) + break; + if (first_diff == old_length && first_diff == new_length) + return; + + int old_last_diff = old_length - 1; + int new_last_diff = new_length - 1; + for (; old_last_diff >= first_diff && new_last_diff >= first_diff; old_last_diff--, new_last_diff--) + if (old_buf[old_last_diff] != new_buf[new_last_diff]) + break; + + const int insert_len = new_last_diff - first_diff + 1; + const int delete_len = old_last_diff - first_diff + 1; + if (insert_len > 0 || delete_len > 0) + if (STB_TEXTEDIT_CHARTYPE* p = stb_text_createundo(&state->Stb.undostate, first_diff, delete_len, insert_len)) + for (int i = 0; i < delete_len; i++) + p[i] = ImStb::STB_TEXTEDIT_GETCHAR(state, first_diff + i); +} + // Edit a string of text // - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!". // This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match @@ -3972,7 +4011,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ if (is_resizable) IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag! - if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope, + if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope (including the scrollbar) BeginGroup(); const ImGuiID id = window->GetID(label); const ImVec2 label_size = CalcTextSize(label, NULL, true); @@ -3985,6 +4024,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ ImGuiWindow* draw_window = window; ImVec2 inner_size = frame_size; ImGuiItemStatusFlags item_status_flags = 0; + ImGuiLastItemData item_data_backup; if (is_multiline) { ImVec2 backup_pos = window->DC.CursorPos; @@ -3995,6 +4035,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ return false; } item_status_flags = g.LastItemData.StatusFlags; + item_data_backup = g.LastItemData; window->DC.CursorPos = backup_pos; // We reproduce the contents of BeginChildFrame() in order to provide 'label' so our window internal data are easier to read/debug. @@ -4002,8 +4043,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]); PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding); PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize); + PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); // Ensure no clip rect so mouse hover can reach FramePadding edges bool child_visible = BeginChildEx(label, id, frame_bb.GetSize(), true, ImGuiWindowFlags_NoMove); - PopStyleVar(2); + PopStyleVar(3); PopStyleColor(); if (!child_visible) { @@ -4058,17 +4100,21 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ state->InitialTextA.resize(buf_len + 1); // UTF-8. we use +1 to make sure that .Data is always pointing to at least an empty string. memcpy(state->InitialTextA.Data, buf, buf_len + 1); + // Preserve cursor position and undo/redo stack if we come back to same widget + // FIXME: Since we reworked this on 2022/06, may want to differenciate recycle_cursor vs recycle_undostate? + bool recycle_state = (state->ID == id && !init_changed_specs); + if (recycle_state && (state->CurLenA != buf_len || (state->TextAIsValid && strncmp(state->TextA.Data, buf, buf_len) != 0))) + recycle_state = false; + // Start edition const char* buf_end = NULL; + state->ID = id; state->TextW.resize(buf_size + 1); // wchar count <= UTF-8 count. we use +1 to make sure that .Data is always pointing to at least an empty string. state->TextA.resize(0); state->TextAIsValid = false; // TextA is not valid yet (we will display buf until then) state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, buf_size, buf, NULL, &buf_end); state->CurLenA = (int)(buf_end - buf); // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8. - // Preserve cursor position and undo/redo stack if we come back to same widget - // FIXME: For non-readonly widgets we might be able to require that TextAIsValid && TextA == buf ? (untested) and discard undo stack if user buffer has changed. - const bool recycle_state = (state->ID == id && !init_changed_specs); if (recycle_state) { // Recycle existing cursor/selection/undo stack but clamp position @@ -4077,7 +4123,6 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ } else { - state->ID = id; state->ScrollX = 0.0f; stb_textedit_initialize_state(&state->Stb, !is_multiline); } @@ -4109,11 +4154,17 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory)) g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down); g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel); - g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Home) | ((ImU64)1 << ImGuiKey_End); + SetActiveIdUsingKey(ImGuiKey_Home); + SetActiveIdUsingKey(ImGuiKey_End); if (is_multiline) - g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_PageUp) | ((ImU64)1 << ImGuiKey_PageDown); - if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput)) // Disable keyboard tabbing out as we will use the \t character. - g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Tab); + { + SetActiveIdUsingKey(ImGuiKey_PageUp); + SetActiveIdUsingKey(ImGuiKey_PageDown); + } + if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput)) // Disable keyboard tabbing out as we will use the \t character. + { + SetActiveIdUsingKey(ImGuiKey_Tab); + } } // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function) @@ -4171,8 +4222,6 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ state->Edited = false; state->BufCapacityA = buf_size; state->Flags = flags; - state->UserCallback = callback; - state->UserCallbackData = callback_user_data; // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget. // Down the line we should have a cleaner library-wide concept of Selected vs Active. @@ -4242,16 +4291,15 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ if (state->SelectedAllMouseLock && !io.MouseDown[0]) state->SelectedAllMouseLock = false; - // It is ill-defined whether the backend needs to send a \t character when pressing the TAB keys. - // Win32 and GLFW naturally do it but not SDL. + // We except backends to emit a Tab key but some also emit a Tab character which we ignore (#2467, #1336) + // (For Tab and Enter: Win32/SFML/Allegro are sending both keys and chars, GLFW and SDL are only sending keys. For Space they all send all threes) const bool ignore_char_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper); - if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly) - if (!io.InputQueueCharacters.contains('\t')) - { - unsigned int c = '\t'; // Insert TAB - if (InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard)) - state->OnKeyPressed((int)c); - } + if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressed(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly) + { + unsigned int c = '\t'; // Insert TAB + if (InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard)) + state->OnKeyPressed((int)c); + } // Process regular text input (before we check for Return because using some IME will effectively send a Return?) // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters. @@ -4262,7 +4310,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ { // Insert character if they pass filtering unsigned int c = (unsigned int)io.InputQueueCharacters[n]; - if (c == '\t' && io.KeyShift) + if (c == '\t') // Skip Tab, see above. continue; if (InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard)) state->OnKeyPressed((int)c); @@ -4278,41 +4326,40 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id) { IM_ASSERT(state != NULL); - IM_ASSERT(io.KeyMods == GetMergedKeyModFlags() && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods"); // We rarely do this check, but if anything let's do it here. const int row_count_per_page = ImMax((int)((inner_size.y - style.FramePadding.y) / g.FontSize), 1); state->Stb.row_count_per_page = row_count_per_page; const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0); const bool is_osx = io.ConfigMacOSXBehaviors; - const bool is_osx_shift_shortcut = is_osx && (io.KeyMods == (ImGuiKeyModFlags_Super | ImGuiKeyModFlags_Shift)); + const bool is_osx_shift_shortcut = is_osx && (io.KeyMods == (ImGuiModFlags_Super | ImGuiModFlags_Shift)); const bool is_wordmove_key_down = is_osx ? io.KeyAlt : io.KeyCtrl; // OS X style: Text editing cursor movement using Alt instead of Ctrl const bool is_startend_key_down = is_osx && io.KeySuper && !io.KeyCtrl && !io.KeyAlt; // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End - const bool is_ctrl_key_only = (io.KeyMods == ImGuiKeyModFlags_Ctrl); - const bool is_shift_key_only = (io.KeyMods == ImGuiKeyModFlags_Shift); - const bool is_shortcut_key = g.IO.ConfigMacOSXBehaviors ? (io.KeyMods == ImGuiKeyModFlags_Super) : (io.KeyMods == ImGuiKeyModFlags_Ctrl); + const bool is_ctrl_key_only = (io.KeyMods == ImGuiModFlags_Ctrl); + const bool is_shift_key_only = (io.KeyMods == ImGuiModFlags_Shift); + const bool is_shortcut_key = g.IO.ConfigMacOSXBehaviors ? (io.KeyMods == ImGuiModFlags_Super) : (io.KeyMods == ImGuiModFlags_Ctrl); - const bool is_cut = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection()); - const bool is_copy = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_C)) || (is_ctrl_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection()); - const bool is_paste = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_readonly; - const bool is_undo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Z)) && !is_readonly && is_undoable); - const bool is_redo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressedMap(ImGuiKey_Z))) && !is_readonly && is_undoable; + const bool is_cut = ((is_shortcut_key && IsKeyPressed(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressed(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection()); + const bool is_copy = ((is_shortcut_key && IsKeyPressed(ImGuiKey_C)) || (is_ctrl_key_only && IsKeyPressed(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection()); + const bool is_paste = ((is_shortcut_key && IsKeyPressed(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressed(ImGuiKey_Insert))) && !is_readonly; + const bool is_undo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Z)) && !is_readonly && is_undoable); + const bool is_redo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressed(ImGuiKey_Z))) && !is_readonly && is_undoable; // We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful. - const bool is_validate_enter = IsKeyPressedMap(ImGuiKey_Enter) || IsKeyPressedMap(ImGuiKey_KeyPadEnter); - const bool is_validate_nav = (IsNavInputTest(ImGuiNavInput_Activate, ImGuiInputReadMode_Pressed) && !IsKeyPressedMap(ImGuiKey_Space)) || IsNavInputTest(ImGuiNavInput_Input, ImGuiInputReadMode_Pressed); - const bool is_cancel = IsKeyPressedMap(ImGuiKey_Escape) || IsNavInputTest(ImGuiNavInput_Cancel, ImGuiInputReadMode_Pressed); - - if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_PageUp) && is_multiline) { state->OnKeyPressed(STB_TEXTEDIT_K_PGUP | k_mask); scroll_y -= row_count_per_page * g.FontSize; } - else if (IsKeyPressedMap(ImGuiKey_PageDown) && is_multiline) { state->OnKeyPressed(STB_TEXTEDIT_K_PGDOWN | k_mask); scroll_y += row_count_per_page * g.FontSize; } - else if (IsKeyPressedMap(ImGuiKey_Home)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_End)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_Delete) && !is_readonly) { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_Backspace) && !is_readonly) + const bool is_validate_enter = IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_KeypadEnter); + const bool is_validate_nav = (IsNavInputTest(ImGuiNavInput_Activate, ImGuiNavReadMode_Pressed) && !IsKeyPressed(ImGuiKey_Space)) || IsNavInputTest(ImGuiNavInput_Input, ImGuiNavReadMode_Pressed); + const bool is_cancel = IsKeyPressed(ImGuiKey_Escape) || IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed); + + if (IsKeyPressed(ImGuiKey_LeftArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); } + else if (IsKeyPressed(ImGuiKey_RightArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); } + else if (IsKeyPressed(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); } + else if (IsKeyPressed(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); } + else if (IsKeyPressed(ImGuiKey_PageUp) && is_multiline) { state->OnKeyPressed(STB_TEXTEDIT_K_PGUP | k_mask); scroll_y -= row_count_per_page * g.FontSize; } + else if (IsKeyPressed(ImGuiKey_PageDown) && is_multiline) { state->OnKeyPressed(STB_TEXTEDIT_K_PGDOWN | k_mask); scroll_y += row_count_per_page * g.FontSize; } + else if (IsKeyPressed(ImGuiKey_Home)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); } + else if (IsKeyPressed(ImGuiKey_End)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); } + else if (IsKeyPressed(ImGuiKey_Delete) && !is_readonly && !is_cut) { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); } + else if (IsKeyPressed(ImGuiKey_Backspace) && !is_readonly) { if (!state->HasSelection()) { @@ -4351,7 +4398,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ state->OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO); state->ClearSelection(); } - else if (is_shortcut_key && IsKeyPressedMap(ImGuiKey_A)) + else if (is_shortcut_key && IsKeyPressed(ImGuiKey_A)) { state->SelectAll(); state->CursorFollow = true; @@ -4410,11 +4457,11 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ } // Process callbacks and apply result back to user's buffer. + const char* apply_new_text = NULL; + int apply_new_text_length = 0; if (g.ActiveId == id) { IM_ASSERT(state != NULL); - const char* apply_new_text = NULL; - int apply_new_text_length = 0; if (cancel_edit) { // Restore initial value. Only return true if restoring to the initial value changes the current buffer contents. @@ -4433,22 +4480,24 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ } } + // Apply ASCII value + if (!is_readonly) + { + state->TextAIsValid = true; + state->TextA.resize(state->TextW.Size * 4 + 1); + ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL); + } + // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame. // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail. // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize). - bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0); + const bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0); if (apply_edit_back_to_user_buffer) { // Apply new value immediately - copy modified buffer back // Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer // FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect. // FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks. - if (!is_readonly) - { - state->TextAIsValid = true; - state->TextA.resize(state->TextW.Size * 4 + 1); - ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL); - } // User callback if ((flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory | ImGuiInputTextFlags_CallbackEdit | ImGuiInputTextFlags_CallbackAlways)) != 0) @@ -4457,18 +4506,18 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ // The reason we specify the usage semantic (Completion/History) is that Completion needs to disable keyboard TABBING at the moment. ImGuiInputTextFlags event_flag = 0; - ImGuiKey event_key = ImGuiKey_COUNT; - if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressedMap(ImGuiKey_Tab)) + ImGuiKey event_key = ImGuiKey_None; + if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressed(ImGuiKey_Tab)) { event_flag = ImGuiInputTextFlags_CallbackCompletion; event_key = ImGuiKey_Tab; } - else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_UpArrow)) + else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressed(ImGuiKey_UpArrow)) { event_flag = ImGuiInputTextFlags_CallbackHistory; event_key = ImGuiKey_UpArrow; } - else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_DownArrow)) + else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressed(ImGuiKey_DownArrow)) { event_flag = ImGuiInputTextFlags_CallbackHistory; event_key = ImGuiKey_DownArrow; @@ -4490,8 +4539,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ callback_data.Flags = flags; callback_data.UserData = callback_user_data; + char* callback_buf = is_readonly ? buf : state->TextA.Data; callback_data.EventKey = event_key; - callback_data.Buf = state->TextA.Data; + callback_data.Buf = callback_buf; callback_data.BufTextLen = state->CurLenA; callback_data.BufSize = state->BufCapacityA; callback_data.BufDirty = false; @@ -4506,7 +4556,8 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ callback(&callback_data); // Read back what user may have modified - IM_ASSERT(callback_data.Buf == state->TextA.Data); // Invalid to modify those fields + callback_buf = is_readonly ? buf : state->TextA.Data; // Pointer may have been invalidated by a resize callback + IM_ASSERT(callback_data.Buf == callback_buf); // Invalid to modify those fields IM_ASSERT(callback_data.BufSize == state->BufCapacityA); IM_ASSERT(callback_data.Flags == flags); const bool buf_dirty = callback_data.BufDirty; @@ -4516,8 +4567,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ if (buf_dirty) { IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text! + InputTextReconcileUndoStateAfterUserCallback(state, callback_data.Buf, callback_data.BufTextLen); // FIXME: Move the rest of this block inside function and rename to InputTextReconcileStateAfterUserCallback() ? if (callback_data.BufTextLen > backup_current_text_length && is_resizable) - state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length)); + state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length)); // Worse case scenario resize state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, callback_data.Buf, NULL); state->CurLenA = callback_data.BufTextLen; // Assume correct length and valid UTF-8 from user, saves us an extra strlen() state->CursorAnimReset(); @@ -4533,39 +4585,37 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ } } - // Copy result to user buffer - if (apply_new_text) - { - // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size - // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used - // without any storage on user's side. - IM_ASSERT(apply_new_text_length >= 0); - if (is_resizable) - { - ImGuiInputTextCallbackData callback_data; - callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize; - callback_data.Flags = flags; - callback_data.Buf = buf; - callback_data.BufTextLen = apply_new_text_length; - callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1); - callback_data.UserData = callback_user_data; - callback(&callback_data); - buf = callback_data.Buf; - buf_size = callback_data.BufSize; - apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1); - IM_ASSERT(apply_new_text_length <= buf_size); - } - //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length); + // Clear temporary user storage + state->Flags = ImGuiInputTextFlags_None; + } - // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size. - ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size)); - value_changed = true; + // Copy result to user buffer. This can currently only happen when (g.ActiveId == id) + if (apply_new_text != NULL) + { + // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size + // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used + // without any storage on user's side. + IM_ASSERT(apply_new_text_length >= 0); + if (is_resizable) + { + ImGuiInputTextCallbackData callback_data; + callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize; + callback_data.Flags = flags; + callback_data.Buf = buf; + callback_data.BufTextLen = apply_new_text_length; + callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1); + callback_data.UserData = callback_user_data; + callback(&callback_data); + buf = callback_data.Buf; + buf_size = callback_data.BufSize; + apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1); + IM_ASSERT(apply_new_text_length <= buf_size); } + //IMGUI_DEBUG_PRINT("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length); - // Clear temporary user storage - state->Flags = ImGuiInputTextFlags_None; - state->UserCallback = NULL; - state->UserCallbackData = NULL; + // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size. + ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size)); + value_changed = true; } // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value) @@ -4687,7 +4737,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ // Test if cursor is vertically visible if (cursor_offset.y - g.FontSize < scroll_y) scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize); - else if (cursor_offset.y - inner_size.y >= scroll_y) + else if (cursor_offset.y - (inner_size.y - style.FramePadding.y * 2.0f) >= scroll_y) scroll_y = cursor_offset.y - inner_size.y + style.FramePadding.y * 2.0f; const float scroll_max_y = ImMax((text_size.y + style.FramePadding.y * 2.0f) - inner_size.y, 0.0f); scroll_y = ImClamp(scroll_y, 0.0f, scroll_max_y); @@ -4755,8 +4805,10 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.) if (!is_readonly) { - g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1, cursor_screen_pos.y - g.FontSize); - g.PlatformImePosViewport = window->Viewport; + g.PlatformImeData.WantVisible = true; + g.PlatformImeData.InputPos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize); + g.PlatformImeData.InputLineHeight = g.FontSize; + g.PlatformImeViewport = window->Viewport->ID; } } } @@ -4782,9 +4834,23 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ if (is_multiline) { + // For focus requests to work on our multiline we need to ensure our child ItemAdd() call specifies the ImGuiItemFlags_Inputable (ref issue #4761)... Dummy(ImVec2(text_size.x, text_size.y + style.FramePadding.y)); + ImGuiItemFlags backup_item_flags = g.CurrentItemFlags; + g.CurrentItemFlags |= ImGuiItemFlags_Inputable | ImGuiItemFlags_NoTabStop; EndChild(); + item_data_backup.StatusFlags |= (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HoveredWindow); + g.CurrentItemFlags = backup_item_flags; + + // ...and then we need to undo the group overriding last item data, which gets a bit messy as EndGroup() tries to forward scrollbar being active... + // FIXME: This quite messy/tricky, should attempt to get rid of the child window. EndGroup(); + if (g.LastItemData.ID == 0) + { + g.LastItemData.ID = id; + g.LastItemData.InFlags = item_data_backup.InFlags; + g.LastItemData.StatusFlags = item_data_backup.StatusFlags; + } } // Log as text @@ -4807,6 +4873,40 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ return value_changed; } +void ImGui::DebugNodeInputTextState(ImGuiInputTextState* state) +{ +#ifndef IMGUI_DISABLE_DEBUG_TOOLS + ImGuiContext& g = *GImGui; + ImStb::STB_TexteditState* stb_state = &state->Stb; + ImStb::StbUndoState* undo_state = &stb_state->undostate; + Text("ID: 0x%08X, ActiveID: 0x%08X", state->ID, g.ActiveId); + Text("CurLenW: %d, CurLenA: %d, Cursor: %d, Selection: %d..%d", state->CurLenA, state->CurLenW, stb_state->cursor, stb_state->select_start, stb_state->select_end); + Text("undo_point: %d, redo_point: %d, undo_char_point: %d, redo_char_point: %d", undo_state->undo_point, undo_state->redo_point, undo_state->undo_char_point, undo_state->redo_char_point); + if (BeginChild("undopoints", ImVec2(0.0f, GetTextLineHeight() * 15), true)) // Visualize undo state + { + PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); + for (int n = 0; n < STB_TEXTEDIT_UNDOSTATECOUNT; n++) + { + ImStb::StbUndoRecord* undo_rec = &undo_state->undo_rec[n]; + const char undo_rec_type = (n < undo_state->undo_point) ? 'u' : (n >= undo_state->redo_point) ? 'r' : ' '; + if (undo_rec_type == ' ') + BeginDisabled(); + char buf[64] = ""; + if (undo_rec_type != ' ' && undo_rec->char_storage != -1) + ImTextStrToUtf8(buf, IM_ARRAYSIZE(buf), undo_state->undo_char + undo_rec->char_storage, undo_state->undo_char + undo_rec->char_storage + undo_rec->insert_length); + Text("%c [%02d] where %03d, insert %03d, delete %03d, char_storage %03d \"%s\"", + undo_rec_type, n, undo_rec->where, undo_rec->insert_length, undo_rec->delete_length, undo_rec->char_storage, buf); + if (undo_rec_type == ' ') + EndDisabled(); + } + PopStyleVar(); + } + EndChild(); +#else + IM_UNUSED(state); +#endif +} + //------------------------------------------------------------------------- // [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc. //------------------------------------------------------------------------- @@ -4956,7 +5056,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]); } if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); + OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); } } else if ((flags & ImGuiColorEditFlags_DisplayHex) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0) @@ -4984,7 +5084,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag IM_UNUSED(r); // Fixes C6031: Return value ignored: 'sscanf'. } if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); + OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); } ImGuiWindow* picker_active_window = NULL; @@ -5001,11 +5101,11 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag // Store current color and open a picker g.ColorPickerRef = col_v4; OpenPopup("picker"); - SetNextWindowPos(g.LastItemData.Rect.GetBL() + ImVec2(-1, style.ItemSpacing.y)); + SetNextWindowPos(g.LastItemData.Rect.GetBL() + ImVec2(0.0f, style.ItemSpacing.y)); } } if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); + OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); if (BeginPopup("picker")) { @@ -5025,8 +5125,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel)) { - const float text_offset_x = (flags & ImGuiColorEditFlags_NoInputs) ? w_button : w_full + style.ItemInnerSpacing.x; - window->DC.CursorPos = ImVec2(pos.x + text_offset_x, pos.y + style.FramePadding.y); + SameLine(0.0f, style.ItemInnerSpacing.x); TextEx(label, label_display_end); } @@ -5219,7 +5318,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl } } if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); + OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); } else if (flags & ImGuiColorEditFlags_PickerHueBar) { @@ -5236,7 +5335,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl value_changed = value_changed_sv = true; } if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); + OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); // Hue bar logic SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y)); @@ -5482,7 +5581,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl // FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip. // 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip. // Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set. -bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size) +bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, const ImVec2& size_arg) { ImGuiWindow* window = GetCurrentWindow(); if (window->SkipItems) @@ -5490,11 +5589,8 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl ImGuiContext& g = *GImGui; const ImGuiID id = window->GetID(desc_id); - float default_size = GetFrameHeight(); - if (size.x == 0.0f) - size.x = default_size; - if (size.y == 0.0f) - size.y = default_size; + const float default_size = GetFrameHeight(); + const ImVec2 size(size_arg.x == 0.0f ? default_size : size_arg.x, size_arg.y == 0.0f ? default_size : size_arg.y); const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f); if (!ItemAdd(bb, id)) @@ -5589,7 +5685,7 @@ void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags { ImGuiContext& g = *GImGui; - BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip); + BeginTooltipEx(ImGuiTooltipFlags_OverridePreviousTooltip, ImGuiWindowFlags_None); const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text; if (text_end > text) { @@ -5792,9 +5888,9 @@ bool ImGui::TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char if (window->SkipItems) return false; - ImGuiContext& g = *GImGui; - const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - return TreeNodeBehavior(window->GetID(str_id), flags, g.TempBuffer, label_end); + const char* label, *label_end; + ImFormatStringToTempBufferV(&label, &label_end, fmt, args); + return TreeNodeBehavior(window->GetID(str_id), flags, label, label_end); } bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) @@ -5803,9 +5899,9 @@ bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char if (window->SkipItems) return false; - ImGuiContext& g = *GImGui; - const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - return TreeNodeBehavior(window->GetID(ptr_id), flags, g.TempBuffer, label_end); + const char* label, *label_end; + ImFormatStringToTempBufferV(&label, &label_end, fmt, args); + return TreeNodeBehavior(window->GetID(ptr_id), flags, label, label_end); } bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags) @@ -6732,6 +6828,7 @@ bool ImGui::BeginMenuBar() // We overwrite CursorMaxPos because BeginGroup sets it to CursorPos (essentially the .EmitItem hack in EndMenuBar() would need something analogous here, maybe a BeginGroupEx() with flags). window->DC.CursorPos = window->DC.CursorMaxPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y); window->DC.LayoutType = ImGuiLayoutType_Horizontal; + window->DC.IsSameLine = false; window->DC.NavLayerCurrent = ImGuiNavLayer_Menu; window->DC.MenuBarAppending = true; AlignTextToFramePadding(); @@ -6775,6 +6872,7 @@ void ImGui::EndMenuBar() g.GroupStack.back().EmitItem = false; EndGroup(); // Restore position on layer 0 window->DC.LayoutType = ImGuiLayoutType_Vertical; + window->DC.IsSameLine = false; window->DC.NavLayerCurrent = ImGuiNavLayer_Main; window->DC.MenuBarAppending = false; } @@ -6855,6 +6953,28 @@ void ImGui::EndMainMenuBar() End(); } +static bool IsRootOfOpenMenuSet() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + if ((g.OpenPopupStack.Size <= g.BeginPopupStack.Size) || (window->Flags & ImGuiWindowFlags_ChildMenu)) + return false; + + // Initially we used 'upper_popup->OpenParentId == window->IDStack.back()' to differentiate multiple menu sets from each others + // (e.g. inside menu bar vs loose menu items) based on parent ID. + // This would however prevent the use of e.g. PuhsID() user code submitting menus. + // Previously this worked between popup and a first child menu because the first child menu always had the _ChildWindow flag, + // making hovering on parent popup possible while first child menu was focused - but this was generally a bug with other side effects. + // Instead we don't treat Popup specifically (in order to consistently support menu features in them), maybe the first child menu of a Popup + // doesn't have the _ChildWindow flag, and we rely on this IsRootOfOpenMenuSet() check to allow hovering between root window/popup and first child menu. + // In the end, lack of ID check made it so we could no longer differentiate between separate menu sets. To compensate for that, we at least check parent window nav layer. + // This fixes the most common case of menu opening on hover when moving between window content and menu bar. Multiple different menu sets in same nav layer would still + // open on hover, but that should be a lesser problem, because if such menus are close in proximity in window content then it won't feel weird and if they are far apart + // it likely won't be a problem anyone runs into. + const ImGuiPopupData* upper_popup = &g.OpenPopupStack[g.BeginPopupStack.Size]; + return (window->DC.NavLayerCurrent == upper_popup->ParentNavLayer && upper_popup->Window && (upper_popup->Window->Flags & ImGuiWindowFlags_ChildMenu)); +} + bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) { ImGuiWindow* window = GetCurrentWindow(); @@ -6867,8 +6987,9 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) bool menu_is_open = IsPopupOpen(id, ImGuiPopupFlags_None); // Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu) + // The first menu in a hierarchy isn't so hovering doesn't get across (otherwise e.g. resizing borders with ImGuiButtonFlags_FlattenChildren would react), but top-most BeginMenu() will bypass that limitation. ImGuiWindowFlags flags = ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus; - if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) + if (window->Flags & ImGuiWindowFlags_ChildMenu) flags |= ImGuiWindowFlags_ChildWindow; // If a menu with same the ID was already submitted, we will append to it, matching the behavior of Begin(). @@ -6887,11 +7008,12 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) g.MenusIdSubmittedThisFrame.push_back(id); ImVec2 label_size = CalcTextSize(label, NULL, true); - bool pressed; - bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].OpenParentId == window->IDStack.back()); + + // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent without always being a Child window) + const bool menuset_is_open = IsRootOfOpenMenuSet(); ImGuiWindow* backed_nav_window = g.NavWindow; if (menuset_is_open) - g.NavWindow = window; // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent) + g.NavWindow = window; // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu, // However the final position is going to be different! It is chosen by FindBestWindowPosForPopup(). @@ -6901,6 +7023,8 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) if (!enabled) BeginDisabled(); const ImGuiMenuColumns* offsets = &window->DC.MenuColumns; + bool pressed; + const ImGuiSelectableFlags selectable_flags = ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups; if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) { // Menu inside an horizontal menu bar @@ -6911,7 +7035,7 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); float w = label_size.x; ImVec2 text_pos(window->DC.CursorPos.x + offsets->OffsetLabel, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset); - pressed = Selectable("", menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups, ImVec2(w, 0.0f)); + pressed = Selectable("", menu_is_open, selectable_flags, ImVec2(w, 0.0f)); RenderText(text_pos, label); PopStyleVar(); window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). @@ -6927,7 +7051,7 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) float min_w = window->DC.MenuColumns.DeclColumns(icon_w, label_size.x, 0.0f, checkmark_w); // Feedback to next frame float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w); ImVec2 text_pos(window->DC.CursorPos.x + offsets->OffsetLabel, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset); - pressed = Selectable("", menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); + pressed = Selectable("", menu_is_open, selectable_flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); RenderText(text_pos, label); if (icon_w > 0.0f) RenderText(pos + ImVec2(offsets->OffsetIcon, 0.0f), icon); @@ -6936,7 +7060,7 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) if (!enabled) EndDisabled(); - const bool hovered = (g.HoveredId == id) && enabled; + const bool hovered = (g.HoveredId == id) && enabled && !g.NavDisableMouseHover; if (menuset_is_open) g.NavWindow = backed_nav_window; @@ -6946,7 +7070,7 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) { // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive. - bool moving_toward_other_child_menu = false; + bool moving_toward_child_menu = false; ImGuiWindow* child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? g.OpenPopupStack[g.BeginPopupStack.Size].Window : NULL; if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar)) { @@ -6957,18 +7081,22 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, ref_unit * 0.5f, ref_unit * 2.5f); // add a bit of extra slack. ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues (FIXME: ??) - tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -ref_unit * 8.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? + tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -ref_unit * 8.0f); // triangle has maximum height to limit the slope and the bias toward large sub-menus tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +ref_unit * 8.0f); - moving_toward_other_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos); + moving_toward_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos); //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_toward_other_child_menu ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG] } - if (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_toward_other_child_menu) + + // The 'HovereWindow == window' check creates an inconsistency (e.g. moving away from menu slowly tends to hit same window, whereas moving away fast does not) + // But we also need to not close the top-menu menu when moving over void. Perhaps we should extend the triangle check to a larger polygon. + // (Remember to test this on BeginPopup("A")->BeginMenu("B") sequence which behaves slightly differently as B isn't a Child of A and hovering isn't shared.) + if (menu_is_open && !hovered && g.HoveredWindow == window && !moving_toward_child_menu) want_close = true; // Open if (!menu_is_open && pressed) // Click/activate to open want_open = true; - else if (!menu_is_open && hovered && !moving_toward_other_child_menu) // Hover to open + else if (!menu_is_open && hovered && !moving_toward_child_menu) // Hover to open want_open = true; if (g.NavId == id && g.NavMoveDir == ImGuiDir_Right) // Nav-Right to open { @@ -7017,7 +7145,9 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) if (menu_is_open) { SetNextWindowPos(popup_pos, ImGuiCond_Always); // Note: this is super misleading! The value will serve as reference for FindBestWindowPosForPopup(), not actual pos. + PushStyleVar(ImGuiStyleVar_ChildRounding, style.PopupRounding); // First level will use _PopupRounding, subsequent will use _ChildRounding menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) + PopStyleVar(); } else { @@ -7060,13 +7190,19 @@ bool ImGui::MenuItemEx(const char* label, const char* icon, const char* shortcut ImVec2 pos = window->DC.CursorPos; ImVec2 label_size = CalcTextSize(label, NULL, true); + const bool menuset_is_open = IsRootOfOpenMenuSet(); + ImGuiWindow* backed_nav_window = g.NavWindow; + if (menuset_is_open) + g.NavWindow = window; + // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73), // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only. bool pressed; PushID(label); if (!enabled) BeginDisabled(); - const ImGuiSelectableFlags flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover; + + const ImGuiSelectableFlags selectable_flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover; const ImGuiMenuColumns* offsets = &window->DC.MenuColumns; if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) { @@ -7076,7 +7212,7 @@ bool ImGui::MenuItemEx(const char* label, const char* icon, const char* shortcut window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f); ImVec2 text_pos(window->DC.CursorPos.x + offsets->OffsetLabel, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset); PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); - pressed = Selectable("", selected, flags, ImVec2(w, 0.0f)); + pressed = Selectable("", selected, selectable_flags, ImVec2(w, 0.0f)); PopStyleVar(); RenderText(text_pos, label); window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). @@ -7091,7 +7227,7 @@ bool ImGui::MenuItemEx(const char* label, const char* icon, const char* shortcut float checkmark_w = IM_FLOOR(g.FontSize * 1.20f); float min_w = window->DC.MenuColumns.DeclColumns(icon_w, label_size.x, shortcut_w, checkmark_w); // Feedback for next frame float stretch_w = ImMax(0.0f, GetContentRegionAvail().x - min_w); - pressed = Selectable("", false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); + pressed = Selectable("", false, selectable_flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); RenderText(pos + ImVec2(offsets->OffsetLabel, 0.0f), label); if (icon_w > 0.0f) RenderText(pos + ImVec2(offsets->OffsetIcon, 0.0f), icon); @@ -7108,6 +7244,8 @@ bool ImGui::MenuItemEx(const char* label, const char* icon, const char* shortcut if (!enabled) EndDisabled(); PopID(); + if (menuset_is_open) + g.NavWindow = backed_nav_window; return pressed; } @@ -7251,7 +7389,7 @@ bool ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImG // Ensure correct ordering when toggling ImGuiTabBarFlags_Reorderable flag, or when a new tab was added while being not reorderable if ((flags & ImGuiTabBarFlags_Reorderable) != (tab_bar->Flags & ImGuiTabBarFlags_Reorderable) || (tab_bar->TabsAddedNew && !(flags & ImGuiTabBarFlags_Reorderable))) - if (tab_bar->Tabs.Size > 1 && (flags & ImGuiTabBarFlags_DockNode) == 0) // FIXME: TabBar with DockNode can now be hybrid + if ((flags & ImGuiTabBarFlags_DockNode) == 0) // FIXME: TabBar with DockNode can now be hybrid ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByBeginOrder); tab_bar->TabsAddedNew = false; @@ -7434,8 +7572,8 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet, // and we cannot wait for the next BeginTabItem() call. We cannot compute this width within TabBarAddTab() because font size depends on the active window. const char* tab_name = tab_bar->GetTabName(tab); - const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) == 0; - tab->ContentWidth = TabItemCalcSize(tab_name, has_close_button).x; + const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) ? false : true; + tab->ContentWidth = (tab->RequestedWidth > 0.0f) ? tab->RequestedWidth : TabItemCalcSize(tab_name, has_close_button).x; int section_n = TabItemGetSectionIdx(tab); ImGuiTabBarSection* section = §ions[section_n]; @@ -7444,9 +7582,9 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) // Store data so we can build an array sorted by width if we need to shrink tabs down IM_MSVC_WARNING_SUPPRESS(6385); - int shrink_buffer_index = shrink_buffer_indexes[section_n]++; - g.ShrinkWidthBuffer[shrink_buffer_index].Index = tab_n; - g.ShrinkWidthBuffer[shrink_buffer_index].Width = tab->ContentWidth; + ImGuiShrinkWidthItem* shrink_width_item = &g.ShrinkWidthBuffer[shrink_buffer_indexes[section_n]++]; + shrink_width_item->Index = tab_n; + shrink_width_item->Width = shrink_width_item->InitialWidth = tab->ContentWidth; IM_ASSERT(tab->ContentWidth > 0.0f); tab->Width = tab->ContentWidth; @@ -7573,7 +7711,7 @@ static ImU32 ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label, I { IM_UNUSED(tab_bar); IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_DockNode); - ImGuiID id = ImHashStr(label); + ImGuiID id = docked_window->TabId; KeepAliveID(id); return id; } @@ -7618,14 +7756,14 @@ ImGuiTabItem* ImGui::TabBarFindMostRecentlySelectedTabForActiveWindow(ImGuiTabBa void ImGui::TabBarAddTab(ImGuiTabBar* tab_bar, ImGuiTabItemFlags tab_flags, ImGuiWindow* window) { ImGuiContext& g = *GImGui; - IM_ASSERT(TabBarFindTabByID(tab_bar, window->ID) == NULL); + IM_ASSERT(TabBarFindTabByID(tab_bar, window->TabId) == NULL); IM_ASSERT(g.CurrentTabBar != tab_bar); // Can't work while the tab bar is active as our tab doesn't have an X offset yet, in theory we could/should test something like (tab_bar->CurrFrameVisible < g.FrameCount) but we'd need to solve why triggers the commented early-out assert in BeginTabBarEx() (probably dock node going from implicit to explicit in same frame) if (!window->HasCloseButton) tab_flags |= ImGuiTabItemFlags_NoCloseButton; // Set _NoCloseButton immediately because it will be used for first-frame width calculation. ImGuiTabItem new_tab; - new_tab.ID = window->ID; + new_tab.ID = window->TabId; new_tab.Flags = tab_flags; new_tab.LastFrameVisible = tab_bar->CurrFrameVisible; // Required so BeginTabBar() doesn't ditch the tab if (new_tab.LastFrameVisible == -1) @@ -7957,10 +8095,13 @@ bool ImGui::TabItemButton(const char* label, ImGuiTabItemFlags flags) bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags, ImGuiWindow* docked_window) { // Layout whole tab bar if not already done + ImGuiContext& g = *GImGui; if (tab_bar->WantLayout) + { + ImGuiNextItemData backup_next_item_data = g.NextItemData; TabBarLayout(tab_bar); - - ImGuiContext& g = *GImGui; + g.NextItemData = backup_next_item_data; + } ImGuiWindow* window = g.CurrentWindow; if (window->SkipItems) return false; @@ -7986,9 +8127,6 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, else if (p_open == NULL) flags |= ImGuiTabItemFlags_NoCloseButton; - // Calculate tab contents size - ImVec2 size = TabItemCalcSize(label, p_open != NULL); - // Acquire tab data ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, id); bool tab_is_new = false; @@ -7997,11 +8135,17 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, tab_bar->Tabs.push_back(ImGuiTabItem()); tab = &tab_bar->Tabs.back(); tab->ID = id; - tab->Width = size.x; - tab_bar->TabsAddedNew = true; - tab_is_new = true; + tab_bar->TabsAddedNew = tab_is_new = true; } tab_bar->LastTabItemIdx = (ImS16)tab_bar->Tabs.index_from_ptr(tab); + + // Calculate tab contents size + ImVec2 size = TabItemCalcSize(label, p_open != NULL); + tab->RequestedWidth = -1.0f; + if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth) + size.x = tab->RequestedWidth = g.NextItemData.Width; + if (tab_is_new) + tab->Width = size.x; tab->ContentWidth = size.x; tab->BeginOrder = tab_bar->TabsActiveCount++; @@ -8028,13 +8172,14 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, } // Update selected tab - if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0) - if (!tab_bar_appearing || tab_bar->SelectedTabId == 0) - if (!is_tab_button) + if (!is_tab_button) + { + if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0) + if (!tab_bar_appearing || tab_bar->SelectedTabId == 0) tab_bar->NextSelectedTabId = id; // New tabs gets activated - if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // SetSelected can only be passed on explicit tab bar - if (!is_tab_button) + if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // _SetSelected can only be passed on explicit tab bar tab_bar->NextSelectedTabId = id; + } // Lock visibility // (Note: tab_contents_visible != tab_selected... because CTRL+TAB operations may preview some tabs without selecting them!) @@ -8198,7 +8343,7 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton; // Render tab label, process close button - const ImGuiID close_button_id = p_open ? GetIDWithSeed("#CLOSE", NULL, id) : 0; + const ImGuiID close_button_id = p_open ? GetIDWithSeed("#CLOSE", NULL, docked_window ? docked_window->ID : id) : 0; bool just_closed; bool text_clipped; TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id, tab_contents_visible, &just_closed, &text_clipped); diff --git a/Code/ThirdParty/DearImgui/imstb_rectpack.h b/Code/ThirdParty/DearImgui/imstb_rectpack.h index 3958952..f6917e7 100644 --- a/Code/ThirdParty/DearImgui/imstb_rectpack.h +++ b/Code/ThirdParty/DearImgui/imstb_rectpack.h @@ -1,15 +1,19 @@ // [DEAR IMGUI] -// This is a slightly modified version of stb_rect_pack.h 1.00. -// Those changes would need to be pushed into nothings/stb: -// - Added STBRP__CDECL +// This is a slightly modified version of stb_rect_pack.h 1.01. // Grep for [DEAR IMGUI] to find the changes. - -// stb_rect_pack.h - v1.00 - public domain - rectangle packing +// +// stb_rect_pack.h - v1.01 - public domain - rectangle packing // Sean Barrett 2014 // // Useful for e.g. packing rectangular textures into an atlas. // Does not do rotation. // +// Before #including, +// +// #define STB_RECT_PACK_IMPLEMENTATION +// +// in the file that you want to have the implementation. +// // Not necessarily the awesomest packing method, but better than // the totally naive one in stb_truetype (which is primarily what // this is meant to replace). @@ -41,6 +45,7 @@ // // Version history: // +// 1.01 (2021-07-11) always use large rect mode, expose STBRP__MAXVAL in public section // 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles // 0.99 (2019-02-07) warning fixes // 0.11 (2017-03-03) return packing success/fail result @@ -81,11 +86,10 @@ typedef struct stbrp_context stbrp_context; typedef struct stbrp_node stbrp_node; typedef struct stbrp_rect stbrp_rect; -#ifdef STBRP_LARGE_RECTS typedef int stbrp_coord; -#else -typedef unsigned short stbrp_coord; -#endif + +#define STBRP__MAXVAL 0x7fffffff +// Mostly for internal use, but this is the maximum supported coordinate value. STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects); // Assign packed locations to rectangles. The rectangles are of type @@ -213,10 +217,9 @@ struct stbrp_context #define STBRP_ASSERT assert #endif -// [DEAR IMGUI] Added STBRP__CDECL #ifdef _MSC_VER #define STBRP__NOTUSED(v) (void)(v) -#define STBRP__CDECL __cdecl +#define STBRP__CDECL __cdecl #else #define STBRP__NOTUSED(v) (void)sizeof(v) #define STBRP__CDECL @@ -262,9 +265,6 @@ STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_ou STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes) { int i; -#ifndef STBRP_LARGE_RECTS - STBRP_ASSERT(width <= 0xffff && height <= 0xffff); -#endif for (i=0; i < num_nodes-1; ++i) nodes[i].next = &nodes[i+1]; @@ -283,11 +283,7 @@ STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, context->extra[0].y = 0; context->extra[0].next = &context->extra[1]; context->extra[1].x = (stbrp_coord) width; -#ifdef STBRP_LARGE_RECTS context->extra[1].y = (1<<30); -#else - context->extra[1].y = 65535; -#endif context->extra[1].next = NULL; } @@ -433,7 +429,7 @@ static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int widt if (y <= best_y) { if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) { best_x = xpos; - STBRP_ASSERT(y <= best_y); + //STBRP_ASSERT(y <= best_y); [DEAR IMGUI] best_y = y; best_waste = waste; best = prev; @@ -529,7 +525,6 @@ static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, i return res; } -// [DEAR IMGUI] Added STBRP__CDECL static int STBRP__CDECL rect_height_compare(const void *a, const void *b) { const stbrp_rect *p = (const stbrp_rect *) a; @@ -541,7 +536,6 @@ static int STBRP__CDECL rect_height_compare(const void *a, const void *b) return (p->w > q->w) ? -1 : (p->w < q->w); } -// [DEAR IMGUI] Added STBRP__CDECL static int STBRP__CDECL rect_original_order(const void *a, const void *b) { const stbrp_rect *p = (const stbrp_rect *) a; @@ -549,12 +543,6 @@ static int STBRP__CDECL rect_original_order(const void *a, const void *b) return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed); } -#ifdef STBRP_LARGE_RECTS -#define STBRP__MAXVAL 0xffffffff -#else -#define STBRP__MAXVAL 0xffff -#endif - STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects) { int i, all_rects_packed = 1; diff --git a/Code/ThirdParty/DearImgui/imstb_textedit.h b/Code/ThirdParty/DearImgui/imstb_textedit.h index 2c635b2..75a159d 100644 --- a/Code/ThirdParty/DearImgui/imstb_textedit.h +++ b/Code/ThirdParty/DearImgui/imstb_textedit.h @@ -1,10 +1,10 @@ // [DEAR IMGUI] -// This is a slightly modified version of stb_textedit.h 1.13. +// This is a slightly modified version of stb_textedit.h 1.14. // Those changes would need to be pushed into nothings/stb: // - Fix in stb_textedit_discard_redo (see https://github.com/nothings/stb/issues/321) // Grep for [DEAR IMGUI] to find the changes. -// stb_textedit.h - v1.13 - public domain - Sean Barrett +// stb_textedit.h - v1.14 - public domain - Sean Barrett // Development of this library was sponsored by RAD Game Tools // // This C header file implements the guts of a multi-line text-editing @@ -35,6 +35,7 @@ // // VERSION HISTORY // +// 1.14 (2021-07-11) page up/down, various fixes // 1.13 (2019-02-07) fix bug in undo size management // 1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE, fix redo to avoid crash // 1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield @@ -58,6 +59,7 @@ // Ulf Winklemann: move-by-word in 1.1 // Fabian Giesen: secondary key inputs in 1.5 // Martins Mozeiko: STB_TEXTEDIT_memmove in 1.6 +// Louis Schnellbach: page up/down in 1.14 // // Bugfixes: // Scott Graham @@ -93,8 +95,8 @@ // moderate sizes. The undo system does no memory allocations, so // it grows STB_TexteditState by the worst-case storage which is (in bytes): // -// [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATE_COUNT -// + sizeof(STB_TEXTEDIT_CHARTYPE) * STB_TEXTEDIT_UNDOCHAR_COUNT +// [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATECOUNT +// + sizeof(STB_TEXTEDIT_CHARTYPE) * STB_TEXTEDIT_UNDOCHARCOUNT // // // Implementation mode: @@ -716,10 +718,6 @@ static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditSta state->has_preferred_x = 0; return 1; } - // [DEAR IMGUI] - //// remove the undo since we didn't actually insert the characters - //if (state->undostate.undo_point) - // --state->undostate.undo_point; // note: paste failure will leave deleted selection, may be restored with an undo (see https://github.com/nothings/stb/issues/734 for details) return 0; } diff --git a/Code/ThirdParty/DearImgui/imstb_truetype.h b/Code/ThirdParty/DearImgui/imstb_truetype.h index 48c2026..643d378 100644 --- a/Code/ThirdParty/DearImgui/imstb_truetype.h +++ b/Code/ThirdParty/DearImgui/imstb_truetype.h @@ -1,10 +1,19 @@ // [DEAR IMGUI] -// This is a slightly modified version of stb_truetype.h 1.20. +// This is a slightly modified version of stb_truetype.h 1.26. // Mostly fixing for compiler and static analyzer warnings. // Grep for [DEAR IMGUI] to find the changes. -// stb_truetype.h - v1.20 - public domain -// authored from 2009-2016 by Sean Barrett / RAD Game Tools +// stb_truetype.h - v1.26 - public domain +// authored from 2009-2021 by Sean Barrett / RAD Game Tools +// +// ======================================================================= +// +// NO SECURITY GUARANTEE -- DO NOT USE THIS ON UNTRUSTED FONT FILES +// +// This library does no range checking of the offsets found in the file, +// meaning an attacker can use it to read arbitrary memory. +// +// ======================================================================= // // This library processes TrueType files: // parse files @@ -37,11 +46,11 @@ // Daniel Ribeiro Maciel // // Bug/warning reports/fixes: -// "Zer" on mollyrocket Fabian "ryg" Giesen -// Cass Everitt Martins Mozeiko -// stoiko (Haemimont Games) Cap Petschulat -// Brian Hook Omar Cornut -// Walter van Niftrik github:aloucks +// "Zer" on mollyrocket Fabian "ryg" Giesen github:NiLuJe +// Cass Everitt Martins Mozeiko github:aloucks +// stoiko (Haemimont Games) Cap Petschulat github:oyvindjam +// Brian Hook Omar Cornut github:vassvik +// Walter van Niftrik Ryan Griege // David Gow Peter LaValle // David Given Sergey Popov // Ivan-Assen Ivanov Giumo X. Clanjor @@ -49,11 +58,17 @@ // Johan Duparc Thomas Fields // Hou Qiming Derek Vinyard // Rob Loach Cort Stratton -// Kenney Phillis Jr. github:oyvindjam -// Brian Costabile github:vassvik +// Kenney Phillis Jr. Brian Costabile +// Ken Voskuil (kaesve) // // VERSION HISTORY // +// 1.26 (2021-08-28) fix broken rasterizer +// 1.25 (2021-07-11) many fixes +// 1.24 (2020-02-05) fix warning +// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS) +// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined +// 1.21 (2019-02-25) fix warning // 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() // 1.19 (2018-02-11) GPOS kerning, STBTT_fmod // 1.18 (2018-01-29) add missing function @@ -248,19 +263,6 @@ // recommend it. // // -// SOURCE STATISTICS (based on v0.6c, 2050 LOC) -// -// Documentation & header file 520 LOC \___ 660 LOC documentation -// Sample code 140 LOC / -// Truetype parsing 620 LOC ---- 620 LOC TrueType -// Software rasterization 240 LOC \. -// Curve tessellation 120 LOC \__ 550 LOC Bitmap creation -// Bitmap management 100 LOC / -// Baked bitmap interface 70 LOC / -// Font name matching & access 150 LOC ---- 150 -// C runtime library abstraction 60 LOC ---- 60 -// -// // PERFORMANCE MEASUREMENTS FOR 1.06: // // 32-bit 64-bit @@ -275,8 +277,8 @@ //// SAMPLE PROGRAMS //// // -// Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless -// +// Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless. +// See "tests/truetype_demo_win32.c" for a complete version. #if 0 #define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation #include "stb_truetype.h" @@ -302,6 +304,8 @@ void my_stbtt_initfont(void) void my_stbtt_print(float x, float y, char *text) { // assume orthographic projection with units = screen pixels, origin at top left + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, ftex); glBegin(GL_QUADS); @@ -309,10 +313,10 @@ void my_stbtt_print(float x, float y, char *text) if (*text >= 32 && *text < 128) { stbtt_aligned_quad q; stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 - glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0); - glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0); - glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1); - glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1); + glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y0); + glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y0); + glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y1); + glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y1); } ++text; } @@ -719,7 +723,7 @@ struct stbtt_fontinfo int numGlyphs; // number of glyphs, needed for range checking - int loca,head,glyf,hhea,hmtx,kern,gpos; // table locations as offset from start of .ttf + int loca,head,glyf,hhea,hmtx,kern,gpos,svg; // table locations as offset from start of .ttf int index_map; // a cmap mapping for our chosen character encoding int indexToLocFormat; // format needed to map from glyph index to glyph @@ -802,6 +806,18 @@ STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); // as above, but takes one or more glyph indices for greater efficiency +typedef struct stbtt_kerningentry +{ + int glyph1; // use stbtt_FindGlyphIndex + int glyph2; + int advance; +} stbtt_kerningentry; + +STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info); +STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length); +// Retrieves a complete list of all of the kerning pairs provided by the font +// stbtt_GetKerningTable never writes more than table_length entries and returns how many entries it did write. +// The table will be sorted by (a.glyph1 == b.glyph1)?(a.glyph2 < b.glyph2):(a.glyph1 < b.glyph1) ////////////////////////////////////////////////////////////////////////////// // @@ -846,6 +862,12 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); // frees the data allocated above +STBTT_DEF unsigned char *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl); +STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg); +STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg); +// fills svg with the character's SVG data. +// returns data size or 0 if SVG not found. + ////////////////////////////////////////////////////////////////////////////// // // BITMAP RENDERING @@ -1347,6 +1369,22 @@ static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict) return stbtt__cff_get_index(&cff); } +// since most people won't use this, find this table the first time it's needed +static int stbtt__get_svg(stbtt_fontinfo *info) +{ + stbtt_uint32 t; + if (info->svg < 0) { + t = stbtt__find_table(info->data, info->fontstart, "SVG "); + if (t) { + stbtt_uint32 offset = ttULONG(info->data + t + 2); + info->svg = t + offset; + } else { + info->svg = 0; + } + } + return info->svg; +} + static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart) { stbtt_uint32 cmap, t; @@ -1426,6 +1464,8 @@ static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, in else info->numGlyphs = 0xffff; + info->svg = -1; + // find a cmap encoding table we understand *now* to avoid searching // later. (todo: could make this installable) // the same regardless of glyph. @@ -1509,12 +1549,12 @@ STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codep search += 2; { - stbtt_uint16 offset, start; + stbtt_uint16 offset, start, last; stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1); - STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item)); start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); - if (unicode_codepoint < start) + last = ttUSHORT(data + endCount + 2*item); + if (unicode_codepoint < start || unicode_codepoint > last) return 0; offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); @@ -1774,7 +1814,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s } } num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); - } else if (numberOfContours == -1) { + } else if (numberOfContours < 0) { // Compound shapes. int more = 1; stbtt_uint8 *comp = data + g + 10; @@ -1841,7 +1881,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s if (comp_verts) STBTT_free(comp_verts, info->userdata); return 0; } - if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); //-V595 + if (num_vertices > 0 && vertices) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); if (vertices) STBTT_free(vertices, info->userdata); vertices = tmp; @@ -1851,9 +1891,6 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s // More components ? more = flags & (1<<5); } - } else if (numberOfContours < 0) { - // @TODO other compound variations? - STBTT_assert(0); } else { // numberOfCounters == 0, do nothing } @@ -2107,7 +2144,7 @@ static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, st subrs = stbtt__cid_get_glyph_subrs(info, glyph_index); has_subrs = 1; } - // fallthrough + // FALLTHROUGH case 0x1D: // callgsubr if (sp < 1) return STBTT__CSERR("call(g|)subr stack"); v = (int) s[--sp]; @@ -2212,7 +2249,7 @@ static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, st } break; default: - if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254)) //-V560 + if (b0 != 255 && b0 != 28 && b0 < 32) return STBTT__CSERR("reserved operator"); // push immediate @@ -2282,7 +2319,49 @@ STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_inde } } -static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info) +{ + stbtt_uint8 *data = info->data + info->kern; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + return ttUSHORT(data+10); +} + +STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length) +{ + stbtt_uint8 *data = info->data + info->kern; + int k, length; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + length = ttUSHORT(data+10); + if (table_length < length) + length = table_length; + + for (k = 0; k < length; k++) + { + table[k].glyph1 = ttUSHORT(data+18+(k*6)); + table[k].glyph2 = ttUSHORT(data+20+(k*6)); + table[k].advance = ttSHORT(data+22+(k*6)); + } + + return length; +} + +static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) { stbtt_uint8 *data = info->data + info->kern; stbtt_uint32 needle, straw; @@ -2312,245 +2391,225 @@ static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph return 0; } -static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph) -{ - stbtt_uint16 coverageFormat = ttUSHORT(coverageTable); - switch(coverageFormat) { - case 1: { - stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2); - - // Binary search. - stbtt_int32 l=0, r=glyphCount-1, m; - int straw, needle=glyph; - while (l <= r) { - stbtt_uint8 *glyphArray = coverageTable + 4; - stbtt_uint16 glyphID; - m = (l + r) >> 1; - glyphID = ttUSHORT(glyphArray + 2 * m); - straw = glyphID; - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else { - return m; - } +static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph) +{ + stbtt_uint16 coverageFormat = ttUSHORT(coverageTable); + switch (coverageFormat) { + case 1: { + stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2); + + // Binary search. + stbtt_int32 l=0, r=glyphCount-1, m; + int straw, needle=glyph; + while (l <= r) { + stbtt_uint8 *glyphArray = coverageTable + 4; + stbtt_uint16 glyphID; + m = (l + r) >> 1; + glyphID = ttUSHORT(glyphArray + 2 * m); + straw = glyphID; + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else { + return m; } - } break; - - case 2: { - stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2); - stbtt_uint8 *rangeArray = coverageTable + 4; - - // Binary search. - stbtt_int32 l=0, r=rangeCount-1, m; - int strawStart, strawEnd, needle=glyph; - while (l <= r) { - stbtt_uint8 *rangeRecord; - m = (l + r) >> 1; - rangeRecord = rangeArray + 6 * m; - strawStart = ttUSHORT(rangeRecord); - strawEnd = ttUSHORT(rangeRecord + 2); - if (needle < strawStart) - r = m - 1; - else if (needle > strawEnd) - l = m + 1; - else { - stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4); - return startCoverageIndex + glyph - strawStart; - } + } + break; + } + + case 2: { + stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2); + stbtt_uint8 *rangeArray = coverageTable + 4; + + // Binary search. + stbtt_int32 l=0, r=rangeCount-1, m; + int strawStart, strawEnd, needle=glyph; + while (l <= r) { + stbtt_uint8 *rangeRecord; + m = (l + r) >> 1; + rangeRecord = rangeArray + 6 * m; + strawStart = ttUSHORT(rangeRecord); + strawEnd = ttUSHORT(rangeRecord + 2); + if (needle < strawStart) + r = m - 1; + else if (needle > strawEnd) + l = m + 1; + else { + stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4); + return startCoverageIndex + glyph - strawStart; } - } break; + } + break; + } - default: { - // There are no other cases. - STBTT_assert(0); - } break; - } + default: return -1; // unsupported + } - return -1; + return -1; } static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph) { - stbtt_uint16 classDefFormat = ttUSHORT(classDefTable); - switch(classDefFormat) - { - case 1: { - stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2); - stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4); - stbtt_uint8 *classDef1ValueArray = classDefTable + 6; - - if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount) - return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID)); - - // [DEAR IMGUI] Commented to fix static analyzer warning - //classDefTable = classDef1ValueArray + 2 * glyphCount; - } break; - - case 2: { - stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2); - stbtt_uint8 *classRangeRecords = classDefTable + 4; - - // Binary search. - stbtt_int32 l=0, r=classRangeCount-1, m; - int strawStart, strawEnd, needle=glyph; - while (l <= r) { - stbtt_uint8 *classRangeRecord; - m = (l + r) >> 1; - classRangeRecord = classRangeRecords + 6 * m; - strawStart = ttUSHORT(classRangeRecord); - strawEnd = ttUSHORT(classRangeRecord + 2); - if (needle < strawStart) - r = m - 1; - else if (needle > strawEnd) - l = m + 1; - else - return (stbtt_int32)ttUSHORT(classRangeRecord + 4); - } + stbtt_uint16 classDefFormat = ttUSHORT(classDefTable); + switch (classDefFormat) + { + case 1: { + stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2); + stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4); + stbtt_uint8 *classDef1ValueArray = classDefTable + 6; - // [DEAR IMGUI] Commented to fix static analyzer warning - //classDefTable = classRangeRecords + 6 * classRangeCount; - } break; + if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount) + return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID)); + break; + } - default: { - // There are no other cases. - STBTT_assert(0); - } break; - } + case 2: { + stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2); + stbtt_uint8 *classRangeRecords = classDefTable + 4; + + // Binary search. + stbtt_int32 l=0, r=classRangeCount-1, m; + int strawStart, strawEnd, needle=glyph; + while (l <= r) { + stbtt_uint8 *classRangeRecord; + m = (l + r) >> 1; + classRangeRecord = classRangeRecords + 6 * m; + strawStart = ttUSHORT(classRangeRecord); + strawEnd = ttUSHORT(classRangeRecord + 2); + if (needle < strawStart) + r = m - 1; + else if (needle > strawEnd) + l = m + 1; + else + return (stbtt_int32)ttUSHORT(classRangeRecord + 4); + } + break; + } - return -1; + default: + return -1; // Unsupported definition type, return an error. + } + + // "All glyphs not assigned to a class fall into class 0". (OpenType spec) + return 0; } // Define to STBTT_assert(x) if you want to break on unimplemented formats. #define STBTT_GPOS_TODO_assert(x) -static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) -{ - stbtt_uint16 lookupListOffset; - stbtt_uint8 *lookupList; - stbtt_uint16 lookupCount; - stbtt_uint8 *data; - stbtt_int32 i; - - if (!info->gpos) return 0; - - data = info->data + info->gpos; - - if (ttUSHORT(data+0) != 1) return 0; // Major version 1 - if (ttUSHORT(data+2) != 0) return 0; // Minor version 0 - - lookupListOffset = ttUSHORT(data+8); - lookupList = data + lookupListOffset; - lookupCount = ttUSHORT(lookupList); - - for (i=0; i> 1; - pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m; - secondGlyph = ttUSHORT(pairValue); - straw = secondGlyph; - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else { - stbtt_int16 xAdvance = ttSHORT(pairValue + 2); - return xAdvance; - } - } - } break; - - case 2: { - stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); - stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); - - stbtt_uint16 classDef1Offset = ttUSHORT(table + 8); - stbtt_uint16 classDef2Offset = ttUSHORT(table + 10); - int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1); - int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2); - - stbtt_uint16 class1Count = ttUSHORT(table + 12); - stbtt_uint16 class2Count = ttUSHORT(table + 14); - STBTT_assert(glyph1class < class1Count); - STBTT_assert(glyph2class < class2Count); - - // TODO: Support more formats. - STBTT_GPOS_TODO_assert(valueFormat1 == 4); - if (valueFormat1 != 4) return 0; - STBTT_GPOS_TODO_assert(valueFormat2 == 0); - if (valueFormat2 != 0) return 0; - - if (glyph1class >= 0 && glyph1class < class1Count && glyph2class >= 0 && glyph2class < class2Count) { - stbtt_uint8 *class1Records = table + 16; - stbtt_uint8 *class2Records = class1Records + 2 * (glyph1class * class2Count); - stbtt_int16 xAdvance = ttSHORT(class2Records + 2 * glyph2class); - return xAdvance; - } - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - break; - } // [DEAR IMGUI] removed ; - } - } - break; - } // [DEAR IMGUI] removed ; +static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint16 lookupListOffset; + stbtt_uint8 *lookupList; + stbtt_uint16 lookupCount; + stbtt_uint8 *data; + stbtt_int32 i, sti; + + if (!info->gpos) return 0; + + data = info->data + info->gpos; + + if (ttUSHORT(data+0) != 1) return 0; // Major version 1 + if (ttUSHORT(data+2) != 0) return 0; // Minor version 0 + + lookupListOffset = ttUSHORT(data+8); + lookupList = data + lookupListOffset; + lookupCount = ttUSHORT(lookupList); + + for (i=0; i= pairSetCount) return 0; + + needle=glyph2; + r=pairValueCount-1; + l=0; + + // Binary search. + while (l <= r) { + stbtt_uint16 secondGlyph; + stbtt_uint8 *pairValue; + m = (l + r) >> 1; + pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m; + secondGlyph = ttUSHORT(pairValue); + straw = secondGlyph; + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else { + stbtt_int16 xAdvance = ttSHORT(pairValue + 2); + return xAdvance; + } + } + } else + return 0; + break; + } + + case 2: { + stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); + stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); + if (valueFormat1 == 4 && valueFormat2 == 0) { // Support more formats? + stbtt_uint16 classDef1Offset = ttUSHORT(table + 8); + stbtt_uint16 classDef2Offset = ttUSHORT(table + 10); + int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1); + int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2); + + stbtt_uint16 class1Count = ttUSHORT(table + 12); + stbtt_uint16 class2Count = ttUSHORT(table + 14); + stbtt_uint8 *class1Records, *class2Records; + stbtt_int16 xAdvance; + + if (glyph1class < 0 || glyph1class >= class1Count) return 0; // malformed + if (glyph2class < 0 || glyph2class >= class2Count) return 0; // malformed + + class1Records = table + 16; + class2Records = class1Records + 2 * (glyph1class * class2Count); + xAdvance = ttSHORT(class2Records + 2 * glyph2class); + return xAdvance; + } else + return 0; + break; + } default: - // TODO: Implement other stuff. - break; - } - } + return 0; // Unsupported position format + } + } + } - return 0; + return 0; } STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2) @@ -2559,8 +2618,7 @@ STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int if (info->gpos) xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2); - - if (info->kern) + else if (info->kern) xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2); return xAdvance; @@ -2621,6 +2679,45 @@ STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) STBTT_free(v, info->userdata); } +STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl) +{ + int i; + stbtt_uint8 *data = info->data; + stbtt_uint8 *svg_doc_list = data + stbtt__get_svg((stbtt_fontinfo *) info); + + int numEntries = ttUSHORT(svg_doc_list); + stbtt_uint8 *svg_docs = svg_doc_list + 2; + + for(i=0; i= ttUSHORT(svg_doc)) && (gl <= ttUSHORT(svg_doc + 2))) + return svg_doc; + } + return 0; +} + +STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg) +{ + stbtt_uint8 *data = info->data; + stbtt_uint8 *svg_doc; + + if (info->svg == 0) + return 0; + + svg_doc = stbtt_FindSVGDoc(info, gl); + if (svg_doc != NULL) { + *svg = (char *) data + info->svg + ttULONG(svg_doc + 4); + return ttULONG(svg_doc + 8); + } else { + return 0; + } +} + +STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg) +{ + return stbtt_GetGlyphSVG(info, stbtt_FindGlyphIndex(info, unicode_codepoint), svg); +} + ////////////////////////////////////////////////////////////////////////////// // // antialiasing software rasterizer @@ -2970,6 +3067,23 @@ static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edg } } +static float stbtt__sized_trapezoid_area(float height, float top_width, float bottom_width) +{ + STBTT_assert(top_width >= 0); + STBTT_assert(bottom_width >= 0); + return (top_width + bottom_width) / 2.0f * height; +} + +static float stbtt__position_trapezoid_area(float height, float tx0, float tx1, float bx0, float bx1) +{ + return stbtt__sized_trapezoid_area(height, tx1 - tx0, bx1 - bx0); +} + +static float stbtt__sized_triangle_area(float height, float width) +{ + return height * width / 2; +} + static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) { float y_bottom = y_top+1; @@ -3024,13 +3138,13 @@ static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, float height; // simple case, only spans one pixel int x = (int) x_top; - height = sy1 - sy0; + height = (sy1 - sy0) * e->direction; STBTT_assert(x >= 0 && x < len); - scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2) * height; - scanline_fill[x] += e->direction * height; // everything right of this pixel is filled + scanline[x] += stbtt__position_trapezoid_area(height, x_top, x+1.0f, x_bottom, x+1.0f); + scanline_fill[x] += height; // everything right of this pixel is filled } else { int x,x1,x2; - float y_crossing, step, sign, area; + float y_crossing, y_final, step, sign, area; // covers 2+ pixels if (x_top > x_bottom) { // flip scanline vertically; signed area is the same @@ -3042,32 +3156,83 @@ static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, dx = -dx; dy = -dy; t = x0, x0 = xb, xb = t; - // [DEAR IMGUI] Fix static analyzer warning - (void)dx; // [ImGui: fix static analyzer warning] } + STBTT_assert(dy >= 0); + STBTT_assert(dx >= 0); x1 = (int) x_top; x2 = (int) x_bottom; // compute intersection with y axis at x1+1 - y_crossing = (x1+1 - x0) * dy + y_top; + y_crossing = y_top + dy * (x1+1 - x0); + + // compute intersection with y axis at x2 + y_final = y_top + dy * (x2 - x0); + + // x1 x_top x2 x_bottom + // y_top +------|-----+------------+------------+--------|---+------------+ + // | | | | | | + // | | | | | | + // sy0 | Txxxxx|............|............|............|............| + // y_crossing | *xxxxx.......|............|............|............| + // | | xxxxx..|............|............|............| + // | | /- xx*xxxx........|............|............| + // | | dy < | xxxxxx..|............|............| + // y_final | | \- | xx*xxx.........|............| + // sy1 | | | | xxxxxB...|............| + // | | | | | | + // | | | | | | + // y_bottom +------------+------------+------------+------------+------------+ + // + // goal is to measure the area covered by '.' in each pixel + + // if x2 is right at the right edge of x1, y_crossing can blow up, github #1057 + // @TODO: maybe test against sy1 rather than y_bottom? + if (y_crossing > y_bottom) + y_crossing = y_bottom; sign = e->direction; - // area of the rectangle covered from y0..y_crossing + + // area of the rectangle covered from sy0..y_crossing area = sign * (y_crossing-sy0); - // area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing) - scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2); - step = sign * dy; + // area of the triangle (x_top,sy0), (x1+1,sy0), (x1+1,y_crossing) + scanline[x1] += stbtt__sized_triangle_area(area, x1+1 - x_top); + + // check if final y_crossing is blown up; no test case for this + if (y_final > y_bottom) { + int denom = (x2 - (x1+1)); + y_final = y_bottom; + if (denom != 0) { // [DEAR IMGUI] Avoid div by zero (https://github.com/nothings/stb/issues/1316) + dy = (y_final - y_crossing ) / denom; // if denom=0, y_final = y_crossing, so y_final <= y_bottom + } + } + + // in second pixel, area covered by line segment found in first pixel + // is always a rectangle 1 wide * the height of that line segment; this + // is exactly what the variable 'area' stores. it also gets a contribution + // from the line segment within it. the THIRD pixel will get the first + // pixel's rectangle contribution, the second pixel's rectangle contribution, + // and its own contribution. the 'own contribution' is the same in every pixel except + // the leftmost and rightmost, a trapezoid that slides down in each pixel. + // the second pixel's contribution to the third pixel will be the + // rectangle 1 wide times the height change in the second pixel, which is dy. + + step = sign * dy * 1; // dy is dy/dx, change in y for every 1 change in x, + // which multiplied by 1-pixel-width is how much pixel area changes for each step in x + // so the area advances by 'step' every time + for (x = x1+1; x < x2; ++x) { - scanline[x] += area + step/2; + scanline[x] += area + step/2; // area of trapezoid is 1*step/2 area += step; } - y_crossing += dy * (x2 - (x1+1)); - - STBTT_assert(STBTT_fabs(area) <= 1.01f); + STBTT_assert(STBTT_fabs(area) <= 1.01f); // accumulated error from area += step unless we round step down + STBTT_assert(sy1 > y_final-0.01f); - scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing); + // area covered in the last pixel is the rectangle from all the pixels to the left, + // plus the trapezoid filled by the line segment in this pixel all the way to the right edge + scanline[x2] += area + sign * stbtt__position_trapezoid_area(sy1-y_final, (float) x2, x2+1.0f, x_bottom, x2+1.0f); + // the rest of the line is filled based on the total height of the line segment in this pixel scanline_fill[x2] += sign * (sy1-sy0); } } else { @@ -3075,6 +3240,9 @@ static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, // clipping logic. since this does not match the intended use // of this library, we use a different, very slow brute // force implementation + // note though that this does happen some of the time because + // x_top and x_bottom can be extrapolated at the top & bottom of + // the shape and actually lie outside the bounding box int x; for (x=0; x < len; ++x) { // cases: @@ -3989,6 +4157,7 @@ static float stbtt__oversample_shift(int oversample) STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) { int i,j,k; + int missing_glyph_added = 0; k=0; for (i=0; i < num_ranges; ++i) { @@ -4000,7 +4169,7 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stb int x0,y0,x1,y1; int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; int glyph = stbtt_FindGlyphIndex(info, codepoint); - if (glyph == 0 && spc->skip_missing) { + if (glyph == 0 && (spc->skip_missing || missing_glyph_added)) { rects[k].w = rects[k].h = 0; } else { stbtt_GetGlyphBitmapBoxSubpixel(info,glyph, @@ -4010,6 +4179,8 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stb &x0,&y0,&x1,&y1); rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1); rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1); + if (glyph == 0) + missing_glyph_added = 1; } ++k; } @@ -4044,7 +4215,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info // rects array must be big enough to accommodate all characters in the given ranges STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) { - int i,j,k, return_value = 1; + int i,j,k, missing_glyph = -1, return_value = 1; // save current values int old_h_over = spc->h_oversample; @@ -4109,6 +4280,13 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const bc->yoff = (float) y0 * recip_v + sub_y; bc->xoff2 = (x0 + r->w) * recip_h + sub_x; bc->yoff2 = (y0 + r->h) * recip_v + sub_y; + + if (glyph == 0) + missing_glyph = j; + } else if (spc->skip_missing) { + return_value = 0; + } else if (r->was_packed && r->w == 0 && r->h == 0 && missing_glyph >= 0) { + ranges[i].chardata_for_range[j] = ranges[i].chardata_for_range[missing_glyph]; } else { return_value = 0; // if any fail, report failure } @@ -4132,7 +4310,7 @@ STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges) { stbtt_fontinfo info; - int i,j,n, return_value; // [DEAR IMGUI] removed = 1 + int i, j, n, return_value; // [DEAR IMGUI] removed = 1; //stbrp_context *context = (stbrp_context *) spc->pack_info; stbrp_rect *rects; @@ -4301,15 +4479,14 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex float y_frac; int winding = 0; - orig[0] = x; - //orig[1] = y; // [DEAR IMGUI] commented double assignment - // make sure y never passes through a vertex of the shape y_frac = (float) STBTT_fmod(y, 1.0f); if (y_frac < 0.01f) y += 0.01f; else if (y_frac > 0.99f) y -= 0.01f; + + orig[0] = x; orig[1] = y; // test a ray from (-infinity,y) to (x,y) @@ -4371,35 +4548,35 @@ static float stbtt__cuberoot( float x ) return (float) STBTT_pow( x,1.0f/3.0f); } -// x^3 + c*x^2 + b*x + a = 0 +// x^3 + a*x^2 + b*x + c = 0 static int stbtt__solve_cubic(float a, float b, float c, float* r) { - float s = -a / 3; - float p = b - a*a / 3; - float q = a * (2*a*a - 9*b) / 27 + c; + float s = -a / 3; + float p = b - a*a / 3; + float q = a * (2*a*a - 9*b) / 27 + c; float p3 = p*p*p; - float d = q*q + 4*p3 / 27; - if (d >= 0) { - float z = (float) STBTT_sqrt(d); - float u = (-q + z) / 2; - float v = (-q - z) / 2; - u = stbtt__cuberoot(u); - v = stbtt__cuberoot(v); - r[0] = s + u + v; - return 1; - } else { - float u = (float) STBTT_sqrt(-p/3); - float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative - float m = (float) STBTT_cos(v); + float d = q*q + 4*p3 / 27; + if (d >= 0) { + float z = (float) STBTT_sqrt(d); + float u = (-q + z) / 2; + float v = (-q - z) / 2; + u = stbtt__cuberoot(u); + v = stbtt__cuberoot(v); + r[0] = s + u + v; + return 1; + } else { + float u = (float) STBTT_sqrt(-p/3); + float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative + float m = (float) STBTT_cos(v); float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f; - r[0] = s + u * 2 * m; - r[1] = s - u * (m + n); - r[2] = s - u * (m - n); + r[0] = s + u * 2 * m; + r[1] = s - u * (m + n); + r[2] = s - u * (m - n); //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f); // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe? //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f); //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f); - return 3; + return 3; } } @@ -4410,12 +4587,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc int w,h; unsigned char *data; - // if one scale is 0, use same scale for both - if (scale_x == 0) scale_x = scale_y; - if (scale_y == 0) { - if (scale_x == 0) return NULL; // if both scales are 0, return NULL - scale_y = scale_x; - } + if (scale == 0) return NULL; stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1); @@ -4481,18 +4653,17 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc for (i=0; i < num_verts; ++i) { float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; - // check against every point here rather than inside line/curve primitives -- @TODO: wrong if multiple 'moves' in a row produce a garbage point, and given culling, probably more efficient to do within line/curve - float dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); - if (dist2 < min_dist*min_dist) - min_dist = (float) STBTT_sqrt(dist2); - - if (verts[i].type == STBTT_vline) { + if (verts[i].type == STBTT_vline && precompute[i] != 0.0f) { float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; + float dist,dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + if (dist2 < min_dist*min_dist) + min_dist = (float) STBTT_sqrt(dist2); + // coarse culling against bbox //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist && // sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist) - float dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; + dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; STBTT_assert(i != 0); if (dist < min_dist) { // check position along line @@ -4519,7 +4690,8 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc float ax = x1-x0, ay = y1-y0; float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; float mx = x0 - sx, my = y0 - sy; - float res[3],px,py,t,it; + float res[3] = {0.f,0.f,0.f}; + float px,py,t,it,dist2; float a_inv = precompute[i]; if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula float a = 3*(ax*bx + ay*by); @@ -4546,6 +4718,10 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc float d = (mx*ax+my*ay) * a_inv; num = stbtt__solve_cubic(b, c, d, res); } + dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + if (dist2 < min_dist*min_dist) + min_dist = (float) STBTT_sqrt(dist2); + if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) { t = res[0], it = 1.0f - t; px = it*it*x0 + 2*t*it*x1 + t*t*x2; @@ -4805,6 +4981,12 @@ STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const // FULL VERSION HISTORY // +// 1.25 (2021-07-11) many fixes +// 1.24 (2020-02-05) fix warning +// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS) +// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined +// 1.21 (2019-02-25) fix warning +// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() // 1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod // 1.18 (2018-01-29) add missing function // 1.17 (2017-07-23) make more arguments const; doc fix diff --git a/Code/ThirdParty/glfw/include/GLFW/glfw3.h b/Code/ThirdParty/glfw/include/GLFW/glfw3.h index f8ca3d6..d074de1 100644 --- a/Code/ThirdParty/glfw/include/GLFW/glfw3.h +++ b/Code/ThirdParty/glfw/include/GLFW/glfw3.h @@ -1,9 +1,9 @@ /************************************************************************* - * GLFW 3.2 - www.glfw.org + * GLFW 3.3 - www.glfw.org * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2010 Camilla Berglund + * Copyright (c) 2006-2019 Camilla Löwy * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages @@ -47,32 +47,38 @@ extern "C" { * For more information about how to use this file, see @ref build_include. */ /*! @defgroup context Context reference + * @brief Functions and types related to OpenGL and OpenGL ES contexts. * * This is the reference documentation for OpenGL and OpenGL ES context related * functions. For more task-oriented information, see the @ref context_guide. */ -/*! @defgroup vulkan Vulkan reference +/*! @defgroup vulkan Vulkan support reference + * @brief Functions and types related to Vulkan. * * This is the reference documentation for Vulkan related functions and types. * For more task-oriented information, see the @ref vulkan_guide. */ /*! @defgroup init Initialization, version and error reference + * @brief Functions and types related to initialization and error handling. * * This is the reference documentation for initialization and termination of * the library, version management and error handling. For more task-oriented * information, see the @ref intro_guide. */ /*! @defgroup input Input reference + * @brief Functions and types related to input handling. * * This is the reference documentation for input related functions and types. * For more task-oriented information, see the @ref input_guide. */ /*! @defgroup monitor Monitor reference + * @brief Functions and types related to monitors. * * This is the reference documentation for monitor related functions and types. * For more task-oriented information, see the @ref monitor_guide. */ /*! @defgroup window Window reference + * @brief Functions and types related to windows. * * This is the reference documentation for window related functions and types, * including creation, deletion and event polling. For more task-oriented @@ -90,15 +96,35 @@ extern "C" { #define _WIN32 #endif /* _WIN32 */ +/* Include because most Windows GLU headers need wchar_t and + * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h. + * Include it unconditionally to avoid surprising side-effects. + */ +#include + +/* Include because it is needed by Vulkan and related functions. + * Include it unconditionally to avoid surprising side-effects. + */ +#include + +#if defined(GLFW_INCLUDE_VULKAN) + #include +#endif /* Vulkan header */ + +/* The Vulkan header may have indirectly included windows.h (because of + * VK_USE_PLATFORM_WIN32_KHR) so we offer our replacement symbols after it. + */ + /* It is customary to use APIENTRY for OpenGL function pointer declarations on * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. */ -#ifndef APIENTRY - #ifdef _WIN32 +#if !defined(APIENTRY) + #if defined(_WIN32) #define APIENTRY __stdcall #else #define APIENTRY #endif + #define GLFW_APIENTRY_DEFINED #endif /* APIENTRY */ /* Some Windows OpenGL headers need this. @@ -115,65 +141,111 @@ extern "C" { #define GLFW_CALLBACK_DEFINED #endif /* CALLBACK */ -/* Most Windows GLU headers need wchar_t. - * The OS X OpenGL header blocks the definition of ptrdiff_t by glext.h. - * Include it unconditionally to avoid surprising side-effects. +/* Include the chosen OpenGL or OpenGL ES headers. */ -#include -#include +#if defined(GLFW_INCLUDE_ES1) + + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + +#elif defined(GLFW_INCLUDE_ES2) + + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + +#elif defined(GLFW_INCLUDE_ES3) + + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + +#elif defined(GLFW_INCLUDE_ES31) + + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + +#elif defined(GLFW_INCLUDE_ES32) + + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + +#elif defined(GLFW_INCLUDE_GLCOREARB) + + #if defined(__APPLE__) -/* Include the chosen client API headers. - */ -#if defined(__APPLE__) - #if defined(GLFW_INCLUDE_GLCOREARB) #include #if defined(GLFW_INCLUDE_GLEXT) #include - #endif - #elif !defined(GLFW_INCLUDE_NONE) - #if !defined(GLFW_INCLUDE_GLEXT) - #define GL_GLEXT_LEGACY - #endif - #include - #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif -#else - #if defined(GLFW_INCLUDE_GLCOREARB) + #endif /*GLFW_INCLUDE_GLEXT*/ + + #else /*__APPLE__*/ + #include - #elif defined(GLFW_INCLUDE_ES1) - #include #if defined(GLFW_INCLUDE_GLEXT) - #include + #include #endif - #elif defined(GLFW_INCLUDE_ES2) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include + + #endif /*__APPLE__*/ + +#elif defined(GLFW_INCLUDE_GLU) + + #if defined(__APPLE__) + + #if defined(GLFW_INCLUDE_GLU) + #include #endif - #elif defined(GLFW_INCLUDE_ES3) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include + + #else /*__APPLE__*/ + + #if defined(GLFW_INCLUDE_GLU) + #include #endif - #elif defined(GLFW_INCLUDE_ES31) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include + + #endif /*__APPLE__*/ + +#elif !defined(GLFW_INCLUDE_NONE) && \ + !defined(__gl_h_) && \ + !defined(__gles1_gl_h_) && \ + !defined(__gles2_gl2_h_) && \ + !defined(__gles2_gl3_h_) && \ + !defined(__gles2_gl31_h_) && \ + !defined(__gles2_gl32_h_) && \ + !defined(__gl_glcorearb_h_) && \ + !defined(__gl2_h_) /*legacy*/ && \ + !defined(__gl3_h_) /*legacy*/ && \ + !defined(__gl31_h_) /*legacy*/ && \ + !defined(__gl32_h_) /*legacy*/ && \ + !defined(__glcorearb_h_) /*legacy*/ && \ + !defined(__GL_H__) /*non-standard*/ && \ + !defined(__gltypes_h_) /*non-standard*/ && \ + !defined(__glee_h_) /*non-standard*/ + + #if defined(__APPLE__) + + #if !defined(GLFW_INCLUDE_GLEXT) + #define GL_GLEXT_LEGACY #endif - #elif defined(GLFW_INCLUDE_VULKAN) - #include - #elif !defined(GLFW_INCLUDE_NONE) + #include + + #else /*__APPLE__*/ + #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif - #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif -#endif + + #endif /*__APPLE__*/ + +#endif /* OpenGL and OpenGL ES headers */ #if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) /* GLFW_DLL must be defined by applications that are linking against the DLL @@ -207,45 +279,47 @@ extern "C" { /*! @name GLFW version macros * @{ */ -/*! @brief The major version number of the GLFW library. +/*! @brief The major version number of the GLFW header. * - * This is incremented when the API is changed in non-compatible ways. + * The major version number of the GLFW header. This is incremented when the + * API is changed in non-compatible ways. * @ingroup init */ #define GLFW_VERSION_MAJOR 3 -/*! @brief The minor version number of the GLFW library. +/*! @brief The minor version number of the GLFW header. * - * This is incremented when features are added to the API but it remains - * backward-compatible. + * The minor version number of the GLFW header. This is incremented when + * features are added to the API but it remains backward-compatible. * @ingroup init */ -#define GLFW_VERSION_MINOR 2 -/*! @brief The revision number of the GLFW library. +#define GLFW_VERSION_MINOR 3 +/*! @brief The revision number of the GLFW header. * - * This is incremented when a bug fix release is made that does not contain any - * API changes. + * The revision number of the GLFW header. This is incremented when a bug fix + * release is made that does not contain any API changes. * @ingroup init */ -#define GLFW_VERSION_REVISION 0 +#define GLFW_VERSION_REVISION 7 /*! @} */ -/*! @name Boolean values - * @{ */ /*! @brief One. * - * One. Seriously. You don't _need_ to use this symbol in your code. It's - * just semantic sugar for the number 1. You can use `1` or `true` or `_True` - * or `GL_TRUE` or whatever you want. + * This is only semantic sugar for the number 1. You can instead use `1` or + * `true` or `_True` or `GL_TRUE` or `VK_TRUE` or anything else that is equal + * to one. + * + * @ingroup init */ #define GLFW_TRUE 1 /*! @brief Zero. * - * Zero. Seriously. You don't _need_ to use this symbol in your code. It's - * just just semantic sugar for the number 0. You can use `0` or `false` or - * `_False` or `GL_FALSE` or whatever you want. + * This is only semantic sugar for the number 0. You can instead use `0` or + * `false` or `_False` or `GL_FALSE` or `VK_FALSE` or anything else that is + * equal to zero. + * + * @ingroup init */ #define GLFW_FALSE 0 -/*! @} */ /*! @name Key and button actions * @{ */ @@ -272,7 +346,26 @@ extern "C" { #define GLFW_REPEAT 2 /*! @} */ +/*! @defgroup hat_state Joystick hat states + * @brief Joystick hat states. + * + * See [joystick hat input](@ref joystick_hat) for how these are used. + * + * @ingroup input + * @{ */ +#define GLFW_HAT_CENTERED 0 +#define GLFW_HAT_UP 1 +#define GLFW_HAT_RIGHT 2 +#define GLFW_HAT_DOWN 4 +#define GLFW_HAT_LEFT 8 +#define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP) +#define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN) +#define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP) +#define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN) +/*! @} */ + /*! @defgroup keys Keyboard keys + * @brief Keyboard key IDs. * * See [key input](@ref input_key) for how these are used. * @@ -427,6 +520,7 @@ extern "C" { /*! @} */ /*! @defgroup mods Modifier key flags + * @brief Modifier key flags. * * See [key input](@ref input_key) for how these are used. * @@ -434,21 +528,42 @@ extern "C" { * @{ */ /*! @brief If this bit is set one or more Shift keys were held down. + * + * If this bit is set one or more Shift keys were held down. */ #define GLFW_MOD_SHIFT 0x0001 /*! @brief If this bit is set one or more Control keys were held down. + * + * If this bit is set one or more Control keys were held down. */ #define GLFW_MOD_CONTROL 0x0002 /*! @brief If this bit is set one or more Alt keys were held down. + * + * If this bit is set one or more Alt keys were held down. */ #define GLFW_MOD_ALT 0x0004 /*! @brief If this bit is set one or more Super keys were held down. + * + * If this bit is set one or more Super keys were held down. */ #define GLFW_MOD_SUPER 0x0008 +/*! @brief If this bit is set the Caps Lock key is enabled. + * + * If this bit is set the Caps Lock key is enabled and the @ref + * GLFW_LOCK_KEY_MODS input mode is set. + */ +#define GLFW_MOD_CAPS_LOCK 0x0010 +/*! @brief If this bit is set the Num Lock key is enabled. + * + * If this bit is set the Num Lock key is enabled and the @ref + * GLFW_LOCK_KEY_MODS input mode is set. + */ +#define GLFW_MOD_NUM_LOCK 0x0020 /*! @} */ /*! @defgroup buttons Mouse buttons + * @brief Mouse button IDs. * * See [mouse button input](@ref input_mouse_button) for how these are used. * @@ -469,6 +584,7 @@ extern "C" { /*! @} */ /*! @defgroup joysticks Joysticks + * @brief Joystick IDs. * * See [joystick input](@ref joystick) for how these are used. * @@ -493,12 +609,66 @@ extern "C" { #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 /*! @} */ +/*! @defgroup gamepad_buttons Gamepad buttons + * @brief Gamepad buttons. + * + * See @ref gamepad for how these are used. + * + * @ingroup input + * @{ */ +#define GLFW_GAMEPAD_BUTTON_A 0 +#define GLFW_GAMEPAD_BUTTON_B 1 +#define GLFW_GAMEPAD_BUTTON_X 2 +#define GLFW_GAMEPAD_BUTTON_Y 3 +#define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4 +#define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5 +#define GLFW_GAMEPAD_BUTTON_BACK 6 +#define GLFW_GAMEPAD_BUTTON_START 7 +#define GLFW_GAMEPAD_BUTTON_GUIDE 8 +#define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9 +#define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10 +#define GLFW_GAMEPAD_BUTTON_DPAD_UP 11 +#define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12 +#define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13 +#define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14 +#define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT + +#define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A +#define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B +#define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X +#define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y +/*! @} */ + +/*! @defgroup gamepad_axes Gamepad axes + * @brief Gamepad axes. + * + * See @ref gamepad for how these are used. + * + * @ingroup input + * @{ */ +#define GLFW_GAMEPAD_AXIS_LEFT_X 0 +#define GLFW_GAMEPAD_AXIS_LEFT_Y 1 +#define GLFW_GAMEPAD_AXIS_RIGHT_X 2 +#define GLFW_GAMEPAD_AXIS_RIGHT_Y 3 +#define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4 +#define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5 +#define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER +/*! @} */ + /*! @defgroup errors Error codes + * @brief Error codes. * * See [error handling](@ref error_handling) for how these are used. * * @ingroup init * @{ */ +/*! @brief No error has occurred. + * + * No error has occurred. + * + * @analysis Yay. + */ +#define GLFW_NO_ERROR 0 /*! @brief GLFW has not been initialized. * * This occurs if a GLFW function was called that must not be called unless the @@ -521,8 +691,7 @@ extern "C" { /*! @brief One of the arguments to the function was an invalid enum value. * * One of the arguments to the function was an invalid enum value, for example - * requesting [GLFW_RED_BITS](@ref window_hints_fb) with @ref - * glfwGetWindowAttrib. + * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib. * * @analysis Application programmer error. Fix the offending call. */ @@ -557,7 +726,7 @@ extern "C" { * @par * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only * supports OpenGL ES via EGL, while Nvidia and Intel only support it via - * a WGL or GLX extension. OS X does not provide OpenGL ES at all. The Mesa + * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary * driver. Older graphics drivers do not support Vulkan. */ @@ -619,42 +788,251 @@ extern "C" { #define GLFW_NO_WINDOW_CONTEXT 0x0001000A /*! @} */ +/*! @addtogroup window + * @{ */ +/*! @brief Input focus window hint and attribute + * + * Input focus [window hint](@ref GLFW_FOCUSED_hint) or + * [window attribute](@ref GLFW_FOCUSED_attrib). + */ #define GLFW_FOCUSED 0x00020001 +/*! @brief Window iconification window attribute + * + * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib). + */ #define GLFW_ICONIFIED 0x00020002 +/*! @brief Window resize-ability window hint and attribute + * + * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and + * [window attribute](@ref GLFW_RESIZABLE_attrib). + */ #define GLFW_RESIZABLE 0x00020003 +/*! @brief Window visibility window hint and attribute + * + * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and + * [window attribute](@ref GLFW_VISIBLE_attrib). + */ #define GLFW_VISIBLE 0x00020004 +/*! @brief Window decoration window hint and attribute + * + * Window decoration [window hint](@ref GLFW_DECORATED_hint) and + * [window attribute](@ref GLFW_DECORATED_attrib). + */ #define GLFW_DECORATED 0x00020005 +/*! @brief Window auto-iconification window hint and attribute + * + * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and + * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib). + */ #define GLFW_AUTO_ICONIFY 0x00020006 +/*! @brief Window decoration window hint and attribute + * + * Window decoration [window hint](@ref GLFW_FLOATING_hint) and + * [window attribute](@ref GLFW_FLOATING_attrib). + */ #define GLFW_FLOATING 0x00020007 +/*! @brief Window maximization window hint and attribute + * + * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and + * [window attribute](@ref GLFW_MAXIMIZED_attrib). + */ #define GLFW_MAXIMIZED 0x00020008 +/*! @brief Cursor centering window hint + * + * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint). + */ +#define GLFW_CENTER_CURSOR 0x00020009 +/*! @brief Window framebuffer transparency hint and attribute + * + * Window framebuffer transparency + * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and + * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib). + */ +#define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A +/*! @brief Mouse cursor hover window attribute. + * + * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib). + */ +#define GLFW_HOVERED 0x0002000B +/*! @brief Input focus on calling show window hint and attribute + * + * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or + * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib). + */ +#define GLFW_FOCUS_ON_SHOW 0x0002000C +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_RED_BITS). + */ #define GLFW_RED_BITS 0x00021001 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS). + */ #define GLFW_GREEN_BITS 0x00021002 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS). + */ #define GLFW_BLUE_BITS 0x00021003 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS). + */ #define GLFW_ALPHA_BITS 0x00021004 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS). + */ #define GLFW_DEPTH_BITS 0x00021005 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS). + */ #define GLFW_STENCIL_BITS 0x00021006 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS). + */ #define GLFW_ACCUM_RED_BITS 0x00021007 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS). + */ #define GLFW_ACCUM_GREEN_BITS 0x00021008 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS). + */ #define GLFW_ACCUM_BLUE_BITS 0x00021009 +/*! @brief Framebuffer bit depth hint. + * + * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS). + */ #define GLFW_ACCUM_ALPHA_BITS 0x0002100A +/*! @brief Framebuffer auxiliary buffer hint. + * + * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS). + */ #define GLFW_AUX_BUFFERS 0x0002100B +/*! @brief OpenGL stereoscopic rendering hint. + * + * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO). + */ #define GLFW_STEREO 0x0002100C +/*! @brief Framebuffer MSAA samples hint. + * + * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES). + */ #define GLFW_SAMPLES 0x0002100D +/*! @brief Framebuffer sRGB hint. + * + * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE). + */ #define GLFW_SRGB_CAPABLE 0x0002100E +/*! @brief Monitor refresh rate hint. + * + * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE). + */ #define GLFW_REFRESH_RATE 0x0002100F +/*! @brief Framebuffer double buffering hint. + * + * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER). + */ #define GLFW_DOUBLEBUFFER 0x00021010 +/*! @brief Context client API hint and attribute. + * + * Context client API [hint](@ref GLFW_CLIENT_API_hint) and + * [attribute](@ref GLFW_CLIENT_API_attrib). + */ #define GLFW_CLIENT_API 0x00022001 +/*! @brief Context client API major version hint and attribute. + * + * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint) + * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib). + */ #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 +/*! @brief Context client API minor version hint and attribute. + * + * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint) + * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). + */ #define GLFW_CONTEXT_VERSION_MINOR 0x00022003 +/*! @brief Context client API revision number attribute. + * + * Context client API revision number + * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). + */ #define GLFW_CONTEXT_REVISION 0x00022004 +/*! @brief Context robustness hint and attribute. + * + * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint) + * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib). + */ #define GLFW_CONTEXT_ROBUSTNESS 0x00022005 +/*! @brief OpenGL forward-compatibility hint and attribute. + * + * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) + * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). + */ #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 +/*! @brief Debug mode context hint and attribute. + * + * Debug mode context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and + * [attribute](@ref GLFW_OPENGL_DEBUG_CONTEXT_attrib). + */ #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 +/*! @brief OpenGL profile hint and attribute. + * + * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and + * [attribute](@ref GLFW_OPENGL_PROFILE_attrib). + */ #define GLFW_OPENGL_PROFILE 0x00022008 +/*! @brief Context flush-on-release hint and attribute. + * + * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and + * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib). + */ #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 +/*! @brief Context error suppression hint and attribute. + * + * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and + * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib). + */ #define GLFW_CONTEXT_NO_ERROR 0x0002200A +/*! @brief Context creation API hint and attribute. + * + * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and + * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib). + */ +#define GLFW_CONTEXT_CREATION_API 0x0002200B +/*! @brief Window content area scaling window + * [window hint](@ref GLFW_SCALE_TO_MONITOR). + */ +#define GLFW_SCALE_TO_MONITOR 0x0002200C +/*! @brief macOS specific + * [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint). + */ +#define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001 +/*! @brief macOS specific + * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint). + */ +#define GLFW_COCOA_FRAME_NAME 0x00023002 +/*! @brief macOS specific + * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint). + */ +#define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003 +/*! @brief X11 specific + * [window hint](@ref GLFW_X11_CLASS_NAME_hint). + */ +#define GLFW_X11_CLASS_NAME 0x00024001 +/*! @brief X11 specific + * [window hint](@ref GLFW_X11_CLASS_NAME_hint). + */ +#define GLFW_X11_INSTANCE_NAME 0x00024002 +/*! @} */ #define GLFW_NO_API 0 #define GLFW_OPENGL_API 0x00030001 @@ -671,6 +1049,8 @@ extern "C" { #define GLFW_CURSOR 0x00033001 #define GLFW_STICKY_KEYS 0x00033002 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 +#define GLFW_LOCK_KEY_MODS 0x00033004 +#define GLFW_RAW_MOUSE_MOTION 0x00033005 #define GLFW_CURSOR_NORMAL 0x00034001 #define GLFW_CURSOR_HIDDEN 0x00034002 @@ -680,7 +1060,12 @@ extern "C" { #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 +#define GLFW_NATIVE_CONTEXT_API 0x00036001 +#define GLFW_EGL_CONTEXT_API 0x00036002 +#define GLFW_OSMESA_CONTEXT_API 0x00036003 + /*! @defgroup shapes Standard cursor shapes + * @brief Standard system cursor shapes. * * See [standard cursor creation](@ref cursor_standard) for how these are used. * @@ -722,6 +1107,25 @@ extern "C" { #define GLFW_CONNECTED 0x00040001 #define GLFW_DISCONNECTED 0x00040002 +/*! @addtogroup init + * @{ */ +/*! @brief Joystick hat buttons init hint. + * + * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS). + */ +#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001 +/*! @brief macOS specific init hint. + * + * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint). + */ +#define GLFW_COCOA_CHDIR_RESOURCES 0x00051001 +/*! @brief macOS specific init hint. + * + * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint). + */ +#define GLFW_COCOA_MENUBAR 0x00051002 +/*! @} */ + #define GLFW_DONT_CARE -1 @@ -735,10 +1139,10 @@ extern "C" { * without forcing a cast from a regular pointer. * * @sa @ref context_glext - * @sa glfwGetProcAddress + * @sa @ref glfwGetProcAddress * * @since Added in version 3.0. - + * * @ingroup context */ typedef void (*GLFWglproc)(void); @@ -749,7 +1153,7 @@ typedef void (*GLFWglproc)(void); * without forcing a cast from a regular pointer. * * @sa @ref vulkan_proc - * @sa glfwGetInstanceProcAddress + * @sa @ref glfwGetInstanceProcAddress * * @since Added in version 3.2. * @@ -789,266 +1193,372 @@ typedef struct GLFWwindow GLFWwindow; * * @since Added in version 3.1. * - * @ingroup cursor + * @ingroup input */ typedef struct GLFWcursor GLFWcursor; -/*! @brief The function signature for error callbacks. +/*! @brief The function pointer type for error callbacks. * - * This is the function signature for error callback functions. + * This is the function pointer type for error callbacks. An error callback + * function has the following signature: + * @code + * void callback_name(int error_code, const char* description) + * @endcode * - * @param[in] error An [error code](@ref errors). + * @param[in] error_code An [error code](@ref errors). Future releases may add + * more error codes. * @param[in] description A UTF-8 encoded string describing the error. * + * @pointer_lifetime The error description string is valid until the callback + * function returns. + * * @sa @ref error_handling - * @sa glfwSetErrorCallback + * @sa @ref glfwSetErrorCallback * * @since Added in version 3.0. * * @ingroup init */ -typedef void (* GLFWerrorfun)(int,const char*); +typedef void (* GLFWerrorfun)(int error_code, const char* description); -/*! @brief The function signature for window position callbacks. +/*! @brief The function pointer type for window position callbacks. * - * This is the function signature for window position callback functions. + * This is the function pointer type for window position callbacks. A window + * position callback function has the following signature: + * @code + * void callback_name(GLFWwindow* window, int xpos, int ypos) + * @endcode * * @param[in] window The window that was moved. * @param[in] xpos The new x-coordinate, in screen coordinates, of the - * upper-left corner of the client area of the window. + * upper-left corner of the content area of the window. * @param[in] ypos The new y-coordinate, in screen coordinates, of the - * upper-left corner of the client area of the window. + * upper-left corner of the content area of the window. * * @sa @ref window_pos - * @sa glfwSetWindowPosCallback + * @sa @ref glfwSetWindowPosCallback * * @since Added in version 3.0. * * @ingroup window */ -typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); +typedef void (* GLFWwindowposfun)(GLFWwindow* window, int xpos, int ypos); -/*! @brief The function signature for window resize callbacks. +/*! @brief The function pointer type for window size callbacks. * - * This is the function signature for window size callback functions. + * This is the function pointer type for window size callbacks. A window size + * callback function has the following signature: + * @code + * void callback_name(GLFWwindow* window, int width, int height) + * @endcode * * @param[in] window The window that was resized. * @param[in] width The new width, in screen coordinates, of the window. * @param[in] height The new height, in screen coordinates, of the window. * * @sa @ref window_size - * @sa glfwSetWindowSizeCallback + * @sa @ref glfwSetWindowSizeCallback * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ -typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); +typedef void (* GLFWwindowsizefun)(GLFWwindow* window, int width, int height); -/*! @brief The function signature for window close callbacks. +/*! @brief The function pointer type for window close callbacks. * - * This is the function signature for window close callback functions. + * This is the function pointer type for window close callbacks. A window + * close callback function has the following signature: + * @code + * void function_name(GLFWwindow* window) + * @endcode * * @param[in] window The window that the user attempted to close. * * @sa @ref window_close - * @sa glfwSetWindowCloseCallback + * @sa @ref glfwSetWindowCloseCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ -typedef void (* GLFWwindowclosefun)(GLFWwindow*); +typedef void (* GLFWwindowclosefun)(GLFWwindow* window); -/*! @brief The function signature for window content refresh callbacks. +/*! @brief The function pointer type for window content refresh callbacks. * - * This is the function signature for window refresh callback functions. + * This is the function pointer type for window content refresh callbacks. + * A window content refresh callback function has the following signature: + * @code + * void function_name(GLFWwindow* window); + * @endcode * * @param[in] window The window whose content needs to be refreshed. * * @sa @ref window_refresh - * @sa glfwSetWindowRefreshCallback + * @sa @ref glfwSetWindowRefreshCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ -typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); +typedef void (* GLFWwindowrefreshfun)(GLFWwindow* window); -/*! @brief The function signature for window focus/defocus callbacks. +/*! @brief The function pointer type for window focus callbacks. * - * This is the function signature for window focus callback functions. + * This is the function pointer type for window focus callbacks. A window + * focus callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int focused) + * @endcode * * @param[in] window The window that gained or lost input focus. * @param[in] focused `GLFW_TRUE` if the window was given input focus, or * `GLFW_FALSE` if it lost it. * * @sa @ref window_focus - * @sa glfwSetWindowFocusCallback + * @sa @ref glfwSetWindowFocusCallback * * @since Added in version 3.0. * * @ingroup window */ -typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); +typedef void (* GLFWwindowfocusfun)(GLFWwindow* window, int focused); -/*! @brief The function signature for window iconify/restore callbacks. +/*! @brief The function pointer type for window iconify callbacks. * - * This is the function signature for window iconify/restore callback - * functions. + * This is the function pointer type for window iconify callbacks. A window + * iconify callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int iconified) + * @endcode * * @param[in] window The window that was iconified or restored. * @param[in] iconified `GLFW_TRUE` if the window was iconified, or * `GLFW_FALSE` if it was restored. * * @sa @ref window_iconify - * @sa glfwSetWindowIconifyCallback + * @sa @ref glfwSetWindowIconifyCallback * * @since Added in version 3.0. * * @ingroup window */ -typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); +typedef void (* GLFWwindowiconifyfun)(GLFWwindow* window, int iconified); + +/*! @brief The function pointer type for window maximize callbacks. + * + * This is the function pointer type for window maximize callbacks. A window + * maximize callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int maximized) + * @endcode + * + * @param[in] window The window that was maximized or restored. + * @param[in] maximized `GLFW_TRUE` if the window was maximized, or + * `GLFW_FALSE` if it was restored. + * + * @sa @ref window_maximize + * @sa glfwSetWindowMaximizeCallback + * + * @since Added in version 3.3. + * + * @ingroup window + */ +typedef void (* GLFWwindowmaximizefun)(GLFWwindow* window, int maximized); -/*! @brief The function signature for framebuffer resize callbacks. +/*! @brief The function pointer type for framebuffer size callbacks. * - * This is the function signature for framebuffer resize callback - * functions. + * This is the function pointer type for framebuffer size callbacks. + * A framebuffer size callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int width, int height) + * @endcode * * @param[in] window The window whose framebuffer was resized. * @param[in] width The new width, in pixels, of the framebuffer. * @param[in] height The new height, in pixels, of the framebuffer. * * @sa @ref window_fbsize - * @sa glfwSetFramebufferSizeCallback + * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * * @ingroup window */ -typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); +typedef void (* GLFWframebuffersizefun)(GLFWwindow* window, int width, int height); + +/*! @brief The function pointer type for window content scale callbacks. + * + * This is the function pointer type for window content scale callbacks. + * A window content scale callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, float xscale, float yscale) + * @endcode + * + * @param[in] window The window whose content scale changed. + * @param[in] xscale The new x-axis content scale of the window. + * @param[in] yscale The new y-axis content scale of the window. + * + * @sa @ref window_scale + * @sa @ref glfwSetWindowContentScaleCallback + * + * @since Added in version 3.3. + * + * @ingroup window + */ +typedef void (* GLFWwindowcontentscalefun)(GLFWwindow* window, float xscale, float yscale); -/*! @brief The function signature for mouse button callbacks. +/*! @brief The function pointer type for mouse button callbacks. * - * This is the function signature for mouse button callback functions. + * This is the function pointer type for mouse button callback functions. + * A mouse button callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int button, int action, int mods) + * @endcode * * @param[in] window The window that received the event. * @param[in] button The [mouse button](@ref buttons) that was pressed or * released. - * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. + * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases + * may add more actions. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_mouse_button - * @sa glfwSetMouseButtonCallback + * @sa @ref glfwSetMouseButtonCallback * * @since Added in version 1.0. * @glfw3 Added window handle and modifier mask parameters. * * @ingroup input */ -typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); +typedef void (* GLFWmousebuttonfun)(GLFWwindow* window, int button, int action, int mods); -/*! @brief The function signature for cursor position callbacks. +/*! @brief The function pointer type for cursor position callbacks. * - * This is the function signature for cursor position callback functions. + * This is the function pointer type for cursor position callbacks. A cursor + * position callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, double xpos, double ypos); + * @endcode * * @param[in] window The window that received the event. * @param[in] xpos The new cursor x-coordinate, relative to the left edge of - * the client area. + * the content area. * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the - * client area. + * content area. * * @sa @ref cursor_pos - * @sa glfwSetCursorPosCallback + * @sa @ref glfwSetCursorPosCallback * * @since Added in version 3.0. Replaces `GLFWmouseposfun`. * * @ingroup input */ -typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); +typedef void (* GLFWcursorposfun)(GLFWwindow* window, double xpos, double ypos); -/*! @brief The function signature for cursor enter/leave callbacks. +/*! @brief The function pointer type for cursor enter/leave callbacks. * - * This is the function signature for cursor enter/leave callback functions. + * This is the function pointer type for cursor enter/leave callbacks. + * A cursor enter/leave callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int entered) + * @endcode * * @param[in] window The window that received the event. - * @param[in] entered `GLFW_TRUE` if the cursor entered the window's client + * @param[in] entered `GLFW_TRUE` if the cursor entered the window's content * area, or `GLFW_FALSE` if it left it. * * @sa @ref cursor_enter - * @sa glfwSetCursorEnterCallback + * @sa @ref glfwSetCursorEnterCallback * * @since Added in version 3.0. * * @ingroup input */ -typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); +typedef void (* GLFWcursorenterfun)(GLFWwindow* window, int entered); -/*! @brief The function signature for scroll callbacks. +/*! @brief The function pointer type for scroll callbacks. * - * This is the function signature for scroll callback functions. + * This is the function pointer type for scroll callbacks. A scroll callback + * function has the following signature: + * @code + * void function_name(GLFWwindow* window, double xoffset, double yoffset) + * @endcode * * @param[in] window The window that received the event. * @param[in] xoffset The scroll offset along the x-axis. * @param[in] yoffset The scroll offset along the y-axis. * * @sa @ref scrolling - * @sa glfwSetScrollCallback + * @sa @ref glfwSetScrollCallback * * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. * * @ingroup input */ -typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); +typedef void (* GLFWscrollfun)(GLFWwindow* window, double xoffset, double yoffset); -/*! @brief The function signature for keyboard key callbacks. +/*! @brief The function pointer type for keyboard key callbacks. * - * This is the function signature for keyboard key callback functions. + * This is the function pointer type for keyboard key callbacks. A keyboard + * key callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) + * @endcode * * @param[in] window The window that received the event. * @param[in] key The [keyboard key](@ref keys) that was pressed or released. * @param[in] scancode The system-specific scancode of the key. - * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. + * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. Future + * releases may add more actions. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_key - * @sa glfwSetKeyCallback + * @sa @ref glfwSetKeyCallback * * @since Added in version 1.0. * @glfw3 Added window handle, scancode and modifier mask parameters. * * @ingroup input */ -typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); +typedef void (* GLFWkeyfun)(GLFWwindow* window, int key, int scancode, int action, int mods); -/*! @brief The function signature for Unicode character callbacks. +/*! @brief The function pointer type for Unicode character callbacks. * - * This is the function signature for Unicode character callback functions. + * This is the function pointer type for Unicode character callbacks. + * A Unicode character callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, unsigned int codepoint) + * @endcode * * @param[in] window The window that received the event. * @param[in] codepoint The Unicode code point of the character. * * @sa @ref input_char - * @sa glfwSetCharCallback + * @sa @ref glfwSetCharCallback * * @since Added in version 2.4. * @glfw3 Added window handle parameter. * * @ingroup input */ -typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); +typedef void (* GLFWcharfun)(GLFWwindow* window, unsigned int codepoint); -/*! @brief The function signature for Unicode character with modifiers +/*! @brief The function pointer type for Unicode character with modifiers * callbacks. * - * This is the function signature for Unicode character with modifiers callback - * functions. It is called for each input character, regardless of what - * modifier keys are held down. + * This is the function pointer type for Unicode character with modifiers + * callbacks. It is called for each input character, regardless of what + * modifier keys are held down. A Unicode character with modifiers callback + * function has the following signature: + * @code + * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) + * @endcode * * @param[in] window The window that received the event. * @param[in] codepoint The Unicode code point of the character. @@ -1056,70 +1566,89 @@ typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); * held down. * * @sa @ref input_char - * @sa glfwSetCharModsCallback + * @sa @ref glfwSetCharModsCallback + * + * @deprecated Scheduled for removal in version 4.0. * * @since Added in version 3.1. * * @ingroup input */ -typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); +typedef void (* GLFWcharmodsfun)(GLFWwindow* window, unsigned int codepoint, int mods); -/*! @brief The function signature for file drop callbacks. +/*! @brief The function pointer type for path drop callbacks. * - * This is the function signature for file drop callbacks. + * This is the function pointer type for path drop callbacks. A path drop + * callback function has the following signature: + * @code + * void function_name(GLFWwindow* window, int path_count, const char* paths[]) + * @endcode * * @param[in] window The window that received the event. - * @param[in] count The number of dropped files. + * @param[in] path_count The number of dropped paths. * @param[in] paths The UTF-8 encoded file and/or directory path names. * + * @pointer_lifetime The path array and its strings are valid until the + * callback function returns. + * * @sa @ref path_drop - * @sa glfwSetDropCallback + * @sa @ref glfwSetDropCallback * * @since Added in version 3.1. * * @ingroup input */ -typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**); +typedef void (* GLFWdropfun)(GLFWwindow* window, int path_count, const char* paths[]); -/*! @brief The function signature for monitor configuration callbacks. +/*! @brief The function pointer type for monitor configuration callbacks. * - * This is the function signature for monitor configuration callback functions. + * This is the function pointer type for monitor configuration callbacks. + * A monitor callback function has the following signature: + * @code + * void function_name(GLFWmonitor* monitor, int event) + * @endcode * * @param[in] monitor The monitor that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. + * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future + * releases may add more events. * * @sa @ref monitor_event - * @sa glfwSetMonitorCallback + * @sa @ref glfwSetMonitorCallback * * @since Added in version 3.0. * * @ingroup monitor */ -typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); +typedef void (* GLFWmonitorfun)(GLFWmonitor* monitor, int event); -/*! @brief The function signature for joystick configuration callbacks. +/*! @brief The function pointer type for joystick configuration callbacks. * - * This is the function signature for joystick configuration callback - * functions. + * This is the function pointer type for joystick configuration callbacks. + * A joystick configuration callback function has the following signature: + * @code + * void function_name(int jid, int event) + * @endcode * - * @param[in] joy The joystick that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. + * @param[in] jid The joystick that was connected or disconnected. + * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future + * releases may add more events. * * @sa @ref joystick_event - * @sa glfwSetJoystickCallback + * @sa @ref glfwSetJoystickCallback * * @since Added in version 3.2. * * @ingroup input */ -typedef void (* GLFWjoystickfun)(int,int); +typedef void (* GLFWjoystickfun)(int jid, int event); /*! @brief Video mode type. * * This describes a single video mode. * * @sa @ref monitor_modes - * @sa glfwGetVideoMode glfwGetVideoModes + * @sa @ref glfwGetVideoMode + * @sa @ref glfwGetVideoModes * * @since Added in version 1.0. * @glfw3 Added refresh rate member. @@ -1153,7 +1682,8 @@ typedef struct GLFWvidmode * This describes the gamma ramp for a monitor. * * @sa @ref monitor_gamma - * @sa glfwGetGammaRamp glfwSetGammaRamp + * @sa @ref glfwGetGammaRamp + * @sa @ref glfwSetGammaRamp * * @since Added in version 3.0. * @@ -1176,11 +1706,17 @@ typedef struct GLFWgammaramp } GLFWgammaramp; /*! @brief Image data. + * + * This describes a single 2D image. See the documentation for each related + * function what the expected pixel format is. * * @sa @ref cursor_custom + * @sa @ref window_icon * * @since Added in version 2.1. * @glfw3 Removed format and bytes-per-pixel members. + * + * @ingroup window */ typedef struct GLFWimage { @@ -1195,6 +1731,29 @@ typedef struct GLFWimage unsigned char* pixels; } GLFWimage; +/*! @brief Gamepad input state + * + * This describes the input state of a gamepad. + * + * @sa @ref gamepad + * @sa @ref glfwGetGamepadState + * + * @since Added in version 3.3. + * + * @ingroup input + */ +typedef struct GLFWgamepadstate +{ + /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` + * or `GLFW_RELEASE`. + */ + unsigned char buttons[15]; + /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 + * to 1.0 inclusive. + */ + float axes[6]; +} GLFWgamepadstate; + /************************************************************************* * GLFW API functions @@ -1218,15 +1777,19 @@ typedef struct GLFWimage * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * - * @remark @osx This function will change the current directory of the + * @remark @macos This function will change the current directory of the * application to the `Contents/Resources` subdirectory of the application's - * bundle, if present. This can be disabled with a - * [compile-time option](@ref compile_options_osx). + * bundle, if present. This can be disabled with the @ref + * GLFW_COCOA_CHDIR_RESOURCES init hint. + * + * @remark @x11 This function will set the `LC_CTYPE` category of the + * application locale according to the current environment if that category is + * still "C". This is because the "C" locale breaks Unicode text input. * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init - * @sa glfwTerminate + * @sa @ref glfwTerminate * * @since Added in version 1.0. * @@ -1246,6 +1809,8 @@ GLFWAPI int glfwInit(void); * call this function, as it is called by @ref glfwInit before it returns * failure. * + * This function has no effect if GLFW is not initialized. + * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark This function may be called before @ref glfwInit. @@ -1258,7 +1823,7 @@ GLFWAPI int glfwInit(void); * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init - * @sa glfwInit + * @sa @ref glfwInit * * @since Added in version 1.0. * @@ -1266,6 +1831,38 @@ GLFWAPI int glfwInit(void); */ GLFWAPI void glfwTerminate(void); +/*! @brief Sets the specified init hint to the desired value. + * + * This function sets hints for the next initialization of GLFW. + * + * The values you set hints to are never reset by GLFW, but they only take + * effect during initialization. Once GLFW has been initialized, any values + * you set will be ignored until the library is terminated and initialized + * again. + * + * Some hints are platform specific. These may be set on any platform but they + * will only affect their specific platform. Other platforms will ignore them. + * Setting these hints requires no platform specific headers or functions. + * + * @param[in] hint The [init hint](@ref init_hints) to set. + * @param[in] value The new value of the init hint. + * + * @errors Possible errors include @ref GLFW_INVALID_ENUM and @ref + * GLFW_INVALID_VALUE. + * + * @remarks This function may be called before @ref glfwInit. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa init_hints + * @sa glfwInit + * + * @since Added in version 3.3. + * + * @ingroup init + */ +GLFWAPI void glfwInitHint(int hint, int value); + /*! @brief Retrieves the version of the GLFW library. * * This function retrieves the major, minor and revision numbers of the GLFW @@ -1285,7 +1882,7 @@ GLFWAPI void glfwTerminate(void); * @thread_safety This function may be called from any thread. * * @sa @ref intro_version - * @sa glfwGetVersionString + * @sa @ref glfwGetVersionString * * @since Added in version 1.0. * @@ -1316,7 +1913,7 @@ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); * @thread_safety This function may be called from any thread. * * @sa @ref intro_version - * @sa glfwGetVersion + * @sa @ref glfwGetVersion * * @since Added in version 3.0. * @@ -1324,11 +1921,46 @@ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); */ GLFWAPI const char* glfwGetVersionString(void); +/*! @brief Returns and clears the last error for the calling thread. + * + * This function returns and clears the [error code](@ref errors) of the last + * error that occurred on the calling thread, and optionally a UTF-8 encoded + * human-readable description of it. If no error has occurred since the last + * call, it returns @ref GLFW_NO_ERROR (zero) and the description pointer is + * set to `NULL`. + * + * @param[in] description Where to store the error description pointer, or `NULL`. + * @return The last error code for the calling thread, or @ref GLFW_NO_ERROR + * (zero). + * + * @errors None. + * + * @pointer_lifetime The returned string is allocated and freed by GLFW. You + * should not free it yourself. It is guaranteed to be valid only until the + * next error occurs or the library is terminated. + * + * @remark This function may be called before @ref glfwInit. + * + * @thread_safety This function may be called from any thread. + * + * @sa @ref error_handling + * @sa @ref glfwSetErrorCallback + * + * @since Added in version 3.3. + * + * @ingroup init + */ +GLFWAPI int glfwGetError(const char** description); + /*! @brief Sets the error callback. * * This function sets the error callback, which is called with an error code * and a human-readable description each time a GLFW error occurs. * + * The error code is set before the callback is called. Calling @ref + * glfwGetError from the error callback will return the same value as the error + * code argument. + * * The error callback is called on the thread where the error occurred. If you * are using GLFW from multiple threads, your error callback needs to be * written accordingly. @@ -1340,10 +1972,17 @@ GLFWAPI const char* glfwGetVersionString(void); * Once set, the error callback remains set even after the library has been * terminated. * - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set. * + * @callback_signature + * @code + * void callback_name(int error_code, const char* description) + * @endcode + * For more information about the callback parameters, see the + * [callback pointer type](@ref GLFWerrorfun). + * * @errors None. * * @remark This function may be called before @ref glfwInit. @@ -1351,12 +1990,13 @@ GLFWAPI const char* glfwGetVersionString(void); * @thread_safety This function must only be called from the main thread. * * @sa @ref error_handling + * @sa @ref glfwGetError * * @since Added in version 3.0. * * @ingroup init */ -GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); +GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback); /*! @brief Returns the currently connected monitors. * @@ -1379,7 +2019,7 @@ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); * * @sa @ref monitor_monitors * @sa @ref monitor_event - * @sa glfwGetPrimaryMonitor + * @sa @ref glfwGetPrimaryMonitor * * @since Added in version 3.0. * @@ -1403,7 +2043,7 @@ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); * glfwGetMonitors. * * @sa @ref monitor_monitors - * @sa glfwGetMonitors + * @sa @ref glfwGetMonitors * * @since Added in version 3.0. * @@ -1430,11 +2070,42 @@ GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); * * @sa @ref monitor_properties * - * @since Added in version 3.0. + * @since Added in version 3.0. + * + * @ingroup monitor + */ +GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); + +/*! @brief Retrieves the work area of the monitor. + * + * This function returns the position, in screen coordinates, of the upper-left + * corner of the work area of the specified monitor along with the work area + * size in screen coordinates. The work area is defined as the area of the + * monitor not occluded by the operating system task bar where present. If no + * task bar exists then the work area is the monitor resolution in screen + * coordinates. + * + * Any or all of the position and size arguments may be `NULL`. If an error + * occurs, all non-`NULL` position and size arguments will be set to zero. + * + * @param[in] monitor The monitor to query. + * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. + * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. + * @param[out] width Where to store the monitor width, or `NULL`. + * @param[out] height Where to store the monitor height, or `NULL`. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref monitor_workarea + * + * @since Added in version 3.3. * * @ingroup monitor */ -GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); +GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height); /*! @brief Returns the physical size of the monitor. * @@ -1457,8 +2128,8 @@ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * - * @remark @win32 calculates the returned physical size from the - * current resolution and system DPI instead of querying the monitor EDID data. + * @remark @win32 On Windows 8 and earlier the physical size is calculated from + * the current resolution and system DPI instead of querying the monitor EDID data. * * @thread_safety This function must only be called from the main thread. * @@ -1470,6 +2141,38 @@ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); */ GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); +/*! @brief Retrieves the content scale for the specified monitor. + * + * This function retrieves the content scale for the specified monitor. The + * content scale is the ratio between the current DPI and the platform's + * default DPI. This is especially important for text and any UI elements. If + * the pixel dimensions of your UI scaled by this look appropriate on your + * machine then it should appear at a reasonable size on other machines + * regardless of their DPI and scaling settings. This relies on the system DPI + * and scaling settings being somewhat correct. + * + * The content scale may depend on both the monitor resolution and pixel + * density and on user settings. It may be very different from the raw DPI + * calculated from the physical size and current resolution. + * + * @param[in] monitor The monitor to query. + * @param[out] xscale Where to store the x-axis content scale, or `NULL`. + * @param[out] yscale Where to store the y-axis content scale, or `NULL`. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref monitor_scale + * @sa @ref glfwGetWindowContentScale + * + * @since Added in version 3.3. + * + * @ingroup monitor + */ +GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale); + /*! @brief Returns the name of the specified monitor. * * This function returns a human-readable name, encoded as UTF-8, of the @@ -1496,17 +2199,74 @@ GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* */ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); +/*! @brief Sets the user pointer of the specified monitor. + * + * This function sets the user-defined pointer of the specified monitor. The + * current value is retained until the monitor is disconnected. The initial + * value is `NULL`. + * + * This function may be called from the monitor callback, even for a monitor + * that is being disconnected. + * + * @param[in] monitor The monitor whose pointer to set. + * @param[in] pointer The new value. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function may be called from any thread. Access is not + * synchronized. + * + * @sa @ref monitor_userptr + * @sa @ref glfwGetMonitorUserPointer + * + * @since Added in version 3.3. + * + * @ingroup monitor + */ +GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer); + +/*! @brief Returns the user pointer of the specified monitor. + * + * This function returns the current value of the user-defined pointer of the + * specified monitor. The initial value is `NULL`. + * + * This function may be called from the monitor callback, even for a monitor + * that is being disconnected. + * + * @param[in] monitor The monitor whose pointer to return. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function may be called from any thread. Access is not + * synchronized. + * + * @sa @ref monitor_userptr + * @sa @ref glfwSetMonitorUserPointer + * + * @since Added in version 3.3. + * + * @ingroup monitor + */ +GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* monitor); + /*! @brief Sets the monitor configuration callback. * * This function sets the monitor configuration callback, or removes the * currently set callback. This is called when a monitor is connected to or * disconnected from the system. * - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWmonitor* monitor, int event) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWmonitorfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -1517,14 +2277,15 @@ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); * * @ingroup monitor */ -GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); +GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); /*! @brief Returns the available video modes for the specified monitor. * * This function returns an array of all video modes supported by the specified * monitor. The returned array is sorted in ascending order, first by color - * bit depth (the sum of all channel depths) and then by resolution area (the - * product of width and height). + * bit depth (the sum of all channel depths), then by resolution area (the + * product of width and height), then resolution width and finally by refresh + * rate. * * @param[in] monitor The monitor to query. * @param[out] count Where to store the number of video modes in the returned @@ -1543,7 +2304,7 @@ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_modes - * @sa glfwGetVideoMode + * @sa @ref glfwGetVideoMode * * @since Added in version 1.0. * @glfw3 Changed to return an array of modes for a specific monitor. @@ -1572,7 +2333,7 @@ GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_modes - * @sa glfwGetVideoModes + * @sa @ref glfwGetVideoModes * * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. * @@ -1582,9 +2343,17 @@ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); /*! @brief Generates a gamma ramp and sets it for the specified monitor. * - * This function generates a 256-element gamma ramp from the specified exponent - * and then calls @ref glfwSetGammaRamp with it. The value must be a finite - * number greater than zero. + * This function generates an appropriately sized gamma ramp from the specified + * exponent and then calls @ref glfwSetGammaRamp with it. The value must be + * a finite number greater than zero. + * + * The software controlled gamma ramp is applied _in addition_ to the hardware + * gamma correction, which today is usually an approximation of sRGB gamma. + * This means that setting a perfectly linear ramp, or gamma 1.0, will produce + * the default (usually sRGB-like) behavior. + * + * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref + * GLFW_SRGB_CAPABLE hint. * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] gamma The desired exponent. @@ -1592,6 +2361,9 @@ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * + * @remark @wayland Gamma handling is a privileged protocol, this function + * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma @@ -1613,6 +2385,10 @@ GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland Gamma handling is a privileged protocol, this function + * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR while + * returning `NULL`. + * * @pointer_lifetime The returned structure and its arrays are allocated and * freed by GLFW. You should not free them yourself. They are valid until the * specified monitor is disconnected, this function is called again for that @@ -1634,17 +2410,28 @@ GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); * original gamma ramp for that monitor is saved by GLFW the first time this * function is called and is restored by @ref glfwTerminate. * + * The software controlled gamma ramp is applied _in addition_ to the hardware + * gamma correction, which today is usually an approximation of sRGB gamma. + * This means that setting a perfectly linear ramp, or gamma 1.0, will produce + * the default (usually sRGB-like) behavior. + * + * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref + * GLFW_SRGB_CAPABLE hint. + * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] ramp The gamma ramp to use. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * - * @remark Gamma ramp sizes other than 256 are not supported by all platforms - * or graphics hardware. + * @remark The size of the specified gamma ramp should match the size of the + * current ramp for that monitor. * * @remark @win32 The gamma ramp size must be 256. * + * @remark @wayland Gamma handling is a privileged protocol, this function + * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. + * * @pointer_lifetime The specified gamma ramp is copied before this function * returns. * @@ -1668,7 +2455,8 @@ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints - * @sa glfwWindowHint + * @sa @ref glfwWindowHint + * @sa @ref glfwWindowHintString * * @since Added in version 3.0. * @@ -1679,14 +2467,20 @@ GLFWAPI void glfwDefaultWindowHints(void); /*! @brief Sets the specified window hint to the desired value. * * This function sets hints for the next call to @ref glfwCreateWindow. The - * hints, once set, retain their values until changed by a call to @ref - * glfwWindowHint or @ref glfwDefaultWindowHints, or until the library is - * terminated. + * hints, once set, retain their values until changed by a call to this + * function or @ref glfwDefaultWindowHints, or until the library is terminated. + * + * Only integer value hints can be set with this function. String value hints + * are set with @ref glfwWindowHintString. * * This function does not check whether the specified hint values are valid. * If you set hints to invalid values this will instead be reported by the next * call to @ref glfwCreateWindow. * + * Some hints are platform specific. These may be set on any platform but they + * will only affect their specific platform. Other platforms will ignore them. + * Setting these hints requires no platform specific headers or functions. + * * @param[in] hint The [window hint](@ref window_hints) to set. * @param[in] value The new value of the window hint. * @@ -1696,7 +2490,8 @@ GLFWAPI void glfwDefaultWindowHints(void); * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints - * @sa glfwDefaultWindowHints + * @sa @ref glfwWindowHintString + * @sa @ref glfwDefaultWindowHints * * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. * @@ -1704,6 +2499,44 @@ GLFWAPI void glfwDefaultWindowHints(void); */ GLFWAPI void glfwWindowHint(int hint, int value); +/*! @brief Sets the specified window hint to the desired value. + * + * This function sets hints for the next call to @ref glfwCreateWindow. The + * hints, once set, retain their values until changed by a call to this + * function or @ref glfwDefaultWindowHints, or until the library is terminated. + * + * Only string type hints can be set with this function. Integer value hints + * are set with @ref glfwWindowHint. + * + * This function does not check whether the specified hint values are valid. + * If you set hints to invalid values this will instead be reported by the next + * call to @ref glfwCreateWindow. + * + * Some hints are platform specific. These may be set on any platform but they + * will only affect their specific platform. Other platforms will ignore them. + * Setting these hints requires no platform specific headers or functions. + * + * @param[in] hint The [window hint](@ref window_hints) to set. + * @param[in] value The new value of the window hint. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_INVALID_ENUM. + * + * @pointer_lifetime The specified string is copied before this function + * returns. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_hints + * @sa @ref glfwWindowHint + * @sa @ref glfwDefaultWindowHints + * + * @since Added in version 3.3. + * + * @ingroup window + */ +GLFWAPI void glfwWindowHintString(int hint, const char* value); + /*! @brief Creates a window and its associated context. * * This function creates a window and its associated OpenGL or OpenGL ES @@ -1735,9 +2568,13 @@ GLFWAPI void glfwWindowHint(int hint, int value); * screen windows, including the creation of so called _windowed full screen_ * or _borderless full screen_ windows, see @ref window_windowed_full_screen. * + * Once you have created the window, you can switch it between windowed and + * full screen mode with @ref glfwSetWindowMonitor. This will not affect its + * OpenGL or OpenGL ES context. + * * By default, newly created windows use the placement recommended by the * window system. To create the window at a specific position, make it - * initially invisible using the [GLFW_VISIBLE](@ref window_hints_wnd) window + * initially invisible using the [GLFW_VISIBLE](@ref GLFW_VISIBLE_hint) window * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) * it. * @@ -1771,35 +2608,47 @@ GLFWAPI void glfwWindowHint(int hint, int value); * @remark @win32 Window creation will fail if the Microsoft GDI software * OpenGL implementation is the only one available. * - * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` - * it will be set as the icon for the window. If no such icon is present, the - * `IDI_WINLOGO` icon will be used instead. + * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it + * will be set as the initial icon for the window. If no such icon is present, + * the `IDI_APPLICATION` icon will be used instead. To set a different icon, + * see @ref glfwSetWindowIcon. * * @remark @win32 The context to share resources with must not be current on * any other thread. * - * @remark @osx The GLFW window has no icon, as it is not a document + * @remark @macos The OS only supports forward-compatible core profile contexts + * for OpenGL versions 3.2 and later. Before creating an OpenGL context of + * version 3.2 or later you must set the + * [GLFW_OPENGL_FORWARD_COMPAT](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) and + * [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) hints accordingly. + * OpenGL 3.0 and 3.1 contexts are not supported at all on macOS. + * + * @remark @macos The GLFW window has no icon, as it is not a document * window, but the dock icon will be the same as the application bundle's icon. * For more information on bundles, see the * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) * in the Mac Developer Library. * - * @remark @osx The first time a window is created the menu bar is populated - * with common commands like Hide, Quit and About. The About entry opens - * a minimal about dialog with information from the application's bundle. The - * menu bar can be disabled with a - * [compile-time option](@ref compile_options_osx). - * - * @remark @osx On OS X 10.10 and later the window frame will not be rendered - * at full resolution on Retina displays unless the `NSHighResolutionCapable` - * key is enabled in the application bundle's `Info.plist`. For more - * information, see + * @remark @macos The first time a window is created the menu bar is created. + * If GLFW finds a `MainMenu.nib` it is loaded and assumed to contain a menu + * bar. Otherwise a minimal menu bar is created manually with common commands + * like Hide, Quit and About. The About entry opens a minimal about dialog + * with information from the application's bundle. Menu bar creation can be + * disabled entirely with the @ref GLFW_COCOA_MENUBAR init hint. + * + * @remark @macos On OS X 10.10 and later the window frame will not be rendered + * at full resolution on Retina displays unless the + * [GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) + * hint is `GLFW_TRUE` and the `NSHighResolutionCapable` key is enabled in the + * application bundle's `Info.plist`. For more information, see * [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) * in the Mac Developer Library. The GLFW test and example programs use * a custom `Info.plist` template for this, which can be found as * `CMake/MacOSXBundleInfo.plist.in` in the source tree. * - * @remark @x11 There is no mechanism for setting the window icon yet. + * @remark @macos When activating frame autosaving with + * [GLFW_COCOA_FRAME_NAME](@ref GLFW_COCOA_FRAME_NAME_hint), the specified + * window size and position may be overridden by previously saved values. * * @remark @x11 Some window managers will not respect the placement of * initially hidden windows. @@ -1809,12 +2658,32 @@ GLFWAPI void glfwWindowHint(int hint, int value); * query the final size, position or other attributes directly after window * creation. * - * @reentrancy This function must not be called from a callback. + * @remark @x11 The class part of the `WM_CLASS` window property will by + * default be set to the window title passed to this function. The instance + * part will use the contents of the `RESOURCE_NAME` environment variable, if + * present and not empty, or fall back to the window title. Set the + * [GLFW_X11_CLASS_NAME](@ref GLFW_X11_CLASS_NAME_hint) and + * [GLFW_X11_INSTANCE_NAME](@ref GLFW_X11_INSTANCE_NAME_hint) window hints to + * override this. + * + * @remark @wayland Compositors should implement the xdg-decoration protocol + * for GLFW to decorate the window properly. If this protocol isn't + * supported, or if the compositor prefers client-side decorations, a very + * simple fallback frame will be drawn using the wp_viewporter protocol. A + * compositor can still emit close, maximize or fullscreen events, using for + * instance a keybind mechanism. If neither of these protocols is supported, + * the window won't be decorated. + * + * @remark @wayland A full screen window will not attempt to change the mode, + * no matter what the requested size or refresh rate. + * + * @remark @wayland Screensaver inhibition requires the idle-inhibit protocol + * to be implemented in the user's compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_creation - * @sa glfwDestroyWindow + * @sa @ref glfwDestroyWindow * * @since Added in version 3.0. Replaces `glfwOpenWindow`. * @@ -1843,7 +2712,7 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, G * @thread_safety This function must only be called from the main thread. * * @sa @ref window_creation - * @sa glfwCreateWindow + * @sa @ref glfwCreateWindow * * @since Added in version 3.0. Replaces `glfwCloseWindow`. * @@ -1904,7 +2773,7 @@ GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * - * @remark @osx The window title will not be updated until the next time you + * @remark @macos The window title will not be updated until the next time you * process events. * * @thread_safety This function must only be called from the main thread. @@ -1925,6 +2794,10 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); * selected. If no images are specified, the window reverts to its default * icon. * + * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight + * bits per channel with the red channel first. They are arranged canonically + * as packed sequential rows, starting from the top-left corner. + * * The desired image sizes varies depending on platform and system settings. * The selected images will be rescaled as needed. Good sizes include 16x16, * 32x32 and 48x48. @@ -1941,12 +2814,16 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); * @pointer_lifetime The specified image data is copied before this function * returns. * - * @remark @osx The GLFW window has no icon, as it is not a document - * window, but the dock icon will be the same as the application bundle's icon. - * For more information on bundles, see the + * @remark @macos The GLFW window has no icon, as it is not a document + * window, so this function does nothing. The dock icon will be the same as + * the application bundle's icon. For more information on bundles, see the * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) * in the Mac Developer Library. * + * @remark @wayland There is no existing protocol to change an icon, the + * window will thus inherit the one defined in the application's desktop file. + * This function always emits @ref GLFW_PLATFORM_ERROR. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_icon @@ -1957,27 +2834,31 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); */ GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); -/*! @brief Retrieves the position of the client area of the specified window. +/*! @brief Retrieves the position of the content area of the specified window. * * This function retrieves the position, in screen coordinates, of the - * upper-left corner of the client area of the specified window. + * upper-left corner of the content area of the specified window. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] window The window to query. * @param[out] xpos Where to store the x-coordinate of the upper-left corner of - * the client area, or `NULL`. + * the content area, or `NULL`. * @param[out] ypos Where to store the y-coordinate of the upper-left corner of - * the client area, or `NULL`. + * the content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland There is no way for an application to retrieve the global + * position of its windows, this function will always emit @ref + * GLFW_PLATFORM_ERROR. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos - * @sa glfwSetWindowPos + * @sa @ref glfwSetWindowPos * * @since Added in version 3.0. * @@ -1985,10 +2866,10 @@ GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* i */ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); -/*! @brief Sets the position of the client area of the specified window. +/*! @brief Sets the position of the content area of the specified window. * * This function sets the position, in screen coordinates, of the upper-left - * corner of the client area of the specified windowed mode window. If the + * corner of the content area of the specified windowed mode window. If the * window is a full screen window, this function does nothing. * * __Do not use this function__ to move an already visible window unless you @@ -1998,16 +2879,20 @@ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); * cannot and should not override these limits. * * @param[in] window The window to query. - * @param[in] xpos The x-coordinate of the upper-left corner of the client area. - * @param[in] ypos The y-coordinate of the upper-left corner of the client area. + * @param[in] xpos The x-coordinate of the upper-left corner of the content area. + * @param[in] ypos The y-coordinate of the upper-left corner of the content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland There is no way for an application to set the global + * position of its windows, this function will always emit @ref + * GLFW_PLATFORM_ERROR. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos - * @sa glfwGetWindowPos + * @sa @ref glfwGetWindowPos * * @since Added in version 1.0. * @glfw3 Added window handle parameter. @@ -2016,9 +2901,9 @@ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); */ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); -/*! @brief Retrieves the size of the client area of the specified window. +/*! @brief Retrieves the size of the content area of the specified window. * - * This function retrieves the size, in screen coordinates, of the client area + * This function retrieves the size, in screen coordinates, of the content area * of the specified window. If you wish to retrieve the size of the * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. * @@ -2027,9 +2912,9 @@ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); * * @param[in] window The window whose size to retrieve. * @param[out] width Where to store the width, in screen coordinates, of the - * client area, or `NULL`. + * content area, or `NULL`. * @param[out] height Where to store the height, in screen coordinates, of the - * client area, or `NULL`. + * content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. @@ -2037,7 +2922,7 @@ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size - * @sa glfwSetWindowSize + * @sa @ref glfwSetWindowSize * * @since Added in version 1.0. * @glfw3 Added window handle parameter. @@ -2048,34 +2933,40 @@ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); /*! @brief Sets the size limits of the specified window. * - * This function sets the size limits of the client area of the specified - * window. If the window is full screen, the size limits only take effect if + * This function sets the size limits of the content area of the specified + * window. If the window is full screen, the size limits only take effect * once it is made windowed. If the window is not resizable, this function * does nothing. * * The size limits are applied immediately to a windowed mode window and may * cause it to be resized. * + * The maximum dimensions must be greater than or equal to the minimum + * dimensions and all must be greater than or equal to zero. + * * @param[in] window The window to set limits for. - * @param[in] minwidth The minimum width, in screen coordinates, of the client + * @param[in] minwidth The minimum width, in screen coordinates, of the content * area, or `GLFW_DONT_CARE`. * @param[in] minheight The minimum height, in screen coordinates, of the - * client area, or `GLFW_DONT_CARE`. - * @param[in] maxwidth The maximum width, in screen coordinates, of the client + * content area, or `GLFW_DONT_CARE`. + * @param[in] maxwidth The maximum width, in screen coordinates, of the content * area, or `GLFW_DONT_CARE`. * @param[in] maxheight The maximum height, in screen coordinates, of the - * client area, or `GLFW_DONT_CARE`. + * content area, or `GLFW_DONT_CARE`. * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark If you set size limits and an aspect ratio that conflict, the * results are undefined. * + * @remark @wayland The size limits will not be applied until the window is + * actually resized, either by the user or by the compositor. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_sizelimits - * @sa glfwSetWindowAspectRatio + * @sa @ref glfwSetWindowAspectRatio * * @since Added in version 3.2. * @@ -2085,7 +2976,7 @@ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minhe /*! @brief Sets the aspect ratio of the specified window. * - * This function sets the required aspect ratio of the client area of the + * This function sets the required aspect ratio of the content area of the * specified window. If the window is full screen, the aspect ratio only takes * effect once it is made windowed. If the window is not resizable, this * function does nothing. @@ -2112,10 +3003,13 @@ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minhe * @remark If you set size limits and an aspect ratio that conflict, the * results are undefined. * + * @remark @wayland The aspect ratio will not be applied until the window is + * actually resized, either by the user or by the compositor. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_sizelimits - * @sa glfwSetWindowSizeLimits + * @sa @ref glfwSetWindowSizeLimits * * @since Added in version 3.2. * @@ -2123,9 +3017,9 @@ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minhe */ GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); -/*! @brief Sets the size of the client area of the specified window. +/*! @brief Sets the size of the content area of the specified window. * - * This function sets the size, in screen coordinates, of the client area of + * This function sets the size, in screen coordinates, of the content area of * the specified window. * * For full screen windows, this function updates the resolution of its desired @@ -2141,18 +3035,21 @@ GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); * * @param[in] window The window to resize. * @param[in] width The desired width, in screen coordinates, of the window - * client area. + * content area. * @param[in] height The desired height, in screen coordinates, of the window - * client area. + * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland A full screen window will not attempt to change the mode, + * no matter what the requested size. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size - * @sa glfwGetWindowSize - * @sa glfwSetWindowMonitor + * @sa @ref glfwGetWindowSize + * @sa @ref glfwSetWindowMonitor * * @since Added in version 1.0. * @glfw3 Added window handle parameter. @@ -2182,7 +3079,7 @@ GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); * @thread_safety This function must only be called from the main thread. * * @sa @ref window_fbsize - * @sa glfwSetFramebufferSizeCallback + * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * @@ -2227,6 +3124,95 @@ GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height) */ GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); +/*! @brief Retrieves the content scale for the specified window. + * + * This function retrieves the content scale for the specified window. The + * content scale is the ratio between the current DPI and the platform's + * default DPI. This is especially important for text and any UI elements. If + * the pixel dimensions of your UI scaled by this look appropriate on your + * machine then it should appear at a reasonable size on other machines + * regardless of their DPI and scaling settings. This relies on the system DPI + * and scaling settings being somewhat correct. + * + * On systems where each monitors can have its own content scale, the window + * content scale will depend on which monitor the system considers the window + * to be on. + * + * @param[in] window The window to query. + * @param[out] xscale Where to store the x-axis content scale, or `NULL`. + * @param[out] yscale Where to store the y-axis content scale, or `NULL`. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_scale + * @sa @ref glfwSetWindowContentScaleCallback + * @sa @ref glfwGetMonitorContentScale + * + * @since Added in version 3.3. + * + * @ingroup window + */ +GLFWAPI void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale); + +/*! @brief Returns the opacity of the whole window. + * + * This function returns the opacity of the window, including any decorations. + * + * The opacity (or alpha) value is a positive finite number between zero and + * one, where zero is fully transparent and one is fully opaque. If the system + * does not support whole window transparency, this function always returns one. + * + * The initial opacity value for newly created windows is one. + * + * @param[in] window The window to query. + * @return The opacity value of the specified window. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_transparency + * @sa @ref glfwSetWindowOpacity + * + * @since Added in version 3.3. + * + * @ingroup window + */ +GLFWAPI float glfwGetWindowOpacity(GLFWwindow* window); + +/*! @brief Sets the opacity of the whole window. + * + * This function sets the opacity of the window, including any decorations. + * + * The opacity (or alpha) value is a positive finite number between zero and + * one, where zero is fully transparent and one is fully opaque. + * + * The initial opacity value for newly created windows is one. + * + * A window created with framebuffer transparency may not use whole window + * transparency. The results of doing this are undefined. + * + * @param[in] window The window to set the opacity for. + * @param[in] opacity The desired opacity of the specified window. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_transparency + * @sa @ref glfwGetWindowOpacity + * + * @since Added in version 3.3. + * + * @ingroup window + */ +GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity); + /*! @brief Iconifies the specified window. * * This function iconifies (minimizes) the specified window if it was @@ -2241,11 +3227,15 @@ GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland There is no concept of iconification in wl_shell, this + * function will emit @ref GLFW_PLATFORM_ERROR when using this deprecated + * protocol. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify - * @sa glfwRestoreWindow - * @sa glfwMaximizeWindow + * @sa @ref glfwRestoreWindow + * @sa @ref glfwMaximizeWindow * * @since Added in version 2.1. * @glfw3 Added window handle parameter. @@ -2271,8 +3261,8 @@ GLFWAPI void glfwIconifyWindow(GLFWwindow* window); * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify - * @sa glfwIconifyWindow - * @sa glfwMaximizeWindow + * @sa @ref glfwIconifyWindow + * @sa @ref glfwMaximizeWindow * * @since Added in version 2.1. * @glfw3 Added window handle parameter. @@ -2290,12 +3280,15 @@ GLFWAPI void glfwRestoreWindow(GLFWwindow* window); * * @param[in] window The window to maximize. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * * @par Thread Safety * This function may only be called from the main thread. * * @sa @ref window_iconify - * @sa glfwIconifyWindow - * @sa glfwRestoreWindow + * @sa @ref glfwIconifyWindow + * @sa @ref glfwRestoreWindow * * @since Added in GLFW 3.2. * @@ -2309,15 +3302,25 @@ GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); * hidden. If the window is already visible or is in full screen mode, this * function does nothing. * + * By default, windowed mode windows are focused when shown + * Set the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint + * to change this behavior for all newly created windows, or change the + * behavior for an existing window with @ref glfwSetWindowAttrib. + * * @param[in] window The window to make visible. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland Because Wayland wants every frame of the desktop to be + * complete, this function does not immediately make the window visible. + * Instead it will become visible the next time the window framebuffer is + * updated after this call. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide - * @sa glfwHideWindow + * @sa @ref glfwHideWindow * * @since Added in version 3.0. * @@ -2339,7 +3342,7 @@ GLFWAPI void glfwShowWindow(GLFWwindow* window); * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide - * @sa glfwShowWindow + * @sa @ref glfwShowWindow * * @since Added in version 3.0. * @@ -2353,21 +3356,32 @@ GLFWAPI void glfwHideWindow(GLFWwindow* window); * The window should already be visible and not iconified. * * By default, both windowed and full screen mode windows are focused when - * initially created. Set the [GLFW_FOCUSED](@ref window_hints_wnd) to disable - * this behavior. + * initially created. Set the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) to + * disable this behavior. + * + * Also by default, windowed mode windows are focused when shown + * with @ref glfwShowWindow. Set the + * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior. * * __Do not use this function__ to steal focus from other applications unless * you are certain that is what the user wants. Focus stealing can be * extremely disruptive. * + * For a less disruptive way of getting the user's attention, see + * [attention requests](@ref window_attention). + * * @param[in] window The window to give input focus. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland It is not possible for an application to bring its windows + * to front, this function will always emit @ref GLFW_PLATFORM_ERROR. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_focus + * @sa @ref window_attention * * @since Added in version 3.2. * @@ -2375,21 +3389,48 @@ GLFWAPI void glfwHideWindow(GLFWwindow* window); */ GLFWAPI void glfwFocusWindow(GLFWwindow* window); +/*! @brief Requests user attention to the specified window. + * + * This function requests user attention to the specified window. On + * platforms where this is not supported, attention is requested to the + * application as a whole. + * + * Once the user has given attention, usually by focusing the window or + * application, the system will end the request automatically. + * + * @param[in] window The window to request attention to. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @remark @macos Attention is requested to the application as a whole, not the + * specific window. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_attention + * + * @since Added in version 3.3. + * + * @ingroup window + */ +GLFWAPI void glfwRequestWindowAttention(GLFWwindow* window); + /*! @brief Returns the monitor that the window uses for full screen mode. * * This function returns the handle of the monitor that the specified window is * in full screen on. * * @param[in] window The window to query. - * @return The monitor, or `NULL` if the window is in windowed mode or an error - * occurred. + * @return The monitor, or `NULL` if the window is in windowed mode or an + * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_monitor - * @sa glfwSetWindowMonitor + * @sa @ref glfwSetWindowMonitor * * @since Added in version 3.0. * @@ -2407,7 +3448,7 @@ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); * The window position is ignored when setting a monitor. * * When the monitor is `NULL`, the position, width and height are used to - * place the window client area. The refresh rate is ignored when no monitor + * place the window content area. The refresh rate is ignored when no monitor * is specified. * * If you only wish to update the resolution of a full screen window or the @@ -2415,29 +3456,40 @@ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); * * When a window transitions from full screen to windowed mode, this function * restores any previous window settings such as whether it is decorated, - * floating, resizable, has size or aspect ratio limits, etc.. + * floating, resizable, has size or aspect ratio limits, etc. * * @param[in] window The window whose monitor, size or video mode to set. * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. * @param[in] xpos The desired x-coordinate of the upper-left corner of the - * client area. + * content area. * @param[in] ypos The desired y-coordinate of the upper-left corner of the - * client area. - * @param[in] width The desired with, in screen coordinates, of the client area - * or video mode. - * @param[in] height The desired height, in screen coordinates, of the client + * content area. + * @param[in] width The desired with, in screen coordinates, of the content * area or video mode. - * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode. + * @param[in] height The desired height, in screen coordinates, of the content + * area or video mode. + * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode, + * or `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark The OpenGL or OpenGL ES context will not be destroyed or otherwise + * affected by any resizing or mode switching, although you may need to update + * your viewport if the framebuffer size has changed. + * + * @remark @wayland The desired window position is ignored, as there is no way + * for an application to set this property. + * + * @remark @wayland Setting the window to full screen will not attempt to + * change the mode, no matter what the requested size or refresh rate. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_monitor * @sa @ref window_full_screen - * @sa glfwGetWindowMonitor - * @sa glfwSetWindowSize + * @sa @ref glfwGetWindowMonitor + * @sa @ref glfwSetWindowSize * * @since Added in version 3.2. * @@ -2470,6 +3522,7 @@ GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attribs + * @sa @ref glfwSetWindowAttrib * * @since Added in version 3.0. Replaces `glfwGetWindowParam` and * `glfwGetGLVersion`. @@ -2478,6 +3531,43 @@ GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int */ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); +/*! @brief Sets an attribute of the specified window. + * + * This function sets the value of an attribute of the specified window. + * + * The supported attributes are [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), + * [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), + * [GLFW_FLOATING](@ref GLFW_FLOATING_attrib), + * [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and + * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib). + * + * Some of these attributes are ignored for full screen windows. The new + * value will take effect if the window is later made windowed. + * + * Some of these attributes are ignored for windowed mode windows. The new + * value will take effect if the window is later made full screen. + * + * @param[in] window The window to set the attribute for. + * @param[in] attrib A supported window attribute. + * @param[in] value `GLFW_TRUE` or `GLFW_FALSE`. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. + * + * @remark Calling @ref glfwGetWindowAttrib will always return the latest + * value, even if that value is ignored by the current mode of the window. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_attribs + * @sa @ref glfwGetWindowAttrib + * + * @since Added in version 3.3. + * + * @ingroup window + */ +GLFWAPI void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value); + /*! @brief Sets the user pointer of the specified window. * * This function sets the user-defined pointer of the specified window. The @@ -2493,7 +3583,7 @@ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); * synchronized. * * @sa @ref window_userptr - * @sa glfwGetWindowUserPointer + * @sa @ref glfwGetWindowUserPointer * * @since Added in version 3.0. * @@ -2514,7 +3604,7 @@ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); * synchronized. * * @sa @ref window_userptr - * @sa glfwSetWindowUserPointer + * @sa @ref glfwSetWindowUserPointer * * @since Added in version 3.0. * @@ -2525,17 +3615,28 @@ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); /*! @brief Sets the position callback for the specified window. * * This function sets the position callback of the specified window, which is - * called when the window is moved. The callback is provided with the screen - * position of the upper-left corner of the client area of the window. + * called when the window is moved. The callback is provided with the + * position, in screen coordinates, of the upper-left corner of the content + * area of the window. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int xpos, int ypos) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowposfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * + * @remark @wayland This callback will never be called, as there is no way for + * an application to know its global position. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos @@ -2544,20 +3645,27 @@ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); * * @ingroup window */ -GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun cbfun); +GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun callback); /*! @brief Sets the size callback for the specified window. * * This function sets the size callback of the specified window, which is * called when the window is resized. The callback is provided with the size, - * in screen coordinates, of the client area of the window. + * in screen coordinates, of the content area of the window. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int width, int height) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowsizefun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -2569,7 +3677,7 @@ GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindow * * @ingroup window */ -GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun cbfun); +GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun callback); /*! @brief Sets the close callback for the specified window. * @@ -2583,15 +3691,22 @@ GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwind * The close callback is not triggered by @ref glfwDestroyWindow. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowclosefun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * - * @remark @osx Selecting Quit from the application menu will trigger the close - * callback for all windows. + * @remark @macos Selecting Quit from the application menu will trigger the + * close callback for all windows. * * @thread_safety This function must only be called from the main thread. * @@ -2602,110 +3717,202 @@ GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwind * * @ingroup window */ -GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun cbfun); +GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun callback); /*! @brief Sets the refresh callback for the specified window. * * This function sets the refresh callback of the specified window, which is - * called when the client area of the window needs to be redrawn, for example + * called when the content area of the window needs to be redrawn, for example * if the window has been exposed after having been covered by another window. * - * On compositing window systems such as Aero, Compiz or Aqua, where the window - * contents are saved off-screen, this callback may be called only very - * infrequently or never at all. + * On compositing window systems such as Aero, Compiz, Aqua or Wayland, where + * the window contents are saved off-screen, this callback may be called only + * very infrequently or never at all. + * + * @param[in] window The window whose callback to set. + * @param[in] callback The new callback, or `NULL` to remove the currently set + * callback. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @callback_signature + * @code + * void function_name(GLFWwindow* window); + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowrefreshfun). + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_refresh + * + * @since Added in version 2.5. + * @glfw3 Added window handle parameter and return value. + * + * @ingroup window + */ +GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun callback); + +/*! @brief Sets the focus callback for the specified window. + * + * This function sets the focus callback of the specified window, which is + * called when the window gains or loses input focus. + * + * After the focus callback is called for a window that lost input focus, + * synthetic key and mouse button release events will be generated for all such + * that had been pressed. For more information, see @ref glfwSetKeyCallback + * and @ref glfwSetMouseButtonCallback. + * + * @param[in] window The window whose callback to set. + * @param[in] callback The new callback, or `NULL` to remove the currently set + * callback. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int focused) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowfocusfun). + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref window_focus + * + * @since Added in version 3.0. + * + * @ingroup window + */ +GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun callback); + +/*! @brief Sets the iconify callback for the specified window. + * + * This function sets the iconification callback of the specified window, which + * is called when the window is iconified or restored. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int iconified) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowiconifyfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * + * @remark @wayland The wl_shell protocol has no concept of iconification, + * this callback will never be called when using this deprecated protocol. + * * @thread_safety This function must only be called from the main thread. * - * @sa @ref window_refresh + * @sa @ref window_iconify * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. + * @since Added in version 3.0. * * @ingroup window */ -GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun cbfun); +GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun callback); -/*! @brief Sets the focus callback for the specified window. - * - * This function sets the focus callback of the specified window, which is - * called when the window gains or loses input focus. +/*! @brief Sets the maximize callback for the specified window. * - * After the focus callback is called for a window that lost input focus, - * synthetic key and mouse button release events will be generated for all such - * that had been pressed. For more information, see @ref glfwSetKeyCallback - * and @ref glfwSetMouseButtonCallback. + * This function sets the maximization callback of the specified window, which + * is called when the window is maximized or restored. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int maximized) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowmaximizefun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * - * @sa @ref window_focus + * @sa @ref window_maximize * - * @since Added in version 3.0. + * @since Added in version 3.3. * * @ingroup window */ -GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun cbfun); +GLFWAPI GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* window, GLFWwindowmaximizefun callback); -/*! @brief Sets the iconify callback for the specified window. +/*! @brief Sets the framebuffer resize callback for the specified window. * - * This function sets the iconification callback of the specified window, which - * is called when the window is iconified or restored. + * This function sets the framebuffer resize callback of the specified window, + * which is called when the framebuffer of the specified window is resized. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int width, int height) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWframebuffersizefun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * - * @sa @ref window_iconify + * @sa @ref window_fbsize * * @since Added in version 3.0. * * @ingroup window */ -GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun cbfun); +GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun callback); -/*! @brief Sets the framebuffer resize callback for the specified window. +/*! @brief Sets the window content scale callback for the specified window. * - * This function sets the framebuffer resize callback of the specified window, - * which is called when the framebuffer of the specified window is resized. + * This function sets the window content scale callback of the specified window, + * which is called when the content scale of the specified window changes. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, float xscale, float yscale) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWwindowcontentscalefun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * - * @sa @ref window_fbsize + * @sa @ref window_scale + * @sa @ref glfwGetWindowContentScale * - * @since Added in version 3.0. + * @since Added in version 3.3. * * @ingroup window */ -GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun cbfun); +GLFWAPI GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* window, GLFWwindowcontentscalefun callback); /*! @brief Processes all pending events. * @@ -2719,9 +3926,12 @@ GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window * [window refresh callback](@ref window_refresh) to redraw the contents of * your window when necessary during such operations. * - * On some platforms, certain events are sent directly to the application - * without going through the event queue, causing callbacks to be called - * outside of a call to one of the event processing functions. + * Do not assume that callbacks you set will _only_ be called in response to + * event processing functions like this one. While it is necessary to poll for + * events, window systems that require GLFW to register callbacks of its own + * can pass events to GLFW in response to many window system function calls. + * GLFW will pass those events on to the application callbacks before + * returning. * * Event processing is not required for joystick input to work. * @@ -2733,8 +3943,8 @@ GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window * @thread_safety This function must only be called from the main thread. * * @sa @ref events - * @sa glfwWaitEvents - * @sa glfwWaitEventsTimeout + * @sa @ref glfwWaitEvents + * @sa @ref glfwWaitEventsTimeout * * @since Added in version 1.0. * @@ -2761,12 +3971,12 @@ GLFWAPI void glfwPollEvents(void); * [window refresh callback](@ref window_refresh) to redraw the contents of * your window when necessary during such operations. * - * On some platforms, certain callbacks may be called outside of a call to one - * of the event processing functions. - * - * If no windows exist, this function returns immediately. For synchronization - * of threads in applications that do not create windows, use your threading - * library of choice. + * Do not assume that callbacks you set will _only_ be called in response to + * event processing functions like this one. While it is necessary to poll for + * events, window systems that require GLFW to register callbacks of its own + * can pass events to GLFW in response to many window system function calls. + * GLFW will pass those events on to the application callbacks before + * returning. * * Event processing is not required for joystick input to work. * @@ -2778,8 +3988,8 @@ GLFWAPI void glfwPollEvents(void); * @thread_safety This function must only be called from the main thread. * * @sa @ref events - * @sa glfwPollEvents - * @sa glfwWaitEventsTimeout + * @sa @ref glfwPollEvents + * @sa @ref glfwWaitEventsTimeout * * @since Added in version 2.5. * @@ -2808,24 +4018,27 @@ GLFWAPI void glfwWaitEvents(void); * [window refresh callback](@ref window_refresh) to redraw the contents of * your window when necessary during such operations. * - * On some platforms, certain callbacks may be called outside of a call to one - * of the event processing functions. - * - * If no windows exist, this function returns immediately. For synchronization - * of threads in applications that do not create windows, use your threading - * library of choice. + * Do not assume that callbacks you set will _only_ be called in response to + * event processing functions like this one. While it is necessary to poll for + * events, window systems that require GLFW to register callbacks of its own + * can pass events to GLFW in response to many window system function calls. + * GLFW will pass those events on to the application callbacks before + * returning. * * Event processing is not required for joystick input to work. * * @param[in] timeout The maximum amount of time, in seconds, to wait. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. + * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref events - * @sa glfwPollEvents - * @sa glfwWaitEvents + * @sa @ref glfwPollEvents + * @sa @ref glfwWaitEvents * * @since Added in version 3.2. * @@ -2836,11 +4049,7 @@ GLFWAPI void glfwWaitEventsTimeout(double timeout); /*! @brief Posts an empty event to the event queue. * * This function posts an empty event from the current thread to the event - * queue, causing @ref glfwWaitEvents to return. - * - * If no windows exist, this function returns immediately. For synchronization - * of threads in applications that do not create windows, use your threading - * library of choice. + * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. @@ -2848,7 +4057,8 @@ GLFWAPI void glfwWaitEventsTimeout(double timeout); * @thread_safety This function may be called from any thread. * * @sa @ref events - * @sa glfwWaitEvents + * @sa @ref glfwWaitEvents + * @sa @ref glfwWaitEventsTimeout * * @since Added in version 3.1. * @@ -2859,19 +4069,21 @@ GLFWAPI void glfwPostEmptyEvent(void); /*! @brief Returns the value of an input option for the specified window. * * This function returns the value of an input option for the specified window. - * The mode must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. + * The mode must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, + * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or + * @ref GLFW_RAW_MOUSE_MOTION. * * @param[in] window The window to query. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. + * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, + * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or + * `GLFW_RAW_MOUSE_MOTION`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * - * @sa glfwSetInputMode + * @sa @ref glfwSetInputMode * * @since Added in version 3.0. * @@ -2882,14 +4094,15 @@ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); /*! @brief Sets an input option for the specified window. * * This function sets an input mode option for the specified window. The mode - * must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. + * must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, + * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or + * @ref GLFW_RAW_MOUSE_MOTION. * * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor * modes: * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. - * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the client - * area of the window but does not restrict the cursor from leaving. + * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the + * content area of the window but does not restrict the cursor from leaving. * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual * and unlimited cursor movement. This is useful for implementing for * example 3D camera controls. @@ -2909,9 +4122,22 @@ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); * you are only interested in whether mouse buttons have been pressed but not * when or in which order. * + * If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `GLFW_TRUE` to + * enable lock key modifier bits, or `GLFW_FALSE` to disable them. If enabled, + * callbacks that receive modifier bits will also have the @ref + * GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, + * and the @ref GLFW_MOD_NUM_LOCK bit when Num Lock was on. + * + * If the mode is `GLFW_RAW_MOUSE_MOTION`, the value must be either `GLFW_TRUE` + * to enable raw (unscaled and unaccelerated) mouse motion when the cursor is + * disabled, or `GLFW_FALSE` to disable it. If raw motion is not supported, + * attempting to set this will emit @ref GLFW_PLATFORM_ERROR. Call @ref + * glfwRawMouseMotionSupported to check for support. + * * @param[in] window The window whose input mode to set. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. + * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, + * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or + * `GLFW_RAW_MOUSE_MOTION`. * @param[in] value The new value of the specified input mode. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref @@ -2919,7 +4145,7 @@ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); * * @thread_safety This function must only be called from the main thread. * - * @sa glfwGetInputMode + * @sa @ref glfwGetInputMode * * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. * @@ -2927,17 +4153,51 @@ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); */ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); -/*! @brief Returns the localized name of the specified printable key. +/*! @brief Returns whether raw mouse motion is supported. + * + * This function returns whether raw mouse motion is supported on the current + * system. This status does not change after GLFW has been initialized so you + * only need to check this once. If you attempt to enable raw motion on + * a system that does not support it, @ref GLFW_PLATFORM_ERROR will be emitted. + * + * Raw mouse motion is closer to the actual motion of the mouse across + * a surface. It is not affected by the scaling and acceleration applied to + * the motion of the desktop cursor. That processing is suitable for a cursor + * while raw motion is better for controlling for example a 3D camera. Because + * of this, raw mouse motion is only provided when the cursor is disabled. + * + * @return `GLFW_TRUE` if raw mouse motion is supported on the current machine, + * or `GLFW_FALSE` otherwise. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref raw_mouse_motion + * @sa @ref glfwSetInputMode + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI int glfwRawMouseMotionSupported(void); + +/*! @brief Returns the layout-specific name of the specified printable key. + * + * This function returns the name of the specified printable key, encoded as + * UTF-8. This is typically the character that key would produce without any + * modifier keys, intended for displaying key bindings to the user. For dead + * keys, it is typically the diacritic it would add to a character. * - * This function returns the localized name of the specified printable key. - * This is intended for displaying key bindings to the user. + * __Do not use this function__ for [text input](@ref input_char). You will + * break text input for many languages even if it happens to work for yours. * - * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used instead, otherwise - * the scancode is ignored. If a non-printable key or (if the key is - * `GLFW_KEY_UNKNOWN`) a scancode that maps to a non-printable key is - * specified, this function returns `NULL`. + * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used to identify the key, + * otherwise the scancode is ignored. If you specify a non-printable key, or + * `GLFW_KEY_UNKNOWN` and a scancode that maps to a non-printable key, this + * function returns `NULL` but does not emit an error. * - * This behavior allows you to pass in the arguments passed to the + * This behavior allows you to always pass in the arguments in the * [key callback](@ref input_key) without modification. * * The printable keys are: @@ -2963,16 +4223,22 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); * - `GLFW_KEY_KP_ADD` * - `GLFW_KEY_KP_EQUAL` * + * Names for printable keys depend on keyboard layout, while names for + * non-printable keys are the same across layouts but depend on the application + * language and should be localized along with other user interface text. + * * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. * @param[in] scancode The scancode of the key to query. - * @return The localized name of the key, or `NULL`. + * @return The UTF-8 encoded, layout-specific name of the key, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark The contents of the returned string may change when a keyboard + * layout change event is received. + * * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetKeyName, or until the library is terminated. + * should not free it yourself. It is valid until the library is terminated. * * @thread_safety This function must only be called from the main thread. * @@ -2984,6 +4250,30 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); */ GLFWAPI const char* glfwGetKeyName(int key, int scancode); +/*! @brief Returns the platform-specific scancode of the specified key. + * + * This function returns the platform-specific scancode of the specified key. + * + * If the key is `GLFW_KEY_UNKNOWN` or does not exist on the keyboard this + * method will return `-1`. + * + * @param[in] key Any [named key](@ref keys). + * @return The platform-specific scancode for the key, or `-1` if an + * [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. + * + * @thread_safety This function may be called from any thread. + * + * @sa @ref input_key + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI int glfwGetKeyScancode(int key); + /*! @brief Returns the last reported state of a keyboard key for the specified * window. * @@ -2992,7 +4282,7 @@ GLFWAPI const char* glfwGetKeyName(int key, int scancode); * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to * the key callback. * - * If the `GLFW_STICKY_KEYS` input mode is enabled, this function returns + * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns * `GLFW_PRESS` the first time you call it for a key that was pressed, even if * that key has already been released. * @@ -3031,9 +4321,9 @@ GLFWAPI int glfwGetKey(GLFWwindow* window, int key); * to the specified window. The returned state is one of `GLFW_PRESS` or * `GLFW_RELEASE`. * - * If the `GLFW_STICKY_MOUSE_BUTTONS` input mode is enabled, this function - * `GLFW_PRESS` the first time you call it for a mouse button that was pressed, - * even if that mouse button has already been released. + * If the @ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function + * returns `GLFW_PRESS` the first time you call it for a mouse button that was + * pressed, even if that mouse button has already been released. * * @param[in] window The desired window. * @param[in] button The desired [mouse button](@ref buttons). @@ -3053,11 +4343,11 @@ GLFWAPI int glfwGetKey(GLFWwindow* window, int key); */ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); -/*! @brief Retrieves the position of the cursor relative to the client area of +/*! @brief Retrieves the position of the cursor relative to the content area of * the window. * * This function returns the position of the cursor, in screen coordinates, - * relative to the upper-left corner of the client area of the specified + * relative to the upper-left corner of the content area of the specified * window. * * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor @@ -3073,9 +4363,9 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); * * @param[in] window The desired window. * @param[out] xpos Where to store the cursor x-coordinate, relative to the - * left edge of the client area, or `NULL`. + * left edge of the content area, or `NULL`. * @param[out] ypos Where to store the cursor y-coordinate, relative to the to - * top edge of the client area, or `NULL`. + * top edge of the content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. @@ -3083,7 +4373,7 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos - * @sa glfwSetCursorPos + * @sa @ref glfwSetCursorPos * * @since Added in version 3.0. Replaces `glfwGetMousePos`. * @@ -3091,11 +4381,11 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); */ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); -/*! @brief Sets the position of the cursor, relative to the client area of the +/*! @brief Sets the position of the cursor, relative to the content area of the * window. * * This function sets the position, in screen coordinates, of the cursor - * relative to the upper-left corner of the client area of the specified + * relative to the upper-left corner of the content area of the specified * window. The window must have input focus. If the window does not have * input focus when this function is called, it fails silently. * @@ -3110,21 +4400,20 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); * * @param[in] window The desired window. * @param[in] xpos The desired x-coordinate, relative to the left edge of the - * client area. + * content area. * @param[in] ypos The desired y-coordinate, relative to the top edge of the - * client area. + * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * - * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for - * the window focus event to arrive. This means you may not be able to set the - * cursor position directly after window creation. + * @remark @wayland This function will only work when the cursor mode is + * `GLFW_CURSOR_DISABLED`, otherwise it will do nothing. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos - * @sa glfwGetCursorPos + * @sa @ref glfwGetCursorPos * * @since Added in version 3.0. Replaces `glfwSetMousePos`. * @@ -3139,8 +4428,8 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); * Any remaining cursors are destroyed by @ref glfwTerminate. * * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight - * bits per channel. They are arranged canonically as packed sequential rows, - * starting from the top-left corner. + * bits per channel with the red channel first. They are arranged canonically + * as packed sequential rows, starting from the top-left corner. * * The cursor hotspot is specified in pixels, relative to the upper-left corner * of the cursor image. Like all other coordinate systems in GLFW, the X-axis @@ -3158,13 +4447,11 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); * @pointer_lifetime The specified image data is copied before this function * returns. * - * @reentrancy This function must not be called from a callback. - * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object - * @sa glfwDestroyCursor - * @sa glfwCreateStandardCursor + * @sa @ref glfwDestroyCursor + * @sa @ref glfwCreateStandardCursor * * @since Added in version 3.1. * @@ -3184,12 +4471,10 @@ GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot) * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * - * @reentrancy This function must not be called from a callback. - * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object - * @sa glfwCreateCursor + * @sa @ref glfwCreateCursor * * @since Added in version 3.1. * @@ -3203,6 +4488,9 @@ GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); * glfwCreateCursor. Any remaining cursors will be destroyed by @ref * glfwTerminate. * + * If the specified cursor is current for any window, that window will be + * reverted to the default cursor. This does not affect the cursor mode. + * * @param[in] cursor The cursor object to destroy. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref @@ -3213,7 +4501,7 @@ GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object - * @sa glfwCreateCursor + * @sa @ref glfwCreateCursor * * @since Added in version 3.1. * @@ -3224,7 +4512,7 @@ GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); /*! @brief Sets the cursor for the window. * * This function sets the cursor image to be used when the cursor is over the - * client area of the specified window. The set cursor will only be visible + * content area of the specified window. The set cursor will only be visible * when the [cursor mode](@ref cursor_mode) of the window is * `GLFW_CURSOR_NORMAL`. * @@ -3273,11 +4561,18 @@ GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); * scancode may be zero. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new key callback, or `NULL` to remove the currently + * @param[in] callback The new key callback, or `NULL` to remove the currently * set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWkeyfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3289,7 +4584,7 @@ GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); * * @ingroup input */ -GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); +GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun callback); /*! @brief Sets the Unicode character callback. * @@ -3305,17 +4600,22 @@ GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); * * The character callback behaves as system text input normally does and will * not be called if modifier keys are held down that would prevent normal text - * input on that platform, for example a Super (Command) key on OS X or Alt key - * on Windows. There is a - * [character with modifiers callback](@ref glfwSetCharModsCallback) that - * receives these events. + * input on that platform, for example a Super (Command) key on macOS or Alt key + * on Windows. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, unsigned int codepoint) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWcharfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3327,7 +4627,7 @@ GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); * * @ingroup input */ -GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); +GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun callback); /*! @brief Sets the Unicode character with modifiers callback. * @@ -3345,10 +4645,19 @@ GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); * [key callback](@ref glfwSetKeyCallback) instead. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or an - * error occurred. + * [error](@ref error_handling) occurred. + * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWcharmodsfun). + * + * @deprecated Scheduled for removal in version 4.0. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * @@ -3360,7 +4669,7 @@ GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); * * @ingroup input */ -GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun cbfun); +GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun callback); /*! @brief Sets the mouse button callback. * @@ -3374,11 +4683,18 @@ GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmods * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int button, int action, int mods) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWmousebuttonfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3390,21 +4706,28 @@ GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmods * * @ingroup input */ -GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun cbfun); +GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun callback); /*! @brief Sets the cursor position callback. * * This function sets the cursor position callback of the specified window, * which is called when the cursor is moved. The callback is provided with the * position, in screen coordinates, relative to the upper-left corner of the - * client area of the window. + * content area of the window. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, double xpos, double ypos); + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWcursorposfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3415,20 +4738,27 @@ GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmo * * @ingroup input */ -GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun cbfun); +GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun callback); -/*! @brief Sets the cursor enter/exit callback. +/*! @brief Sets the cursor enter/leave callback. * * This function sets the cursor boundary crossing callback of the specified - * window, which is called when the cursor enters or leaves the client area of + * window, which is called when the cursor enters or leaves the content area of * the window. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int entered) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWcursorenterfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3439,7 +4769,7 @@ GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursor * * @ingroup input */ -GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun cbfun); +GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun callback); /*! @brief Sets the scroll callback. * @@ -3451,11 +4781,18 @@ GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcu * wheel or a touchpad scrolling area. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new scroll callback, or `NULL` to remove the currently - * set callback. + * @param[in] callback The new scroll callback, or `NULL` to remove the + * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, double xoffset, double yoffset) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWscrollfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3466,12 +4803,12 @@ GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcu * * @ingroup input */ -GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cbfun); +GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun callback); -/*! @brief Sets the file drop callback. +/*! @brief Sets the path drop callback. * - * This function sets the file drop callback of the specified window, which is - * called when one or more dragged files are dropped on the window. + * This function sets the path drop callback of the specified window, which is + * called when one or more dragged paths are dropped on the window. * * Because the path array and its strings may have been generated specifically * for that event, they are not guaranteed to be valid after the callback has @@ -3479,13 +4816,22 @@ GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cb * make a deep copy. * * @param[in] window The window whose callback to set. - * @param[in] cbfun The new file drop callback, or `NULL` to remove the + * @param[in] callback The new file drop callback, or `NULL` to remove the * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(GLFWwindow* window, int path_count, const char* paths[]) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWdropfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * + * @remark @wayland File drop is currently unimplemented. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref path_drop @@ -3494,13 +4840,17 @@ GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cb * * @ingroup input */ -GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun); +GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun callback); /*! @brief Returns whether the specified joystick is present. * * This function returns whether the specified joystick is present. * - * @param[in] joy The [joystick](@ref joysticks) to query. + * There is no need to call this function before other functions that accept + * a joystick ID, as they all check for presence before performing any other + * work. + * + * @param[in] jid The [joystick](@ref joysticks) to query. * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref @@ -3514,29 +4864,30 @@ GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun); * * @ingroup input */ -GLFWAPI int glfwJoystickPresent(int joy); +GLFWAPI int glfwJoystickPresent(int jid); /*! @brief Returns the values of all axes of the specified joystick. * * This function returns the values of all axes of the specified joystick. * Each element in the array is a value between -1.0 and 1.0. * - * Querying a joystick slot with no device present is not an error, but will - * cause this function to return `NULL`. Call @ref glfwJoystickPresent to - * check device presence. + * If the specified joystick is not present this function will return `NULL` + * but will not generate an error. This can be used instead of first calling + * @ref glfwJoystickPresent. * - * @param[in] joy The [joystick](@ref joysticks) to query. + * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of axis values in the returned - * array. This is set to zero if an error occurred. - * @return An array of axis values, or `NULL` if the joystick is not present. + * array. This is set to zero if the joystick is not present or an error + * occurred. + * @return An array of axis values, or `NULL` if the joystick is not present or + * an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. + * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * @@ -3546,29 +4897,37 @@ GLFWAPI int glfwJoystickPresent(int joy); * * @ingroup input */ -GLFWAPI const float* glfwGetJoystickAxes(int joy, int* count); +GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count); /*! @brief Returns the state of all buttons of the specified joystick. * * This function returns the state of all buttons of the specified joystick. * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. * - * Querying a joystick slot with no device present is not an error, but will - * cause this function to return `NULL`. Call @ref glfwJoystickPresent to - * check device presence. + * For backward compatibility with earlier versions that did not have @ref + * glfwGetJoystickHats, the button array also includes all hats, each + * represented as four buttons. The hats are in the same order as returned by + * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and + * _left_. To disable these extra buttons, set the @ref + * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization. * - * @param[in] joy The [joystick](@ref joysticks) to query. + * If the specified joystick is not present this function will return `NULL` + * but will not generate an error. This can be used instead of first calling + * @ref glfwJoystickPresent. + * + * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of button states in the returned - * array. This is set to zero if an error occurred. - * @return An array of button states, or `NULL` if the joystick is not present. + * array. This is set to zero if the joystick is not present or an error + * occurred. + * @return An array of button states, or `NULL` if the joystick is not present + * or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. + * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * @@ -3579,7 +4938,64 @@ GLFWAPI const float* glfwGetJoystickAxes(int joy, int* count); * * @ingroup input */ -GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count); +GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count); + +/*! @brief Returns the state of all hats of the specified joystick. + * + * This function returns the state of all hats of the specified joystick. + * Each element in the array is one of the following values: + * + * Name | Value + * ---- | ----- + * `GLFW_HAT_CENTERED` | 0 + * `GLFW_HAT_UP` | 1 + * `GLFW_HAT_RIGHT` | 2 + * `GLFW_HAT_DOWN` | 4 + * `GLFW_HAT_LEFT` | 8 + * `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` + * `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` + * `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` + * `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` + * + * The diagonal directions are bitwise combinations of the primary (up, right, + * down and left) directions and you can test for these individually by ANDing + * it with the corresponding direction. + * + * @code + * if (hats[2] & GLFW_HAT_RIGHT) + * { + * // State of hat 2 could be right-up, right or right-down + * } + * @endcode + * + * If the specified joystick is not present this function will return `NULL` + * but will not generate an error. This can be used instead of first calling + * @ref glfwJoystickPresent. + * + * @param[in] jid The [joystick](@ref joysticks) to query. + * @param[out] count Where to store the number of hat states in the returned + * array. This is set to zero if the joystick is not present or an error + * occurred. + * @return An array of hat states, or `NULL` if the joystick is not present + * or an [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. + * + * @pointer_lifetime The returned array is allocated and freed by GLFW. You + * should not free it yourself. It is valid until the specified joystick is + * disconnected, this function is called again for that joystick or the library + * is terminated. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref joystick_hat + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count); /*! @brief Returns the name of the specified joystick. * @@ -3587,21 +5003,20 @@ GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count); * The returned string is allocated and freed by GLFW. You should not free it * yourself. * - * Querying a joystick slot with no device present is not an error, but will - * cause this function to return `NULL`. Call @ref glfwJoystickPresent to - * check device presence. + * If the specified joystick is not present this function will return `NULL` + * but will not generate an error. This can be used instead of first calling + * @ref glfwJoystickPresent. * - * @param[in] joy The [joystick](@ref joysticks) to query. + * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick - * is not present. + * is not present or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. + * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * @@ -3611,7 +5026,126 @@ GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count); * * @ingroup input */ -GLFWAPI const char* glfwGetJoystickName(int joy); +GLFWAPI const char* glfwGetJoystickName(int jid); + +/*! @brief Returns the SDL compatible GUID of the specified joystick. + * + * This function returns the SDL compatible GUID, as a UTF-8 encoded + * hexadecimal string, of the specified joystick. The returned string is + * allocated and freed by GLFW. You should not free it yourself. + * + * The GUID is what connects a joystick to a gamepad mapping. A connected + * joystick will always have a GUID even if there is no gamepad mapping + * assigned to it. + * + * If the specified joystick is not present this function will return `NULL` + * but will not generate an error. This can be used instead of first calling + * @ref glfwJoystickPresent. + * + * The GUID uses the format introduced in SDL 2.0.5. This GUID tries to + * uniquely identify the make and model of a joystick but does not identify + * a specific unit, e.g. all wired Xbox 360 controllers will have the same + * GUID on that platform. The GUID for a unit may vary between platforms + * depending on what hardware information the platform specific APIs provide. + * + * @param[in] jid The [joystick](@ref joysticks) to query. + * @return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick + * is not present or an [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. + * + * @pointer_lifetime The returned string is allocated and freed by GLFW. You + * should not free it yourself. It is valid until the specified joystick is + * disconnected or the library is terminated. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref gamepad + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI const char* glfwGetJoystickGUID(int jid); + +/*! @brief Sets the user pointer of the specified joystick. + * + * This function sets the user-defined pointer of the specified joystick. The + * current value is retained until the joystick is disconnected. The initial + * value is `NULL`. + * + * This function may be called from the joystick callback, even for a joystick + * that is being disconnected. + * + * @param[in] jid The joystick whose pointer to set. + * @param[in] pointer The new value. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function may be called from any thread. Access is not + * synchronized. + * + * @sa @ref joystick_userptr + * @sa @ref glfwGetJoystickUserPointer + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer); + +/*! @brief Returns the user pointer of the specified joystick. + * + * This function returns the current value of the user-defined pointer of the + * specified joystick. The initial value is `NULL`. + * + * This function may be called from the joystick callback, even for a joystick + * that is being disconnected. + * + * @param[in] jid The joystick whose pointer to return. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @thread_safety This function may be called from any thread. Access is not + * synchronized. + * + * @sa @ref joystick_userptr + * @sa @ref glfwSetJoystickUserPointer + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI void* glfwGetJoystickUserPointer(int jid); + +/*! @brief Returns whether the specified joystick has a gamepad mapping. + * + * This function returns whether the specified joystick is both present and has + * a gamepad mapping. + * + * If the specified joystick is present but does not have a gamepad mapping + * this function will return `GLFW_FALSE` but will not generate an error. Call + * @ref glfwJoystickPresent to check if a joystick is present regardless of + * whether it has a mapping. + * + * @param[in] jid The [joystick](@ref joysticks) to query. + * @return `GLFW_TRUE` if a joystick is both present and has a gamepad mapping, + * or `GLFW_FALSE` otherwise. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_INVALID_ENUM. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref gamepad + * @sa @ref glfwGetGamepadState + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI int glfwJoystickIsGamepad(int jid); /*! @brief Sets the joystick configuration callback. * @@ -3619,11 +5153,24 @@ GLFWAPI const char* glfwGetJoystickName(int joy); * currently set callback. This is called when a joystick is connected to or * disconnected from the system. * - * @param[in] cbfun The new callback, or `NULL` to remove the currently set + * For joystick connection and disconnection events to be delivered on all + * platforms, you need to call one of the [event processing](@ref events) + * functions. Joystick disconnection may also be detected and the callback + * called by joystick functions. The function will then return whatever it + * returns if the joystick is not present. + * + * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * + * @callback_signature + * @code + * void function_name(int jid, int event) + * @endcode + * For more information about the callback parameters, see the + * [function pointer type](@ref GLFWjoystickfun). + * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. @@ -3634,14 +5181,118 @@ GLFWAPI const char* glfwGetJoystickName(int joy); * * @ingroup input */ -GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun); +GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback); + +/*! @brief Adds the specified SDL_GameControllerDB gamepad mappings. + * + * This function parses the specified ASCII encoded string and updates the + * internal list with any gamepad mappings it finds. This string may + * contain either a single gamepad mapping or many mappings separated by + * newlines. The parser supports the full format of the `gamecontrollerdb.txt` + * source file including empty lines and comments. + * + * See @ref gamepad_mapping for a description of the format. + * + * If there is already a gamepad mapping for a given GUID in the internal list, + * it will be replaced by the one passed to this function. If the library is + * terminated and re-initialized the internal list will revert to the built-in + * default. + * + * @param[in] string The string containing the gamepad mappings. + * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an + * [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_INVALID_VALUE. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref gamepad + * @sa @ref glfwJoystickIsGamepad + * @sa @ref glfwGetGamepadName + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI int glfwUpdateGamepadMappings(const char* string); + +/*! @brief Returns the human-readable gamepad name for the specified joystick. + * + * This function returns the human-readable name of the gamepad from the + * gamepad mapping assigned to the specified joystick. + * + * If the specified joystick is not present or does not have a gamepad mapping + * this function will return `NULL` but will not generate an error. Call + * @ref glfwJoystickPresent to check whether it is present regardless of + * whether it has a mapping. + * + * @param[in] jid The [joystick](@ref joysticks) to query. + * @return The UTF-8 encoded name of the gamepad, or `NULL` if the + * joystick is not present, does not have a mapping or an + * [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref GLFW_INVALID_ENUM. + * + * @pointer_lifetime The returned string is allocated and freed by GLFW. You + * should not free it yourself. It is valid until the specified joystick is + * disconnected, the gamepad mappings are updated or the library is terminated. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref gamepad + * @sa @ref glfwJoystickIsGamepad + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI const char* glfwGetGamepadName(int jid); + +/*! @brief Retrieves the state of the specified joystick remapped as a gamepad. + * + * This function retrieves the state of the specified joystick remapped to + * an Xbox-like gamepad. + * + * If the specified joystick is not present or does not have a gamepad mapping + * this function will return `GLFW_FALSE` but will not generate an error. Call + * @ref glfwJoystickPresent to check whether it is present regardless of + * whether it has a mapping. + * + * The Guide button may not be available for input as it is often hooked by the + * system or the Steam client. + * + * Not all devices have all the buttons or axes provided by @ref + * GLFWgamepadstate. Unavailable buttons and axes will always report + * `GLFW_RELEASE` and 0.0 respectively. + * + * @param[in] jid The [joystick](@ref joysticks) to query. + * @param[out] state The gamepad input state of the joystick. + * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if no joystick is + * connected, it has no gamepad mapping or an [error](@ref error_handling) + * occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_INVALID_ENUM. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref gamepad + * @sa @ref glfwUpdateGamepadMappings + * @sa @ref glfwJoystickIsGamepad + * + * @since Added in version 3.3. + * + * @ingroup input + */ +GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state); /*! @brief Sets the clipboard to the specified string. * * This function sets the system clipboard to the specified, UTF-8 encoded * string. * - * @param[in] window The window that will own the clipboard contents. + * @param[in] window Deprecated. Any valid window or `NULL`. * @param[in] string A UTF-8 encoded string. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref @@ -3653,7 +5304,7 @@ GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun); * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard - * @sa glfwGetClipboardString + * @sa @ref glfwGetClipboardString * * @since Added in version 3.0. * @@ -3668,12 +5319,12 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); * if its contents cannot be converted, `NULL` is returned and a @ref * GLFW_FORMAT_UNAVAILABLE error is generated. * - * @param[in] window The window that will request the clipboard contents. + * @param[in] window Deprecated. Any valid window or `NULL`. * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` * if an [error](@ref error_handling) occurred. * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_FORMAT_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the next call to @ref @@ -3683,7 +5334,7 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard - * @sa glfwSetClipboardString + * @sa @ref glfwSetClipboardString * * @since Added in version 3.0. * @@ -3691,23 +5342,27 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); */ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); -/*! @brief Returns the value of the GLFW timer. +/*! @brief Returns the GLFW time. * - * This function returns the value of the GLFW timer. Unless the timer has - * been set using @ref glfwSetTime, the timer measures time elapsed since GLFW - * was initialized. + * This function returns the current GLFW time, in seconds. Unless the time + * has been set using @ref glfwSetTime it measures time elapsed since GLFW was + * initialized. + * + * This function and @ref glfwSetTime are helper functions on top of @ref + * glfwGetTimerFrequency and @ref glfwGetTimerValue. * * The resolution of the timer is system dependent, but is usually on the order * of a few micro- or nanoseconds. It uses the highest-resolution monotonic * time source on each supported platform. * - * @return The current value, in seconds, or zero if an + * @return The current time, in seconds, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * - * @thread_safety This function may be called from any thread. Reading of the - * internal timer offset is not atomic. + * @thread_safety This function may be called from any thread. Reading and + * writing of the internal base time is not atomic, so it needs to be + * externally synchronized with calls to @ref glfwSetTime. * * @sa @ref time * @@ -3717,23 +5372,27 @@ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); */ GLFWAPI double glfwGetTime(void); -/*! @brief Sets the GLFW timer. +/*! @brief Sets the GLFW time. + * + * This function sets the current GLFW time, in seconds. The value must be + * a positive finite number less than or equal to 18446744073.0, which is + * approximately 584.5 years. * - * This function sets the value of the GLFW timer. It then continues to count - * up from that value. The value must be a positive finite number less than - * or equal to 18446744073.0, which is approximately 584.5 years. + * This function and @ref glfwGetTime are helper functions on top of @ref + * glfwGetTimerFrequency and @ref glfwGetTimerValue. * * @param[in] time The new value, in seconds. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_VALUE. * - * @remark The upper limit of the timer is calculated as + * @remark The upper limit of GLFW time is calculated as * floor((264 - 1) / 109) and is due to implementations * storing nanoseconds in 64 bits. The limit may be increased in the future. * - * @thread_safety This function may be called from any thread. Writing of the - * internal timer offset is not atomic. + * @thread_safety This function may be called from any thread. Reading and + * writing of the internal base time is not atomic, so it needs to be + * externally synchronized with calls to @ref glfwGetTime. * * @sa @ref time * @@ -3749,7 +5408,7 @@ GLFWAPI void glfwSetTime(double time); * 1 / frequency seconds. To get the frequency, call @ref * glfwGetTimerFrequency. * - * @return The value of the timer, or zero if an + * @return The value of the timer, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. @@ -3757,7 +5416,7 @@ GLFWAPI void glfwSetTime(double time); * @thread_safety This function may be called from any thread. * * @sa @ref time - * @sa glfwGetTimerFrequency + * @sa @ref glfwGetTimerFrequency * * @since Added in version 3.2. * @@ -3777,7 +5436,7 @@ GLFWAPI uint64_t glfwGetTimerValue(void); * @thread_safety This function may be called from any thread. * * @sa @ref time - * @sa glfwGetTimerValue + * @sa @ref glfwGetTimerValue * * @since Added in version 3.2. * @@ -3789,14 +5448,18 @@ GLFWAPI uint64_t glfwGetTimerFrequency(void); * thread. * * This function makes the OpenGL or OpenGL ES context of the specified window - * current on the calling thread. A context can only be made current on + * current on the calling thread. A context must only be made current on * a single thread at a time and each thread can have only a single current * context at a time. * + * When moving a context between threads, you must make it non-current on the + * old thread before making it current on the new one. + * * By default, making a context non-current implicitly forces a pipeline flush. * On machines that support `GL_KHR_context_flush_control`, you can control * whether a context performs this flush by setting the - * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref window_hints_ctx) window hint. + * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) + * hint. * * The specified window must have an OpenGL or OpenGL ES context. Specifying * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT @@ -3811,7 +5474,7 @@ GLFWAPI uint64_t glfwGetTimerFrequency(void); * @thread_safety This function may be called from any thread. * * @sa @ref context_current - * @sa glfwGetCurrentContext + * @sa @ref glfwGetCurrentContext * * @since Added in version 3.0. * @@ -3832,7 +5495,7 @@ GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); * @thread_safety This function may be called from any thread. * * @sa @ref context_current - * @sa glfwMakeContextCurrent + * @sa @ref glfwMakeContextCurrent * * @since Added in version 3.0. * @@ -3865,7 +5528,7 @@ GLFWAPI GLFWwindow* glfwGetCurrentContext(void); * @thread_safety This function may be called from any thread. * * @sa @ref buffer_swap - * @sa glfwSwapInterval + * @sa @ref glfwSwapInterval * * @since Added in version 1.0. * @glfw3 Added window handle parameter. @@ -3882,12 +5545,11 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* window); * is sometimes called _vertical synchronization_, _vertical retrace * synchronization_ or just _vsync_. * - * Contexts that support either of the `WGL_EXT_swap_control_tear` and - * `GLX_EXT_swap_control_tear` extensions also accept negative swap intervals, - * which allow the driver to swap even if a frame arrives a little bit late. - * You can check for the presence of these extensions using @ref - * glfwExtensionSupported. For more information about swap tearing, see the - * extension specifications. + * A context that supports either of the `WGL_EXT_swap_control_tear` and + * `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap + * intervals, which allows the driver to swap immediately even if a frame + * arrives a little bit late. You can check for these extensions with @ref + * glfwExtensionSupported. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. @@ -3913,7 +5575,7 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* window); * @thread_safety This function may be called from any thread. * * @sa @ref buffer_swap - * @sa glfwSwapBuffers + * @sa @ref glfwSwapBuffers * * @since Added in version 1.0. * @@ -3951,7 +5613,7 @@ GLFWAPI void glfwSwapInterval(int interval); * @thread_safety This function may be called from any thread. * * @sa @ref context_glext - * @sa glfwGetProcAddress + * @sa @ref glfwGetProcAddress * * @since Added in version 1.0. * @@ -3993,7 +5655,7 @@ GLFWAPI int glfwExtensionSupported(const char* extension); * @thread_safety This function may be called from any thread. * * @sa @ref context_glext - * @sa glfwExtensionSupported + * @sa @ref glfwExtensionSupported * * @since Added in version 1.0. * @@ -4001,19 +5663,19 @@ GLFWAPI int glfwExtensionSupported(const char* extension); */ GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); -/*! @brief Returns whether the Vulkan loader has been found. +/*! @brief Returns whether the Vulkan loader and an ICD have been found. * - * This function returns whether the Vulkan loader has been found. This check - * is performed by @ref glfwInit. + * This function returns whether the Vulkan loader and any minimally functional + * ICD have been found. * - * The availability of a Vulkan loader does not by itself guarantee that window - * surface creation or even device creation is possible. Call @ref - * glfwGetRequiredInstanceExtensions to check whether the extensions necessary - * for Vulkan surface creation are available and @ref - * glfwGetPhysicalDevicePresentationSupport to check whether a queue family of - * a physical device supports image presentation. + * The availability of a Vulkan loader and even an ICD does not by itself guarantee that + * surface creation or even instance creation is possible. Call @ref + * glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan + * surface creation are available and @ref glfwGetPhysicalDevicePresentationSupport to + * check whether a queue family of a physical device supports image presentation. * - * @return `GLFW_TRUE` if Vulkan is available, or `GLFW_FALSE` otherwise. + * @return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE` + * otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * @@ -4031,13 +5693,13 @@ GLFWAPI int glfwVulkanSupported(void); * * This function returns an array of names of Vulkan instance extensions required * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the - * list will always contains `VK_KHR_surface`, so if you don't require any + * list will always contain `VK_KHR_surface`, so if you don't require any * additional extensions you can pass this list directly to the * `VkInstanceCreateInfo` struct. * * If Vulkan is not available on the machine, this function returns `NULL` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is available. + * to check whether Vulkan is at least minimally available. * * If Vulkan is available but no set of extensions allowing window surface * creation was found, this function returns `NULL`. You may still use Vulkan @@ -4051,7 +5713,7 @@ GLFWAPI int glfwVulkanSupported(void); * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_API_UNAVAILABLE. * - * @remarks Additional extensions may be required by future versions of GLFW. + * @remark Additional extensions may be required by future versions of GLFW. * You should check if any extensions you wish to enable are already in the * returned array, as it is an error to specify an extension more than once in * the `VkInstanceCreateInfo` struct. @@ -4063,7 +5725,7 @@ GLFWAPI int glfwVulkanSupported(void); * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_ext - * @sa glfwCreateWindowSurface + * @sa @ref glfwCreateWindowSurface * * @since Added in version 3.2. * @@ -4087,7 +5749,7 @@ GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); * * If Vulkan is not available on the machine, this function returns `NULL` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is available. + * to check whether Vulkan is at least minimally available. * * This function is equivalent to calling `vkGetInstanceProcAddr` with * a platform-specific query of the Vulkan loader as a fallback. @@ -4123,7 +5785,7 @@ GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* p * not available on the machine, or if the specified instance was not created * with the required extensions, this function returns `GLFW_FALSE` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is available and @ref + * to check whether Vulkan is at least minimally available and @ref * glfwGetRequiredInstanceExtensions to check what instance extensions are * required. * @@ -4136,6 +5798,10 @@ GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* p * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. * + * @remark @macos This function currently always returns `GLFW_TRUE`, as the + * `VK_MVK_macos_surface` and `VK_EXT_metal_surface` extensions do not provide + * a `vkGetPhysicalDevice*PresentationSupport` type function. + * * @thread_safety This function may be called from any thread. For * synchronization details of Vulkan objects, see the Vulkan specification. * @@ -4151,10 +5817,10 @@ GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhys * * This function creates a Vulkan surface for the specified window. * - * If the Vulkan loader was not found at initialization, this function returns - * `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref GLFW_API_UNAVAILABLE - * error. Call @ref glfwVulkanSupported to check whether the Vulkan loader was - * found. + * If the Vulkan loader or at least one minimally functional ICD were not found, + * this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref + * GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported to check whether + * Vulkan is at least minimally available. * * If the required window surface creation instance extensions are not * available or if the specified instance was not created with these extensions @@ -4163,6 +5829,11 @@ GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhys * glfwGetRequiredInstanceExtensions to check what instance extensions are * required. * + * The window surface cannot be shared with another API so the window must + * have been created with the [client api hint](@ref GLFW_CLIENT_API_attrib) + * set to `GLFW_NO_API` otherwise it generates a @ref GLFW_INVALID_VALUE error + * and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`. + * * The window surface must be destroyed before the specified Vulkan instance. * It is the responsibility of the caller to destroy the window surface. GLFW * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the @@ -4178,18 +5849,26 @@ GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhys * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. + * GLFW_API_UNAVAILABLE, @ref GLFW_PLATFORM_ERROR and @ref GLFW_INVALID_VALUE * - * @remarks If an error occurs before the creation call is made, GLFW returns + * @remark If an error occurs before the creation call is made, GLFW returns * the Vulkan error code most appropriate for the error. Appropriate use of * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should * eliminate almost all occurrences of these errors. * + * @remark @macos GLFW prefers the `VK_EXT_metal_surface` extension, with the + * `VK_MVK_macos_surface` extension as a fallback. The name of the selected + * extension, if any, is included in the array returned by @ref + * glfwGetRequiredInstanceExtensions. + * + * @remark @macos This function creates and sets a `CAMetalLayer` instance for + * the window content view, which is required for MoltenVK to function. + * * @thread_safety This function may be called from any thread. For * synchronization details of Vulkan objects, see the Vulkan specification. * * @sa @ref vulkan_surface - * @sa glfwGetRequiredInstanceExtensions + * @sa @ref glfwGetRequiredInstanceExtensions * * @since Added in version 3.2. * @@ -4216,6 +5895,13 @@ GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window #undef GLFW_CALLBACK_DEFINED #endif +/* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally + * defined by some gl.h variants (OpenBSD) so define it after if needed. + */ +#ifndef GLAPIENTRY + #define GLAPIENTRY APIENTRY +#endif + /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ diff --git a/Code/ThirdParty/glfw/include/GLFW/glfw3native.h b/Code/ThirdParty/glfw/include/GLFW/glfw3native.h index 9fa955e..fe74c73 100644 --- a/Code/ThirdParty/glfw/include/GLFW/glfw3native.h +++ b/Code/ThirdParty/glfw/include/GLFW/glfw3native.h @@ -1,9 +1,9 @@ /************************************************************************* - * GLFW 3.2 - www.glfw.org + * GLFW 3.3 - www.glfw.org * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2010 Camilla Berglund + * Copyright (c) 2006-2018 Camilla Löwy * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages @@ -45,12 +45,13 @@ extern "C" { * more information. */ /*! @defgroup native Native access + * @brief Functions related to accessing native handles. * * **By using the native access functions you assert that you know what you're * doing and how to fix problems caused by using them. If you don't, you * shouldn't be using them.** * - * Before the inclusion of @ref glfw3native.h, you may define exactly one + * Before the inclusion of @ref glfw3native.h, you may define zero or more * window system API macro and zero or more context creation API macros. * * The chosen backends must match those the library was compiled for. Failure @@ -61,13 +62,13 @@ extern "C" { * * `GLFW_EXPOSE_NATIVE_COCOA` * * `GLFW_EXPOSE_NATIVE_X11` * * `GLFW_EXPOSE_NATIVE_WAYLAND` - * * `GLFW_EXPOSE_NATIVE_MIR` * * The available context API macros are: * * `GLFW_EXPOSE_NATIVE_WGL` * * `GLFW_EXPOSE_NATIVE_NSGL` * * `GLFW_EXPOSE_NATIVE_GLX` * * `GLFW_EXPOSE_NATIVE_EGL` + * * `GLFW_EXPOSE_NATIVE_OSMESA` * * These macros select which of the native access functions that are declared * and which platform-specific headers to include. It is then up your (by @@ -80,26 +81,27 @@ extern "C" { * System headers and types *************************************************************************/ -#if defined(GLFW_EXPOSE_NATIVE_WIN32) +#if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for - // example to allow applications to correctly declare a GL_ARB_debug_output - // callback) but windows.h assumes no one will define APIENTRY before it does - #undef APIENTRY + // example to allow applications to correctly declare a GL_KHR_debug callback) + // but windows.h assumes no one will define APIENTRY before it does + #if defined(GLFW_APIENTRY_DEFINED) + #undef APIENTRY + #undef GLFW_APIENTRY_DEFINED + #endif #include -#elif defined(GLFW_EXPOSE_NATIVE_COCOA) - #include +#elif defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) #if defined(__OBJC__) #import #else + #include typedef void* id; #endif -#elif defined(GLFW_EXPOSE_NATIVE_X11) +#elif defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) #include #include #elif defined(GLFW_EXPOSE_NATIVE_WAYLAND) #include -#elif defined(GLFW_EXPOSE_NATIVE_MIR) - #include #endif #if defined(GLFW_EXPOSE_NATIVE_WGL) @@ -114,6 +116,9 @@ extern "C" { #if defined(GLFW_EXPOSE_NATIVE_EGL) #include #endif +#if defined(GLFW_EXPOSE_NATIVE_OSMESA) + #include +#endif /************************************************************************* @@ -127,6 +132,8 @@ extern "C" { * of the specified monitor, or `NULL` if an [error](@ref error_handling) * occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -142,6 +149,8 @@ GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -156,6 +165,16 @@ GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); * @return The `HWND` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @remark The `HDC` associated with the window can be queried with the + * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) + * function. + * @code + * HDC dc = GetDC(glfwGetWin32Window(window)); + * @endcode + * This DC is private and does not need to be released. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -172,6 +191,17 @@ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); * @return The `HGLRC` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * + * @remark The `HDC` associated with the window can be queried with the + * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) + * function. + * @code + * HDC dc = GetDC(glfwGetWin32Window(window)); + * @endcode + * This DC is private and does not need to be released. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -188,6 +218,8 @@ GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); * @return The `CGDirectDisplayID` of the specified monitor, or * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -202,6 +234,8 @@ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); * @return The `NSWindow` of the specified window, or `nil` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -218,6 +252,9 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); * @return The `NSOpenGLContext` of the specified window, or `nil` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -234,6 +271,8 @@ GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); * @return The `Display` used by GLFW, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -248,6 +287,8 @@ GLFWAPI Display* glfwGetX11Display(void); * @return The `RRCrtc` of the specified monitor, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -262,6 +303,8 @@ GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); * @return The `RROutput` of the specified monitor, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -276,6 +319,8 @@ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); * @return The `Window` of the specified window, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -284,6 +329,56 @@ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); * @ingroup native */ GLFWAPI Window glfwGetX11Window(GLFWwindow* window); + +/*! @brief Sets the current primary selection to the specified string. + * + * @param[in] string A UTF-8 encoded string. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @pointer_lifetime The specified string is copied before this function + * returns. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref clipboard + * @sa glfwGetX11SelectionString + * @sa glfwSetClipboardString + * + * @since Added in version 3.3. + * + * @ingroup native + */ +GLFWAPI void glfwSetX11SelectionString(const char* string); + +/*! @brief Returns the contents of the current primary selection as a string. + * + * If the selection is empty or if its contents cannot be converted, `NULL` + * is returned and a @ref GLFW_FORMAT_UNAVAILABLE error is generated. + * + * @return The contents of the selection as a UTF-8 encoded string, or `NULL` + * if an [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref + * GLFW_PLATFORM_ERROR. + * + * @pointer_lifetime The returned string is allocated and freed by GLFW. You + * should not free it yourself. It is valid until the next call to @ref + * glfwGetX11SelectionString or @ref glfwSetX11SelectionString, or until the + * library is terminated. + * + * @thread_safety This function must only be called from the main thread. + * + * @sa @ref clipboard + * @sa glfwSetX11SelectionString + * @sa glfwGetClipboardString + * + * @since Added in version 3.3. + * + * @ingroup native + */ +GLFWAPI const char* glfwGetX11SelectionString(void); #endif #if defined(GLFW_EXPOSE_NATIVE_GLX) @@ -292,6 +387,9 @@ GLFWAPI Window glfwGetX11Window(GLFWwindow* window); * @return The `GLXContext` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -306,6 +404,9 @@ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); * @return The `GLXWindow` of the specified window, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -322,6 +423,8 @@ GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); * @return The `struct wl_display*` used by GLFW, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -336,6 +439,8 @@ GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); * @return The `struct wl_output*` of the specified monitor, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -350,6 +455,8 @@ GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); * @return The main `struct wl_surface*` of the specified window, or `NULL` if * an [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -360,92 +467,123 @@ GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); #endif -#if defined(GLFW_EXPOSE_NATIVE_MIR) -/*! @brief Returns the `MirConnection*` used by GLFW. +#if defined(GLFW_EXPOSE_NATIVE_EGL) +/*! @brief Returns the `EGLDisplay` used by GLFW. * - * @return The `MirConnection*` used by GLFW, or `NULL` if an + * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * - * @since Added in version 3.2. + * @since Added in version 3.0. * * @ingroup native */ -GLFWAPI MirConnection* glfwGetMirDisplay(void); +GLFWAPI EGLDisplay glfwGetEGLDisplay(void); -/*! @brief Returns the Mir output ID of the specified monitor. +/*! @brief Returns the `EGLContext` of the specified window. * - * @return The Mir output ID of the specified monitor, or zero if an + * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * - * @since Added in version 3.2. + * @since Added in version 3.0. * * @ingroup native */ -GLFWAPI int glfwGetMirMonitor(GLFWmonitor* monitor); +GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); -/*! @brief Returns the `MirSurface*` of the specified window. +/*! @brief Returns the `EGLSurface` of the specified window. * - * @return The `MirSurface*` of the specified window, or `NULL` if an + * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * - * @since Added in version 3.2. + * @since Added in version 3.0. * * @ingroup native */ -GLFWAPI MirSurface* glfwGetMirWindow(GLFWwindow* window); +GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); #endif -#if defined(GLFW_EXPOSE_NATIVE_EGL) -/*! @brief Returns the `EGLDisplay` used by GLFW. - * - * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an +#if defined(GLFW_EXPOSE_NATIVE_OSMESA) +/*! @brief Retrieves the color buffer associated with the specified window. + * + * @param[in] window The window whose color buffer to retrieve. + * @param[out] width Where to store the width of the color buffer, or `NULL`. + * @param[out] height Where to store the height of the color buffer, or `NULL`. + * @param[out] format Where to store the OSMesa pixel format of the color + * buffer, or `NULL`. + * @param[out] buffer Where to store the address of the color buffer, or + * `NULL`. + * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * - * @since Added in version 3.0. + * @since Added in version 3.3. * * @ingroup native */ -GLFWAPI EGLDisplay glfwGetEGLDisplay(void); - -/*! @brief Returns the `EGLContext` of the specified window. - * - * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an +GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer); + +/*! @brief Retrieves the depth buffer associated with the specified window. + * + * @param[in] window The window whose depth buffer to retrieve. + * @param[out] width Where to store the width of the depth buffer, or `NULL`. + * @param[out] height Where to store the height of the depth buffer, or `NULL`. + * @param[out] bytesPerValue Where to store the number of bytes per depth + * buffer element, or `NULL`. + * @param[out] buffer Where to store the address of the depth buffer, or + * `NULL`. + * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * - * @since Added in version 3.0. + * @since Added in version 3.3. * * @ingroup native */ -GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); +GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer); -/*! @brief Returns the `EGLSurface` of the specified window. +/*! @brief Returns the `OSMesaContext` of the specified window. * - * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an + * @return The `OSMesaContext` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * - * @since Added in version 3.0. + * @since Added in version 3.3. * * @ingroup native */ -GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); +GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window); #endif #ifdef __cplusplus diff --git a/Code/ThirdParty/glfw/lib-vc2019-32/glfw3_mt.lib b/Code/ThirdParty/glfw/lib-vc2019-32/glfw3_mt.lib new file mode 100644 index 0000000000000000000000000000000000000000..9bafed0651af3e045accde37d35569ba2368cf29 GIT binary patch literal 527314 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

H5(lT1t)P3F*{`3nqv+!$%^f;W=`m%hYci z+Ol^oICtv2VD|RF-oL=9?F@j>0ZXv-y$sHWIxm>L&Cvf6oMn9H2!S`A!R*oN^Ddni z%-*xme*v5;^sabY_MQgk6`dE%9&Z@m0p}wNFIf5xf%BV%*V_5ud*badAoG?!05rIb zh5G;KUBkmz^%1#tCF_soAeZ%A70|yI3Fnj9}F#(*9^dT7**%w7RFGj(1td;I)u1vvf$X)hB$!R(!Ox~2`o!l3L0`1oM{dvuNAx`q-l^a{5(1Bx&w&tlES~=ffyc|@uMl{wZo3V@ z$`V@3XXan;5O}QihK9)Vgur9I6okOzerJZrs|ta~>gVDRc&wH;hQMQazBL3MtEu}! z;IaLAHUu8a>5C!oxZlr1;PE*A4uQw=7iA1#0yDH$uFxcCy+h!!OOhA@uRD07Lg4Wb z3Pa$rTwN3b?=P!V5-D;+W(0ErH7`RnqU3Ht6kQUPYvsYx$}`?B&hG5+`2GpC}MsMbdetK$5orNb>wZyvdN=MBWuJ z7*iRk+g_80D<){#(%JT*>hsjaq3VZ;uiVj6#g*;3i zgyhWtlDu-os{%3)lQ%02#$lcd%s1D=(K>Hogm`nE?{@IxoU!;_zbYXdrMH6jNyaPP z6?`3(uZ$al`aSVF568(!e5ev@>Ej~iv0a>**3#7w$Z2cRL@cMStxAZejxCR1KD=nE zC=B?Vc|1~bi0Q-2-f_V7dt!|V%q#XV@lC9r-og?od~#g?B#VMXJWf7{h!pc!y#j5- zS{9=lfnFD~yRk0A5+^37%o7MJZ4VX~Z!E;utK~UhzPZt>H1n+&wqhPzmB5GnQ!Ape z##|VF+?F3X#%t@bB;Yp=)s310AP-ACl!uo9d`uGG5yu>bw}4y|i^Oj@ess1}SKGV@wq~%v(=^XzuZbFw znZEj65%tdrzZ@%$@tEPz3lm4hHI8EFMd?oIMO{(wJsp``i1EYU?6*f5)mO;Z`565= zKOb#k$9aFXbic=q$$BUO{M@WK=eT$NXAB?auCMQv|*mjuJceEGso1drJJzPgglTt ziHVJ%(Rpk`)*=Syl4ppas3n!AA=#!&^hh@%0XIQPWjfKJQE5=t6*AG%z}7vmf)fCb zIGjn9B)>8%r#Z>$;cfYIz^bJb>fRTJW3F&OcVKrrnW*BK=h+X;Y+~30DZ~<~xv`e@ z$7mpydFgC|85Sp|8_61nF_On^DO;#yn-t>ZQh+T?4F<{=Xp2IeoGP2FZm1ljm6L#E zT}H<$avu{FDh6WR6{jswvP+a~t&*(=nl5-Z0;P%lJ_OVx&|^T)3&b}Ba|LP!l6%_^ zv`@(11Crg7?}2#zq7#GClqX`_19cFHE>@)O1fXmoql=X+f##^#3Wb&cWs2C#fP4a7 zuVU$xWfo*{+5{(VWKS_$$yflTYzoj+ zEV58f6Q~$#%Hu>6Aot6R_F#z=v#+IWCAKBHQlT3Zx=SGd?P0DgVGb~xQ#L7EC>PBs z+ZxW|Hd;nMDjkv2L0ZNc{ED@uSv(?|MQfY*D@+@0;#z@ao46DhRe0Pi`5Rv%e|ycA zziy@v@d=_4#9Zexxjl#%JmiU@?L+HOA-6|}Ru9u1MU#hVlA^ssQ^9-#KYPCX&Ev)0 zc&4?LJA}HLy{qYL;+7Uo(?8tJCay=YDA&?cMNKc;H*dnMpp9FTt#SJVjT`DhHq(|_ z&@1-vELi%N{gFsn3nc-`Q#?$`SR+aqi=RX-K(c^x-M%x0OKVHOnz` z+JFaT-W6#qc%0bp*}^T92xKUa^S{-&_2a1tyk*5C@G;6mlBWruA9plrIO#ZHgQ#pY zXE=Y{q}VNg6J;yrO&Fm!VW*H_ZH$a2EUu{K0P2ENqmw9`GMwsY)D-gPZL1zcy@X2L z`{FCr9?@tSO;-ILPZN56`YjPNEe%Vgb|%(M0wrQC>vW!{Tp{ydEzeU9kgU^r`O7+; zMO~hg3xV>m$h!$yr?1Dh)ZGrme2CQ8xs-MKvnsY(p?85~oqiBV*6Dw!*mzqBaAPYL zafWkCUPkTFRlzaNYpHm{sDLY;XeR|d^lDgl#{N0=c*8vZ+#2GoxB4n-#U}h5dv<9;?9u*?jmGCE#KOiaGHSY$ek{rhtl=}&Z9IE zFs4hyJ1|_nbpa*0lt`a}h{y%MeCx&38gE84N5n#shT69|A_XWNmrZj-B2WhE;pT`q zATKhlIpQ}M&cs+ib3{C3S;+e4h;~3ZsNtIfkpu3<371LA`++w zUOJj1euk9^+BBfQfF|Q|YmOL%*mKb>XpTq#I$fIuGyrI_YX;EQ;0?xbOLN2+$cAWV z0d)jAAFt6jM=S@rT^j`SJ$PZRc0h}9@Zqiqpjkk@T+u*R0G;QW0ptgYa&-bK1?u4H z2s9H`dbv&l@&UQEc%XBE&TyRxv&gUL0OWHO0L=!uDKuE2;R>ZG#7jf!^4gQASfNUVY8ARvp*0H8 zk)_nVQK35(`jfJ~J=c=iB#ZQ+*a0mSR>EqE+i%Ym&j zwRH(%+jO~wjydmK^Ah4!``)W*nrv+awW#H7X(E*tw(<_zF1gJixx*p3$06C~kZd<4 zTXzs2*sACD2}VM;u7Z3j`V-L_Lh?}{(F*S5CN@NG2*11`IaO6mD!@7Q$WNh7tRm>r;ZSTM&|64#^%N z*}4}$hE2Vw1SWyvt@|bY4GaApV5Gpzj}IWgxpRxoPO;hB>1FBdbkW#IvaF#h76VF= z!snp808fLgM#QoQ#A-B7^o?ZCCJ)=`B6b4SbpoA(^r($&LVR6tZ8izD6MS#-yyB%W(SB5$Jjm%eiPb36uaN_sj0mtwQDjx?LbT zlaR4yB|cHf*nhfH@MbC*M?vlpGTwpQFVG?tdx=6TfgTXC9AA?A;Jt!G97K9h#M04{ zl-;V(T?*X~v_tS7QnDw39uqP)08a?CPsP5X(3=Xq2lQ{jGaH4kAloHmKPnzQQOUA~ z2#s&Ev?tJArXD{BOoV1JZ zMz$tDkPFSy>WlIbfj6Xml~r&ulDSyRTu?H*s;r=TK}J<&*#f_JVdbPbB~|!>u4XZ` zuu>RW0A0Q;j2GxMObq}R69}YPEvp za>2qn{|IqRmbWrTWQcb{wZ$SjsW?RtjICtL*2vtLx$C} zjFL|B;}w3b^rHDC3o8ZRd(r$H9OL|j)wOU!Q@ucDPpJmEud1%LfC#~uBp7ZgvtVIwH0%!Ys!T6*0a>iOXE|l3;a0MLSv%8YHC?cW%&}UYhjYp zEYPRVLr;I2=EgX98N3M9Y9$!LD#P|g7)4)z(U)rBb;#f)i(Vv>Y4^ONyPK&ft6ErA z-2H2{Ve6M`otf%fMzH;06j9Op${xkl5H*Hqu1Dn4; z`yZ=6o-@WZYH!m=8*f_vZ1>Xx-PMe$z3zg9p~nV2_{ofG{Lk(jcD+00w1GdSee3(V zY)56*$cPi(*x9$@$7$!hIs3LH`9se*x*>7vf;a9yyM4k3Uv19mlXv-PYy7ue)6#9x z@97Ksw5&V-t1Bn;tqD7D@S1BL9b4RcL*s473cI|LH{qs?t`mn0I`PD@TZ%6H$GCR~ z^_ccz^5C<^tSG8`KKG`+V;}8T?aF>N^_vNYN?v;>q4dG754#)ZKD4S=T1D@i@T_(h zcF9~mVd{Gyzx&Z!3&$>geQM+f@B5$Gai#Y_H`mwg=k*>HSK|9uhUeJFuP!J%_|3N$ zv|Mw}Wjog#yXD;nei(c2sQHs`U3bgnNA6y_xw7noqaB~RByP&$oB!GA;$MGU-!yXR zrC<0b?`wDZ+#nHoz-qs zyAFfTs2sWOrhoqZ)EQl7c6$8V2M_;{^7Vo0lOMnH(6zt&MvvTH@$bR&{&~hVMXRcv~dG|E0Sb(FZejEPk!842D5sPFKtP zx_Ych4cDRIXx0~$858DOjdc{3*u#&bEk?^>ycEqb67gI_T4oGGxR6=xL_!+oV&{W) zy8iRTsZKj=cI>uW|)5&3{ zqr*7rS)bv7CC^J?I4n+Ue%7)74>z_XA-rc7d3i*A*AEVuyRMpRYKF z9d?|4ImKb8m#_n|)`u%SzzD)PeTzR*GQ}Zb zch3lt!*0D1q=X%5BS;BHWQ-ssFB+Tpm6FdLk`{-A?kS8QwZ=FkvmKJ94#_nR$=wbK zyUj+B`#Ru|{N#{ykyN1wr!eS`Vg{pb#*HH_F2@8%!>mRL13eeZU`VnZl5&S+i9>RQ zLvp`E@{%rzRD0(GPKIzLiDPw+5UnI5bxB7hnW;;nl*F$~;*{h{U7{(;R)^$CT@tG} zujrDlO7ev+>8vCXM#G~dJ#N+Nyi!tsfcoMW?G>~O;3bo^m$ zD^EqPg}GQ`G2B>H|C>?1@tVJGnH>An?%t4ux%yBAA!=LCA5E=mbS-l1T5d?fT&znO z1|6=eFtzCRiNTG=}LVW>f2DU5gyMR$oZMT&%koVh0tiGqn=f5F(Ic z*XjpJn2X2D@cqY$*{0S+U5gyMRstllR;O0}uV>zAYOT_>$gykn7h0@=8K!PZ#PF_O zu(f-1EpqHyr$G|tV*Sr>>*YUMa{f(SiyXVw>5!oAr3yl4*DICgzA#Q90y%cA0g#yI z>x)ruZZoyqx)wQht${*|tvtiu3B9i|wX$?Aa_m}XKoaIMv@+vPzS7jH)V0X5Yn>^y z*b`v*y%f=6C&GPPdUwaBq+4G~&w z(-~r7UqnGR&hpQ?7CCmUvmgm`u@}TJ>Vl|?O|4Ve3?q)IYtVN>ucHX z;ZK@cr$!+XfgHQma7av7L>qs4`>3gvqid04*BT+TI%3U`8o58q)LNixkz>~y2}zi% zJ5>;}p4*7Ek%x`C7CCmUQIMFYTIATZ&K6n&v1VxA@~dTEPwHCa z*tOVm40Gv)K&#ywUSg*3XI+aNyOu|2vHoXh$T+y#)DrI%L+ZgI&qkqfVui%o=B7bn zwilbHb*wRT@Jf`fMUH*%={7C*2mje?YBlIu@?3%MW0+#vY@sKBa?cZsRDl`3rqZSDwGnZZ;O-`m6ctfq;OuRizk-Nh2NF38n5uu zT~O_>EU%m+1}CRkoUu$$sT4LTz*}Z zzcPJ^zie`~;ZDY4)eudtRyW8GBRBrdq!1B zt<8yzncG1KMn;#GO%j8yK8(4-CHV-@)d5HjrHtjVO0JcY!`n9G7aUD$R7SC$k_Y zqo61+-(z`bpg+(tY5AVQjI1I|E6eb-@sP*lkM|Ue&xAjjf&x#_2R|me(36*)pO;>k zH{O~E=ffaV1HNdovWhajh1njQBI^SplauSoPfttB@?~Usf;}`c$=ROlqVWa3f{aWW zY~?|cq9Q8_3NyVqxrHA6*^>QaAWL&{GcwZhv*EVJ;vipMNXiV3xxkk1ypEnKCt^C^NqxJtyBwrg&_oqSD8Evh(xD=VzjXAhPvG zX(l_zljlwI=4GUl+}hJMMa}bg^L;q`C{^--TR`%$yDT3rRh(DL1!XDA%2Il|Cm*Gx zr~nt0D#UudrAQ-DMtr&HxID$Px`3VeJb8s#c|}EDucx&Kc!rfE`Z2<;uFjwCtJIby3+bNARI??)XEBkCa*QWEgW3CBSd?+tMhmt9?ae#j7E>a!Vt_JqkUMF z>b$nf^Ga~8)_K9~aTwtya6Ssb-e2HEbF3dBm_5ER*aMtb+=3I9tEdoKkgNSGgyM9ZzMQ5Ixm<#Mo+?Okgkx4siD9ys$RxeG1NxIxm>Lbm;#D&e?n_fzXz{8Q@guyteEu0%vCk_TB>L zi{sd1^1lbCTYr%}3{C|tq8}xXq5#1e} zRXQ&M+rjFWN5OgiIQI5Ie?K_a>*L<-+pzaBIN#~KVCRF!`#U&>PoTDrckCJHOJHGW z%ic6_*66&p?A-{?{UO+U1f0)9u=hJS9r(r=)AVd%g^A1^EoC$FncV|ox!31d(6LQ!1+$+ zwUxdwkh@UWUL+B)7UaF!m&9?!?+ z;B41BVR52yI=z)4{3GdBM_`hy>MubNeu9Z!&&@9q(6oHvI>mPa_1gw-IsScpANl zPoxn#VhLvNH*li(3>qPrJ(icQ;H2ujw$5)3IOhb~3-CwE+sZjQhx=t{&Cgy>$S)0n z*B89&LgYOWBJYC`dB;NF@p#>=WGtbz<8>o`R0ur2%5iQ8yjbvRLg4ZGS{VW_3cSl5 zJdeZQEcbh*gV(x$#9Kn-JK<66$JUA@mA2^SRMEuS+Pkup{Ah>iy_Vo4%n}eS|*8sv-R3z7BD_MKdo_TLUiMr#Z-c8oT<}V_G9+!>Z5fT z8<#H~?swI7*WKb^LR-;P<7@QsKItNB+55>yL924rb*66)6%S`x$J#IZym)34?+7>( zJPz}JIK7@|3K0Dx$Pwr=Y%#RcB9RD98z&McvvO(hV-Z}?y%zfNnkF^gBvhs}ZWF(&zlpi>XY6hD`!QF3jbFIy zVx6<42&>0m!D=eKZ!P9dRweAj&(myD!E)mVryzP7DH%yPdHuTF>@*oArt4h z4#BS0c!J1^?;AQdq!KkONNAWj07t)y8wG=a)(Vt}T;nbqd?{O=62BuL;pcrDd}DAd z(;Ix@_?gwboB!d`^?HQWCgW7I=*1;Y`wiavfPU>-Qu;hpO=Yf;GE5 z@a2Malt9^7OKp~FQ9vWs>ar#rn4Z6EjpecP9zf=KKcFJ$N~dCUmk}vmNtLlYe2LN( zF9+x;!JDXJ&rzsYp-P2n72;vaz10IfBdn}fvDYYMma)5)>_LT|R0u%0bmgxRz65CF z%&|d4)8{{To_GD_toD`1vC^)})L>8W3LE{3zhk4T@wLXi zqo1!k+88;tp`AEoh@aVNp7S{L6&&I-^T@B6Ubt1UlrDI332BFp3bq zoDnL*a60vTfG_SQ_>}$M3fQS$e$ARE9kRtZo=D-;@GPJ>;jc1LAa)az1gZfVD$r#> zY#HLTO+YCEy$Q4mC{lDb?-6Jc*0M~^0$L(urC47q5IR=ca)GL_rss)BZ6Vex1oC5D zFA&p4ZxoT*QmnZ|3cU>iai5n7v=(bRCW_Rqzf5~T%+-NL5-W)#E}JNaHMc? zCr|VY$oi|q8TS}`Aj0q~mg7|(xMs(+T3gcq+eQZLL4J@EhLp4~zB{G-^j(QdR}v*YCS3i;%;x1AhEhmG}X z{o*lN-7mbs4|<{oAX#UsMDtMs0|X+pU~Luv$3B8uW%GKvvKrXD{@J$G|3b>ym6jK3 zV9Nh)dmnA4e3Y_kq#VXX=z^I4ZhnjnYBlcv!RjD~RR~0I{XbY85Y*~lux;i*YsGjn z`UMz-Xk5twriOJ~2QAZydRj$Y2^`aQnuT4CBmLgu?+f>_{!`$-5ck)YbuXGA+j@0d zi2K1NRK?--7mv{zawj*WPp{ime{s0xe*%|7GS@16Lb|fZJ^8m@p_W~f^ z#mNF!jV%VFX89S|%oxX|f?y_>)TR5@)M#+h-TWRG)TXr4S#LR%#wJ075 ze#6;U3VLl!0BM-W0CviU3v@lu2!VD2u~C=a7iE?~B%HDG*T|>{aLkNqvjlO>v0)w8 zA(x z8`g0ha+*)DrMbH3MtRT8OtAyy8 zyi=|i2(uk%ck3m|0a9`5F=&ozD`v>PTaWJXUYrm!ZCA`$ zyD#b$bJhv8a8b7j7*CJpAxZ!3?4QM)yBlNfKXRPCmHH89LhoU+1j)ql2K`}iI5|Kg z#X<09{7xa8t9SsyK_P!>hv5$_W=V6NEz~a|_DFh*{nDnj^XjsQ} z$mJ~x`!$cCP3wFh(Xfu|kga#JS#SL$vk_o3*N`1=v1^_m=E)gcAzv}21hORbQRiWd+?A@uf3fYe&79)1gNAinTaL)QL8jrren1CXPC1W= z{RblimhJM5e6Q>qUFrFO6;h7N6hP+=hkB!|3-UeH{5ep!@ zRmc_t$*b-TpuQ@v`N9W-abNcnuz7x4FE;^=gIQoW+R;my?nk=_M$!2e_;{wxB5A!j zG50`wfkiSBdo=AjPM{c*WbD@3HZ{OqZLB5=$qj-X>W@;eSkc8*zd0kXmzl8oBQo|9CKSE!dlZiV;+Lh=SE#1=}* zSc^%Nq7Z9Q%Mq{|wQOc9p2r^HRS|r^A&v6s3yvz0Cub|-V^&>>wK2%rF=oxR*mRtn zRm##vWoeT_*D17($UKQR**9;qZ{DHQ?oo)(Z7l}Ya=&B4kXnCSD+93>CZEtYZ3O-Q zm%*&o%^EKgDV-p$xJf{=(x0u+g$gZKXoEtxDD+Q-c&SM%EUgl~r_g5#@djar*e{=) zNFKXN61DbRk%JC0HcKI*Zps50F2bw0(4xs4*?F2ekpr?Q)3bYGITHXW19FElX0-Z0= zOF%OP+7DDL&>KLr1bPRkM4%6VW(#x>XpTUi0dagkQac31GZv|R4OA}B_ds(6`WdKF zpx=Pz3G^2bD?N-t<7%rA2sis0&vv911+-A0Xds#TSfC4qEDoqfpm?BKfqDVe3FHP^ zBv1m7U!Va%3j`VjG+!VTVl5F{3`mR!hp;wV=^!lqJQ0SN!({55ieof0!QTI*8t-oRtMFEBd>G}MnP1f)cSud!~g zkE=N%9+IKg(Y(^-Pzs0JTQeNe$3RKUFRG|RGgLd$gY#d)8XleQGG8Zlm*DRJO8Te~mqOfgU45!YQ{nq%>f?jc-E%Hs?v#EL8 znVasMU-R4_zb?!uT{rRbDeVvS{qn+D*Cqa5GU>$44-M?`m3!#mpJOI`u>Jg;(hZ+9 zznxjK@Vt|M_+wb3zjd~S{Q9dmUh~3*gEwWzT+nOBj%Plu zfA!XfhVC%7`)nTA{*7J-yN$m0#d}iEyL9IQ|If27+jq|;#{NB3k7r%?{;o)4d&TB? z!}eY^aNlYB9;nkQS8n|F<;2;KJXG@A6Zc>I*=NIE%qcoN;^rI9`!eRA{Zl)vc;wpq z+?Qm>x4UnRw(|QkK6`Fp!RDRr1KQJ1&V4!kxqCJ)`|#q*re1?DZ@+KoHT5S9JN2Ez z$NmnCfAp~f?>v}z*@N?|x<2A6`R>ZR_d9ONoIU%#S;y|JN%Gy7`FY&P@<;t!2j2XC zU9W;J(^m%S2X4Q(;NJ(+uAVp8&~N``|9;6`4n+L+N6t$rqmEPrrZ-spTN}PO_2jit?+41mp`)2R4JNox&Id90X3o0M^%+Mdb^_+iwmN;9b=V(mNSAJZR zSJU(2hO^F^QM~_+-_P>IR{VbbN!$B=I`Otk9yxu`ZE1s>cC9q@?_4~(U(bTNPkwmq znqRtqKVWF@!{6Lo*UXOy>&wB5nVau<-x#wHo|Jm5{-xvJm>)dq9?BA|A zT3Gez>npbZTJvdm*bPYqpHwy)<>8t&|N8oe&;GhSE^hay{l;Iiw!^)@p0>5q`nB6W z85sY_+uuGk^~kG>^8fMNj7aS)f2Sv(nsZV`@98hy|JK1LF1g{O+}-c}mAkH@uHEi0 zzgz$G3)}Kq7XNmz^UTM+X)AyF(D(Oin`?V}-g@}fymihiA&nAMI6sqABpWdN}NKci5rJ0=Nf9SBbaf@n05gaN6OmyFEQ8I_#VzID4?> zUYlZDjydhH*JrnLlEY3h+Rh&iEZOax>98|61Uo|pt=F4?eq+D*hzKR z86HAkr*nVFaGrOM;8^RQaSl6af>Vt(dmgi!UTnpVxN2ux8KWgx3Zh zbEd~DIM(!JIP7E!j&WRzcb?bmw8PGn{k&&7>}1*OyxhO{6;3;-Y6I+KIqc-v?EKaB zP`=YnuES1_!_IiYY5V%hbJ!X0u!G$r%|`w_-TYvbGd%?kJNXVfg*H1m8@8cS8CY)= zIqVcV>`V}x2CRAB2aK9|p3}}mhn)!yI~>;ybFmzL6}R_R6sKZ{`+O89heSC&-o5J#e!qx&##;Ae%@(kmcvf5!%m6d zJb*RJPr=%=TIv7HcGxL#*qI|Z{kX<5{kd(p-~!8Ysl(13haJ)LQThDQl^xMI1llQg z*eP?^nJYMFV;zoV*i#Qa>9kYfurt?Tr&4g*t~cg6>{L4JTp&2yBd@PZp1d5L<-p^r za@e`RVQ0SJa9o*JW5;v9yxnPMfy2&xhaFz&VXlp|f#uoV3qNt%S?I7+?XZK}KiJ`U z=XKFz`nN}&c4{1UE);ek7H5aQCuweBLEi6BGG9qpn=n)>NxBqhCn^bZgQ2IAummt% zs3gmz03Xpd_H~^unWH4zbjf%n!Hu8@XDZ2Sx@3xy{707zRuW``2qj9wS3Mchl!VW( z7|vG`KHp~Ott5OZ!_Z$z_>_sEpOUQ6B?Fb@W?eE#NgmcE$x8CPE*YyN@9L6NCHY2| z%vF-VbxD$voWK*0aEg+gs!K*I$tYcNx{?&>k_k#uu1oqT$tAiZLrFI3k}@T^PnVpf zBzy|RFilB5(j~=8^1Cj{RFdwjwh+!yl4Myknx;WKN7aZ1AH%nVsd z@~SQwt|TApl1e4{PM2JuB$2Gh5JoD=$+|=nl43lrSTJYd63Jo-5B2j*Lv41bU+9p` zb4V_CNVYm8&p0ISIV8V0Bwg4Q7Qwhq2RkH%4oQtea*ac>!y$RcA^F)MiDi{-Pme?5 zb4ZFEl2s1LEe^@Q9g=q)l3yK?Zfv}5DNJ%m@*R>IhvX`U3k~lx_m5^6} zk3+zJ3~E5pm(U*QSJ{7;|kBj#(_SNjO5W+9u(6#3q|$7`C?B zBphpa$SQ%yW_UKXNx1j@R!Is+7WkflItm)rVqKOr)3BIZu8x8SDrTc93C)Oimz5-m zy=uPVZ%UY+ben|f$+JnA8+>!Z)M9STvPqa5d_TeDFwuO6z?3l2^)?BUc(ql6kBG?E zER|LY_kO>XlS&TXcpxW?=QNp;FRYwortlY=geh#XNtnV8dOnM?k<1i!vq_k(r`RM+ z^B}7vg?k@ulQ36vZ4&0{WUGV%&2N*?GIO;Le#LPy$@u89l!z3Hk}%0C5hY=kRU%3P z^M-bWmM94qTP30-tg%U$<_$IplX#O&!gFzlO~QO;&riwH21VgnC8=L5~exHCSgXi&)NsS z(hh*|ha)9ze@w6zT=Vl@+c#YJyQbd*prq*a7&-P&6#0c#Ppla_Zh5EN)T+_7$gykH zK@#TbOBIA2+n3@72*pZ-yLByc>{^Q;F}2?NzPZ`d`c&5<$F6meO>67IpJtg_r*uLj z0y%cA#gLf$dSm6zEvD9VU5gyM))Jw0GS&?FpUk+*)Y_zLkz?0lDGzhGv1W+-ZL`$J{Wh8mBM;j}ODQ>at)-C2(G@a|miEI9m7$fQYmp;m=j#%3 zrDUN^V*N1IrQn3QjPB#2M?PO~=wME`u0@VLJ-iDHbLq{$7JgN)|Cn0qbS-l1T9*l} zSgaYAzxnyurq=Dc7CCmU<&c=i9`VHcX{OdbU5gyM)(V@}k@pJbm|EZKTI4{>;t_16 z)H1RITQZz@0^Yl$`z>!-c?mwtBtM~(jd!2$Z5_%@LEyIW1s}5H$5me0`$4svDR|T?j@PT`203Z9128ycnL@Sd@qBxWA!dKva zAk8PXP0FLMEZ4u>C5aR9F|X>HGV4jm=SyZtl2vAY+)Juu;}cZYcwhCLI{o`o zhTRM6U|Mq0{7iJEBkT3=tOO+4CRK+A8+bV_fZD2XN^Mz9Q8fxZ`gAAMfIIh>Y`R&R^(XBDhjU&wFA=i~SjOH8rq_&!7l0K66)I zUBhqt;A31U#0&UsxPVA|tzgr$eR(cGO`S^pvbQO!NO}F+;#BDnm%S}YsX3#Rmb^$? zS36#uQGc|qZL3IZ6zn|UbO&UHN}Z)13AErW5CKL4Y73iwK(%3uGm5BDKiDFz6^Sjv zTBFz^CYH5clh{bM`o|Wd&Y`MSY|%22LcOdsAOmEa%!bM!vG|NoCB7-ws-}?0VVssk+7)< zPLc^3NHQ^*u&8wd6pUD0zN)Qj)r!`-Z*8qbK}D+;x2kn1-QDU^T9Fm@BQz6_nvp|x#ym{8J?TfjNu`qeR>ifoG|QPHNV?ChRNGv5_;9_eTaE5c9+#UAQ{hVPDam3K&f)nuLWbP3ySM1^UL#NUmFo7qKMU^#wpCt zt1K)nEGe|&YEW4epmImY+Jf@Df|A;b{Hp3|?QL?k0B2G8j_SJ#@UH68vYPx7T?|@B zpk~VQNVb-?D5RLw6y&QdFVKR+*>EZUXSak}^cU`nL);jp1bz^7nj8NGtsdeg0CbzK zn7_u<#G8G-n7^LACI)f>Uftz%iW?mqm&tfK#Vwmpar*>rh=*i9%jy)j+m&vn(iyWk z#cfa3vnzmBr?`0&a1sP?Z%V(zI6&=oIbV!k;svs&h-j9lxP5^KmjJVBU-8Z{ank#D zGB(@7k1o6PM$j{KkoS|FWa_=!!jtP<;0^%pAs0CE zIzHzDcMNceDF}3zRsIU_{J0ogUd*oU^xn1@oG%9F1MUVFII2F+yTFYEZnFyXj%0U`% zGf7x=mla>=y~|wSa)7(l1&+SkUtQpi0&XZVTX$LIZw{WP#o%Jgn+@Em7+kE}2Y_4W z0yi4CEiQ1=flE=G%b@AX8y=g#S-9Wo0#^&%?_J<%M&7=pv~-u%dymBPg)z8Tz8nhN zY8SXn;BIw+n+x1qF*xu==lcbO_Y9q)3+m|$!9N) zMwYGHYuOjci`%!3rSWi!)buG2EKTq0&qa!dzGsq$RNw7PQDwi8DK=A>nuhRJrl?B( zl&MaHIZX8+T)-3!3AHnIEic`iWM&D3gyi6qlIL!OE17x_VJ}m^LwGS$>k(eU)KdsAXX=j#uVCtBgx53mI>I}d+KjM_ zsed3WW$JB&B}~1Ku$ZZj5Ee1@3Bp3AzCcK(MUv-hg!xR7ZI;IrZQwhVDcW%>mnquZ zViHp{6g!!z6i`!`8U^ZjrVa&#(I%u!mlyxhCI5IbKw}a8`$LxKY`;fi%VV{s0_@IlEdDC4d8d0LZ@6cv)9;6wr1qlX{V$%wa$hzG`^-=VL= zw-9k{K!97R|CwW5(N}L@76jaz}^A;>Z%xMpr{uY)xKHLf6oH*nPe(DM%*&alTJ>y~Xy z09S{uO1ldwyq6>6t#KJKx#-PR{O)s~pz@CYrsw?Lwy`O5PZs%ay&j1^xd(k$%9t$E zQ2xO4_)G19+vWHrVJfW0LtUICOvFS=Oi`01o@Rlf22t$GSTl> zMl+}xe2=CRix^asXY;+~2nCMnFU3mYdL?kA&qyv)JdYrx1`Jz*AQVqu2Sr9-is!!w zMJiNhM2tZwX%PPpw&F6a$ ztGE|HiS%Ak@4cx~G(~0tzYPH&N-+q3u~ouw`ad1NAs(|>tw$W0iD95b#z1&RP@ua= zk%}{WQp66~PnHa($I3p*2bea>e&`!))G&Ab0`=$tRG;^j9Z!Pc={YF2sy*~2<9V~V zhu)`LMI}nNQ|!=(s42r9+^AqFvcuLKppg{1x|MV9ddGbd-7Ib_TiZg8(H+HLW(Y@? zHRU%qcbVbMkx)0s2`%Z2bVa?^krpj1?&xU`(SVGSVDS=+oOfg794U8(x}xDwx0-fI z5T~0pd!rF=R|sR{p+zC2yNxMeh^=d>H!O?c#V~+)t+xqnyo?CJ_G#T&c9;)u7q9rFY5&AT{#Y=?t+FUU|U#=pJoq4o&a2SB7r z%UBD4A7Gk8i^3>eTvT~SI2y)C%jqJ1q{SQT@J1Tx&^!7DZOtq`jUkO2oR=`MrX3~Y zXlb(8O(;UJJJQkZnGRmGMdpW_f^Edy&eo;fOv@}0{~AM~4q&>Yp6Xy{C&v1`^l~M) zG7AJ$%hM%BWWn6F;8IiuFqP^pNe>^RoCSNjccTXo(3=^y+6vUSZ zDKF4KR4gqujH6N&p?r&K8WX|WxRgIzb5|H($|2qxfuM9P4tFDc%tL7J1Pf`XbUHqE zd$41vCMcbC9da;v} z7gH>}-O(^47ox)>DB4Tun<8zzvze+*cTZC*zWZXxe6*EvFAJc&R$~#i!HTwu*DKj$ zL2C|ocS0igJ;d>#F8itmL?%R3On*{Dh6?Kq)9@!r6wNI$eqb>$NL*4_-xTTSK-CcH zFX)}Qut6{a8Yh)LFO*_;1TWxk4BmC5Ny*5sD+k|sH!o4sgb1@Prz#if>WXxEitFoZ z>nC|<)Ku2g&Z_awoKaPoU*qMws`?ef!0IPtIUp%iWn0t=(Ml-Ihg~ER<}m6Hvqlyd zWngim@7&ZDrmBV9d%K|$@u;+_WY)Zz+IdtUWe=@8|9t$z$G!91_@l=?ea`x`YVsc2 z{L(Ec*M2Z@%bHEW&pMykoUvEvpse<@&(GQN&5@t{YVdE)IR3yD<1RVi(vHvzEejS6 zz9*ye*$pcnnt1fA(d*YA{iA6$mz8`G-BNo-*CVClDkm+T_4BLqewCj3?VB67Jh^;r zd+~mIpVctwth(WEetg==si`+aSB)53yRqnn*37*hzWB`d9<3XC$grP&wPOE0&fVOT zl6Bs-$J~4Av>R^Q*!)QLerI2L`!6rJyYe4bUihnZ-{fANw(_pe@9Vg5V(FS&|M}RD zt~oT+8eMo0$#V8#&0owd*169QsJ zJh$bkV-_Fx!s1^%bHOcdpZ2Sx*WUZ-h{(5R)Qx;*$i=zOuYP#WmhMee_uR6_5xJE| z1QtKB=6c1{$fG(nA>90E&)|fuTgm9kBb7J7=er~!;T(BqQKW4`do!DO;*Ne)kc^?k zgj19R)xUC2AhM%5W@5s9>NACyK%@O*+o> z&31bo(Kz53pr1bY{a|c55K$2iaFI_p1!ajVCUzOy`%%4Ucl?t(ZILM953QjF5M<6<0^f zJK9>V9C=4u@1?Ax)z*!5N{qJN>!L_{6*WV!@splg7om{$ess0YHKDp9x$B+N6HQb>b-ekB#-NxGtcPP_$ z8SYS~QAxR6TnayB`eDNz%JgG~JCx~-hC7t$=hQp#S9|PFxCH7^(lz>T8A}v-5(hBQ zUBV3V=;!#S;7($KBBuu}d}gy2>t*@92xE*jl4Bi!kgh4Ge~U^ZWEVO?5`;0vB79;3 ze^5|AJ?vNaXtA&xD_?{$#ySvp5)-HwO4lJpXB23$7RXqHF~%B&J7WJTiq&}Cg`>4t z*UDIgF~%Z3XgR#~&+R2ztXE_#!Wd&6%(2J`L)RBwTa&a{wCgQhgfYfC1a}e>NO#dS zdHA=tYq82?EW#LLk)J@@|LnM>udLBxEs(JYV~j;EOKnZYv**lQsKvTW#v+U{7P)ma z&j0T3XXA!sg6CH<7GaFBj^J1%xpe*7yZ$^a*4r``VT`f7xTBRTb9B}ME!JqMSP5f{ zg^!9@^!4fb?75{iTC8dri!jDmN8*my!--YD?hQ_6LQj71n@tT7yGEJeZf!ni9x z)MDK)V-dy}i}0dNp;$-VQI@C0`as4aj4{?xxRaPL3n5(>pY_|Dv{=VbBZrGH##pF? zh((T9y2jl4&Ldi^c`_DZjIpR@X*ryCX=|Pq>q;4mFveKqb4pAgjYZd!r>w}=V!a?^ z5ylvc>?uv6{$5eprN!DCwT3Rj7-JoWJBbNYUb>FFHSGi~R-ueV7-OvQxRaPLhoazm z`QckqwOD7$ScEag0tm6PDGILte7Q`=`TJxn!Wd%_&l3}YbR+iw2XaxI6-I(5PrV^N!_+2Ml=3*XgZ4I4@+2@j_+7I9Bo zpSRC#Cq1jhQr5B)#u$s*UTr_ot4BR`nHK9u@?C^6#-cVz)AQ#&`^tSyfMHy{W}|N5&!yV(I1%kSrx8@R$-sQ?Jo`%5`I+JKUf;eRvu&{HXP! z8{8b@{-o*1@O90bSJD;2va80fVAs;T4CN+bDxOz(6Z3ME`{b;Z;Cx1#7NNv_oe5hf zU1vq?%&QZ=E_NZvV&J9vDEehA(m5d!JV{$W|C)S%f+G?!J=BHC#c(Sb?xK|9|9W;l z>Q~ZPxS+|cs<72X-YM%=S)Mv|USZxmA7*KnSJjnNVb<;<_JmK(^-s-!V_ciqTai~+ zT320BSz3`NvN<&{HB-3Dr)I(rHZ_x7AzFmeyt0DA@}lCxqC87~xQZ+)$tx+YtEng{ zt+Gg(JWKKg!n-~-Q;k_zmRD3$R$5$FU5t0c^^L1>iVO3q3-hZgOUuf2Zxhb;shQCT z<~2)q`_xQIQ;mphR^}JgloXcOMP%Rh)J*AS*COWURh5?))m9YRywD~d=A;+b6xLRQ zfzrD!{fTPI1tocfwT0EiMJ2Tg1kNSR0j~nH>k7)@<0`4jlP-Dn30PQKP*zx5URs!! zk8enR`l*?buBn+aS8yXr_QP2}HM1$AMlGrULuzaC3rZ>}D*5gaQ*qu;&D3HF|GgR! z*{&(Bt|_Q0F38L8n3~DHd+-e}Qrz?!wk)r@sIau4q`1b6)tve&y0AL0w6eUcvZAPp zvLrnHQ#0AsPdUUJ;Oxh1$lFg6tHmtNE32$2fGm|$O!E6r%@i(u#8*B4vQ#ZWEn;b2 zVOeo)HB}5m6u#d$QPqegC|O}qWlcqXIVRWZhX=sL7Q7Uk5$<{7dXE~f5S6v8qO`gI z0t`Ru)J!=5AikP11fb78ev%o8qZnR9)O|T^URAYD@Bq3M;CZsk#@+ zF#|)i&QA4(P+$cGwKb(B)ir`Sx~Os-L6lkOFg0FLSzd8vaanb7Nl_j~2*3~w5h(nJ z)X)ckqZR>%2}lUEm_>QDwUtFxg~dgtGSX7WAf$-onwi5R1!}~?g1q92l7c$ql_JWz zt-$HC(r^LfK#muv5lf2m%Bw1>iYlQPD5Bz|r?+U)@w#u=9shKqBFg3Fgyb9{FqDCyK$*Zd)!os|=qMG8OiW;ttnnPa|Ic{x4ErC;CjaX2fSBvFCs8p4C?9iuX zN;>+dW(rUL)J%S&#-RqNu)M6eqzsx?G=GRBeEGT$qYMG4@t}1p^NXuWifU@y#oKFQ zhCd6lE7i++1xa>hI-_X?Ngl5t`3POj-$|QG?<=NTr{I^emwc%Fu~|WKnh9sMf`qKo zqxQxW9{lJ^#LsR;z#?GIm$(Gr@`evD(EBtgKG~9MfO$gVs7GO!-k*Va*CD+V@S;zE zN#BQ37rsrq^riq)rNdd}kGgp?fjL=+vr8`oOpgv{mEJK(?`&XxA#w5ew*i=!9MU@j z>AeNaiTi@U1%um`fA<2jUgGS&$31xPEHGye=j3?jc)RjmF~Z}y1wXp%(o4p(yCsH! z2<*~Z2izuy^hy!`&o0v&y&vYA;76BT{-~!jSz;K7z%GAR0e7oIdM6|Py}<0dzetTb z#&+pd0Hds|vCCfp;x_~L3z=SAc>(4niL*=3i}ch@N0(iCN8{PCz|=@wy!hCkayy1}Ec%=6)U`CL`8dtpUn+r_2#M$L94QVt0bB@Ht zljqBUxyd0tsvma%^O6o{$G^9L`9O!WYTufX-WR~kAy+%Dc;#IV%;gfNme;gmkUsyl z62l21uv(c!pW%KNILgl^m$;W);$C%$d&32en%&JYxVo5?I&i>wJ~H8U*h-ySkjbzo zft%ryNps+en~%+n;K7&aph?;u@q9)6~=k*{V5XeZ6JFd+UbwE*XYoyuD?E@n>xB(B8b1 zRny02AlV$;I2I|S2A-nB!1w7bI(+E($FAz#7MKxpVvuJawuXKJdWh#8gxow_hra?yodCM{TjTE)_{lla zTeFzmTNep2+PY|{WdE?_S?iKVB+Xqv6kz)NDITiZf+D#R6bKLX3FuPhI{yr`On${@ z(N1yL_tppQ!fo-g2kz6zhZK_EcRqo(KCn)?x%Gh!8o5y+1(ZNrA6TQ@6t7vfVeH)X z#FPv0OW^~bL`FyBe?gInA*g(ns#2+0D%GY^T`C2_a|Q*tl;U0mngn}T13u#@s;;BX z{VD-1M^EsEO^F^)-i;JKx_MCD*34%>Nd^z?-Gn7TUab42n?1+$?nAKE1%p=)Tm3b@ z{Iq(ptmg)Li~~(q<-9|@;v`p{dEVFW+=ll_A7Io}nr9e$u9K7jRIkHguNIU8^5i z2e^>W#Zt2_7Mc~hYu3!<5kvUlvJEMpzk0~JG0^Y4>O+VC*(LvnUkWe55+9UWQ$d}e zQk9@qGY$bSK%>9-a(tbGkU!Z_)Vic6`5r#ruoX|?KL#o5t%jRc#;iw^Gz?ACP;N>N zM@*3~vfV|#C=aXfW6toBPyE9ILw}dx7nfBeN0#NK*j@^7DdkuS8s&i4X*nn9S@8nO z!6IQ>4*n#FHMIA9;@zqQ!~wmM=s|PWTa^rt_*4=4OBH~w#rSPcPEvlXIoZQ+R?260 zI`lc`0A|ZiQfYK4{G{e9erdqn;Tm^|iKEb{BpH`ejW7ufR?^i^qjhwn6v>{uellJq zM5h9j5S=-oF2qk1I0TBWJ;Wbg14RskzWYkx z)aG+28QLW4;tiUD7>9eLiv>3`K+&a?>@3hjJfviYJvoFPD3TPr7H-~p`p(0Y=6*1Y z@5H(D*7sg~Iijsf?meGcG2GY(e?%szBP|#`0o3*QiA+?3qHB<}`+o!)1%5xp?&VN| z>$fBiuNr%3@`R_Z`)or|@`b-a3CPHs_-OL7JBXf0@AV{Ka0C8ft?%8+CctVAS>ntl zEaK0c1q)UYNAw()&q4GRpCvD+hO%MCf!TKDMNNBlQ=_Ta|}u{wWiOY%t@@o=5_5$@yO+>Oa6 zJ(_&d)BL9Y;uaRFqu(>wv-RxKEy*Xc=x<4$E&q-fJXYpdv=_(-y?WK)g~iC_w$5I?n4TGqo^AJZS7t0RL|IHt(2Ws-5S?n4Kk_0r<^=*F7a9U2C)BHVZW-jXe{ve z4^wJADXZDws#9zyYE1TpotUECiHVEiqKN-ZMp0t2G@NolMHNCsA|r$-9~9Y0NxW8i zIj9s*3qnD4s1&KM)%^6Q2$wN+AHuuwOY-~);cuAwSfyxH`OooR3UBUC*d)&w+`EIR zG*H*@(@an|Fcktt)^(C60!rj>2`G^lT1_o-f2I1AWzFp^9fry{Qtl9-|GM+k&w0Q+2-HwYhy;s1EH~X; zrI$UTd`a$HN&6n+jxV{_ETzH^Mcv*P@kO!8W)qnk14PkM?g7gcDe2i$xOzxC7+7s5s{m9|$&=~_;S z&5~u0kVf@Hhde|jn7e)!D%CLgaeBX?&$G2B5oRIRparAQu%^gvlGf!#dAz7kt2n7u z>?7gS5RICnUi^d&Ng6GQH`+L#?-e5y0tte*3!uMBhxU5VLp*X1Nbh`j#)7l}ttaF? zs>O60ZnI7-P(2-w!j!~RkLR4Jq}aA@J)2}$cYTzvtoqt->dMts)0bRv>Bh=GHGUR; z!1uy$ULJEt^1bWJ$KQ0OKYQ#M-B-_VoLY0xA3y!wB}@0Ydd}v5>^J7dk>{>``@L6> zd45a#nNR-X(bM)``Frn%H-0n!sX{_N&UN4|LOmG8bbKDGCz|GTbo+T*7${K@bq&+Web)JM;H^1}%imi%$~sETKY z9rfOA7asolx;)c?20SS%l%c(l=J?yaru{K{MNr8 zowVumuJoy{o1v&3+oGC`*!obbAMfw zf8LgpUs*e9!Lma}oLV+!?s-$copQ$NgWHP&!)p~G*x6Q(1&}c^?Ed%lK~Qc~4YzIe z81>DlhR;no?8De}lJLa1s>yEk77gLWO0+nOV52<%!I(Dnas3D=)cig<;sMvJ& zib=>3M5g?R)nodZAEf0I6G{=%b>^S`^?YnPWZD?ZwLdrU z`gBGzW-cXyYxJ)>@?z5=HChmg(~0ub zRvObeC?=gl7~@4q_2T%=U%eljANrEUbPkD0hgz{jo<~pVygPYxS8O`ei#MioSWG%c zFs6V){Lahy^p)6jyo@0!qPj!Z5i#kE#$B-vgYvUxey4>zAITVfI-_IKA*(7efvhLW zkM#-nV`I`86O#_AH`1XF?O^;SE}9PmgL1FeV`PIE`EyiEI$YEF#B@sMh!0XLV$(S` zCY@tq(xL8XVnPOm_M4Cqb@S1_EI9*9XNlix)WLZ$ie%;4`ujn&H!wQk1z zWX7bE&6s9{RIZy2Iv1pwKRGe!WOF*W&9Uh3Q68_fx=AzAb&Pt4zBgS*sCQs&@-;@i zGfUn%Ouf@B?;NDw`LVonh)H?^r zJ89~jvGUG=>YXfkXCmL(wi8TwlX2|jBHm9toOc>FxsQtfJ?gv4Q7s+c>iF?UwQ+*vE{XluBCEAMFQykClm^-p59?#J8B&8Cl#S zUWHXnN`B6jn31?6$jjv&IyW~Ft8ZGOkv7s8bSbfJF{X?;|Lr)sL&L;hqnrz%wqEn$ zYj1&fL}A_UWy*vxuDhDVu}I6(b;i9b-qT`zBx4aqq;wRi33(aQnT)&Id1l9_wLGB2 zLHj0S5ylv6iXoQq6tt-_7GaFBjyJ^m_lgU?)!wC?{!18RtP>2eR!%+#hPlF@dGcL^ zF~%ZYCA26A&u`bvhk{dLMPw|(AeL@jS|08sCa6ICC$66$hO$;l9;l&PJk^DrX}XrG z2W`;w6|A?C|MOuY##^%@T?=t)OVFI8vIRj;TW$-HO^qtimTpIUs*~X3$-x(Up@R3#^>UWVFes5)l<1cC^w04jXE-qJz_+OP?cAkpI?9@T4M0zh{MVb?I4;wyglX+ z5^-J#o}jkJ9!iptosBa|^oNwt|1BsjA5N0t$Fn$>XJSUC&#Su}*Mj7x`_eNg0<8rZ zKInkDyBc$j9po8JMm8?1wIG+*i)U(RvlirI6OPw{GzX(WH6rHl?&0y=+<>(QCyJZx z2_8?LCvTm8?+tp=h~LlV3yc!xS?tPAn-qWJ0{4GN^2gsRAopGa)UIjds`pc>uR6iD;p+{MNHpPlQR9=-R#WzM)?1M-v$9DR@TmOH0MxLZ~@33ac5jIaBH4$#tj1Q zI_muBF01cW3)~IViPK$HxMJWwdP)ZZX@wgBT;?B~aX#Qmo^i&F18&i?&bWUAavgP6 zbeC2B2zUM;bs&&dxWD6m`zB}HW(01;0dmnB?r>e? z4AEUyd?C4?{gw^{(h5g%5dMoZj@qpYH#_4<|K0glXB^4Z%YSo+`%OJLk2}oN**Cn+UACtoTgd?c*C z8AnavRo^<}$nWm|Q;usGC-DSs@k_2bm?~u*{GGcU>ReGcfj=}J#{<6Z6s3en7 zsk^Lj)c+m4hck}swF8ozaZ>>C4ROYe2c&JNGj4xCuGrHVNB*4K_HxD%U!JE`rn<|D zFJ!_#K_}7aE<4M?o1+K&|OyVrGCIf zN>q1Q;m99WMn;kDvci%6YayktyR2~3Zmm$J7D=oXj*_~c8VB8Fg`@XAP0j(`Wrd@0 zmv^Ypy2}o?CmC(J%L+#((>PM9y2}bjDrg9OWZh+jBe_o^X6r619PuxW3az{BaHmkA zb(a;6`sb^u5z$?CxJOBu>nMkoBecJz$6GnGg;Yg%LOmN1L zDxEOV8MhAa%OT;?T~_ZUlj#c=IGP#wE(wF~vPzFsfj8icBN50VVbxt$=@D*DrZbLA zq4Ow{y2~m(`fjI_b4qtv;f@Dnb&fNRT$oSiI^*b*^-OZcQF(8g><;%dHR`&{svMNw zM^qTyWrsUpsxyv6bV{Bxj#SWsd}kb~mfiwq+@;9>9fi)gFM-P|a>kJhDYw`eM@{*l z5@*~xq&K3}8Any)c^5e1-{5lR^yqsWRpE@I`q5D7j3X6US>=qQanoqEGmcdFFKV1| z)K7V~))`0sjgRY`apYncRPT(V{@XuX;KX* zWXFCQbjFch+pEbLNBK)@c84noIpfF#o7duuqx>zO?+$lMt2^A&VP_oKL;qRejH7xv ztj!rm<@nSkZd8Z6^d?7~aa7;tb~@u|=&1KJXB_o^%e$O$x?7&Z}@rca9PXT;pQxNhdXbDGj1>-YtMJaQNQQ*3!HIe zZ#=Nl9q!Fl&N!;SgL|EEG&J*=3)~IBU3ZaldTW8pTkVV^`|oWRxJ=*<__1?()D^5; zl9-4B6Gmh->g;zS`NM0_w${9y4 zi;AB*>}qG67m)j|amJC}cNg_hXHcJ&z*5gz~_^1 zbjIBe+>0)8D{pd6?*^oI{LRidnhNrk3*1N~buzzzSEGj1#(AG^R&JsNqZb9x5=a{OJ+IPNFk?TkAFkji_U zamNADa<4Ov%Dd)1XB_eQzWbeVBLMmN1I{>-mwO*{#vKL7^A9=W$R+yOubpvOfQ193Pj3fK1=1FH9wKF{%opF@E|9i?AN9o=9v@?$C`5*t_jHC4a`HVA;(%a)X zXB_FtL;mQDqw?l&a>mgVl#`!##?jP>f)|`|G;S4m(HVCrAn7kTIj3fQh`Ia+|^z*fU zamLYidw8=mj`H{FU)|xp`kOP3>e1o^%K{h0p>|{2J0Qkij%+N-%IdR<42cWdMD!9EQw(t0=x3w1>8D^^hP57 z(=OBd3veGgq}PP>zI2)1oc9wvZTQh;S6<5BB8g!j0=x3|0{1hA^fD0tW?){ExIuB! z`wuYRIHY$V;t%GdGJ zS6!x8{Xv4~6#VG2D{mE^&6gMkBCzA%y}+$^NRR68vo6#78n|H}#?N0T(mMc{^Cd1Z zPX2BJ=01n?u0i}qfI0ai?Y(y84FS`m!&&LSc}VYUVBV6rA#w6I_TvOk27YweeUG2x z*$KdGmbiHOdD4FqJQeuGOYbT?oDR%?Brcx*o3Zm?8g*pWX#X zZv-$`N?bg7ehZin9MYSQ^u7RQ-dEzi@$&aGV16lagtn@0RNni6N&DJ4y)ZCKCC)Cr zW~8?an18!SZ_GFNzWC8)mmalm#{+Yk#Kn{69|LopLwYA8y<349{H=IzJbNe=m?;ux zm%kRIR|3rK61NBbx2qp-0rP=FdgX}!1u*$rMgHQY*A2`viL=Y!Or*COn7>P0yz=ht z8H7Cn$%3%|9;Ba-0%p0y4aNU<<$Vd5e>kLfB;tPn%(5}1{z?>v;cKM_4(G1LQT%`9IFiDB=zlRs;4F|?2 zaq;+91I%29^n6IK6__g}j^1up-rIqB*hP9z0P~rP^!6G&$a64$blLH59G;B@rds0S zm3JX9XE>ynh4fYc^II3`y#~xX4(Sp9wg59`4^fVI{L2QWRO0N)`!>>>225^}NH1P} zTLsKj5@(kl)mrGnc{r501&p4zv1?l|>nEmz=`HLriK49`B&aS-lJt}}X zUE<>L?_yxCb&=j$U|w~R-uu9O?IOLTy$5-+@S`hU{wjbuN#g9v+lw@sf%#D4_QwBq z`sI{igFNl{(Pfw3U3jnlKMd2|_9gC1Udr5rSX&O`1 z*{5HUhuqo$rg9LH6Dr9=u7zBt@(|L0NuDBvQ<*A5Sin>j!eXZC5Yqi5KAyLdso4l? zn3{ud8dIktoX%7;!dXnUB0PzyHiV}z)rs&_rlJU&m|B96oZLyCGZE5oP?F~ygcK`@ z56p`&wGv?$Qx_qmVbvr)<(uLsc`iqI22)oeJd3HT5uVG`^$3?UbrZr1m|BbQLZ)s< zxSFZE5UyeBK7^Ms^$^0JF!eA(8lFq?tV2ktCwVp?ypE}j2!GDhGYHATNb+n#NbgDV zyoB(VOudTm4yN8fcsEm<5z-rz;LcV~`8!u3pjf$#~Y zzDD>IQ`EbsTtNOn{gJ7mpk82V7^s(-8V-u`1Nj3*OZ6aspx$EYP*8tm$_t8emgJ%7 zLH}loCZxX0R4Sx@k(2( zlRP&eEM;mf!V0EtM_A3&T?nbnNuK)QqVFy!hAUut!%?ODjkUxZrnR*-H=}f(k@JCF2gphcXLD@TBZ&KMKkG> zJYG=5ImjQVTbRP0^`6_9N(J>RrhK4?hmb!|_cE0O>H(&vfciC4d7y}!kUvnrXQ~X; zV@y?nqM4*go;py(SI8fzKQJ{L)N@SD0rfmnr-C95L;gU~?7k#VE2uv+)duQKraD0p zuOWY+{?61AP&5w=@&}4$TS5PUBCbRJK+z0|B+p7vG$$a*a}g*S1&96vMf`{SfufPv zB+r$gXbdpPb2TU$eM<6Nk8m(kHz6bsd6H)>Lh{Wfd2UBY$8{xn?m{@6srwM_&(uQ* zsb8Puc^KhAOszwBC{r5{9>LT`ghw*<48o(B+Jx{}rd~ogo~c(6PGIT{gmf5Dl4mo* z45t2pFq^5j5l&+2eT2s|^%256ranPf$kZ1IOPKl^VL4NDZci0cgF)3YH561mQ^P>b zU}`w1*-WK?I+>|apyo1lD5xM)UQo?UjRiHIsbfJcU@8?Sl@#Dq6(U z6i`c<$^&&KQ$?W8W~vO-c}!J-TESEusFh4j2i42eY)}_7H3!rsOq~kqa;BO=UBOf< zsGl;`2I?B7Ize5}R20;WOf3QR3#QHlbt_ZnfFh}Y{DHcYsgA_ObrFKA5+6Xjbv&#s8LL% zfI5V!QJ@ZI>QGRlneu`f%hXs<$1rs)sN50sCo3{U~4azJGyvc7lGJFyf0ChK0n?aGpL;gTL$kf}Qe#6xJpnk{H zN1)a*^$Do;Onm|B38uaV^%PTd#vj!Jw7;PK$kb3!FEBL>)XPi_2SxP(?Jua;nHmM^ zEv60y^;f36pr~e`{RQ=Jrj7;mE>o$X{=<|H6x9*5zo51-l>_QCrlx@UlBqmUR9n#g zg4)Vd8K^-h0qj3edoWc8YA93FLG8`dY*70$H3!rPrcMQw!c;S;1DR?Cbud$HpblfI z6O@;!D5x<^Edg~jQ)hx2$J9BXQkhx~ijF`-`wJ?asf$2mGPMR&4pWzdn#|OdpiW@w zYEb!1T@R{=shdERGPM>|1yi?!s%GjgP<2fC0^-o0mSB1_Q-0$iK&gSE`WZz<#r3Ie zp_b^9NkJbIOD6^Wsa@gut#m6>P`H<#+9{8>Q412Z)nO9Z%FqAa`f*=&1nor znin{A^LYZka%a_*YFKSLH)M z|EW0z;b>9BTNIh!80iRkaX8w-aC87z zrDf0ggZcfzM&kz)nJNkR1|TQj|BvR65onb^-nyeBZF&t-CR<#GMpbKq&_cQv zBOEGdvL1x8mBsj;TM+$Mv^l;X#Ao(pSl2RqW@jVFO)b-;&)ER-`K=o-%FGX=f$x9Y z<%=7JN-}k?EW@XxHFOsAm1edm5mVD{y(n7G1rRIpYrnq6i zYMfPrwF5+G+nJ+wn~l5??f9UmyuS-=I#GnB(UW{LUhk4sH-UPO_ zE9c8H7|Sd?P^AONo1MpG*;Xc{+j##P$aQ07)LDr`U%G;hJ#oL%1+-}iIcMxssI&Gd zZ1)^0%~3$fsa`v=fRWpaydK|m4toE7d0wS~I7z4^_-&S=P&&u@uE>zhBv+LS&iWan|VD(ZlC;S`%W z;0q`&U;diP=d;gRAN9aCl!QH1DDAelpFy9G2l4~y7Nu*Bc)4`C-k*(N4!n8fC^Er- zuZccHy1_;0^QGo@MHxeLe!)~QIZaA4)y(sz)Tt!7 zG)0QD=8H3rK+T$A_;;tsT26~EL|pS5WSO$o)E@Gd=BN31^vm#>X%btXCbtF33(a)U?o>Us{nyTEwEpZ9f6p5u9ceS)dc58Q4yJzGI;~ZgzQDL`lm zT!3Wk?V*Q84~^ZJ_HcKTe^R4dnxrKZzdxh&*$vJQwVR$z-E_xpU$*S#^?_wJqeFf5 zh?@s?MK4%(-BkaCZuy!WlN8T|V7FCQSY6(grMfQSt$Yi$2!D`itR3y%l5n@20l?mr zz&0;^i{l+IO~vYS-%bjVJKum<@5U;~AIF)asGv}$Nd*-Iv2HHdF@IO?+BHefi9e8O zG?T!bXs|8Z67p6=ma9NhLr@xOQ%L<>e z0!A0SGx_-25&Mg70<3*p%m-Pm$jQUCaF>F z8-rT`{you%>sEPx&vmfc|8qBVo#V?9!w!bQhuwV1YV=FDin%I<=QoBrEcy@z6X%CB zO6=%WQ8|UZMhuRqf?bSLZ12SLwV){%Gg$m$PKLs*)Pk-^WTCe@*wwu&`xdgYT7+^o z^e0Fab@jlvP!*aV>S&%G>eluc+UCyacVsEsO;~Yui|6>o4p@fGj)*lgN=ovpYP|&w zrFED#?)Nr?y27DuFUe6RIbT$_9c}K>k4Zh!?Q7}gb+f02;_j6R^r<)D*StURs#hpS z>8EEJryUex>#c3P&9eaOc>`42hwWoRDeE zSL;J~kDXmmJKKwyEZ!2#m6sdGjU%oZ+WS6_ro_=eMyEK{=!IXR^bu2uEsBs0D^K%Lb-|*9V(G&d!dhIeqTZ z#%bcd3wN|*M>e}z&ZNjOOsMdILA1hPDcCYS+{U9}<3)>%X#nY|OfMB1!KSJAb5fb+ z`+l8~C9787*TpI$|LWGUnKUHo*mKCvl|2V@@4Tod*yb%jdp)bXobuN{x0f=>T?{j5 zlRCsWgQ6U;8Ka{qBgYlgDAKesNWQvm&7F^{u~|CN(|IX`BKY{Q!~>e`KQjzdI2y*Z z8U5&W|5#!af58Yj<0IEN7~`HR%4C0^X)s1(l4jtkYa+zF2glJEWu=HO*D!W2xYW=Z z!GwQaDza;FMV(TBB{ZtwfJiOQ_cqkk)=zJ+a0TwFbJ-hn>5?77$hbf4e8p=Z5$F;+9mVcqj-z2`fsmU zTC{z1PN?d*#k7jJcy{r$ADnUK=sQ=|6hR9cyEViPZ+(eav?umz_QDaEwOv_cHDxpI zyd>w@5{~An(h|WsHE7q=5?Jh!mKJYOsI6y7XuLPSr#T!EUIShCjy*6n;f^S5ee9vM zI2>(i{ch@)8+WnMp|uT@PaF+nm7V5>U12A?U3lkHor{Y$%-GFDb^c&ZrkuHBo^V-G zl7<0^{>zuqh>oYVcMhrYHT!s}Y>s&hiziZsJLaQCwzmhlyA7UYk@47nE^SLIx0CV9 z*yZ-6TJS6L2gRs9nggm}ndh&ljB22vHE%n1K=5X4Z%(Pb^O#Mqq~cZq>W+2poK$Kt z4UIgyTkeXP+t)$P_%%l@h5KUWxbn&<#f;g@qNKdEYo~Y?aR*0&M;005w^YflI+OvPA_gCN$uZAn(_(Ft|!r0DCJYOOwn9ZCP{_k zTJF2=&f%;~D8s(sMstj&l9}zUx|I-Ea^FuUUJOAgF>h5;&7o%kj#0|0nj*-rco{k zP;%Zs|FSGL9~CE6L3~xGs5iB%-fZfs(q^KtGc}ng;S&S(Ig2r$sMzrmG3PZGSXuW;azh3 zHiah{%8;4JUFlg{;28%>(^ z8PjMQ*Mg0AGi5^>0*Vf$NolcGkUAlO=WF_Dd$F82t96x98s=-D>co~(bLM{kN{QJP z!ofWcT! zFp2?Z>NiRk2`MGh>@usWquA+v&?ah>KDtNLi5WOhN;PiDiZ2Vc2fYnVk*@D-`1~-=ZE}}#&sHgv!rj+Hx>&}mD$3NdNLN_wvSpkc z5-=QMG~l9O931UK#aE?A8wRr&B)Q)Ny-H)88Q3jGN z#?=aFQEg;}*^;rt*wTmju?kxTVnVD^g^cDBwW9{MH1ISSItWDgj<%1WY-d%fl+|P# z%CeFzxZNj)C>D{?S=eRV{=MYDN`8hq6t%`!y}^ruQ@ z=lBAtWwrI?@Bm^7Tz*$muo(+uag0*&?6ihr?0O(q@(;jH2a46UgXd={#m+UXD^b4h z^!&mdVPGjb(5OWF(10oln3U*1wx>o9pJdSPK0Di_SurLU>I}{3*+G`5^7)POvvW1V zS*Gz@)+;KHw!c|w&7+;Gjv4om)9M)HsHBePz-}KiHQp@Ior^;uyP8H5+PC|Bc54~h zPW4QkXzZ?+45y0p9QqA&|5MBA^Xt;RShHT&FtMS5Cx&44IyAR3KLk4$k*#7Fco0j^ z_0BDW^UHQ}s20Q4OT<&(9o=EdWJ$ky;I^zMToH!HxTd(lr`%Z70d5~K4~9L$>fTR%uLChoUsW6N z#BTn;@iy6O%=EDqf=}Bp@glXny))PprCB?=p>t(IzuY}g^)$z8mmr2D^_X8T1RV3R zrJ!m$NU6y-Gbc1BoaV7rr|4^1H{K~A%JR^3^J?4jnu-~;IHy>6Z5!C#v}2DmRJ>|v zp9Z$8s7&ikZ!(HzYI$98DSHbHGqL*a!8fWiDHZY~n*8=Ie6OZGC8cPq+_92^zWVKz zQyBJl6ITf<6OR-rGmn#E zm5yRhXlhs$vvi-jQZlX{R#;^`Z^%cistfr1GgKQ(<%>_53B7H6F|z2@tb*^`> zGq(GpLDI}ILzRKnji+`HT7AR z+%q9J{ya8R_iYiJ7NUabg2+sYII!>lZ9r`=;Dl9C$%av9~=HPwR#I%!){-Dtppx*%Rq%W*t=5 z6>181W6Rq9bIGo5?ffm6!Y{vHp3y0rFr7Fl{KDY_^Re+3am!%L_S5Q@<0+y=GR+Ee z(a5XDvPeMM{i>OuHS+o%G#avab4^vIWZ5x=_dU*UqG`wdm!9uj1sQjPc2v+Rdvfg9 zQD?~7mQ|?oC)bugI7odrfBZo^{-~|=rzyz!a097Qh1%5VKq_!tPo%lbQjMDY+lu`kPj?1##PC*DmeJpsT8++PVK92S zw{XJr3H1}ICTN`_Sa1WoPGg6)yZS~&zox}eN)$F_`iwqEjZM5?AB4kOS6{nhX6-8- zTnb0-S0LlPz_b-^4V3#>BZ^n zL*wR>zkB~Xu<_j=svYX0H*dB>t>mYVy;Y4Rb`?&r1QUtF^IM}klqG$bL9B3bAQmpD zEXj;DKAXrym&;i+hOmjSeO0%x*_C4UVdk(JWdMaGU_Sc~%~>4IZ0A;Or(%uYf;HT) zYbYt7X`0g4e_x@UYB4zqT?~Dhr*O%se{tG!$MIdY9>M&P{Sp3?TAg21m_Pj_Z$rsU zLtScMb6X6VV#CJoo969f%bgw+CraYLTeEG5I*a41wx4)>=MDfz*~yht;DgPLhF$z% z)+~`j>odb$Q955wJ3S>vVEVjWzm>09RiFdiK)YMdpf1nwi#$@T>+@dF9l!89+ ziS0ic;o^SHKypnP@Xt0(`^UJpDks&!`QavSjkcU^7aHwvPPdaKJy-fS)^BG_?6B5C z>jWD+F^;4D&2l!P-xoA4VY8Q=@2^wcj!TZN0(E7aab=CJhS5>A`OU%3D2^hglgO~~ z$$ab)*M_B3Sd7pRjAFL}Z&RcLrxmxgh4eeqZ-bWBRFi2yMk-$Ixh%1wZLBuPiZ|w> zw4fnuN}#l!^jFg?v%+C-A==Vz=obrf0)tP+0T^*W1nE;gB0}2&n~sy% z!)jRu+NjW`$;4Y_r8H5Pt!O+xL#;4i$qe4Gfm&xBQ&joTPXRYHSpA&v@SSTL$9kkN zFFnShp;}VZ6<)*#i^?I(e%1`r=&L&2Q2WmDL|^HGWd+RRLRFNwI>mf0$*yI)uN!U#u zaqJB!_Fh(2j>)*GOUud0%JMe!bi%;pNs8DYl^Q$)tNQ6RGU_H{PrDBXh$$M}ye>my zkVQwpol7YT=bo`4?DrWquS%`SFRZQcmKLVrvBlAeeYWfr8`!LvzH=MT+5ec1ljCt^ zG-epKA4;X&L(^c+rJK-qV?bNo+u0V3qUU9`pSQF~aC(PPs%wg8msic0 z?WM!u3TG4)>ufnSi!sS6Yms=7tmK9|L(61y(mG&tYGD4+!9OmR=h)}~)M+Wa>{HWQ zHcDkzEFBEvsb@fA>_FMC*|_a53O?OxD+@zqR%LcuW*-iY^`pi45ifyx+R#u1kGmRTarmE+k*N4c_5bjvWr%?&5 zEw(PP?5msDXT=YPmZ?vlQ(Z=C+Tl^lf5YN%6e~_>+e4#Qp?|YkzrR`)dnSr19FSF- zTOoL2Y9ihE)a?;(O$MLBJs=D+Z$)LS5~58~>$2#F#gz|bHxz5j#o^pmy`qiL#;UHv zK5ne${Ta%dSizyxnwjNA<@q`>@-FiEC-}q|DZ5|L>WKb2A71K0OKVEqPM{3a#f(GB zZYDn&`DN;fDougG&{GvEAMlpzbii8%&Sz!*_>Fterq-NTS?kR&uP>?MGf@Xbn!sO! zMv;Ri!c3D}38~Vg6kYAs%ceu3<2y7RjT6<~9Wc4OYZ_*G7vof_X1$X(M%t9NKV97* zL)pC{NA+6j{7hVGDf7zGd$kG}SOV)drp45xte>WX-rA+Nnt84MpRJh=**WRL;~O+g zK=7s3cC^7ur!BZOs%IPp+z7|6GQ8C1eNbe5GP`!*UeWPVXeTAtZhB6TK*3(YeYsd! zO+o7zSTxC5^sS*8Fj$MNS7Jm$RX~bpWi@9SM^b9*>MRzQ_RsNar+18s+SG$`?=ZLP zK@Gq}D6I!&l&sWRoS8RY?=Pp`!FJIg)CZv<7EM=4aZz=xL3~V% z>9d2vG(Ujq5a-0uZt>cGK94kB-9lr<-R+hvpV5m`m%*B-*>*V>s;n#RsVQ4owal|W zjE%VR)%CpwE}S9;rXG%?|6JMB4n~aOqo>vt)p=)zy1IM1wX;a%%C7CHLUiR2np2e# zb63tdsl~CN%229tKoN#)T^I@gJAN#|0`qnr1~T8IA^3 zzYruK&hRm9d7|hxb@tN9!onTH|lp9iT3rq+Pv$V)qK?`BsFyPC4CWNXQ8cEK#{*7|np zX>b8Cjas^r&;*;e_coZ{Y)kgZI})!6-j3t*`u?ue;x5PML-IuUT=O}3;7l~azEsTN zS`@+%MpLk{E!Il;!4H5z9mydDMQWs*t**gu>XhtS=9^;IW@j2~8>&ITtw706G*GfmB11%tF0os8Qs`@l5OKmHL8y7npFIH>A8 z3mCi47S+hmbgM(TJGrKD_Afg6&T^YERE8_&5R=#n)jt*)jT?jKOb&RcK9qqRA+uA# zj*L+>jqwCva=gS$Vl}kfdQC%e#EwNNN22$Qf5^+GOmr|Z#!#uuj1gRm+c}pap>%Eg zKBvdAZBpD4SvkgyA^XA@Rn>qO#3W0`*frnrSQHGL81wY5ucgRa1;)e}>tw5u<~4RX>@s?jSQOXf_A~-ue=6=Rllt>Pmvl%DV3&WLDOi z2x)rAxL(asf)sa{aUPgx#j+6=QxSdDq$~P z<1%h6?>BX{cYIZGv+UKRPE4{e5W9^iENaS#X_I!dh-_d?!j*$cO-;&4h2lP%?cFRA ztWa1K$}*3;HDvCb6|Fto-Q?#vDb^~-##SDPD%T=6muPA<4^ubPsS^>Pk9gEhJqypR z);0DVTyzdpBbHCdbL;}a`6To2SK1Mlfz)Zij)I`F8w57VXrOsQUUFLXzbUaQR7?XB z=RiH%b_DG+#+4mgOr_BNELVlbp?a}}#;f```YtUD>xrbg;#*6w3Q#8(a4*HNtm)}E zACE7?j&8oxY56q;`QD=X+L~f-etltnQL(q8_Cz`?u(JPOIKDNdltr1SZ)+i-e)eh1 zS^co-24O~FS(+intO(3Y<@)#`&EgyL!Ss1{u7MeTakzlrbTpkQ&(kvM^GoQ<@O;87 z^E3dr3Pt%crU|I1G*m3*%eZmw$v%%7MHNi;e>+ZKQUx>n|XcME6t|OQRYeYXY4@b9gcI9Y~w#9=ka-$Va>aNo91ok zahv)}JBN)NNcSsCe~iql51x*dd}T|UyLh^d!52Cp4Y!mC7YnbAJq6Rbe9D*;B*?<= z;IiFUm|#9CR4}0~*b!|Fbp>~CRIEyiSv|)xY8T&~Sdl1s=CY!fQU#;xgW&}|P(F=e zF-O2qyZUZS8QWl^yLda!qp+xNx^b$wn`bEO$rgL|?`Dr-0*+eEd?u4zl^z@i$$O;2 z+sE4p?SMTUl@{D+8|`$hm~nRz!LWu<*P>vXI6RZiE>2HPqbjp>QX0-DH?Jbt<{9C# zeb?-FL+h_==VDA`aYL*&Zt~6xQ}-pF6|th3x!KDhb8Wo zCEbisl}o#2Db5N&g-eFze=vPw^m2xGX4UNN?RT=)O{jG{L^r1!9dITdKsV3a?v0b$ zyeOk|eR8rgm-^$jP^2N#sm{#&j+&|Mq<~eQyt|p9Dw_=Z=~y&VKQK1+aok(kIWgAe zQ+N6h`+FF+7&T1fQs`1Es1nBh2$aXmR}hI7z6j2#lVqT5cke1sZCAuCF0Mx!5Ee@ zXV4v=Ow+W~uZ&^17-hQ6BWvcpmJ9=HrfD_XNv&E`gSdz7%1%G(fOR#<$nnLKAk`P+ zb|zaN+MS(CPc+&{P;PFl0QH$G%KSdF4`t^UAXSfQ{9!>-H4*qD_E|T!HU{%fzcf>I z=|Q51kE}0g=V|+;ncpRs+|B1zxP%$5mevdQR)7MJQAFQAInvfc_0eEaIpnjp@386_ z!%@33htz4(err`--_wqrTukkJADefnhx*ix?G$PnM+S<~N=*CL^$vVcLmi8Qm^vO@ zN*lg*gzP4>3C(NtR?DG*cB#uT(ymt~AsU>JE2%t7${AK!JYq zW5tM9ZCy9RM$B+4{@U-Gt7gz}lrM3W&IGGg4+ax?%o?CP>SuA;X4=iRjR9pvL%L~W z_J*potjx^Jw1xs+Vq%yAI`9*$6`m_&cX8`M{0Z0E2DTQxM0YdPRHo!wF-0uUH87;l zEw)h=>@Z74Yp0Flw~h;6l$GyBevp)RhCbn2r-Qn^n&O%wXfjpg&a3H2ak^YjO?x@&DO- z53nebZ~uG7K|nv>nsd&&=7?f;%{gFP zb50mm;XS9idTNSB*ZqZi@Bi7i9-XN^{r#M(uCA`CuIg!;c1;Y0Uknxdf$G0^O^J6? z#eXfuU0ua`UAX7ROYv_sH^n<)u|9zd*52@=;J>`O;Hd~wZ!B%;pJ$>y9h6c;L<~G0 z937E>b%&PE-yGeMwua8}7JJ1YMpF2SDbXr^f-~geygt1}*+$6_oomzUFfBW~U zB^{@@Tv6e0yf}?O znsfMlIleTFz9>y>8cO~>uXvpN0?7Z!3ie+%4Vnk1!o-GDXd9Y#_4jDj+QO2A4( z^B?d7oybVxK{D%NuSsj#HNe^1EU1~Uy_2S|71uVfYW&-;e-+26@J9&n;`w2}QM{*M zmkk?+X*!CZTL2K>LTzbT?C-w_e{c$qnVVtLTqHj`z7Q{z|Fs!ORy6z=>@R;+(b5Lq z?FGTgihstiY1bZJ-JALP1Uh#y^L700A6ob)m6W&?-IAyND*yL9!3{6v5ZQlK9F*YAA)lZEuX{)oIX<404(Vj)>s|79Wh!-%yXl$dq1 z=z-11FFyahX7_K@r=PeZ;%D2$+g+`;Mml}+Hz%gWqOyo6-XW3tU_$D2pFeFc;{|6B6O?3Ja^TVF zDb0`GZ!X@Raf|&hT5Rec2djcmS_2dR|HsWWkDJ>>3R6E}HpLci{c#kbeW&*C4L<*s zCjLMAm{tj`6?yvgFV_|NwxMqZE&htM|G$K2<1G#y+O+P=U35+T10B1X`A5aaB__f< zZ0O7n%-V>5QUTi`I#Edf$~`^hw0RJEE3xZo27k2pI|FY~(gY;mUnLH=rO%NS|6Q?v za`eEiQTS^VXhk)*5-_IuPmGd<(Vf`f@za|>@!Y#O87?~bev8Q#1Nd8szpUY{B7_=l zY0Vc*({3#-;XP;n;Q1_A5+V;iShg0v#Yu>!NnJwW@62LMdNKXW7nb-41H5yPe-AqrQ$JRD zxRryyJ#+DYwrl;%DK8rv@r}}b`Gx6XGTJt|YTk}6M zl>f`w8ga$4W$_iu|6;BA9~=JB2L%59pO4e}Q=Z)OolUV+0;2oEBNEZji)-E|+|a>` z{Qm#{@oP)dCjZ>ECAK)0p~ap72#6RM7yC~hBx_2hZ%HL1zDrN6KL72K5<7BeaY#SR z9;l%mvqqpr{=I2#oZ<~4Tuf{pF_#t=O!=Qgr_j^)&G%k@o+!+Uw<)^ z=6L>V2MkZRh&Mj?{l9&{;+=4@Tj~Gw;ltpa9Cm1U-w5vThd@;}bBY)e9ah4_acpdg z&u0r`Q=HqN(;PUs$H$>;G-FfRKWN6L^yw(Na9HfIF}h6s!_g@WmW7H>T@-(C44&T; z2dM1EMl;YL1Ju7BxJS^Ll+a>-SSYA(+)!cKIeJJ$u{9!Ytoq-3dL3Wg`kiSaNn1dx zQn8=EHv3P!FWiO}5xgaa|8)u}BH?k;|7Zb;w}C%=@>aO>5u1#EyQH*kc1oyAfAcy2 zR>f|TgCgRFVsF9Kn}5*VaZ4Nes~d}!{AfPN*(XSxR525NBGRf^3BM5e+hz5CY#Qn> zo1swpm#N_Oi2TSkC^|H*e>5qhgy{HYuGYy|k^a2_t9X6=pL;6rFXwkHTjTFH;SYHg z|BH!OOkP4U{irE|9_4R7wMokgUgN-5DgI`tSm*ZhPjiYRfMQ)+Xi00+n#UlZ@BEnu z<6F0BWs6H;ts?kWur>{HA2=u}@kizKxBE1)N)<0A?#B}U2b*kh#NRTq*oeP}Q!{@v z`+?!{al-FxxTgDGu156tA*}cQ?^dI}>>1$_I<=pyMlg01Rt_xSwP#wPX%FWvKE9sa zx|;d6G{c8H!^M{TzkOpQUNro$`G5B@8ob!>LThc)y4a70g(4F#I=X^j*3i|{C9sin z-jt0J;1Z|Z2H*0~rh?TW@s*UV#6Ort-&ZA!n%i(==O;>(7<$-gVPBmW0iA8vhxFCv$i z=zdX&bkgD5Tg8yn`=&b@xo5FO&OXozsSi-rh! zi$ZIEdRo&CnFQyRK?8A#Nei)Rnpk~^&DJE?0=6*7WpYv+6NCh#K7cJM7EJUo^p{}u zwJwNM)^>toFCPS3s43cpwBnebsLRMr)GaEFyVH*7q!w-ge+hbv5Po)iAJ%DQZ97?7 zM_Hm$sDf#Sbh5``4M;tLE>a6)Ak(971?L&SmT-EFAtqFVUo^3%5X0ltm9>P=>Ew9q zHGBOuu^>&XAH=2+-AIiMBC>S+AVDaB@j?keksG8Hn#Fsi6^%*s~ zxgmU}UWF4Dsce35LBS!X;T6$xN3a|~%ZTQx)JfnTs_tY|!gn_AhYT90JqHIyp6JZT z*xV0uYfKUkqlrVBB&2KQb>;W-s-W_5L>{2B*#k8oqad*X6q){xGABEz;TkbWeS$UO z;}gZX17Gx12M;{1tvKjgbQwx2I1fDtXT7>6hEDN(V<<%nFH@7DcS=LJN>y$;P?GxZ zltwzKc_^%k9}vVWWodvMPmuc>pghaKkccY@T8%iHh`Z)s^Q?+7H^?~|fOWtm<*r=i zY^dCKLEUnP%Gn^xKv#7FzRx{@9a)|haV;r~ zhpCCRK_RPvHC>h?z+2YUr$y!Z`M3wyzdO18Gn&A5?Nv5k{eVxq6DL$5^RBM?oShy@u=?pDiMsAYc zZwg!cK1ro=u4eTzic#$xFQi;1z_*JZreY|j;)$*y=m=l3G|fp-Wz9tBc%m89Ung@z zp=QDk{~gt5d?S5-}Hg1QA*7X)V9811Gay)T?VP%G%J~ zsLtdVwKYtto_;>DVve7@t*<<(0`$pgxuw$2C;efa`>b@0+_YnIxHc-fq#nhluHCzl z$Ka${=l0ACi9UiBID?AP*tBU?R@kD|7W*fm0z*VL2tOdmWd`IdV?U%PBQ1NNdfYcquh=DTATt?t-Gt2=hlALXIl9Z$sWIC9cY!xc0gvg#_Ci375mGgpbyb>7ciy?=&#>jPPzrCWhScfhu{KK zy~a5H&#n-VZG$G-ahO2uDX-}gFnQIH;58GW*!+rWVTkC}fG9QVUDrck9$b1%9_kE!4s92C0Rm@w;|v zp)P(`4TwVLQ3_TP26!lenxde^@F^fLTbbQK>-Y`f_$vg`!qBnKg_A(eL`fyk1=1*l z{OihkK};x>ScnOwk^nKG%*JS9*vTc3vX~4pRw`J*FhJu%f-6@lhQ&^59yWdYP&t#J zK|cm12@SdpTurv4?UEYMn$TaCWWZ{|v+@B)UF^^`Ju-b&tBiuA)53uYg#q<_7ZyZt zyEBPOGQ3d9Rp(U4+8s?QQ0WC`ml6vlq{Qk_51b2!+gcNIftXM%-5{1k4m=!Ui6quv zql?$XCP7RXDM3Uw3qK%;#exO)!@B+i)g_%OQ?L&ssiMLRKOl&H`w+j_|0n}H=1qu1h zL`lwg-9_+~@>!nL2jWX0uG}_F7q87MPxFdkT8gH9PUaP1yOPRB2W~r#DSIA&r|fPp z83r+xl=}{VDOcGu_nk86So-my6_WH)Mw(ZYjVY~caqgKy+2TZeha(F4vozKCfwJL&XTQLGZDTl4DuL|i$XPK$dc6)nI=bQ^LZvr>Vn~BQ zgj|_X2aY$mXUGn$V5EXTmr1@$tj}amEszTJ7i+RmSG_d0V2BBI+5>zlNu3UWSPc?8 z1F^}Z#$SinBof1VCFpFS1`4`JhzZxjAc(Q+VKi*vrCdr@4tr8rFu5MYI$uKXjpKB6 zYSEdmMQNXOlC6r&GZ4cIUu74SCw%v!-+kzJxbU6w7&4aUSK@UYi4CnJK;~%4ux=j9 zXb$93SB53?oW#(ja7>91n@em%AvTZ1@V;(7iKRen0g0tUY$1t3M3#jg5HLLq9bk_h zIVf^tcT^9JVxd%$Gz1~o3M5-f8o28H<>JT%8@O^RZ~bhg%0(wQBrh0x@{*gl5Hc|! z)CV(2RyZzOhzT|qhza!}3}V7Ljn(KNBEuucP)b%B3LM&)f8}WGBuCSze<|&wsh-vW zEFZiDXqb6Sgpjhv`oalb)p?^+e4i zhgOyEiS&hmcW~an-w)wo2$}BMG!g6%^x4+;@|g^IFqYw|8$x2(;0rN` z$RhCrf|z4FF2}`N>9k`-c{oR*7R$2?41R?{Z^=DUNtwb)1tC*55EF{A6U10Cy2BO* zC>sO7JfaYr3pS=`5JNP#vpLc|3d*6PaxxG1W0@Ff=fKs|-E{dkoC;b@b!!)a?RYkV4Z7yKJU9XVL0#-(m+p`Gwl%mZ+aGv5xZVbtlgi^XJP#)aY(Gykg{sc zW^~$sH(~hWfcYVV;F7DlnAa}ac`fPk`)>WfoAkjzlZiQ*8Ek2XPJiVW@5S+wSB+g* z3T}OJ@KfvPST})Q@fyGY8WKEy-aD>3War@LPkZ;|yjK=(t6*Ib+H{<)BP9Z}ar)%i z?ylt)=iG&AQ5RxEHHFhi$h9W>AwQ7-HpkczkQoSwXWQEqI~6Q7EATJO*I+`eilyex zrB>2ii{@0|I!bm9erg@nk57dU=Up=8Lgt_8Vhb#?TwGG`iO5%ypehWq*!XO)>_ z1q)8Gpd~Lk5!A=Yl1zWtK9?L0pC^-p$=t6v($<0dhI*-^g$bQnBq^BEF&ZaK>A*a= zF>c*~x*nWI_RiT?0>;lfmQ4t|!HGjvz{(((Rz z@3>Nxor9l0?cGn?J6VKDGAh>Vz!WX4gamewTfi(_2+S43Y+Pb}m@CHbS}<3P-&IPO z6UND1SV*)@j#8$dh9gsF;+f4(j`CG!;u-f9CX)ihIVD(}$?H%GQ)!8u^?6vcpMKCb zu$MA@BH%EiT1D-exU)B)DQy%g$(HVg!U<0aPKu&?FdWH%d5hUaW1X0tYD6FlUIpg0rG4^U>IbK}?vmOo3P&>@}8E zhxCNzye`Dv5~3Nz1TS47Hi+o@K}?ueNYv~FC$gcig+U?HC$Wy8WYVjgm+{9Kc zyFA89tYX;52)79JH8D&Cdpry@O<7Mav65TtXh;f+G4%ksIkA<&oGP}jsl{$kShLy? z)a(YOJthbNE(a2VxHL;RK-R+WF_b<8onk4u1Z$cdwuKj_Zoq zIr#b0-hDamC3OjKDm2ZzD@-gy+kPOqBYc*}vPf=8uVKybxjWQ&atWwjtGC zJOO)1p>!p@>M^t`e$O_dpap<*ZvW$Jk; zAc;bq(nz5+v@=Z0t>ddSa>UavJjDlm2NWsOngfHwr<1T+@oG#GiQb6*8bUuAoZ%YO3xm$3*biP;7K_5q`w|H z590HRPzcJ5?ZBZ_YY%LiD2@pRI4(0%_+T`{#`&10{4-LZffi1$TAd1R_UXe%j$e`5 zVSoG5$+{^A&9eN8a*Tw{(zs~^PaA3PmFM`C(%vqG57oYuC+!mYIOv4bE^>TW3|bCs zNi^*`)<~ENdUhYWSjdfp`>-?)rK>@OSxRD!Ahv?UEFrd< z#B3q9j>POCwvoi#A@&=I`9W+OiFJqAP7(`+*d7v#hS+`*8w|07B!-RlVG>J)*fA0t z53!RZ_AA6rlh|U2og=Yz5W7fX*z8^*u{?-fC$ZBI%O|mG5W7QSe?aU$iM@uH(3O}# z)ew%?0%C$K2x3BKHVFTK~Ql|ZjFq!a<1p3+qVHf^Jh}uaMU)3O^Kh=V7eB~H?p%h2(TIWIBSGdqa7buObhueG`9W!HTzG_;#n5^dZGtp=!jj?> z;O!yWySjuX!*)_a1bmYB@xUwg2F4|tB_s_R6c?Wu5pD+W=t+zMYr-&i^?R(w*MNv& zX7!>qn}UzN!khWD>@>+iaS74HeZ5GtdXX9mig93gXneRCl@-fx|2Rk!-+AKhglUy8 zs{s?E;q}Deh=mj!g+sUl-{z0YH8*mAK_7%yW8m(5KZzE-DmvP#|GY8RmG`#XyfN^E zORi2+)grZN!5YumuHB3uR*xLE*gSoc%rx0p`TW}Nx2!guxiWWQeh0g@Pp)4I)i*g@ z+iOj?e2a}b%?J7JOW$!E^{=lQ}y3V*%@G>^lr?7(Cz%$cschkMI=hXFJ^Z8y) zH+q!oqt^L!>cI59l}wwqy{S8KS)NH|zdsrj7~W7Ex%NpVjQW z^hwgPd50GaepkWBJgm&V__{roE9w{=Df_Tt>1|mfDn`HSKdk;6+w)5f_)V-nV7R*1 zuLfAyL4>GH7O%e#I0&~s(}hMcnc&v)1BaqGl5 zvw3Dus?XM4cgt&K+>p0si`VQmzi`r}+stki3@W-*{co8-RAtWxt}4ZpOyI(6>F zudLTE^6uyOu>1Gl8d#>ND^%_Bex&Vd_X|-CdR0(vE9VinZLZ1qwN80DvobH-QH0j^ z_-*dXb=yAYMz}`I-8I!Q&GvegGfOY{ytrhZ>F2d~SnalFpUZSNJH0qtdF8l}Z@!H) z6)`5)tH^3PWvjwsBC77Z(xYO*FY{;j?00(U>0aaSuQ$#u*y6vd^;4_2k6L@)&R;&v z^p839eqA{0QVX{L|7SODtebl0te=5j+{$D7wtF^jdFFkS&ar(42EDhR)X#QxoO;&z zBkmhKx0_$g&2KVLcc{U>J2lKZBvfg4@6?_Pl`98%^p8Gstw;2PZ8vis2ASpOb*|iH z^n=NxT*fE9d)~eC7}GD64mG)ZKBh(dmCIE+ycuR<+2l&ZlJ&bk#Lo_|l2`U%N7K>= z{)L+`uBP3N6_=yFyWRcYerUpL;n86Rb~ z(|>7T?2fqyYS)-P;Br!L#mWn(-+oR%mp^sJ#ff2-UUddnEx40w@wWY`+>ZCR)*rfg z+w94*y?&D~jP@FTAmgd)#`Di=ubK3CK$7>j?9=lKs*bR(X1(*lf~Y}uOZtsDleW+J z^qTMuZewb`^;q?IO?)RC=XFyaue`D1=C~!EH{Vxo(J}SaACAou3vU?QSk`Vzddo*w zu1xzJv*6E)VS@{nEOQ{F`)LGW~dsj+LieniMeHmSeGdl^}}DizIe6!^8NeFvfegbG1Md5+dCtmlx(5u2Ux0a#r+lFthJGE)y27C3O^b>V^%%A#d@aU-~ zTb~8Dtntf|?l+%(RhORTzWT)`OSf4j-5wlpXglrn@Kc+&7v6|*ZRAj6;g;3QFEra1 z^Qm@nOWW@0udEkLSZTeX$>}HCpT;+Cm#AF4XzgdKv#oSP$Gje8J7&|!hgFvP8u@2# zozu6WUX)+GgZeFdUq3W1ux(@zuUz`to3(ZR0;0FJ4o7ex<>MWiDBzwhj7i zxm)n^ekZ$sY+?R7Ke+YP1>5aiSG>+}XkIU&isen&iQk@Gn14HXzx8ibhu>9~Ia_mm z!%5ASR<7J-yI$TLr#}|D5Bc15bbeyB1TapUtYu(b3=hmM+Q7 z{(Q9D>&L(B9um;=#CDxrr=UqTUrfK=$uu8$jDPQMWz>QXkaqWL8Jz>q##_hVteZ9L< zz2K9oTC*2V>kpZK@IzGU+zIM+#_Jko_$*xA%`&ed%oS*?>CR+M3T+6qoSe0Df)*y)()Q1wRb*R`K@O|EHj_gwy* zve(z__iUZfsB&=D&NzqU{(YM7Q*X15sWb8D%MPoOA8oJo=w^qc#(GNwM{U|rYE{|Q zmjbSQJFxeu|3>xeh|sJ@k;WZ61@#O*`0IX?au&4@I#;bX%_u=<(6!FDs-C{xzW?!y zFWk0$KDPUL)n2amo%R`)+t$b6h2`cQo!ZS_GG>0Ai#nAOr*<6dTytC}kIY9qlFimV z4%?fw`r4tT1ugbHf8^%nxo=-XMR%)vjt-|kH|gv*-RZZnkNcmhQg-5`G2>P&Ik>>7 zeY4bgw=*s+`hCi+S1oSlWLXaPHLzLOq)n*b@2BRxw%Sv7%8WL?=~rvsY4H1(Hr4e~ zRnu&Zt|heUH+f;wWs3#P-5;0nI~iVohR?nto3hsu!mrwm8r-9MXwKL6wi&Y)rJaeH z*`t25^=d}>l$X+MTGaN_-#KFCl|DCLo$fe9*?3%Cr(0vXEYUmt zc+UI#<9Cj)k>8<7pUwk==J#8?Z*yNKrE9$EMNIqTzM196$NtizLVru;oWh-_JJ+14 zv#p2qvX(dNZoZ$s{K#ngOVzF{*ng)(*$Z_qr=_hOav;O^rul63g%hJE%=L?EJ8s^* z1C8~@4@|FCe~6+&l`kz`23g#@v~Tdj2cujA@6?L9JK1Rc=iAEn_pPp+s@MHPQst34 zpASv(9R78b?uduuWAqzU@ZXVjA?_n!Bvc_zrB^Yt6G=K=||_Cj2(J$TSJTa z#%j|C=XUmxjT(L@^r>vdn*}oW(SNR*xz(YfN3U*8lrE=_j!rjKYN5&tG8FHxK>;{EV=bfTX{#jPpAT0I8;05^?0~elYnd=8P zU@t>j3>fz?u+37tiYYU#!yZKZId00w$@&F5uTF1K;l`yg(V^pBT<>-}XS0*ak6Q+cexT%&gp?+mpwyy{nh9=f*MX zdmU%b-#q!<#ubec8eY149{{tl<>wE1x3hV{KGbkeDZ~Kk$qYkZq zy*B8r{o|gcZ!X@pa9pKl>A%>F8N6&@zkVZ44sS}W;vSu2a^}L>vb6`*JZ9dc+?SW< zPJAjfHqG4KS>JnSb>A0HifUf{(Dm>|+gpmejb@FSnxEZedoBB&L&rToo4Ddt-1S$N z(#Mp3@b-Xhxrs&(BD@#yA}Zd$&mPU70td+OYqz4yYyaZikT+HTtP zMQ@#f-Vxo{z6C=+zo?V3d-L?mOSgO4A0Bw{=;|K7EottWvDTs5P6F{NXPj2kDNqadEiN+COkv zXNUBTl};!fdo}xG`K@wQ{AN@>Kc%Wy=cVskO*HD3dH9%Z^LtBY?SH?ptc~Nd{5m>@ zf7&j;`?$29vDxPXT^y79)*GIX=^5B&)ch|qYua7to2#q0x2ost)!}1D=wzsO6&#Gd zxYz3D(AKT5Th5)N3O)Ah)#?S8&HIJt2Q)u)!Tx=Hqs4XBK8Oguou1HnQ_U2UX*GuH zHCQ_T%BC?r=5{c=ml$fZe{hU9iRPi`}3>59e0)wdcApizghX71L{=paM|E<>5EzL zoEcAkb>D3eb8G9n)heS^2cPvZIaHLO|0ZPI$%zTpla8L;-D&L99j2qaHqLF4VKhqr zz>A&}6u*?wX)R9+`8DZ-Uxek~2GA{n1WkIHS#+wAITlL(lN*^H-G$Vv}#h z?|l5~kFx!rj=ekYXE% z6U(noyR64&-xk)tU$ar8;0HE~ol;kfUe(L3&WZ)jUz-)UD8%jMy|-=29dPUI;5hlb z{6$C44bGi4aOM4sZTkBf+U(4<-FxC@_@gN2j+UanjKcX?M%2SCk){?S46pY8vrhN8 zKCf0qy%+Z<9&VgiAuD^IxV`0`dV51BuU)^@l=XFP_rl`SoC7^8hK1;z?|A#Q>)dfw z4j$j{6xRLzhHj;%FN?Nnw|vU$NoAt1kLV@xbyfYMmGyDQJ+>d{bQGLj_uiV#~iFH&UiR*<2iqe zI}-~Au34Dy(r^4L(|}Q*_Qbxe`D-89jwQLK2NpJZ-)e-Z$>nu7j*Y%CbbP-xl9|=~Xon}2<$cGDy4J|y>KChg zyG^NA2l)TiVpQwUT$fuTZyOHkGa&TkxhH25>ZL6)-dyg*lSKg&lO8@-mKimELzBr3 zm2T55a^AkR3@(VT`Eb?HD)sX{x@;KdI(CdfvvCd)W+oM$c)wHcJF(WYXy~U6-3EPF zlv-~1oeIG_o$SZH^Ze4&;Y8%rhW2@{+io>2b0Xj6+qqv8YTF&jvRK?jXW@behbph0 zmeL?un45s*tFXA(LCvGX4)sep!&8t5P`Chv;q~mD>5TFcjO5`J zo`Ur-pr+IPSFUG%W7Jq`MGa5kY^y>}78)Uz?KS`;FwscDHu{Ykp2GQKh1{Ix@WPHH zcs@j=o>2-lJXMBJ^(ZxU`1%Ko5_5nWo+?WyT*bi<6IVKeQQfF7)bLa}uqfom5P@L0 z_!q4*%%&7-c*+1Q3OP<-W6*E$T#MREDb(;(d9WztM-hQ=ug)w}mcuucLJd#h4_8^q zH!C;;^;;~%dNhI>o>CG@Ov|WJ>pP64`ji837a6OWp zWvd-y4m0WirBK6Du&xYLeR|yK5we<$DxefC%Blz95%rV3j%6*$`~vP zc}<$u88gE(jOs%v)bLbgj!J93Y$2njQwlXag-g;3d0m=Ta`TR>7wI#RPmHp{1_J_Wc&Zv$Si7;*>mF1(F|B@-LJd!0 zJEV|{SLNVDeOO8pskxLw4Nuh|)NJ^~@b+WsE=HZB6l!=1E(}O(F(MEeAL$C!M@*|U zHhU0I!&6X!w5WDd0+uq$mQtwUDSVzJkdN9}>D;7-h+*1WKWXr_8~^>c&8~ooyJkf>NmAsd^lhaKbr_Q8y`t8lI|8 zC@Wg$eeMkD%P1r4f*_!Vry78TwHx!A_XuE=3#CxQQw=%l$i7E5j2ccU)bLazLW#Xz z&(?F}8MT2@sNt!`gqj1NBs5XOWg*u2KPZJ7o@xRXh5VMl$Yx(Z;ln5s>{=n9hNqf> zMInbvk%Vm@FArptC#6usQ_aAlkc&BN;8nMfQ7M!{4No=aDD}{Oy%@EHQmEmn7KExy z&+^kl*((|Km{O?WDd?^shYcuos@@x@2x1x5#32I&)bJEkaiH))OAHGao?OqUE|fwI zPg#LQA+JTLkvH$WXH+JoP{UK!gu(|nF}&}24hl@n;T}q%hNoJBMIjfdIhlc8jCw;U z)bJEkRxPUAfR&dRRj(}Ugn$~JY6TXS){>2%(;3x+QmEmn)*RLFqe&2>CQ=GDJO#~! zR$BGer3NzU5T#JVQ??xS_UOG_Mt!CfYIv$Gp&HYYA8Zkz)v`6mAsz(O@KignDCE|Z zx)r_#>YjMM!YG9ro@!4hV@d@X&(dnyW>N|@Jk^0v6)B}!vi%E7>vu|_hNn6bN*vp~ z-;}wUQF0uFLO=~qbpne*J|A~NsF+s>9iVtzttf>Wp0WdrLXJ;VV6ZS=6UC_hl(K_8 zJY^3S);pN4*jU7<1(ZS!PdN|@AGE^|wer$MMqQ*7YIw>KEDCu;O6`~uszsG4kDg>Q z)bNxOSQPRal+rzRNb9QXNGa6tlru;Dp70qexLAe>ltK+pxp35|PIsp;Y9*ym!&9yt zwav?>fKmCBLJd#3aa7#b7^rk&4l7oGoe)sNQ|@3<$W3TzOd94I$|zS#p@yeAbCh*P zOK6b9v_?`2H9X}(DDkQcZTR#dqc%|rH9Y0XQ8PN+xyq=AltK+pc@e5MJuaJzi@X_C zT?soOpoXVFq*XUYujsstQ9hJH4Nv(HN*pamnf1~t`E*L5hNpZ9Rh8zjT+INj9(E_C zP{UJxgcAF&IW4dEWI23EDb(;(7ee7fs~BR|4AE*g>KY1G)bLbSuqfmmDV2ZUUn_?} zltK+p`4g%orQYm5bBg6qO)1pyR5wDkrc~Xx9upaLkW#4ODHzy64nM*th8WqjhK%}1 zDb(;3bUZ-)LemBWpXPbt*!R3Ac#SIVs3YuYkOuM+Hp&Px6n zlrpn1j$zbbN}-0Q!U*LYtM5&O8 zi91cxoV_ z?!qUAk!6k?Wz=Izp@yg8z@m`9Km>wE%!VtBGOZ$5QNvS%z`|w%8?`+=iBUe3LJdz1 zCKQ}n622)K-C|TarBK6D@nBKN#WD6b%VqNzwS!Wq;i&|UD)2Z0B_N*V7nDK`PbCsc z93R#_>-CyZzf^^t5KzNYNnl}D%Fw=Z$}lRBQmEmnA%ucq5D8}o-PRg8jHeW8cq$nz z3b{xH9R#O zEbK1e&DTyd85K+^)bP{@LW%v?+3t_c7&VnrsNt!Rgc7fmg~LBzW7IK9p@yeManzlx z*>Ew5rSXkYsNt#6gc3``WLBYyQC8JpCj`{+)EKa^7NFgEY^24s`cVosJe9&x-JA^$ zGHNcRP{UKHggOSF819zpH-k~2cq#)d3i%U6AUu43%7al$D1{oH8V43O`)wNH zr=oR8}MW~){i8q|QD5KzNYSzuAf#qoSCmyil9hxU|04NqlrRF8}? zx{Mk^Db(;(4xygICkAt)7#R7BCBKGJsNpF%sgOhQp6Hre#bJ!PO)1py)ObRPcQ@`u zot84n*c5g`Kn+i+!NSsdc)+7PqueQl8lIX!DDf;0`O^uSG4Z%YQ3^FY1-A;2)<^in zuqev;cSdcZ6l!=1x+|c>YkAb9{(TwsfKsU8smX*ATN`ipC}1~~ z^_3rD#zUhnQa+SI4Npzws0R7NyD=)AQmEmnX@nB*ZthwoKs6E5+DR$Y@YHmU8u>u` zp6Df|P{UJjVZd>nflmx4=6op2(y9w1F$}2Tsb9gOknhHw5S|5eEyJilN}-0QW`c#S zwfRKgYNL2uDoUY-r)CjKoS)y5Q~+mIq;e^R8lIX>sJ-xsVcqI^&}53#2TGxar{;h~ zA-p&kV$Cbc8!@U;Z7@MV4NuJli$V?!6A7y~y)VtE-jqTOPt601LN3l98h5uZWYlCz zp@ygC6H2@%YLIXEfKf*%g&Lk(K&bX|_=4aYHbak5e^LrHJhc!k3V9Pso&6+(0gG6M z7G|&$!b14ZQ;Wc&kXNEq-_t$p85Lm$J0YNkrxt^Stp$XS{JjgKW}CrI2&myH7*Ycz zmb_iWs$Up&#te2sKn+hp^9R%++zDaOj7yIhrKlrVQNvTqz{03IqbrVLRBKA1hNqTu zlx#hh(&R=KLc}k&%r&bY4JYTl` z+G<_PdQhGiP{UKJ!J?3hcZjWiGaAU!YELQD@YEVYiL(bU$3;3bYA~fx!&7SsC9d7f zj7T2KsO6MG4Nt8jl-O5p8Bnhwqi#?NH9WPRP~!b^-mXG)=lr#2Ew%%RfbnVeC>DTNxI+C(Vv$(n$Q9?;O10vm?)ltK+pZ3c@%^F&a~ zea4R%b)QnG;i=yUbqhW*ELpSIf>9>sf)zD9wFN8+d6BSN_O$M>dW`a<6l!>CE1|^I zz(qHQjbKy?rBK6D+Xy9|uavp3?HRR|QmEmn?Htv3eB0xUdP*tO@YD`MiSwcp)5o-A zRBbp$45;C$onTSOMQWS7X=6tDQwlXawTn>V+D&ZrWo;RiO)1py)NYRYeM1GP=VIO1 zM=8|s)E+{K>y@=4cR{x!Qtv2*8lKuqD6!pWFk^BoqZ-zSoe)sNQ~SWedWRzoKJ{W$ zZ%Uztr}h&{?DaNZJ#&^(Qz(TRp2{VZI1i9kFmyPhj#3IWJavFj;&C;fVGRRnu{6F? z3N<`+kWk{ae7M$yMU1j+06QU|hNtqt!k%>6e@hX>s7OkohNlh@s;nHoAdLHSmR4Um zhf=8Fsl#AV$aCQnL*(R-V^~^eDTNxIIsz7j{4F97#&juK%qRu4s2EVgQ%Av~khh{a zGz#8dol&hRg&LkZMksL}yHEL!)fg2+Db(;3T)L2!IOovF$0UVOiztN}o;tx%p7xhJ zGU_s=P{UIv3H1p+F?i3LaGp`+8VOd^@D$w4Kn}$kJOu@OowQ7Db(;3j)fF*v2HB38~vD3?Dp1MsavE3-w zuN0h8@q9IG20J03hNtd;g^jU;o!4o#hrK9;8lJjKDDjEAUq>8DWob>O6l!?t9-+k1 z*X4jMu8cZDDb(=PeL{)%=0kcaVeBLx*B45mhNu1@lsJ#QxWi7U2qM*@IqZah8lHLp z7KI%1fMLh#KZ6(*PASyz)I+eaS;zQOUS5ovNh#Fu6jTME#QPNAjvbFN>UT<^hNqw^ zXytJ2y0>*1C2s*cA)tn*o`6Lm$6AfSdPPwoqiiUJ8lHLz7PbPuIMVqbqoOH=8lHMa zC~>5BvF8~W42mT`pHisdspo_edk3S9mi~;oKq=Jl)C-QMS;9^TsNt!1U}5zz+<&Q7U+F?A)bP}MLW#5A z5%s)xv9v}|3N<|Sfl%U;@auAiw_(&qN}-0Q3J4{ZVYlSp#xd#vrBK6DA33V_szKI_ zs%`~4A)tn*u>E9fQo1pYFz^)5vJa(D!&BJbu^x8N=SUb(i&Q$LP{UJSIBIpR8nYR- zlTxVRsXsaDQrTz0jCx5a)bP|-LW%bdW6yZEWmH`#84Rf5sc&FmE!&d^TZsZbAOukg zH9Q54i&km8u(E8&(i%@G)bLahN7+oF6=4NlQos0%~{)pWIN$_X)dY-MVDKl_;L&K9oWYPbmn6wHm{mTRDpuHH}iJ z;VFEoM zI7KPc@D$#?D&%;)82X)f51p`hT=G_e6*W9nj!@#P<1zg)(;3x@QmEl61CA z22ct$JXM}h;#Jw8Q)V4TEu<7`c&Y+N<$p-N$f!${LJdzT2_??O?8j@Dz@_piWcDXy%-Wj7p>wYIq9QDcD`x%diz%ZSN{dp@ygM zo|jRpQ>2MCqVI}C5FrbE~u)kx};N?d@GRloosNpG`ZD7yo zU2E9qG^0jQ3N<{1Ys3nQmEl6d`6e8aa_4|1qNs$^@via;VJA} z88s~8G4vxMWoj#w25NW;=gL@nxM^-cETjA=g&Lm1xiW6OO|Mrd;q0T!&7F266cop&aU!-rKO@2YIq9oC|M4t9=FsQRpwF( zH9Uo5S4R2OtQ5)8`amhv@Dz^L7}X;8iB>z`7? z9-+kN%m+j+9Ka}i;uHgFcnas`*vyhu!o?Uy9j6p(cna@B*~^BJYlD)L9<$jbx4No;D6rM*6J5plTv$WRX{%yGeO5X*HutcMx)b8lJ)t6l)LDv+lysLoCC#ltK+p z;miiRuiWzHP#H$WQ3^FYh4+Sx8XxDpi&0A{g&Lm1D~rv3_pecDD5I`X3N<{1y`(}8 zQW9$4t?k383LOP2YIq9gLlp9@l*;}xtuvz>D1{oH!Z{^IeLfKu%%~xhLJd#hS`TXv zlmB>Hfl;d|g&Lm1)=44XPjk4x(&Q9I-J%p~cnas(*~(+3c5O>Ds$wU>8ESY6pVDW~ z9z=a?Ige4UltK+pwIP&v=R5aqMj@j{QVKOZWlJb=?dE(dds9Yjq7-U)sx6_gWxz20 zW9L(hdPphM@KifO;rsxGDHgYE7*)fL7-gv8DID=CYIw?lP}t&ONK%L2Vw8$fsNpF` zLSbKnL0z-T9Y*b^6l!?NiBRHMRyP0Ek@RTc|us6goEh@&BQIjc!8lG|^6t@2ucAPc{V$=~zp@yg235C}< zhWyf%;e?kGHe`QN3N<{{nWLJ`tCr6w3r7J*4NrLx3fq4S11!2%W>f^FP{UK6gu?b8 zL*eK{H5oOVQmEl6FG7iFtxlf#mQklEg&LmnCKQg8Fc=#|su`tl60E4-xGx zDb(;(S1zrG$G>TfD$6=gaDTNxI>P;wI#lWzl)KoV{)qwhs0W~}oOsF@)ZrP359p*5~n^LIZsSrXHQR6ODWXwR3Ac_!Y77z?H(Ry)HX_?hNnUag?Bv|4({!!HTrr+Db(;(UqazHAA|a+ z?E;pT8I%kL)bLaop{h}8U)ysqt0}g<-6(|`o(dC5TS711H-NXZO^i_bUXwrYJf_N7@BAvI}mMy35C}} z8Q6;2Z?FXB;~_@hy++!bc%m@`EAGKCSY8@Fwf!UzO&74jsgrH@ub(6JlPK|%An}t# zG%ctfospxXrGAD;{3J>IBoj?K_$dqjU+SH>CiOE^;wM?+XBg3R2Ok)mpYI=j773FYU4vQ&Ca#=EO8ktF_!&hsVbo99yqVRdenw0DjFR{nLo{N3meoBHt&zJg1m-tDO_{kue zO4N_ychiJxqV z9~IHS!H}@@(YSX~KjS5SR1!aGqQUD6!{Um`CDi8$52z)5uzuld8H>CNQ zB=Iv*;%73^z=Q=kOWW7K`%UU+ip0-kiJz%N12=*2_f6oAwP9_z^uffP_h}M8Qzd?; z6U|~Eu|0I3`MHMF&kTv5=@LJ`63r~|f$dKxox1O(er8Ji{3`J?i)hTi2bQzjZ*3i< zer8Mj%#!$-Lo^B0Pu)4@6QzFUO8m@`_?bsE&?v)S{DCLnemCwZ^)p}MXP(5*0-_lW zjfMgExms@_G-+Vs&euYTp9K;>i-;x*NG#{9@)>=leilpoERy(HLNqY-ARL$OrPWeD zOC^4mNc=1#noRJ6^{}CQ81$fE;*M*%#LqH`pA|&YkLG8R{hm2eKPx4ER!ID;A{z0y z9R9c#Aoa6a;%Ak_&l;i$r}?RSwZ$c=pS2P{Yb1Ww5e@biSf4+Rv+pMLvtHt7oy5-u zqJhds#v8x9sZ?I-XQRZ=28o|dL=y>qa743k)O9DRpUo0Kn{u z*TZRxN*K57lK9yv@w59U{OpnV*)8$2muO-jFWCOXhkx*w9@jpJpS==4`-uk28U5UN zSh-NmPbe)*!r&jpE}OGE<~18INmy*rpE&Cg|t zpGy)ySBM4|LGij6I_%X(sh_J7KUXAvt`Ut`&PSH`LbnPg?z~@@__-$WbA$6U@wLlw zsh^t?KQ|gw3)N#$$IRer`+r+$9?9=}f?n zaf@@?rTMuh@pD(==RVQ6fe#D=59t|7{rn;Eb6?`;0ny;!9c&DKX4$-|EA{hG;^zVJ zgDKm3;3xd1SZ+pILU{iTwOr6xdQ-~*jb%8sY|>bAsO2|}Wj?iR&{$Se%T|qLAGOTU zSk6+*DUIbGwM^Am-c!qTjirL8jD%k`mO9jOTw}4ImTMY|6Sd@NEZwQ)u*MQkEjKil z3Dj~%V_8WpCpDHs)RM2U+@O|o8p~^H*{`vb_L7mXL}RH=Ez2|(D{5J#vA9yp8jYnF zwXD!s22;xwjYUl@>ok^C)UsD&$)%P{8p}0mxvR0frx+vDi?{ zERDsBTDEH}J*efj#?p^kc55udsbwdzgd`-!hb0UeC?f&uGg=0Q#SSWN88nQyXdoG( z!a`$W;=%-pV2O;6h@jgt!4e;#B@)w0j7y4Po-sC==1`!}vQ}a_DzV&`SQI|UVi2#> zMiPsY#L`bOip|P~3mN6PjXKG2+Sc0h~O=B5CEg2fiBx=dj zSXNLAE3qBalC063r_S%*A7N%lG3x_WYPI$eRQSz>W88tlhf>3zp zhvCGkAgy&76H1|mr(W`u@lH7ZVu@N%3N<|SicsZ+q-6KYUxUdHk#eIHYIy23p(;=+ zb>uFXe-^1IN}-0Q-Vh3B!Z5sOck3#nvMGfco_b5Dasni4QRnayMlGWhYIy1$p~RB! zwK!`yqw*+)8lHMjD7^Q=;Mu(20Y+V?6l!?t1EKT;NLFdU^K*=PPbt*!Q~^gde)qU8 zqsqg)0S46Y)JH-Y2)kwbRqES}s!u7@@YE+liD$Xup1L;} zs<2zu0Q79f&RsNpF+LMbS9ZA9z0EUjNDg&LmHCzK(j3c~B|XVgYYp$7gzz*%lF z2$tuZMf>l6l_8$RS|?Bf1FZw4P{Ze^ETP~wmxLi(AE?E&WwHv;OJYC`Pn9E-nAW*l zCXX3ai&CiJDFcogW^M;-6JR2t6{S$aQ{_2IXR_&iMtM^TH9S>;P~vd~wCdf5QIV8F z4Nob#w9G3mg^mkMBn+VxYJduh8j#QmE*l7jgh~-lDzV|m1R#VlkW)ltD2&#;LI(|s z9@sBI)~Qp7qg{xFtD~KVyNk1{n}eN&wFL>0p;qA}VkvCXPdgEDaPYG8aCUNa_H^^s zKw)hJ$jZXHjTWYXI=k3;xp;dx04HHAY;ClY(l8E=_I3`AuCCtRj?NOu(lWGfNeMZC z*3re=-J>(m;vtE-v;0o(92_Bg4!#a<&LyN|VPUJ4kcB3D-rjc39u9CsK3h}#mCuQ zl8%M7c4@QY!Q%Gu^m24{a+j8zm4#J_=M@ri^>*}d_44$TB-F;DS4q0aewb#^Kt zZ!Jqc9&%QFAfe7)B^5%+CkX0}owK_m)K?D|N#-nVz7M&$dUtkpgDP9R{^&VFJbhU07AsvV ztCBAXPbdYrV7)qfOH0ne`g>Qoi=Bg)kE=6OA+Lo~agS8`RWC?7^k!G*~ za~RneGdLj|5|(U2aL64JazNsQ5M=CNu51Fy=Ds!|S%|ZQBO#as{QthHuA`@?jrRZf z{eERntGfDq>#kR?UcKrL`OQo=4p%Lu*6JYelW;s8ji;+H{8qQz#r&~ACYFikRIigo zYIVsSW}##<4E~j>!XoYbTXu(J+Mfug%xo-^a@1W*cl9om&G}QIbT$HZ=fJczw+a45 zomHljPWcm&0A@>#Kjxd8*?ia5S{;MD#bN;r)|`?U@@>t76mhH0f3$Rf$wVSi2q&uI zBu1Z$G)yoU#asz7!;GoE&^_E-poCiV;^?3d=CD*I8;s<%nrm+1eW0y_l?-=uFKZzf zO!-4*Fq28A6lgf#!s>ard3cyow44S4Cr$^GW+JW1)G4ypZsV#76w3NziAW@qG1b)9 z*4~0T2RG?#)~mt>N@PO8Kr$yARwUHi+NrZ|8zvbDXU$AhF(Co6%I_=^a+e8$MaEOA z3rSGBO#-l`6wD^Fu>jD5BWfVMq3oa##I2Mj*hx^2drAq+Ezy8krN;Aapp-usjm3iL zn9ANzC(l*OP>0@ORrbPRe{Btp4RM+ z3Hj5hNZQP4^Gjiv4?t0wR$^L0kTsI2TqX!R;nQ%S8zB6qF%E}eO4MT+^eXr^d1smA)iAkS5& zeY7i3D1kDCP^_Gq{sah2OqbdfChIzo&s;hOektxfm~)7 zq!bUOqk*7SCCKH6G5W?1^?lkzC7^%|QALfsu*qNl>R7DB%yLBB5wFpi+{p zqYn#PA5ZurW;mEKQ)*yzH+OR$q;n!26iWHSp=>G;*4CJv11;7la>*V*nQR~!OQ<4A z43>V?N1*ACgkp(sOcPmA&wOfX;WLMGG^PEKXfT&d29$``**VN>K(B9Gks#b80$~V~ zYOoJ=xA3*LzLwQN!8i%J@en3l*-V9Q(aAfiGk-KGsxBKflM2+{(Zw_7%9AtxTp*pz zrnO~eM}hOL?n1N6XwUi6!4&v^N^wd7%0sxWTIFG^&{OF|I+RgkP=GLTx`5*TbSx7! zV_8+@0#wLX2Z86u!)7Xy(~1N+jj@w%xT?7eh5U(7D42oNCTkpW2NUmFTZeTqPYrg6 z;_*~46^}$!+hQrpyPVb4D|=BkigAIKO=VR=T|?GH(XG!H+Jq5^_@O+=WdaG6P*;!D ziQM`)!6fBosMV1 zv81X9G1!MYTiBqlY^Gqq1k+1IL!p4izbv7xdDx~*QDq8*{9!E4;?aoGA_$=k)lj|b zK?=a?G#AWhJwntTI)q*mDkUV4g90xTkEx1~AlE7n`je>;R%dCIz3vWcQgWN6!vTLN zlZ!?%rOA=eJk-oY-ELQ|hsMQ9#!MzuN)lx2g@_$N+KLJ!)cB4%Q;4eXes4_SahR6`uajJyw=WEy^UlC!jcS_ zOeCxtRphO`vqi5t2_bDc#A0wGj~AQ7N;!C)OJrTxJG6l;(uC1@BcVNjUKcr2CH7LFk0tu$auN@WkANH&Odg0`H4n87My zu+=s@D-cygIFXH{vug1pK&>r<`T(?nQi)g~5HQtX5}?60_mpC(IEtkyR3xaqItcp+ zsX#6njmA{&r0mdPW2?5@g|NKOp(11#mva)dnW8t?dJ(#K3e!X|m{chVzS^!Y%(SkD z6>u~fO{Fs0dI=TAc}Yv5YTf0M&;qC9u{5;eV$ec5=0)kY7T-LFszhknY&4ro?WlG#3k{vT9t25?MQ6q9(MIAbzHzxj2+%GJ68lVP_I{P$-^DCp4|D z1lhzc)y1)yWCqMgBCM&s1jg2`T73tDCdN`0s;G=}CbRbjl@RGo69J6cps5(LNXfqC zrGb!A5aKbUYDYDIwdzh*16np43PY=leIL=XBAp(+(`hAwhGUAEH_qAd&bpm;K&EuKY6wo$HwNI#nm1>@O(8c71w>C&(?X{K}8 zcqUV&3w7GLxU9P%RwMCv+DwG?jU`J)v8{q_+2c!?Xe8)t*@8>;xT92N%#E9Asf)@kE*3X@CtqsdS@5ejHZn~r8ydhjBBR+8zMQGYlZ&4i$O zkToX+@K!ge9lL62lGGwt42x)mjM6%2%biS!bk4B|cCcdF>?c%=favT&fx;QEyQCS7 zXu35CYI6aF(tb0Pg=Q_SvWJe%8EW1(XjMvBUB!bZ{)CTFDkrCl*l%{sLTNqOC&KVMGk}E z-B0EXm}Dvwz=U1}bC|pZ;t}XJoLLi)iezZVIg&Kf87%50NUrJIIJX0aU@~t(v``o- z^mIC<*lH!n;^7K}Re3HNNJX+yHMz95x3Zz?K3^uWR)q36s5OxQb=zc5J$pH{Q35h+ zRP_b17O@QpTbWFMD3Z%0un#ILqSKP{hgt^pv{acO)tFdf1~HhNpjH>8Qyqk* zST>uDhBGNmU1QZ|u_80?IUl z*i#S;Pk^8bs9xphrO{a0#9ZO5z3yh0>;V*uXJcks8@3`PDEh0H33FLA7)+$Y+J=+_ zb=VlcDiewVwN(a8&)JRI+!VUVUOEuWqD;<;XmJIZ*v7)11@?U$wTCisZd}=oz>_mD z?@HxN#lKqfTy+d(c=d`1z?22L`fxa)*lUj^2jzzb^d+~f2&fy?wN$sq zFhhPY<7g@t)g~EBx@&KD(euDqFBuOcViBN49}*0?z0Cy##c?p4&YFRw8cc%qcj*$8 zKGvZPKpiB(Th&+>DGjx{qy!K;YdoCLCQh+!*wUP@DzlmiDpD#1aZ(mZ%B-S{j)uj& z8O+8LFxHYFQQ-xQ3r^3jvWrM_cnYdl6M6fHE;yn1nTModkVt?Y{gR;8rD}nTA6|n^3t$c!}3wI zq-fjDPPa`WZ1#tvkl5mCg{5sZ>WfX85+5vDpj}@9N{pGrehRv4 zK-;ho{Q(-bs(mN}%d1Qv6HO<)ecsyAYUA1X~Cs z!emQ_O&K7|1Fa`D5teeAv?j%HyEZ_9&@vGdqD|7Sb>JmwbJ0B#b+2Dikt4_F&zEj9&*mb;`MQdcaU#()r z2?atVj2$J_zXb;u^>0<51R--FGo8h3u4hFRD)JF1qp|DY#(b5+Ly6osuwET^q4M44;~biK;SWSdMRLTS}u#n9;Nwk_3F_E4r+fMif@&slUM z*rrsUmjHrPn8}7>YK1DR+D-BT$joLknOIN_LeV2yAh%YpJ<}h?k~@^uOeTdC)zO)+ zI@N-I!3y1k>4%b!MeMdo(^h$C+e9#C=3t8^T2fRVv=vnae(Df0$db{7*2x8Eu-(1# zu%{V@wq7aZBxq3Rc3Ev`%>>0#D2c5`ON)Ol9|KiNIVvV6t3|Hfq|vBsCq&v3{IOwpd1RsRdu(vLdVLS zz6@3vXg$&Auq&XiovpmJ*i82n2C_pg1uJLh7-h4{-L)1MJu8&6iAXF3{ikAhGIOn# zIKXo%3q%WxT#7c*)sT>wW)}<=myw`}Eh25EZEI~2gRVM5f#wgIdPupN>R5u@^vwXl zCMOaNCDjxoL2mT`Em6 z&Y&7sfI4+uW(6phOGL~>LQOFer1O&s5GJKa7wa%D6Knd9bRoouFn+K}DN0H7+Sq>Tt^*K=E8Q0!uB$ zyd+3p$!WC*h8GEk5>Q^L#f4axxwS1e9%5mfqk&0=tUI}0YOB6p!s;NDh(@zXea}$v zNPW<1dBe&oVq#qp19K7ci{PunI*ZgWL9CXb%fz`Q%`RFB94)90gp*`_OihoR?n)3i-kf|v+h%p@`qO&QTSxA|TC3LsB$`MpfTIa< z#l1xCng@kMz`BxFBq(5lxoAk6pB2Vs-h@UVmm{^QW+fp@|aWpURX5 z+){#`ERlhggm#9s3W(}MD^dt5fdGz4X@}ng2;zf_%#RgQ5KG5gPVpfLYIbQ_sGM`@ za4H5<3E51tBCL}ntiHAEp`x*?nWe2{iGgC4vtpMGYsl<7p7bH0d|b<)=E9-X(! zY5)eO6LUDZqz0|9TC+*4THe6$pznf)QQLS%B``LOWr^-oI*{D4)tHEA3{PTorMs36 zSpg+tv1Bfwiz(KrDlA~Ciu;fOz=kr3R7%&22vCn32#3BPqhz8{Ro!AWVuRSSmx6^! z63Tkb{7hOFcG%3XWj)Y&XDpr5FqTxJ*HDYl687j-AwlSDF`SMH;IOak44A>#_-^U3 z*)S>$%uKT>Gnvs=a&6Y02*l&6>5%ygZLy_c{OCxit;G$L!09sV0P5>tnUb&$WJ)t% z5F$0^vg*B+xFinKM&jD~PjJa**Og`fyQi@vmUF7grLA&Hbz5cP$Jmv_yGYbn608+x zo~!4Mrm|23#wnWVl~5L<@^nc+>qOW}$7(x(EXuYOMQX`cXZ$!fl7Ip)g*QEjijt6l z>JSstAI`3&QkuPkSXUqpy}Qc1VTOojqrp@_Q@l$|S9J{8rsk56QBoS;M-O5Nz%;;R zKNI$q*HpALtgpTV1e7-04&xiqmy!O(wR>z>li8 zEv8ynphJ6%?qoZCq)+EOk1BiUMVTaC@sPwa*ap%&Y9$C|!U7eBb=W<%f%FEd0>UdR zLi8#ZJ4k0+4iF9)m|@tARuoBZ)JhCiJvf+{hH^V=Pe`9!93ZF*GiDfuf-yTt@2CRA z-WwV#6cb|`O2y3hP{Cj!eU6aj`Hh+J(qthsUK|}C>nm;8Fg{T%3~_QqkSbi0&9ArM z{Jw86KQ<_%tQG^FJ6|9;>-HSk8<<9VUzUU0JwWx?8 zc5xysD@z1kJXt`)jZ%Re`EWcFpu}VhU1mex>P2WC@x)%xi#H6R*)3Z6W;fAwt#Dgj ztuXY9qUzD1b)y>w#?ejsiW7J@oXn?N_=-`{pOG_lgUY0viIw?vCDq?qP;{d3-cn&~ z@EYr7bmqEzad>=UJs`3#R6LS>l68AlCV`TV__(ZmW*?Ci(b^ws!_^jxeLPipR5`G0 zBo!mf_DtrzB44Np!4`Of*-&_j5h(~NpcG|g3s#~JPhetPi5^xFxvh)w9$p!@-sn}I z9j5hHjgAeCZ|obr79GZh%M+()M+4x`^!R274Yu)wBKunU!r2p1gP`2-9`2Sg?&##M<%i;mIFVhGS%>_yxb z9MxQ?2nvDyfs?Z7BQX{l$K6;lfXTvw^bfBe9UE3R`AxVPMw?j7#ONQL#Bd%RimWTF z2Q)f9p;90^_D~XU$WLG*%(FL48vg$N$--c1VzhWo|KLbr@T&g7@$suh3;uTTBFS!? zpbFtlh$;UDiyug#r3J@n0_ix;%H~yA4u>~#c>9QdK!rt#3~JXjtbI)X zH8QL{2{AC9#`=h+G#T7MuedYgI1f2l%uf_mcpS!akrcw$mPUsPG9323*w{=*U?Q-t zFkGA*!TZpM3KQ}$-qhO^iZ*v&qA+-i8rnUK*AXcUdNJfLcMy#F z@hTYXaKa)D6ATf8ZP6c+36bVxZ^zg;Qk~@Dp-j!hvL*m4bLdfJ2Cphy)7wGW8kJ;F zj+ofEzy_0+DJzWuCMr4*Fn$cd>NXs~Q4&#fQH%}alcPLil*};44y)8)Scdm`;jLL% z8VfAO2a_awJ47s1>JF>4cqAEs)eE~c-m}z2o7tUOAiT8L>_k{gb5~Cn zd-N|yrac!J$D3asxcEfF_;-W5B|{U1!Q#~g>(;meo^^A@o%Q#~2JwX_>+SA_@nt-E zvVzWUGz6CnOit?P=g-pbxc?@@KfOfz>M@1VTi36_tC(-ZkDLcTUxWEC`j?L>oL*17 z12lJQbp8gUTM^$EKzE--LpXA7@nw%Nj5YX?qjamq_ZHrcJOY}6^(y)f(7DC85${{x zjvqO<_!i^Y2P_&!h>Kf%-vQl!%pks>&M>~&^@edAe&pQp*NbPTfo6?H=a#<_&}`D^ zs?}c#@!brX?^$&8PHVUL{sx-a)_bVk^0x^1dW!~L=G@}D5Om3Rh>yOUumUufYIJV# z4T5G;qpMclhY{cPpy{5^^G0uucZ=`bV?c)=Ik)ms{RKg@)1ssNy2bY>Xukgr@lp1F z2AUTwI(k32TYPVU=ICQV0OyuJ>Ut-D<}8cuaPjqkCh-pOwIHEB&}?mF$r@+kk6ZqJ zcbs9oiXS<*{Lxne{t24J$1^haK6JPE0-#xD(aHF*OwMyCyAm5%ZPAEeztKFczssJ& zoA6s(N!QTqucTWDy7CO@D8A3kfR5sOdIogVZvQ<4y3;}Tw;9l#2fE`=z(sTZD&?j2 z?41D}m3LrI{NrArrZm{k!axJ^a@zZ zUwB3di-0BTMhDKAQ7|B(%!&$H7-_(oJJNTCkC^8x_ElJ050pmN4J{_`;!NMl5bSk&`Zu+;E?!<(SIAEmE}xtjygZc2 zUsZ^Xt}AfNlA+Ow%SXpXi%SNVj1OFCTxh&|zHtV9NcmXf6k|`xkbg6y(5g+24;Ovs zE7aCu`0r5>3yOB?WzNu=g$B(9Zab;e1S&Qpjqr9T2cFUVL!9Q77 z4mZ`@+OV5od$+u4U^1UvSWY+9lpovk!kn9a*IPGz(^EIy>e)@K=GJ8%qQUT=JXg@v z)&2HXk05U9t-FcH1D@SpMn8+u&o?I91^qE~FLU}jA_k=cJ8L)9{H@Epd)ub>!e@|_ zL5{LOZVJnm^dXro`09$sD4kv3K$C#6%ZJO3a8pzL zd{h_$iM5lz@x^Bt^(>-3Lr~L11nPy1`nCES82O7IWt83-##?06H8Y4e%qV9QNuci;m9fum&kpMaw!paNU--k08{UqCyEo7)Oc+ z%q?#pIYZL3WFDw}s50yg#B$v@brBvK#;W4-k;^eB^S<)N)V`W+hf3j*TJ(@BJyzf< zMKQ8Y(C(T>-`_Ep1?;$pZW#5{z6A$n;|ng3F49f4J2uvo_bhtjHqXw4=hkrj+^y54 z*LKmvestQSKvA=7<)I%;?W--{-bDR;P1`dpmM#0}ZZE9~?!s@5L7Amd-Dr^TGQxaU z;tJM*r{mIhqxAh7e4E%)d_&3deM$NrgYP=_biefdMEYKa?*{htZ_+mh-HC@SppM0! z`lRn&(wBg5D|?!izBSUf5x(v0>1OG>UHa~pzOTV|8>9QC^bynJVLz0<7vbB<=w6aO z`j8S2YXmR3gFQV_`p%QSF8Dsko?aw!G3g4v&Ycy_v&t$$^I zm$9%rWY~w`qh(;D@evueOZq+|efPt+hS7Z;zA^ab7(axMT6T`{DtuS5r??ojeDa`- zvy6qfqA%e$7tEl6Sk{v1kH5YzeC>(2MgOZ`@+7;RU4Oxzt7rcV1bcC*-Ak~=bb&)` z%njrE&e1&aPSF%tG%L%+rrPp<>|EvPpYffXCv@)bSVnm_MJl z^J>qn>DEJApDew$X0H#C@al!fp!E|uuxeJ|A^7Kl{UeEOuNUX+XOo~co{Pt-!AgU9 zx-@sq-ra;Qn>G9W7*&P=&=K37E6&~-uiY`P{MeekH0krUCQ*g^PKA%R_4)Ae7J-M2 zKl&>&L*o&1Evgnndd_|WjDYTHZFhD2j>a>q`$h1OBVuw1{N@@jl9x)j0zWRRGyYD& zmP_LAT*E4B{kD5?JMz=h!K)Zg;4DZ?3sd{**fartH=D|RAI%Vqy&yN^ij%QwDz2%h zw_;{wNbovN@or)}hE7(?V%yI$N%>~C_uUHEj^l0@U@mm9N0{lUxA6+b0>bi<9Jvm^ zMv{q)3H;_5?~=Y&_&B0V`rZxSa{L;Nhzz5uSnP(9!BhuH|+KD z>CN!*K}@VBk6$BWAsl-*?kV<0;~rdj*e9j$bMR%@(+6?AlKF7Kx7h72id%FU62JB= z_87B`V*6rJ#uU$-dcjj{T*m8}1PE4ZXve+Oqwb?dWcXDa`w4O;p zT4PgHsS24#Pc;{VA1Ob9;ZVP7n)>VRV=zpoi^p(I!JhEZ{L-#{pu(eL@35ZHz4dHW z+o7I|et`QMx>gR~vFjQ5%I&+SzVmHLtJtvfmM`P4xzeiDTJDJfyp*9fe{ap94gxWP zLmexSiT$%FfZYDs6f-%2-#?ou$nBqfiREL@*rj~*H0b%@Ae#PdPZm!qdzRft!5RhS z{mIfF)o4>AOpQ^;Acvg6nuhm58rj@O%gQW%jRtiJ9(IoOwZfNUPt{nW%I9>;q>q~F zVn#QK>%TCc8Y8#ho+HZe5vtMnfDF4!`gTd*=i%dYUz1^vNZ;e|4dB;kJdJA~^F50z zPva-jN0r9I{s%rD-)l1Lko47{PhNt%M&k(hIAWd*J648~AagmRYm#B-!N++K9vGxK z(H+&xT;ou&so_exHi{o_PWwvZ$wOFdY@4o+@7a4SV8nnLjni=*VLn{g2X^T%o0af) z6h9Kd`7A(xSBw;Vv2=8m56j(&{KPfB(Mcb+E_}3@9K{aGwb+dX%|wAe@L@M#0vm(A zLE2l~R5Yv&17Ch(ZHaaaec0yr6~;>Ieb^j?Q3KgQ2pa6jlnRVMJ1(D^;bIULEU7Ss2bE~qvHd&Y~ zI8~-^1V$mg=1pf|_sQ7bdF97${CWNFw!XAx*I&LACWgw~Kkqu{Prsl2;1%K3Tdw_e zYQ+!xjy&z}t9HMAPtD-LrE6+F{o#R23tI;Mo}Ikwkx#tm@;mSN(&vpobiQZgl<0Bm zZ+Ymo?=1R9dFw;-=B+#ZbK?HOg(p6n+5g3c#IHAg`iHL-{_^I6mg!^OI90|Pu%_cK=<;l*|m+O%P+WR-LsERe_+jD7kdBl zz*tx3_HSPp_(Sy6($-wp{?#`({N=>U8ejRa`P6Sdx%adcbDGcmW#EWc5A;4czoxY9 z?S=~;{?q*@-Sx^zsdH|-H8Nym)m*l->%y?7+e~h`ul@F9sjr9 z@5~>3XydNmK67vK(Z{}f#NQYEVs-1&zpwk`Etej7X!ut{`+mOU)mh*9?kV?t^NDxG ze*gKUnih8?}%rfBOYo6uP22owcMgVyt&93&wNKb z4UTwd?)Q2CX6~&Q=Dy^Nhvoo#xsGwfLo&bDL%o4Y^QBMigE&`NE)tvV@iaQ(AtAu) zA+d7-eh(k{r?@ko6CCjz?}&%cynZN8m!waItWcRBS~1!4v%nD#3HY3bWX;UIkAKe@ z4~Z-GcusP}vyjnH>r*_xJ^eIft1>^QIO198h=>i8ueu8P92scusZ1 z?ZyA%w!P=-)>$Ssf|qMscjLzZ$9 z$QL3W5{}3<$Ph7!og_m_oCH^a+UW?n*A~)02qV<-K`V?<{llYl?%JI>2k_+k0o?sn^qFk^V9=Yl}!5i+>A6G?Os$UVU4k+Guiu zBN{vET!eT%sBq@K`|6MXrcf&_6w%mG=OM)Fp)0wq=bep-R5bVdEEGMpquzxOuZQZE z+;uNS->*>nEfmq%QN*iMd);} zoUGdvla+9092GhPD`Q#7D@*IH%Huo=tIG&GymIl1Xtx#6j{_w`B~hPMZHoK*k+J+b zP!5fbV}Bc6VYq)ByUpWcRHs%rR%7eO$NI0Hxb$`~wTi^y99R&aAH++4G^0wUgRwwT3nL+T7fK)5<19sv zh(H1Hm4Rd=7{S|W`~j5FG9B;j5qcezo)kOCEopWX4j%x3={8T&E z0xu;DM?#4d-lHO0mbwg5z=*NgD<9SX_Q(tH?Lkl zUVDf5Za~K00?l=nv{ZMP{JjPmFRjku+{#Ph;?bb#wCG5(b1Ux}(2Tu9d)}7tK}c2R=MMfi9Y>Mn?(4hH##7^lBd4ydG3vLD;->A%o=n{h zb9$1`*N2}jU(vAb7dOnEy7mR5?*7c~BIj(ZC6uUYiC_la_( z83A})%N_?CcfQxt6M1(zV$_FU*->n2YI}X^jYGxS^2>`Rep>&)>*YudyI&OiW&H!w z-j~afTI>F|{616HHa&Ha5PKE{pGVl#KX9|?vKQ(f_=R`x)FHaL_RsYX9P;ijXBIHZ zMah@zA9&Kcr<_@6-T&3P_gVLESoclV{XebyX6wF|-A`TLZWK|JIuylU-rUr*baPYV zL__JgrNyQN6SbwIm%?Osa_-LLPj{r78p@Y9HNd;{=~CSe(4njg$fOrF-ahqM7#35w zYp>sS``d>O^{=_2ymvL3#t`VhZ_9hgPmM|o5Nd6&;blvKDE!=NuN*%YhB>~eZlid_ z)HnZ3Emk@P=5%Cj`~q%ZTT~0XwQ{^>%R$e-c#Y!OTMo{mzo%|F=%v5MSFzV3KY!(HU)ikN_S~j4{H6CSefGvsIquu`Wc^k$_C#zA z6k7xH&tiVEc5#Vu>fo%>o^8+F@W`PJbruO3np?$cXqy&^*5Cd~f9u^;Xe2&+ z>dn~)=2IN-c@E5-I_NFcAVZtW8y3QZG7Z~#ABuC@mbYio-xF4j0BDTpc59RZBES#; z_T;HIXI+0hC(^Qk+6B?31{CWU3@wn?zyAn$suLcjB>tvt)5Wtcnq?w0r(WctKPQ;g z^R%0qdClI_aSh|w$ZX%1!#9VS74ooaaDOoio5GccJq_Pl7WSVq>?QbySlAmf%tQjK zS=eRpacl{`H7x8#8FmkRc^39r8Ah4AgoQmO!=8ulN*4B#48yHZLZeZ+i{lURF5fP? z$B7Ayls*iG^Dkbx3L~w(9I9c4W;-r#S_r1*BP#rDvi_cH{XL)l?%4h^qTRop#sqcZ z7buXS%P%uOMn?Gw%NDgXA7h5jQivx9;!}_E(bPD?fck(sun1%0fH8n-=HI&sTVD$H)m(>Li-AKqiWxD}Lb|HJQ3Gs-{P86vjQP=DG@ zL~@%q#H^RWRQi@Jw@OGhz4OcI`+X5i0F5x=d$Ro0fd*JkHhQ1tl}4j|=k|Z1bmq>ySX1nW*W^htJ#rLZ)Vkn zkk5LGNABNl0E9dnpPf}Yjpf@aehrGhmU1?=snIB20bk?(?KOh9mY^h+5VY)_dZXt0 zqo&^QmR3$(Z_L`v&gh5)&;EdwU;~mkABmo@e|sGveO}(^2NqN02fk35I#M7yVm|EA zf!UQ57t&cEke|rPL!9)+tzbH>Zh>?Pb$5uwwrAPG-5Ti>Waqbrb`Z}$t#~MiSWsnaj2M2xPTlA;igo4f=Yov)a%KNX-Cqu?b1H@v<6M~MR->aW zv`&jm?epygLvEY;4j*vuVwtziV6Lzyi>CoPuY3y)LTf0_w+%%+t}EX{!;u|TsX^i_ zw#pn(UpVv)>gKACEd#q|gNhBeOm=A`M2Nv>7(jaEl%FUy zRn$k@boI(;7L{=hk5}hD)iMA3nm`kr&*Rb>q6Q`VHhyyq(nn;OkCvP3nU5BV8<_7x zTql`t6|N!t8ksRFM-0laG5C1c_3-hTyoQc~k3T&FKK^vQ^wECz`&b$ugb$nudHw`^VHV40 z;N$7u4+o%6bkp#K8Qpi`<8)8K$LW43!=8sP%;?^LkLO_CY>~eO@bRbT!^fW% zr4KNJl+(5NJIgqp*82u63g;SqbpEA|CiTXZtEkD1GM%Tvxt68uL=6t#TxfHH*jb%c-IMy-lFWq~w;+f?a$c+AfN+*mEc!Z8=S}8)jyyDWmBm*_vwA3gq z-~@L0b2TWY9-*n(yK>d$5@+?>NSGKoMD?rIWTkS3Kr6({tf6PifxN^sK2pv$j50dcJM?!0eN!r=IZ8{QC)HEs8Zx!{*)P zZOw?MkI6UvYbgElHWFd1h|4c;d%biL&#L5zY$3vl`}olX(c)hzKfUuBPyK0rdCuzl zXz(A~8vI-|cvIi9@++)fEM)0%XGV|$YklO2+LrfgQVj84ih^5VP4Mx)PF(G)_{}li zjVq_?gYO|0c7+Uk8$Ox|<`}i8Yfg6(e7s|=kUo$Yv_*mc_%UNy#uMcE61GCqrA;ij zRA)d}U`J1Q*2#dACk2JQmG#r%<5`EtIFBxxqe9F)DTn~a@s_gpy1nI_+R>tiev6Bh z?BTPr7<3QgH^=D0m1h|qHuUH()do2~esgWJrzS7pV1i8y-z$#Eogya0D&qK>y%5L$ zw{pN5cK(FdF)gimeNqv5m=8W)h^6pxW*m`W@EB8cffEHII#utEl0d+yncB@ooMU;7 z>$Cb^2<$cGn@FOnUgzf^`up*l!_Hl(`lU>f6WO>3{=;O$*3Z!RR#x=JN7JA0nhn|` z;Wb1mDNJ95-1$qmh7{|+&qT>@A z@v_Xtbanul9vEGRSKQG-k#~-!S&K##&q^!O=TZ()MHAx#rOD!0VRF((FE0}X646L9 z{#FRzKw%_*^(e|>)tO9YaVX<6w7ax+=QGx>gXvNNXL<1Ex2yS`Wk?knE8;lN26~q% zj>+KVZw1(nP_YLl#;+=ji6}*5z$S=ZBXJl?t;B~RK5J+R`)_2&Wd#k7m(UucW0md1 zqd6Rq%6*cbNw^|j02e`jOmS+Il8Z2HYJH?5BSYWx#lzV1K! z-rsZC1;04}x*G*YN5SSAY47&oBAZiF+?YTzch0 zpUUrf@r~pDaoNCGbqAg^?mal~vk$#~NZkMP8=pI8$#;J9@E?Evlf`dc_wT)q$v8@`l2an$qu#QVO{`}>{$cs=%>Pk*50=g+-4@2v&?-r>zBwtVFLubk19 z-EeDL==i|ex6bN%;Ge&G`YWG!cDMJRm0dT!a^-*2PG8Zp>zQLWu6!*1%%{3*=Pq0M=JL@` z|KYZ0zBT)6;HBr5;vr_HmkX4%(2e;U;|_jid2uM zmeJ_>nd^w>2u4GzUJ?i&+Vo>cMwRg#>4@hDM?6O{ngXsQ>@17i8+XQ2=ZNPhM?6O} znzO8UuKVv2?FV{RrJV!g?sb@5_uAx+?k2ndcl*)2Z&Dc*t)jQ%L5u4lZQ|o@= zJI42%@sRjuk7vFk9%?18hlE6G-9LW)B`A$5^Fs;;dpyTF;yI4dOj+@~`;Nx@obep* zi03#*Jg}=nS`l2STxU-mRi*zdaKv+hBc2mwJXEgD3r?AK=7)rEd$~?@#B(yEA%U4% zJNBuoGR}4<;o2V0$t)fOOHIachL6QSr@FYCFGJd_kP~D`*a|sOhOD$g>Sf576>=;K zA$xE9x56kb3K<)ONj-BS^_wjUL&ifIJnjU|XRZ6AB+cVi$ZQ$%3oGOZ8S-~4WUdT3 z#>0cWGUNg)M5P|HLXKuM{gacJ=!Y5XWQpptq4d+YL`dxdV?xjnUm-WkcJ7BXOzQN> ze;Kc%V{r`L_h!XRG!H}l9Xh*yuR_tL0y(0w zqkIVQdMGw>ecyieWra#vC?B5KQKuus>j~jX?)x9U39D<7LvaF(XzZvn5aRWa_K@5U zmi+kO57F3BXClPw@!?8t(NkCVDHQ2+$q|hmMWe>+p%pi|d4td1tWYgp9?D0S zeol*ctk-ice{6g({H|>Zg?(k_I3LzgXEPLWU~(_cKXXu_K5n6i#-2mUo7W>yzrOCj z1{8`ZzVMuA>?q2c*F!T4xyk!408_Ur!T4`0Euyib&O?YwYv(7sz@h|dF8U-nqOqfB z*Fc?+`^uG1U!_pzS}3BiqezwD_4sfl_v_N%E>@_Rg(4a|>U@NFJroEQRlhavbV2NDAJRYBN{tu2|~P{Bj_RAo{z3WmlSEeWTA-0j=BILDu zcpB9#P>r)GCc_{aJE|EWDu;#l6rtM_sEmao8at|mp;~bzw|T{T;|g_)g(4a|is-$b z4uZgK8>qWap}uROh{leh8Nll~njmoZ{99|SLa|o~Ae3nAsCI;SJv2L$d-&K-Ve%B^ zI(-fgB^o=5^5*r>d`)iP>us0-1S(;nh{lfUM2OdO3_;-Tx$o^CE7XLAA{slY3n2=X zFRa3bkVxy_EELh$QQZtBxah%qKBjTDM=TW4*ik(Ug^FYDFF$w=Q@2R#B@0C~cGQIk z@p_URWSm^yp`mK$@?fH|qn0uhIs|iF9b@RoBCUXhA{sji-41D?qciu$lTV(lP}f>0 zqOqecLI{_L2)5zV3oliuuUaUgv7_F@P{dEjz33Z6_CyZ?l7%RJrb1xEs|h(pqhyh=zy#t7sw?q8l*=SUj}?iaYK;1q3_eMK4qh zah*ztzvD(8hP3Xjr#!e1`j8-3ho}J3qmfR7he+jt_SG3W(g=kcUj8~57{c4!@&0xD zIY-+;LdRjgKBi<#jH#$ufE7n*WPE(G5Dg-u!=w1D4=dO50#49Rj#!xw&{rM?M4}1) zu@6yf0kfT-V?xtmj_z@xsvk%9IOV#-ehB29&+FOJw9vMLT~_HLVSh9d2q;QK^2> z2*_ejDAU`a(_~UnGmCG?*l5xk4Zh!-j>dDLSU{)I;|Ry&;ZP_Y_1hHVG7)^B(aZ&- z;ZTqh@Bt|wQ>BIj0eo*X<7fJFG$AR_dpo3FoVNzop(`A|0*a3VM#71Z%$V$DSZhJE zu0^3>S$`~tPoBhL2??_`ogFH1-O*e!6~{qEe1{_x9pXJ${E<}naB(=C%|sITIB*tc z9c6}?Iv(Y~mrg`Y(=!Fk;$yn$XbfL3c_$pptptWcetd8SUu?%Wx~10Lo(T4gtgnh# z<4*fBOgQR~M57seJ` ziaKA>(KpaDi3Gl?Ea+^5Q4xmx^x2yvzAP#T)u_>_LTP*m2%pJy>;xzx)OQwNqluvV zfy#AvKmxiF!GLMf$hY3vVB;GVFpi_t_~ds0eOLku7%?0zwh1UX+9y!BD1E6omd=Hf z630~VI1Vh-`vQd6Bo1FbO@@QPsEKbw$!Qdad9e|ILb9Cz;y)-MIvO?u6flZ!)MVn> sTn67eRw>wr7$$#ffJ+=0bUJ35(EvWsZACBgNqYs7Lx}QKIq3WU0p65iPyhe` literal 0 HcmV?d00001 diff --git a/Code/ThirdParty/glfw/lib-vc2019-32/glfw3_mtd.lib b/Code/ThirdParty/glfw/lib-vc2019-32/glfw3_mtd.lib new file mode 100644 index 0000000000000000000000000000000000000000..d977ea96dc51cf996b519a80cc21591162f690c7 GIT binary patch literal 862134 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

Q#i$tB`S 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

D?~6+@KaY?dSBbofvARZmgsz z(h6U$&Jkef2w3@9y{E-qXIf`4rn^jQ>$sZZP7EFGQymMs`RjI_+zvenI+dNXBfxZv z0OO4S!?|_Q1rQytw%%5_YZZFDda#{~v86uN>d0Rpg<{aeQLcxurJjFte9YgS7;1fP zmDcL7o4@45^wKctm;N!vi8)8ZJeub%bYgllhL0?y@O`I`X6M9|gX^7k=wi~!bJ|(; zXttqc=T?fFE28Wdd|Dl5OgNYAWMNCAXR9N}tug4D~+YXPl0EhqFJu(1}47fid$l=IlXX+D5#VmiOUa!<}{pGvD{}FA^1o^1L(H8VwVsv~$xC#ssjXv8AYNBPu==Gn6qWZyUoHgT}|l>&YQ4 zaWxfc2Sr7m>8tz6kUGD=;(jM)1Y?5Ow!mN4dx9}e%t*#iYov0yUwq>hfx!-!f__gk zyc{deJER$|G}Qhmj8K|ULSeL4np~-gQJU#eGg4`)rDl-Qtdg1prJ){9p|{e!AQVO? zrKy*i{z~(K)O1#w15z_sY3Qagg&s6 zq~=_uxld}&RGO!y#;Y{jq^7IV{7Y(vD9yj6<_x8w$Eg(BD2;~>GeS3|p*656bX1x| zsp+RQ8B)_uX)cqRo=S72)Fdj+4N}uZX&#iC0ZK!U1t`QT4Xsg4Ay#RQNXXm_X#7&sO!b1vQqxjtW=l;g zrCB63Zl$?PYNC|pMX8Ban%z>Ax;(Tbf%tWaX{geur9y!4-=Gz1pdfCX~>LmuFF=6c&Z<|HLWo5l%ElrhVtXnG*lbunucm4 zN7GPkOw=@#=_#6qGJS=np)6M0HG?UKxSea|Fp*MUu4yRu^thXT-E@=_h_%;_NuV6= z(=?RBZ#50&@Q|jV9R8wdD2+cg4duCoOx;>-v9qS3T0KY8P^}KIYe-?xXOZeyaM?*q zcQeGQjZ}6Dn4ZcO&b!#q>{PUQQ**kh;kH3qDzT2~Xll5|%2BR%&~P0Rm}ktSVHUT# zY1mU5wp?V_Q09#ayM|lcRdx-xI_f*h4!61+HO*k`-KJ@%?DuFII;Ib68p<>-4=u}s zDfzYba>Y}o|82+cm~dFr5DT}SY<8$c(JK)u&pd9l)ijjnu9}AO+*{L7o~g%Kb|}vm zXd0^MfTn@MpvTRMm0-36rQzd6xGwn9k1}12>KbZ~x+d14q3cr}bB;sP$D!%#&~$fb zdYKw{ixq)RqWUVN=RqUZMJ5ET@OK*D*Py+x<+*?{+KO@Xf}XX)-+LXlBv>prUD_cq zMq8ck0%)xjH1GQ3#U0j~cHJe5FXYKJ`}i!oYS0cM$X7J*{>stwEB-7%i=F%%W)Ol|v^d##pS;lEoM;t?`bux~Q~f zNETzXv?ge2QMoMEb&|yxEv<=;v<9fO9+51@XlYH-(z?iO*4vf*#n&L>yV%;WLjM37%%#qePDy>bD#TYHE%N=Q1tWPA1FA>p8%VL#C7Gt!u@|k5% ztGi0;X31iVmR5lyEsM2DvKXVKRp>~omrCn%$zqI_)(l5l7OOd35Fju{OKT>yqBbc0 zg>QOvx7PU{ELn`v(we1MG)C>5{>c!Fl`C0{(b6hnR%hDc@3$>)d||OlB#SXxT30ZO zx;n9%HQheQV%;cNjM37X%`9`iQQPC+B^K*($zqI_RlVo(jLxdiSRWm( zueVt5NETsqR;9*zu>7ZK7OQz%L?RGIX9c0La`@ijjrUuu6v-lt&Z=V88Q4aZzHjUXU!p=&S`A>)=N@ z`4;O_$s$Y>W9p3JAQqOQftUmA*nAW&gwE}v*X;G+X%8R2#WUun6wb)QijG)S1#evj z@M>ixtF8TzUAZJ6QO!m0h$(I1`G#76k|4qi7NM*vE=Vpet1M(3R`5AR#DtmN3V1`31+fsv>xX4su?q| zE~#l*rNxm>HC8VT7M2Fb<2jGWiXw~=FNx~O*_Bk{q8a9To>ZOVu)=3qMWHA@6SL`U zRpiB{vMu>ZoB$TBw8f^CZQJmXTt(rd z^T5IZgV!^K>tT-Ev zXO=&#(LmXp!irFnw&TcaJeTK%?IR+`<|wV@SQQn=rD#5_g{$XG#itbJm(gqfA(>P0 zX;>^Why~Ufp@&V}HcDujnrsahjp)sBLyHa>K(shC>IucNZ}OtRwxcMrY}2Z~YSUR= zk(IWZ4~Y?m?IWYZzU&?jz1aX95h-~kc{AmavE_-+6|$u}I9l6f5{60}D!UBxujJw) zTI-mGK!(V*$!Xs_+t5^?Iw;PEW(8JGqOV@ek-4mNMv*-3$rz#wD==19mQ`ew%1ZEK zX=yA$_a82>OnC@1&y!2AHWn)vZl!4L1Yo1-`utgWMWwNEv5hgp#RyJ(qnvOtf-|^L zPPiDsNobT4F2+^?`gzV)10fMMifFv{sjrO|CelV#rwy~K+nCNc8__nj+bDLe4XiAg z&D%zC#)TuwnO!)Z85NFZpW}t&YVkG$YJkL`qNYeT1L5Pt8K80Iq!x5QI1~EhGF&b~ z5aEoN1A{rS4QIxI31>*3vW7Dgf(U0sj-@B97zZYtA#?COsU;^!Hx+VPXv9{dDBYOz zOwx$GlL4hkYls(Mu31CYc_WeLFxN;luW1n*FIES)ot30%bHF<(Tdp?W7(1ac<09?G zqUD;~Soe2yW_oh=7_6EsKgZ-nv~lG>YDgt|lUTa7sG1gVEm8}(CT00DQqpMAf^;X1 zzT+GpML83wNrCYx-qm| zv!jG1;+xRMsY$uWZIVAshQ-ICqlWO;qOz7oC8%UkvDrzfxug9VerK{};tqje%}|_V zzi)JMdU9HFxLVCKKQL9bW2@Sv3||t~zV>HjXIrUNh-+caqIn!uT1iMNJ3Wx&PqQ)T zn^cvlsZ%p(MwOI@n>$mdVt!KWOPGPBb`i||VKWM6*aP&9Ez-+8a}y7NR_o*U_xMxVAIsU@o=-I+!z?@Eo5t`yJ9PSS2#{sin;+i#rqbH-} zM(kSrQHa7{IC}%3-v|sIYjdERos0`vQ;42_c}^D?bKBS&Uaf%ZEU{!S+!}#oZ)k+} zE(9*~6!z#T(X0sV1%X?13VT$&_X6`wC@#zzN_&9$Bor4?e`N1CFsF5bfS~FnjJ^KA z3=hSHu{Q~rD?)K$>|GDct)aLOd-QDX8DMsW;=8C{dY^%f zErhEV4B^J)2yis)&4>U;NVe^=xcx z!PmxV?=r;S8Ud~ca7P?CXFH%OZr{z8D8z8}N8`(&2ymAJSKz>*9Jc4elv*E5__l`N z=o3*)asPk0cHNw+;@Nqn{|jr^EjjkfHJ1k`)EsNpvT%DarRG?AKl~=v9P2O`zp*vP z8iwGvL(MT`XyNvlW#6N&1IualYHW-2x8~Tvx9>X7^#1w)s7toASaK{T=DK^yTE6M9 zwC={mWH;d6)$m26w*PP8R#MLXCt)ba|HPlixDeYfSW3h8W0rET{fwna*nZ6tHT}IT zU5D)Akpc|ZCnItAWQUF(;$|nL88fv+bDn(&ysKaWZ_2g@M+ku`!LvQBjR{% zlc|@Yx%0JZ7FNykHqbl(PV%FE2NKJ(RP|Z%N0XRk%>XxjW;QkCT7+3xbvn!e zdCjsM@2i|048Ti&;3W@oZDE+7Rd=|dBP9hh$tSUpQTGlrv9y+`i8q2xMY;4+!#R53 zHL6S4D+tsU$NDnrKC2rLONBvw=GGmimAGV)%ysopCDFAPc!4>1h9fE_<;PmVuh~Wg z2%P&{)oZlCWp1F3&C878pus@x1$0PdA#phB>d6@>4hLQT*WfS8=#K4D{CT+foWT+` zE{etK3)oUO^cdr?^|CY*+Z$La$Cf6`9%C-Hg0TeBa@Nt-%hH|L(n#Xrg~0@F1NLuW z9d$o1OVn|Cvh*dkx3feeua~7iv85@Q$B1#6sZni}X$;;AENOWfQ@b^nK zEK%p_%+i&RgpM3Du3=prq~0vureg1fbRX;fref)<{u6 zNvo+e3pCLD&ESvE1p~)Q<|=@-OtGwFacmoEA)TpbdNb-_2CItI9g}WsGwKcpc$HLr z`Ol4i!MWVQ>6@AW%m*FK?qC2MGGEo%(RDT+BmCecFaJ*Vg9@P5aok8}!GmqH>UL+< zy&kYuOQq#ev07_!>~OKRDm>Uv-R6Z2Doqp*XSC-r@M=lH%vMNI_n02Z6fdfx07AXWN&M zGV_bRJDipPn7U2N^geamdOD7qlbTY8WjV3>?K|?wm^Sw#Z*X&A7O5{JFaA8d5~nCq zu8O?`k~lC0ki7Wwa2GwBC9%ALXo*7rv>oKqnwC{>18&!oJ;o zE1fFM&Spy*5PNI)EWqgnIK7_6ud+MJY|Y`f(9bO$vU`$De37LZV}QCF@)W=2dReh0T? z<{gMJ1N9BT6cRD%JdE@@L>nF8n6|@&W=03FI}C2aY&z4L;X(+4EhJ(uV4b+e8W2CQ zpt#tW#1~v6y;)^>1%(yf(z2j;Mp;#9fiY(`-Z020tqkII!@}H(vV4C*K}9IMpscWx zIfd2bWfehhc+#BNsijpVh4ey|X)v`Kud!C*HC9+IFRTa_6;>+SX?aD(g$3SVnYW@4 z@2VEgDTLks(gNO`t(fO6lEv`i-5!ywHy?!zj`a2lmuzFCN`W6eb#!3d)XJ)g8F~4I z#w4*jx2QB>uu_h%%Fi#XtTg=I8HK1mZ&`&`7@d_T>T6zM5LqZGFD|5)%>3TDcnQo) zH9@a8mwHW@f}jZA;H*L~y#rk|18>`T=?S0VFZH5&;B2?368>^$mf{U&ShFdsP|2p6 zsEnYQ8hGyaYR4=?-l%e_nD9g7pHiM53 zFa?Ekicq+dqB2U0f<<_LYQEr?&G6=xddsF?LGF2R42lc5`AjdgYJ>AqL{(FQk}++7 zEOtJMkXKn&T4_u`T@;tiEXvO-rphg!HLsFonI)>f>4k-*z*Gi}?7Z@FysYP?#Le8w zED%tYr$W4Fjmj;~n}^PTN~Qi#j!L0AMmk!K@eW`CA3Td^wJ*u7tSYCD5dxc0n1>@# zXeMBRs92UYyaP#Hgz_!Ase|C1K93JuK}8Y3ltZLjhK5oxx2O{K@uqM|IjWG}bew>L zU6NNiPu4zgGngBkS6+w)hhCOfjOs0zCu%MqvLoMR6(xDx*r;Aqw!O$>a28S)wU3q| zJBP?G4npZnS%w7o7^Ch=2gsJ;&&@y;uzzmR(?k>Iv7EYG zVMRq*g^@aL+?a7Ay%Tdr=Zu-0j3vSL}6NS2z3X;^_-s zU9)=E6AL~%bZy1xEmsadGIQ?spM#ToBzMm`)NAwO0}ssHwR8LERcQ;if4=42>ub*Z zW8LOMKTN*=7}KCIm}H$UQ4`fN)wA4Xl@;hkN^GpF6T zW8j|EOYoQr?>rvCV@L+(JIe?&j#zAB+2<@Fike}3=HPbYsq{hNXopYFS6_2_nU ze%X0<*N)F*W^V3SbkEvb|DH7Q_3CeS<#xa5ZyQ?lt6kXo>CB2hE8p31V*WEdo{SmX z;g5BJyOvb9e&?q*de7~*ckbWby6%zhu3Uf4x@UiBTXy2A+>UQGTQTC@<*!Wnsd7)& zGmk`d8!@_D!ra$auElhQgOB>~z@mZ=gC18y1I>GUG{g>!i(Bb(EfO00n;$f(bGt5+ zZ0l!W0lpoY8B3FBnn44z-HMdbKzczqwxpDH-Sp?8cRpxt*y_UBJ)B+}X^!c3(L9po z@8`s?YT?90F@|Qel> z=7DY(%`*x8$-I&+P7I~scG1-jH?xH&~ z6f7TLBZY#uRBGJHoTc{R+?+2rYURis$6~v&)>;5r4A2LLrA7T z^~_#y=q3dRIy$UL7$!AT-$D})sSm7k%OpFA1fio%8q1pw)riv2ooM3`yM_%vW!G@( zFWNODuw%St*RWrudQC(5*{x~lcJ}+41`WsfT+>jdztuEU9Y1Os%JgrVhBDotX(-dp zWNmQS<0;d0cTtsH)hhJ{#wZQ-6xMJ_v4cJO8)$oHq$M=gcdO(f09UUBMWFkN6d0p@ znN8Q2mWP0X@;|?~ST9KyW3;qdGmCOXfxMVtc@nY1i;|JZ7%eT_AGW3S`SGu&TC4_{ z7Gt!uaQjBG$m%C?pIqrtY0)!D3XIXx!mwpaYjE-HPg^XXWHCldt1Yu=^rNFvo}b^w zVojDT#%O7^)6#mhNy2*;t6Z`eqovheOY4(_4RF6{)?uw=F-A*^^X3vq#4z4|c1MQA zdO)&7{_Smp?nhakmh`k>*d{d&$iN{#nmVcz(Ub z`a!Z7qoviES!TIzZqd-yVl^d02#nFv>H@9se@~Ffz24euvARhXW3;r+V3wKIwwKQx zX0e7#7Gt!u=y`zUJ)+m!7x%J!7>t!H#%O8L{d%i^{rr5&brvfqS&Y%rI*VD zGvey+li*!vt$)U1Ju6v+(OJEi z)f-z1XQo`0WU+pbEW+q4WC&>i%3=C_H=yWEQ7TprAN{B#&0<|5S%lG9 zeV7%8Ers7J8k$#c4&x+?Fgj}hv&_@$ChxYz z7HhU-5k_b6oKux+NcW*vSgeO6i!eHC5T`|BAcbGwnU`a+_DB|CbQT>cw~KO4;e)s- zXvk){PDmDEbQaBe+%9UL6!!LA{iDSi-b`o-qqAscoUpmBqtxRST{))VRRN6 z5Yp-)S*;(tWto|~OHIz7`TTIr~SQA5Nt;!#8J@MqKzzW;9#(tUxX zMtJxfHZ>>t{~_)>;G?Lzw|BEi2#~M=LT^C=h8_qdG|48Luz>)fqZEOVK&Ua<0Ff35 z5#kaA1r-Z|70}lXVkd;IA|NV?1yNB%lwtvVHQ#g2y)&~jJ4^O`|Nrm%?k_VrbMEt; zbKBgxGqZE=(7`A``AS*7&r&TXr6wj1O&*-$OdYB~@J2;@>#PEMW+bKI#ZGE^qI?gn z#-IoXB)O7@rVU6=bf6CD<#hkeEbI*6$B z!WvBFjdlO-8dJQqR*6XVkd(nglG0O>5*>5;cjp(@C^tA#-c4&*SK?r2@_?k&lp#i} z_9k0JCl5{>FeuG6XrMElk|bVl_wUZ{w<(42fH&N5L$A20#cIryMAx7pNoY%H#H5$q z{kx0z*x;+LyJfDjCu_t3iOH^%p@Zqf08zZ~ya81urXpv_&Ot*4I@0i6ulGA~lwvlV zqGZH7X)5&sm6wc@)irRy;3PC)ygcmRUB2}ewU#Tdt6EAlBBgY|(2M~|&P4eFTzb-y zt2pGkQ<=`R!~sLnlN~M>DvXL1Z6hDAB;lK0i;Jq`K0v$~SBYp{LsAB$Bsm8gc_;rt+Mw z#FRlPuE8m(&P2QxM}gqIxKjRTHB=#ZJBc0MjZ-7gn9jtZLkBt2lT)0AJmMD=c!6z5 zsaK0jN=zA;nv{XG5>cMp3Y@By-jSmn$d}}*$JCU>wDf`L&OzuHh^V}orqfiT$#>^S zu|{+yrlw^K9+aLYh~h=EY|^+s())4vN4ujpgV7zU@|d$;pW>=a3ZVz#)7(YHzXCCdXGB zahBjswn|JIoH!IS7vQ8Cl*n(f=`tnXZujplUT^pB&M_*7ECkuRF+*lAh`uG9)mb_hYQUL&$37ZH2IHao6ZGI6!G_K3yKcH?E(fMr9YTrw z88civD?Ua5W*j|SN5G+}J$jgx1X+Jm+i0v~gpGo~{8F*4h{iieY!v*}+d{;>9E}f( zS`y03p4U50($k}}Q4&MP6#RV`KLNNLiKX)MH!s7=0PWoa+`|Fbdp$sV<-mOqfW7kp z+PeZ=WdQb?-NePF?);TsYv8&_tiSRLhn1lL+8YPlv;gdt1ZZy^aE}IH@67=19RTj5 zD(q4BeF>P5R-*XSa^V|ZwMZ>gF0Fv+Y{VJbGj+LxfypxBOzaf{bB_^cV((wT>@(s_ z?0pN&uST4~9$lg%V$i2zqhQ14uf6mEW`GfAut(*W1x%q4XOg}LfO*1*GuWf_l>>9k zh%>SGD=>c~cMW)Kk6d>HIe`dR_g(}**%Hwu`^Mx4POrEe)P_ZV>|_WlLT>qeZx z9;NS7iGj$$U;8@`+@Dq0qx!9fL0d;`6x4DtN#7t~#u#yi^ih5bfGIKJOzb@Y%nL@G z!5-!J1Bs#ZQSg`FZ-Bc{g}pHFYtmrREBLcl7q}J@tCou)eU#sR0oof3+^tpEqx8)W z(B4wuJOS9-7NEVCfO|Utd#3`l_bqV0R$-6oHv)tFmNd{uP|Mk*z4QlWkP&C753-j7 z%wi+X#NNZeJY&Rp{hEc+L$_M{B!-SDn9a{Y!~ZV=zy$;Mrw=a9XI>=2{S_dtGC-WI zJ&bwJll!BaDQ^(KC?>MhZx2_!*^ytlh2yJPoi@wh``6!#N8^T{dNSU05#1W%L zk8zB0jHWMX-^3^2mH0l{>AB*$;_{qJiNC-$F$;km-x=dGTE|4kgxe=h7*~;=IVyH= z$#MIdk735?85-=V=JebimhMT3_WYP$IyGjJ(=#nHy>wAbw9~UR+_N;wS(+ZRU~T*% zNAX{k?ph8{Vwj_S#YWG;_`~fFJBllXF5J=nz{dDJ?f2LYI*R`-bdiqsdlj80BiP}w zINBd;zt8@{ar+CqZF@F4JqKYe${Byy+5RvYsxEDu5Bl?HpCfs-3K}^3yq8z4Akxui ze}2uuo*x~a&zzo%o=Z;5{jeadcz46J;-9Scl1a#Yx(6vv_aOago_)F;(_LFOm)SY& zEvOAk79Wa_q462C%Trxe%%Ctuh-AS&X1Bez&0ag1+rYSr2oMJ{nQrohM0fK-a+Mr% z&mTb_`@^VW$fXDwiZE6)o$P|`u`bV`=}Kg-A}sJiO$TZLP|-57ru_e&_|Knf*FrJ| zbJD1v6bXt}rM9X>O-RJ1suKO8L+Ge+32CM(<*QO6eG)&3ntCpM5RVBC#(I9j$+hgd z6{khP3{MC>te_9`(REesc4Z!Qm7lSdvQ{J&vyLFjfMdY1hi1XuQwGmu@LX0)&lPsS1dhpXh2dy&0G z5h5(EUJDZorlprTV^DhUxyshZtb&$(U{;R>De;FeJwqI(9w~Lk#Ks@@tl)S+aV*Lj z5V9LhHWJy!$QUOZaKZv{VU<>R;ghFFk3WLuvEH#2ePwawuEo9-hD|AAds7iAo32zHk9nA?M&Yc$^iS|#^ z=Lo4>l|ELbuT<#=Rr*VnXodvAjZ`I9>9B?s>7L`o*Pw3)@jgX>CVoq@%P>S@3XY`;+K#t&41qN(+Rb0ti7Be3@~29Fggs&z&|$I64}q zr@F&aj)O4!3yxr?XLzL3Har|#n5T~Cu*3espx~4~d)(nE?e{n^kq+8WSVf<5cUb#! zAv^mVc88+}h7qCgBu6>gCr60`KINn3L=iaE&E|@@os$*kD!X;M%af+GD3iVvb9kUT zMH{6am77xhp_1J$yAxe7=DwgyA5WqYhT@@m3$f5M&T(9;-LMyBYSx1hW(4DKy(>BH z4k`^Aj1$G?D7Ewof!a^l5|Z#jx31J1Ry{+7%VVX>Ohu@)5@M;R zS_vo(l*|y+q)2I~#}S3ZR+uF!Aagg&(vSeNft zrL|q?3S+5XLS&?~7nOsdyj|46atdiYD+;|ABvI(ekTS4|LO+0t$3qFKWtcIW97J3Y zO06!BxK20dqkeF7p(&>fpv`c~6 zrxQ3DXG#a03$ioimLKi6;5#BY)LEi*)G2fhpj)Bq!FBb-{Okr3>98ME&rhD@*wSh) zPja-^xkj}m3XX=EqTr}%#E^+k|6J9}HG5lk%p`m4rGf_DQ^we1p+yFAZ?CX-`on(r z!>B?UI(6P}FTRK5&fQ_rVqdu&2d>gbVv2C|-*guxyX`C5lZ}#7_7yil@C<4whwsmc zYj^3ZF>7I*v+VRFH;li4;dTl#UubW;C??~IJ(3&N75l`0Aak;u_O`f`Uvb(axu-zF zJ^Soq4mrwPl~-K$c86%U8-#Luthl&dvERDi9(&}9!#;L5JGx@;a4@?xd`{&)a_Q*v zW8NE1dn}CFW8u@~QPPHi1dS$QX&2|jIgx;r6{yppsZ%zc@2xcdTHeKczE$zkNtS|0 zSJ@bsa-m1gB52|?RH<_1SEe-+CE@aj;`XkiF~{X}L|5#$eeycF%}%o~Im&tQ!iAwA zMbn^`E}BLfq%kP?V4kK%bjY)z6Vg0Y@<0+D^6QX@6>K?y{V?X9hD3AR1@i}gLs+Vf z{dC4r#ZF~uI;24yn}@wf!JUvqs!CPeqmYER=OK+`?oLP|Ri_}iuwmeUy|AL4OHNNx zL!R5|GpdXx%0x|6D%xqneV0-x^<||PqYF_vsElD^2iKIi(&SiSwsaxdx5}oA^e}8<1}t$iN9B~xy7AbHdiS0fie4fsAqRq( zHb+R*&KI)In~|Wv@qY%#(uF}t#8}2UZ$>OMN}$^(;X_EoSjjqXMq34r|Fbxjd~>x`2XjZ!H1KZg#X&HE%l~{T0)Npz;YRYD#F(bk1TtW&Jx z>E>P*e&}{V3HcBNLrBEycy(OF!WvogX}KwDp@nz7ldu>z3oyt3bfvXuuC@SI<5pWyH^lNX9Zd> z%7lVa9(s#{OC=-9gY44CKnZ5HuOU*LafDLr`b)F0OEw$RHBkmLyOoGTD~qURiAbt` zy4ul@+~7&JjG#C{@$Qe^j3kdjqCADb15#Bh*i!2^^fP;@M#SR{`cFp!OL-Mi6ePhS z+l{?)E#md|YYO{7QczN(#|R$z5_ZWZ{lrfRW_D=|hg|!ax{j{QN+^IJ+P;t|*9`=_ zMi5Q1$0fB`f#W}oEd@hJ#AqfMCX?)q_F~RgnL;9FE5Qs6q8@;K#d|Rps0<+yqpe`j znM2b(BT(<41R8~i)Cq|goqc>nD{%bJ#wHj-B1U&+@Y(6E#@J}yiyvnR9My=BsP+Ye zQ2nqe!OV6aVVlmP|HwAkrO}ZR%xpW@wp_3)dfMdKvnSI$RRvkmt+Oq9H5TvA#XNR* zB8o;|mi`t?QGZM2(gBr~OP4B>LG3wt{i?wYY4{!o7<|Ww!1yF@MIgCU<ZSHtbnU|PZw||8_<5}rJ4=H{kDOLKY{V^dYd_HP*RIK7tKL>7 zr|SH~FV!1d{$jXt{L#3*?>_SCKd&gq%W}HEoq7A>Zpv|6>+++Q|K4)1a@;(m=8@2! z#-33on|dtc{Jdum?s#nN>u;^-u_p4Lk?$Rw({HWTD~^MTJm`B3m<;fzg}L8 zsnvI8FL+~BdDPjjUs|+^`HAKjt{^6qZhlB zjJWviwaE!vqVIU^^pCzFCRIGt1jPpp;Lwd)hu&`_8gO*OTKG=5)mGXT zy>53!AE|Rb+*Nu|iSIsq^AC?Vyz6l7WhreI*K2TRlNZNdz4b(ki(h7pZ}R(t#f?}0 zwf?t^MT_^nS^35GZ{vqftodNi*FPRTzU60|#wHI>{_LOAwI;sqbS%Fz?$fOeXB0Q7 zJ;~K-;`09g^i|Hu|G$%CQD1ArR{#0!=&;ch=q9zItBUyWnl72ATP(sL*N6#W3|(C) z=JvN*zUhkzWegz+^ZZkLTl-?D&$RJ}*OZ>$gI6W_VyK_BS&>lwq4!5B&pg$qx8Ue6apqZOOg!3cbu{d4vkz8LDyZC2%4^5Qn@5MN9L zW9UjrrEv3moBrjCp^>7^+K%?vo+*8DmoLW7m{{zoF2=Ok_o6R`t|~TbABmZA;Dkvz z*JjL(ebr%1TWP0a%>yYIDbnkN9Fx^uW*^ zJ7Ip0>xP%IMql+AL-(}gYr*3^T)vnFj2R^{uiP8c!57nzF?5$f79(D|j4PPYS0l#I z-2v5C-3f2u2Hl8h%orMVP?}pm^BM}wh-tzYLQ;KA`8;E(FQzGD=n74C_GYf^A}}~$ z4gHU@M6(5wM5w1~s1_;IRy9huQdiZC5D-hGs+l7-wNy>1)Yw%GDvCoBRkKrS>ZqEd zQqx$~(0u`g2C9a}=oIR!ni^K2X{c&w>_{O()x=6oBh~~mu^g?Msm(q|C3Xi^{iboQ z2ud0Dl9ny1ui-wL**= z)m6)nNlgt^^O_G!youc7l=Z-@FHJ%;)i)^w%bjRN&QtWgv^A)H=A{SRy6dk_VIu4uwe z93NACNsR*G-hwea$sfV!TFIJjbVPv)POqVBu71Kix@KzA3(7+ou>Z!iolq_5fknT=iKRb*jjXK%eL09Z(jrEyi zF-GUBC9}MJ*;QYENETyszHZX_`nK@Cb{eZTb=e4v(fMixt-cKFsJ`&%iUVVGzG9fg zBML~13wxc_Sc4^tF*;wkz#DuuR(;KpEXL@3wbA+7G%~5C#wwF6#^`+Atg;|jXtK8k zs;_4yi!nN1u_}v-`SHK^H`7@AB#SXRUo`d*wG6?MwWC%#?+ooWb-(fPvg!mAy&{%zYSjTIwVjM3$*BeSR% zqSB~b)9){hl^|J+(fR76^R>@CxU0q*B3X>l`RdFp9`itYv1|Uv8f&U#F-GT$`WWr} zTDh^uts3i2$zqJo7X~h1DZVytUT}-XS}R$M(fR7C^Y!+d_qWqnPfHeKbiQcZrA=@+ zGk@}FjrEpfF-GT$xMPQ817hOs;U&TK?yg_5NlPt#Qd|^QESjg~CN=zP)rh+sjmq?U9nj8M<7S(3#Voi7^6YQBDZ z?8WaiR*7UWM(3-a$|7IXM>SG?Jt|p@(fQ$@?)dPU`58f&LyiMtQ)egiiTNTG5~ zdF66krZ#o!5y@hV&Q~I{lzx6?^||{s){m0K7+t;`%u>#;M}Debps}oU8Ao7@&Q}t& zS{d#R-Zf5RHI*#J=zJwJOX;Ite}33fjnz}K7^Cy$)cMK`dbz#E8ZKFk(fLYYRwV7Q zb@=7iGa75QWHCnPD^=&~p10qtuCZ207Gre21~5y>*YB_V{inuyLb4d6^X1a{Y8_pt zlg4^SvKXWDmBuV3Uo*c=@G8U4B#SXRUjuc%u1;#4ruq6!vKXWDHAu}D1WVTCBX@_W zZQd@MCu4NJ(sjP*x~#D}NETysz6LW(X@@7*JhxtBxg?7*I$uL{z6RAi@vFwlmMq5T zd<|umQiekstb0;pt&l9n=zL}9e9eDh(m9RwxMVR#=W7_VsBKW7317A8Z+A-;V|2cT z1FM~1rDscnG}h;m#TcD0x+B;6jhVYDnrTzgUXd)u=zNXT`Esln)l*}IS4SiQV|2bo zK`X8)6i<`p+SIlYBUy~m`5MhErH^u4PrFZJB}o=zbiT$gOJ;y4z}BYq#jMsG7^Cww zR_BYxq8e+FWHCnP>sFnwh@ii}3Rm;>pky&d=j%3|uUhM_PtsT~OBQ2vzQ*Z%(Zt?O zRbTH(7Gre2#_N2Io-*&6#`<2e7^Cwwfmuo))#v7Foix@zlEoOEuZcQeBOkpMs<9f? zKqLZVbiQtfRvX(qF#p61jnz%E7^CwwiCIe9=6u3@>f@0a(hgzttSQWDB3TPxDLJpP9+oV^=vkS}k~aXBejT%SYOJG@MHoG6 zs*W{p$M$GGMM$gL9v3@97`H#lBC|QKjv$A!pReg$Z8U;bep{Dppm>|pT*|Xfd zqK;6K9j}kira_CRsdO>bg-Fp??Q^4vLC*2_Ht&+&{=L$DeTqeo=9rTtO)S$P?Ab3n;6*fGXvoMb%w zn=(0bra~BS9^J6DlfGWzw{qN;&BwFw3J? zf%%Ejm4hFQTDrz~H3OLYlPXe45J~3LpbQ~0%{}?gT64kqo13w~$E7&|L6)%Xh zeBa%bhZlQJ?yx^BnHAX5u+9TJn>1V=gAThF{UK%lh2f^19+J*IZM6xX0cvm z@78TBApa$*#u$p!OYh}FIUBsenoi7A8ppMwX+=#LwF2AK6l>H9Y&TP^Q7f?BO|eF; z!1gf38npu3(-dpe3T%QY)~NL=TvVXe)p*srUhhRv%9uM}FM?h#3EUlccNeBueSZOrn(fGKmtbt|kWMB*sau#3ZZ{n3C#nVM0}& zGO~a7X*B4eT{*)uyE7$v@EHXUbYTWWNU?-dvA6{?!?v3o*~E@FyEn(?uTb$jo* zlU^;x59#Gl+ib?i^bWc)IDWMfY4Kjej$-#>+h)L-&G>jL?gnP#&A@(oVvkS@o7qft z1EC)thxzldQ3%FnhD(BeFEF9>R30G&n;C8<^a&C}I0|OCNa&vk0G9~dD*@oh-jx7w zln)!;5v0(20tC8gGD}|s^tVb3;V78l=*BiX0NiZg@&dpu0q*MnaP;tY0=>2H3TEk} za@iCBZXs~b1J|~jFzBybt|7V~Fg@rk27h zXBK9-1JJwhHp89(0fFv}&2Vj@&j;oaiKEla3`dW?-T5rz4AHiSxsLOBz^Nhs#>kkO`CNRHL zfold_&>+n0g^hwgzs(WX514UP;K*+wFwaSxzw})KZZ|M5r9(gn!)8`~WY0R-V(EsB zfn~jr;((bVasJAW(pLn`D-w63 zd>jDgdH}duIGG%DLLvCG_cP)~5spq!gzDJL@_RQ7JPb^0dW(QiADbC&8#*%UX#9|N z0>gN&5yly29;5nn(o<)z;BRKRbl}EHER`SQ4EE@HJ}*Ff%Yj={g*{5&a{=0W6}a62 z*!wC#duM^W9Du#ZNl2tu@K=5fCs`~p*eLibKgw^?BtmGxpS^*T&<|mwa3g!}NeoeU z{_HIRZk5FPvlj^~PfH9$4*u-zoPQTj4~nQFwD*jo5}9NZ^`EtiST3^z{a2h!JO!zFEL5Fyaj9BYXD)v)za@v3C%d6GoiD9<{&A zzyxJNKv45xVlNt)4n~}by@9~oX2hA;TL8=oBhFxt>f>>V;RIsmuRgW|w=)2HCjzwh z1#mwGU@w#gJ6^$G`f35!SYmC!GtMNx2?5$m1TH-Qdou#Gmj~RE0PH;ypuH!7docie zM*_6>32iVs8;JtBg2pC+a1T{skMg?o1ll1)r%pXRaA$?>oY6e!3!A3zX7ZZD_zzjFy4ECt} za)Bu_;!Nyq0%p4rXRt@*cTi#|eH8qa-%;ScsKOrQ_c}1OX0oXp=C=bd2}YbDePoZ; zxSnCendEmBFzbytgFPz0mx0-1#F^MT4b0C*oWUNIUyWHJugczE`PBigxx}jNz{FnP z0PQ(}%c#O0mERm-mK$*<`P~f6b4HvYePr)2FkcyQCieafOxSEuD*p0I_0a~H9!8vr zy^+97GU5#Bqxx7PF~YO|_Iwv`_f}z#^7|q%dnL|_V}JE~1enhQuy+-h@HrxNYPp!? zw;eD&j5tGnDSab>nQp|H*t-judyP1QJ*tlvf!S@unb`XZn4gR|6MJEE@#z~j3OCAc z4`7mvIDGsO4g?NBK>a7zSeJFTX>8yR8a)O~GFP%z7ivBz-Rf^NtZ`NFUkz0+_2toQb{q zci?k5Y!v+EHxhA)z+@P4Cidn4bEgq!lD-FldDVzBv3DGpuZ%c@JxbrdfeFu}TzKWf z#9ljKdKhsAdsM$8C58=R=dXUp12;VYdv^tBZw+t{Rbh|Lk6pmLZ^W78_a|WfFyajP zC3{i%X!qDCsO`YSUMeudjW~n7aM;L|7&eHVzw%oI+^Q<tK5klSLZgN?$C@*4+CUn9<7kJ`&^62k_u^OxT#z|9H3-s%ADtp{#%74|5zuxM zz;BBHaG}7(1c+-F04@Ud;(Tz4J}WWR0GxEjC>3IJCVxKRP%s9Yxb;C$v`TC`DUKs$6>UX^l&NqF8dnf=Lu(fRRw z0640T7kzNP<;?eld$tG_3s;faK7z@`te76aK7~s4BT@*IA42Qzdkr$dxYB+AZ~YnxPt-UC?7|C zaOU|q;e$gyygtf6iepHB`AphTA5pD+(F#rGUif}pfdDs7ZJvh7w!ctYy zj**Vh4qCw~I{w1o%uDH>GlMg)IYwK7nM&<6-E7sky z*Ve7bxw}QLtr-}%xof*ZHlzP>6z>Uk_1UxJe4*!j-uwX3`rJ4}Dl#S@=7wRy0_`K&=1Z*cB}>v1y(Y&eA1VEnT>AOZ#I5 z)m)XkOAZxWz*;cf9F^r*p>0uly61y5&pDc*AB$b^8g|I#oLpK!4+~Z3i(zP4cw<^P z=7`JlaavjF<8YL{*1pqG+1FN3)4tPM{$p^T)VTBY`vw(+;jm9?^!XZntx}F$+|E_G z$5mV&>?*!qYso=j<15&Z7GgCE@q^2jQ8sve3%RNT7r?m@s9Qhg>uBafmOOi|4Um4# zgd;K<4jQ5R!>UuN^sp*D59u(rV9UGMKgrT3s`P^@g`rxhATZrCBw??qDg~ptHDw>w zA?;_}AV@7(m!ay!iVU<;SpqF;hea3?IltNVIU`B+9)xr(bYeey9NVGG_FL=0mIeQ5 zTp(K++UvNAC>*|yE!Yx|y@&nuQKdvk+pq;&yjIXlQ`UOWmVIi--mz?5EDQ0+9lN%I zMysfimvfN$3xucG7F}zE6s<~aRp}N;A7PV=;Lte~$)|Ez(rJh1Qi|uG=Q=W7e0Acy zuw~ab1DV&wMZ+%^!5i`yCN#$!s##V&vQ82Ydbv0UFFxX zdQZ8l{Kx(-+rc!X2-akCp{f)O$K}B)PMN6U+EHtf1xG_1I9CPBwZl9PtfcW-iv69V z&a&{e6g@Z-hdU2CioUU?tO~cKcn*`+;W=D>E(kiuv2zsVDF4Zpx+=Y))lqZ?3oj)% zOu|7B39ih;sjEgdv_X!g5)6YgD^@x?w(Rzkwr+Td!nP) z!0GPhj{Pfw=-76?jidOQwICu@02 zhkfT!$EuMv7NB0jWW9t^F{5CiiuSH5UM_~Z=}4!i9`&EJFrepJ3YPgx#`=RwAL==f zo^z7AP?yq$R&W=J?#ZkJt%nXYrO)9-d+BO{lA|6p627rdD+_MII$m>9)GQ6#gruE# z#pPnPnRL%lv@`pP7l5I(m92f8BwBh9*E9Rhft5wqxPuL%4mLUNe8Zw^+`|U-Nsc~W zvk0Y+?iL4;i*HWD(v7&hr4?VTwPasf+1+0KYbV*i!a%RVWy_1;V=x*_8TTaI(~5H) z2B;%ZdRe$oJ8^iZpH^8;op@UDwU8xGrFqb!6FLBcD0#~V*n%zhVlR5dM<9t_@molu zSG=I==+Yla{Y69WFXS3NSc{dGg*{i$+BeQ6yMQ-n$V!zTS2pmH?9U>8 zM9Xk`K6KKh4hu12AxzX9)}{=h2nL~3>Frwz^&BDL11zQ$lU(AwjjXr-%^p!2EeC*$q#aBb-HFbIpC^d%3`bCP7 z^&4lH`bhJf)>CrISyT+ES!T0gNT|qYBS@mQdO%u)%;P$u>TZK1GCvuT$TB?~7ZN>+ zp=)ZeWd-&onWqH`Yb&cWkz>BdU}a4EiVa|JMJmgMq7Ugy?IHndhW1+MD!3{Bc(3jN zVd*+7*DH$!vv}ijRhlnOGP%SjE)=vfu)5$DHwcs{Rllg_J|DX4DQkXWoj}hqY9DM5iP-6oUc@F^0-g7wSOmj^VbO?XLaGHpbjA~h*2!|>(keSL{b?ZIlHFs_&w79^oVN{W^XQ$`tjpyIuW6DyD-`^rHf$cD&OhLS5>f+nS- z)lN?@)s9YtY9bx{Hu9kD7rS>nreS%y@h&O2#;83h>Q63mWLn= z^sJ7@ic6Mkhkec-+I?gncicV>OXl4gweE_2?9r4J#}|YbgruxEwKT-u`S5w0z4NiW z5sv+if2`-z>9W+;%hrncIM~89rTknlZaJ(s9sZ--?rts6&FP}mh*Ks!uZWKZnsAO) zY5(Yw{wR{BC4DoFIO&f;V0W7!{P#(()FoZm@}G2|y^^k=y^>z3OZpZhjgmf=OZ`bD z=}#z0r%U^Pm-GzBeyjETKq~ZDE(KxAJmswz+>FY+A(y!V))HP_m+q%zx=TT|J%9cbb3tPGl?7N72R9E|7-U&tW zXsD_wpUQ%$R32#2&lM*z}=dNTd zx|8wyaZ^*xReS(<|GyyLU6DCjVKcfc)k@1&#))SQ7(P#;UOginm+9%~+R>k45cY%L z{vGl3WLI?NZ6WQ)7HpwQtj9A9w=`iJe{~m9}PTbaE^vS5;`%oG%h!5z6dm3g)`*! zDo(jxm5B#j;ws!)Jgt%gV_b-%JcA-j?YJ6a0Ijb6%%U=k^jm4TKi5Xj(Q1N|A&E*G z3rSSkN=TwI)~UGvG-LTU%$Q3oLaSx0XK_Eerdr&MvD&U@P+VEms?r9?XG5=idPYS1 z=>FI9J_U&o6;1t!C_DEHldc%QLQ{BL-ma8n;MR^b-Dwbpm^;?nNjj^7Z zGPBVY-TR0fEL3s-X+2ieK!ae}Yov$<8pjPZ)~n+F*DJ}afqL~8|4UWlNya_P|HG=O zDhJfA$|895nzNe*3&nlIEbcQ{O*|~o&`D|Sq7883{Pr^MuRF!V!G3+wEzWO;Cs6ix zR)-aVO=F+BN&8n==)kfI(W2YL=wI9g`0Zpv0X24-bbjS?r#TIh&spW!h3*btV#%va z3Y1lf+14&xDl0jEWe!;;)m7{N;i=hGb=(({$b2d!pUnHK7J4if!!?o~wt%W5GHJgP zzZdzR*2NekVjkDUc<7etgd4}x@wk_>f&Yl*grHp?uBvQWETcOsfnd#R5duBumt4a-BKnC6L0@6}< z0jZ0tMK9c&Q$J4paHPKtkyRZa%ew&PjG??g)1@johj zGlKz`;TJEZ>-e8PGfGPI>y3L3bB{;YVbRypC{NT9Jvw}aGh$9H9p>`OZ491xS{6X+ z`K?dsI{xP`_527vQ6>bhRQO4XJ@%4#j1qgjpou&=`ObuIQ&3BZ;i5lqzNz}*y zNDpz3I||Zzmgu+JZ(s|yyoLQXmIz(Qv2?d7xB=7yy-jnKuH%3H>LCC#{L-y-9sl!d z29FNI3~vZftLjyh$9$+j`AB)$b-GO}8007`s(hCos|U>sm&JL`jjHHX=(evYfRJ9s zPdZBr-LA5AR9Re&{KC=4WDuE5i9e3V)f@Ko8aCa&A|8a2%7Rud`6_z?jxfEv3U|={yIM=X%m}=`ilhZP*o)K>`F#%cXVEC~1a4i_1KaPuAH{)zAUfFn z_LZeLfYcrTEc2K0yCQCOEtnMm(D<%WT6^HCAe#VL6Dt$G^h2t{E(Z1E^C6qZH>l-q!OA&rla4lqB zTbW1YjvK||t2uWsnGtVhRG{ags~^q}i@o>`#9{K3cp@5d%0hOU+&}AQRl0tl|}W&Yp{X@M5Ju+>rz4pLJd!%DCUMNN5_(dGY;TW%( zk`i%z6vr7jK8@o^uHv7Hpt}g&MHmtmBBh0BX(3KpNR$>bq=iXj!Q;p+P0GdZtlX=T z+%DT!_MJ6R$0aeicXfG09lOe!@$GzBztb4l(0e!aEx4-`qxxkPTPZ(%zFzXJ%OjeJ zxaaerrqD)Q@$ZY8TDF&(-#G5QALiEC3`Eh|J3|ufbPlBD97|*R&DetZre5e);rI#G zJ%GK?(aWFBtlN$KM=a6)I7=6>|B$7BV=vAR`bD0QXhlyUyoVRZVMwmP#7l!Zd9pv>yv?LrohE?Po$8t7+q)r8WTz37R$$+Dk&~ z(zF@S(%2T*v6^-gwBHErbfpJVDkdctk>88R1uCVah%{x(sEbddAC;6)I~Hd}@zrR1 z$wbt>3%`AeE-H-fU@sYpL+%*r0cNq+=6(q$dL({d)6#{XMB&`NhZ>SF(XWV5#f{hq znp9EW$PTWurjhoNP*S0r5PPdm(U$H;b<`2X?5m{L-_#Sa3-~DZHjfz#N)}mXi1sQmkbtEO|PrNic(EcF* zdTryM*GT!tXRA_!Rt>R<8tk>CpxqxQovY^ApgrH%v8x)TM_lPRO}H?XZn=)N zvQt`=4b22a=@lV0C?eER$rNbneTI)-|sK~2X{uQI6V80u1knvS8q+n}ans67TX9Yej^ zpr&J}%M5BdhI)-bO~+8*V^GsE)O6l?mp2_lz0RPfW2o;nsOcE$`wVJ2hI+k0O~+7g zFsSJmY8vQzr-TQ-JMW>^?yaU{pdU1-=@{yb1~nZ+O~1tOHbTcx({Dt))pQK?BL+1c zL;a{hO~+8vPbIvK(6N2z19TlPOA-xvPxLB2c9n5^=CgoD73mn2h%QX&)kHt$@|5wF zRU2&3mDe%;_Hh&FJ@G-@F9ciEpT(U&+7QmfAfzp%n{YY?Tlzt2&C+B@bcYmdDTLIX zC92R)ENz3-g{5~Pbz|vcNIh9P52-gxR-~XGOSF(VJ*fz`bcB@5QZl4emTrZV#uDA8 zrn6K6iI%|*wmb}JI7_s&_$ZbRKpM-^mypJ>bOq8>maapZ$WkN*CX-p}2x&7?7Hpwm zi@@cox|bn|;nLrbwlHorc+ar(k}AEYN=pK5RzNz&(iTYjS+WLOEx}0;5$L>C!U+gAq#rY_u@r`VB}>*C!Im1`LM=7AhUP+H zIf?u$f$BxDghZ?m#N)Aommg{aO85kVUW57UX0``wwx?FJcr*Oj77VgWJ)aWHY>$wo zh*<;xQ&K|br$FmH2)kr+Gd3ld*`?mlW@#xQWSfFNyP_;M195<0GML%Do$Y#`_3;WE z|G&m2YDP$u`m7r=POA(d5o6{J8Q-W3ArXTfbm-4|?^K;p8A2k){2Ma9RT)Ae#^M_? zzEc@OB1Z8I8Q-f6ArYhWhK#c+LrBE9$A>W$S|$7dLDYwkh_OL1yn2yt3LO7`R2f1d z23iXwpT9_m~FDVOfjrl)Z2bW+7>Xy zt{$VMUZk09K3av{f3aPwpAtL=wkUHUQ7&H*De+T+0!Jk%Bq~9{pfnd_Q-YaoJi(>f z@l%5SZIfLZ)GEQuHa*DyZ)}s@Cl$l^Z)SU+v@KxXwIk3}Zd&R^d63QBg1~z-yYI1G zf3@=yc%pWML|%@Gl=!I~fuq_H64j1iP@3J?lwfB2(;Jqcf7@htnPM3K&1}=CRqNxu zOHiOGZ<+^@X0qwszRm1@%XYo{_*k!$(8yerppdwpL`t{>>HNaDpZ8+@2!W##6cUx- zIc5;*c8R2aX10G7wz+-(C$`D%%qndEE^P~#l4kNEQbKtX5}%!nCYyH&0`EnFzPS`QN`sK71O>xbf+C(Q2#IW06Sn=7pumNz49&K&1kG$m zNZX(zP--aX{c9dXnvErBX16Ze^)5k&FwJ{<^e9SDNR-P)J`5!_MEON!2#FXiMB4qd zT7jc-5fYV)V36IZ*py&qyR|GA{G%H>1SK`(*}rYFn@eyR%xt%pwgp77OI`$8??I%Q zY>b?eg>aSvp%M2Cp=7LGClJ9S)3 z@s zWOJEfR7L7J(?l+5e3ln9iNM}{$7LLgTndSDIa{QpeyFAXcM+D_ZY*0bS7=w5lrw>k zQYCu&C76U-k4*_?KJtZ+MxmBQcxq4!PYpsw*5s5aOn*KElTf)hvy@=wqfjkT?-Wt# zXn7S9)tRtMHcP6oyHwf@#l(3L81#VsAC(W;FRj8yiJErGp;GSt(k{xKY(7s>t?2FV+VtOGw1JT1TAKgX z%~JQfei--kWrD&adje1ODbO?$10b!SHZm7a; zb!ivv25Gk-?Uw&2?PPyr6+Z0$McT>cwkqt_W4m%~<>)B|Zui_d(K&OXu_$v^?&PV_ zvnS`~=FFKE-8w%ywsn46i-MfIASeGuxZGKj-Pv>VW?Lp(rr=AELd%rNnKLc z%d~qCE8CqveQv?5sabiJyqsy%wIhyl=YSyeEKbcW$hAz(WexsMojZRH{t=W- zxe+l;jH16s8u4e}#B%Jtk)kY~-ss;H zE^7GX`8Y1f&%)lFLq(P!J!h^vI=>({cW$0LYicxf?&;9x7v{UOW~;VlW)()a&QTAA z4O#47dg(HEZhj7%Z=D_8I$LF-80So#oHsRE!VKx1F&92jdeLc4@)c1-CAxEFXOSU` zrKmrjCYICqAM<0)PPLQdaWehBqq6eXrNF$)V&$)u2YSqSbm`~zGj~K!U-(4b7|Vs% z{;qb{rE@2r&2IPSg5&*$_P;B5)#E4A`li2Gzr&{E=XPcFDCzaxfmhrQpLly}yRf@A z?_E;2SHyka4~yP$D)i=_C53AbY};64bI;?A%YScP=eCdL9{p^|_{|{^uiW+g??)!b zv<$ibT*~sV>(o7P_t20nLr%Wj$NBU5%&ez!W}SL=Sl=c6`d_lXJL&94+pnJrbGL3Z z|9G{>+q}2-#GZdLLmnRW)f)p7nnfL*(6hr+vp?L_^!=ZAoS8ZDxd_io`@`Dqt>1On z)tBnDn&!IcUxb$^aE`i|~D zb{f8EOVm3L4C`BX+oRt_4htD}-~5A(qh82-tAut9@%MgQKie__J8pC7#I*)bWP75{#I%ewi^{%(9AWm8bYRvq`e`@;{xi;gtv z_x|~0cDlD`k94`bQ_e z3fuU`cWsZ4btv&|t;>&I{(H;4%JHdXKYz1#Ox6p^@#3S_gZJLyC|8bmZvT4LwrfXv zD8~oCzQ13mX=lRL9g9jCR&VZw^ASbc>-_NV+)WRpZEP_lX2-;LA4q-Y=fBFH`Saa- zil!`Buh<*kx%v~~@5DUw#?pU{>tUNeV)|>18ZG)Ic;VV<_1?Ugv$DB@U-ZkCbA;iEv@4BkIQn13{pzk*nepj?lbg0Q_@cb2L2kIjBa*lf&=rIXQ00=x(?DR+0Mj9WS<9cdYRDzi+O-W$W*G zqYBcyr+x5D)Zf2Fg!lj7;?Li9OHNdWyOaFcJGpz)nS)KHwo%e^X={u3ZhOrBx00U1 zKi=w-xUVcq;VbQB%OBmHJxiwStoA~ee-b9#_V?6Z)Auj^=&xFDc6fH)b7Kl$U3l-V zds`lA-nOB0+P;q#m0x^p(YDrWJ5Twb=A`05r(R$AXYi8=$E*K2e(U;mIfozHc(sjU z-&kJ1&q=QmGmh6!PbLWtA};^Zj??J!=aJy(#k5UVGm^d*;aY0%+mG%TG;qU7>ztVnw0h{L;0=p+oXraA zIj!aVXR7^vXh4_SE*)BEn|a^zLFdvBt|&{1Hu^IjXMT9}M2*rXrnUR|#YXvgKh1mY zO80h`Ubnl7&W}nBjm+P^ywek1OP=4=^|x({@7RBIOVo-?XX9(O=MPQJ+pyBn``Jr# z?#TY*(@UPbo6m+Nb=}gi{QSy+9mkALn7cK!&$zdW=f0;LzcO$6w-Y+9K3jj}9h;if z`aV3k;QGpn6XCm+_&wLhC#^#5 zJhb<^U%$B6FQMtabq}w1_uaR=$L$vy-F<8KSLay{{Z)Q8qG-;L{@s-LsF)?T-iLel zY?eK)vQN8P2ecf&@VUqSN{m0+^$t&RN_a`-x$Qqa{`kki&BweR|Kc;tZBbWSzx-xJ z$CEP(KA*7pgV?mW-yXVV&-gL^w%oGmSGRTe?v1FsdmTM?Fe$#y{b%RAcx+_c{QA!& z?KnOCw_o18aQdD<<~+MO|CeE_e{DK?@zu9xUvBomB+ITRb~i2G-1fH~3!66lQa0-Zg|7bZG&O5V!L*nWq@Wuen{}@mrwEaBhAHl4kUUJ7zCC?|rgww=V{F z*1%AjsianRiTKnPQ`KG#%V4BeyIthA@l`L~a@`C`a|%{rSAcn|Wx(0RTX zssWpIiNx$~XkXxqu`|XYF^;t*7kx2QdRiH72=9R#Wn=l&W(?hlQ{G>S>W#;DMob;X z(7iX+Y3=(5KJSaE%a}*8rl4^htql9u??3rsKm+Cg_EalBo*DIz zFQz_Y+R`4|=g}{u`(hd}W~9XAeAx1WFNW^bZPsPjQ;WQ3vfv%x>(d3_l)L9a%JDnla`s?8(l{ zv#NLW#WZJ(;_L0M`6g|nh0e~9#r0gicA^>Mpgp$Y-Y4)F(U_i=jLE~E@;=)#5qD`u z%uS3LE-@ibwlz7wS}|rA_SD91AOA{@ubmjiOv9dh%}tJ5=8I{~n8&auJ6(>4IDIi~ z7<1$Hb8`TgSjKp;r@9!G*aeNnn0NMKohmUEm+zV6i)n{goAt)&Y0sE=?CCt6_to*W zzIHn3FfG4rG}ae`<^o^biXbiN^XOq;Oee;0D}pq!xY4h^n9ht*(o@;^(+_+xag3oi zPt;RyI$Imf#8^IEbauAh+!WPj#B|kR-gv%&$@PL#Vzbh3ZKFJ@`p}IKo*gtiAF+Fvd$n3b4zL*3ZX5-`CKljD-V$9Fj zSI1WCrb)o9XB_!;4U_9dAI8wLH)?0^zr0+Y7dYUviT*dXM04x1Sg04K z5U*Mw#syQt+om9;)Qqx1#Sgk_UUe(l-nhvU_qtx_NH7=>?qG~2fO=nfJNNN&P z4Si%vp{uH)Pn#&TRW&?)88l5)%@K)ds%pNMn&ztJn$)yVH4)S_5t^x*mQvGQ)zD{z z6rxql7^#U>HS~UvLN`@YA~n5L&0|v2P}R^c_$f3}HT$KeqpJB*YU-<+-=wCss^JR{ z?DSGK;dCiNxLMUSmzp-L$#>^v=I724AVo7Lb9Sy#lUu0QXe4H3PM$SuZl;8=COa=H zOF5=83$o;8d4os;?`}Ll_OeVOeUl-Aa()f*(cm?<0aNUwdE7^Hz(@0qkH$uw9S6mG zb01B29}RsUp=ZtU(X8>&Jny49=%e|;M-xPsY7R;YTl#4F`e?>TO)ahqqGw4>sH$;G zO{A)!H|P}Xs^%f72~#!COHDOZvsY@WtD29briQ9HD>XG$&EHZJu4?eZ2o4ddri0Xo z7DbVLrN*XWhDuF{s+lY`!K$Xn$4;4#W}}bhDXFOqJEGydBsFzZ%^s=gqiR0%v2$9d znVmH|Q$4*nh0x?@xkcVZPGi!CbfK#(1sXqxTA=ApS40YQH5VE_#E!;Dtm#4{1`0P} zV+~zuIkdu_HFVMB&=PySCPvY8q0tEi`meWBSJ9|;q7+S6N*M*ZLNbd63>;`wpx4lt zO|PL5nqEVR*J~($dJT=W^cpHBy@tw?HENpaI?o!l#ONMGXp~&g9fux6qdvWc?iBPI z8a=W`E%|6gqxzz;F=N#7q0tv>x+y9ew+PEhOK7NQ5|nH-QZx#Q$2iPVAePn&My*qd z(tD@zyk65r(Wq&rM$8yWDu)Q{S(Bis=q%A==p@%`sDlf&bn;qZklq{HtTYOyaIDup zdt<&op`)wv++mERlh=BK{SYgjCy>_-Yu5*BtlAjKQDBVD*DcU$Pa#@=aBJ&$)mK}| zVvNpLf0aePnq}XUud$LOi!nN1iOllOS3A|$ZIZVJbiOi}MfsvL<(3ZB8)+=QA%vDOI$v}jrseC8=ib?^v2Lo4NCd{{d<}=z zW>tLMyXf-?8p|nJjM4cT!7Sxm&aC&&QH_-?S&Y&78p$m0GOVYT;VQ{ujLz36ov%jo zKYLzdJuX>{(fJy!%h%Ga<2z}rHzkWPI$vXSzCJ#B#ip@7ku1jOe2vxl`m@IAwHoV^ zWHCnP>sFnwVQ+8jrLn?mAQFKwI$yUzE1vFB+vwH%$u~6C&633!ov(4sQtIp6_~+|t ztR%@|jLz41ov+^?UDH5gO^__c=zLAk`RZ|fLzu=|AX$vj`I^WqrESo)vWMC>?vpIW z=zQI-^R;PYQcaEZyks#(=WCLWulB01gObGG*%0G)P=wpov*3T>c<;BRbRJA7Gre2vY4f`4Jt#8HCeJ4qw|&RQnDDM^EKVaS7+7NUddvN&R33)FOBtsWHCnPYle@n1l3n{DkKEP=zPtD zR_lAI3^mrxlEoOEuUX9UZu4DLUrxzljLz3=A72`4l4LPP=Zl_==-WnH)z?DFVvNog zJ-5^H<#>L}NR9P?WHCnPD_7@>u9ZzxUoT4*V|2dm(D_<9VWm}L9g!@?=zQfdOSyi1 zvpi^-#yTfijM4eZ*ZHb_Z}MR;2#nGBazm?KD+eDxwohZVk}SsPd=)T@l0rT9 zhyB0YrLhtvi!nN1^OzMWSucyHMS&Y&7n$Il7*9*&k7^?ZYQ?eMN^R<9kN;{o>__jLz30 zoiC~{jTKc3kqC^@`C1IE*5*r@ov$KhdAALXwO+Cqqw}>)=PTpjXs`NuRk9eP^R=8=-fg3~+BQx|7Gre2igmuI zZD_2ElEoOEuNBNv%8<@wjaAc*NCd{{e3d|})fb)18Y@<^7^Cxb7qb*!R9_k^MY0&9 z^R-gvi_T?@HAS)*qw}?jS>E-fv6e~}V|2bsb-w6a)>w~77Gre2?q-%!Uo?(tq1M;y zlEoOEFOSaGw}tn$(^wx%7Gre2Rx?W}!`LYc25GE|lEoOEuQHvlS?PW5)mRZ!NC=G4 z`C0?5*7vUH`m9&J+DR5;biVFkmeL=tEu2%K`5GWujM4d8%Pfkf9@~E3-upDxRLNqD z&euAfuW`=x?`y1OlEoOEuX~y0U0==A`r0H}jM4eJPv?v3OJniMl89%F&ewWodDoZ5 z`dIp6jLz2voiC~{jdfYF7^Cxbzs?ucm&UT!MkE4bbiN*dRy&uezBE<`$zqJo*MrQW zq$u^JvC<@qF*;uxb-t*+G*-4`F-GU>A!d2kSF~DR#gfGsov(*=zVi3<{9a={Em@4w z`Fh01SFGympky&d=j&0OFKQba>#SrkM(1l2v%K4e#WM^*j3=>tj;S_GsD$^u1;q-EbpiqNEabkinHOxjYk z*lv;$!bdEw6_Sf-jJ&R9F1v16 zT<1wHrZMum#>i{!v?FaYyh?I0jgi;2%w^Y&nEqbhlUz(=0Ruz~Z`BaxsmO*H?_ZhTg7$;C8AUf(qGx~b*W zr54u{l8b4KyuQU;N`{}w&-nYBwG3aDTufu+^=%_Bvhx<#w8QZb7tsr&eAsJolmZSzN0n7t(IwPIN9QQQgShkk=GqYUVoT)-e)YXS0xwI7*72&sed{;yUt8c!+Bo z{u^)Pbtm27dBRjvJ}~E|cUfH3l8b4Kyneu3N)O4Of0O>oizOG+7xW)A)$;C8AUUxGWRV0!|_j#AEw771Q zTufu+b&ru(^3YXlEv}zQE~YW^+HT}^|4H+Yv$&p;Tufu+^%4B4Tufu+_49(fEUrf- z7tAYT$Tufu+^-IuNy7An1FTfNZW#neo=29{| zXxuBmJxFsMC%Kr$$m>@|UT1#uZwoB0I?2T}MqZCFmnzrC-}c}|*queZSm1qtnB;ZgH)XTufu+^=sx*ZRJPWvY2M4@`5|S7tt35ChBsHe={E9 zVj3f_-{G#M8=HT0>ne-ut&)prjJ%#;E_+@RbY2O`#WY4%1P5Tufu+^|X=K$yaYqSX?_K z7t7(@@A-tq z6_Q*`W90Q0Bd=H9d340$YLZ+`W90Q$=2GQ);iVsZ-r`y&xtPYt>p3H@$Id!whQ*bW zTufu+^*82nFV}j>#WY4d`aNA{WPt-P+1Tuc*KzOujfY*4FfTwqqNCzVf$zjxrD z@fGis55M$ea794Qxeo+xk?9bP$@LHBnjyK4{Kbz>u( z=bxbRDvgzri)c))7YwdDe(=hx7T5bF7txqp|HoXag?Qi4j+-p5Pe?AJF}Yr3uKn;! z*H6B@^lcW`mn0X_m|XwCo$(c#>#*D67T5PB7txqp|7EU&@JrWI2R$0IxE_{VL}PNj zggfIa4ki{{7kuD5S6EyxNG_r=xn9Pd@fDMa1=n*Y|Mn4!>jxyT5Q zuh<{=={j`PU*YH}jly82xIkla(JBy&>z)66<~WP%bCQc_Os;XvMePM$cWm5*23F;D zi{v62lWRP4sjvLT?;iJ<#r1Q^MKmTCHr&D+DvkR3P2axA;`*oLA{vuxqQSM}%A2mV zxDI@)cyFRHx%Oi&CBx1~K4sJ1<0Kc+m|XiCTyK1KL#371yCfIUm|T;XOG)jktHL!F z*J8;&0|r5RgYeok@`jmdQob4`(4U+J8Q4u_J>+hKX=A{vwHVCI@8 z9tWQM*fm#MT&+Yv+{JO<;o#Y}KlWUs6HQ|#-J!Ns-A-RagAZpMv07<&tXAF}t5a=?rMMTQ*Db{UVzxg! zyHf+*DmkPN3iXr|n#&uLsay5DAy<2Lh;JZw^F}?EisjSd9#e=LopRSK+k=KQ){te_ z+3x7XRML2pdMrHS?aQd}M9`PYx!r?2hMf0pZ|{7hU)uda<3K)LkWFWIF5BPlWN64` z2aS94`AD%e56u%B&pFdFino}SZKNe-tJtAVzooowe@S@@3Xs4{$Z`me5WawK5IBV(7jIdPuk^Xcwo>U-F%|e zj+C1FG>S(*;o9bWWL7kj(|l%CLL&{MuDCpLR2qZAtUbmf{nq9yK>(_z^Y<}$@DP1MMoG2Sq zvU=8EWM*uCimGqB!KMYJ#x{vICT$v>_t>7;D9LEp{xqe-ucL0&VXsFQN@)X^$mMI}feytH|z9tI1BkIT_KP@lzL1Nl0bbiuG37P|*KL2|asdsk-$ zdNoe1?G5x|TSsXU7^8A#^o_w(4vms97=h)>=XEBrkzzk`>r0aqmk*`8hjW?yy5-$; zV|jNryDF0oOdlRN8>vn&X#1w~@-dhDHU?;})mYjX%=jHpdq%WRzX zy9LC$>J>0pPYRd<1;kEy*_uEHvGK%~vbG*%4Q=V0_iYS@6|*sz_X`*t#;t(S`MkR? zl^K{G;t%fXQ^*ubQHV4mo@tb#uoc9#!L|}O9@t;q@kl7KcxT5W!4>A0bvzPWu8-_R zbmbCdb377U(c*czKC+1d+F^IrY_f1ZF`4S^?wrYGJ}P80JibC!^RdZp(|zsRm?^kY zn2Bg_qDT@h&)pK>rlDjK4hl07hf`{n!uil-H9S|7(R^fMQ_Y2PZf$G@k8Er(ed;m$ zzc#jlM?x1xl_+>!5`ylZ!5NbF8GT-7yNM#{^HNwg~#0cj2dajMM@0&0=PM|rowJ}EcFrOXixkq%Sx`vv(7llC(z}02@u)~4 z?R*7=v~w1e!_HacVUa@GISUFY9=aFO-ko+Yt3hE)M163p<89-2d1#lG%VWE>aCt1a zg-~1`+iiu*W4qK`9t&q|KA+XD?2#H;OMMy*{ z!tp9XB2pL8 zS?il3Yf)?UO}k3!o3^Z>QJ#b;M;#Mwfwuh3{iu2S{U`p~h?-md%OA0Tg zkjHpvXEh^5_PiWV)c4}|a6A*Ti%fTWCir5m&jg?QGy6*#u`ByKnh)$O#e-XR{t{F& zF?*CtavHa6WJUnYMr+=e3`T%V5}Wswz|Ff#)aG458=Y?66|~N~>Vvq^#vCaK+PLGc zNY`<9&Yb1-waY{G3u==sEp-j^7Sz|uBW&ixyLeD(PCPR(C%#e)JIsl%rs!a8K=C!# zHncCCH+NoBlf_48-?(uNtkitf^>dT;P4nk3s8t8y=ttq!`qsLZWZS&jly$Fde%r#f z#`>n(F6&;?{MNd;ZS8HfYpr{YbqibS+gsXe*Xet)`Azi;QMlGx8l%#;<4tw*n%a}| z=hY6;p*z<7WJ_~n;{x30V|euag|)4XP4z8}^V@3eC-dm%ZMDd_t$jhu{95C%9!*fw z+PI))LF>Fm!A}R!=w~gp4at^;^V%C)CA0A~*4WV0v|vF?TP>aOqnWCjT3Qy=wJltL z+nl9-l4xm2wl}uSug4QQ2grKRI2ZXeENH<4DusT~THDmJAlXu1-_CC*&j-?v7uMFd zENHH4n%6Gg&-pywx}bSMdwttN=C-~^d||`9R+*pgS zGZA9Yg8rd%iBJnr6L9d+oVYysNaxmG+rFS~?t=CfTg6$GUNP03`^;zj-7)0F1K zl`vdnm#l41HqNhGINz4(nR1kMPQ1CnS*}QXee?XLg$<3hbEelVoRhF#p{^E{B)PDz zsnvRgJeqL*uFIFxR;RVm-s%ut7?zNKr}=O7qwdEd;cz4!>PlBfVs`pi)SbSnH{EN$ zR61Rb{CW%Ntl<$cFf#e1Shy-^yTXZZRZS=oiHB@A0mGqCB9XwqHSth9LeExA?)mV; z6*tVzuJ~2exWKh?x|;p01)6qn2L8LKnUL+8JT+iHZ-Jg{!+%dY=xPH~=g#UH8lvaw zI{!F@tbflBv~QbbO&R3}f50@eFU-dYqnKAo*Jm*!qL%1vb4%%d7yjF@l8|-PPHnGs z(!CY@fAL8-DPyHY$Su9AasT);z3ILKl6!p6(afU@R(Yp46Lg#Vz3Hw3$@ehB$$q(& z<3yzQ-T^z6dwFR_%7-x%%znA0cRc96FleW8PmgBq+&1rh6Oc4nNzQj^;&1*Lu^1Ko?)7Jq?nNzuzC-@CUr< zFr6x}?1SEPPk?03x!!b7g5>D)yy>Q+yn*w*>8QR6e?H`$-Z7w? zc9Az7eczgkz3H9>N#?`ebX1QzKH`rqv)-HTuOK;pgEt+0kN%JPquadEn~v(`Eg$oy zqwn!B<|^7RH#>Ac2>$(XJC(aVxE&-v{De2%ame?)&E9k*m#aVNP4_*J-2EwUI!v$( zTzH8$-QPg6>eJqIG#~NwOTFo67U$6a^QNQkvHmmObV1NvcbPxBdoK5;qk8o8XZ_I~ zafLVC-$63(N^iOd@=Z|VYP;O@FATcA&)bLqi_u-a#hZ?1@c!fr{^%Yj=frloe{!89;q%YOidDGEs+taT1rrQRR!7qE$Jr9!54c>GKK-cmO zJC(b>(5&{Mo4x6N50Z;+@unj^=>4WQ9kn0leaoAU{IxH9+nbKkyW>`GI+~CFBz+Xy z8*=`|tBd_wS$iqdW2eZ#wFi)jjABzoR z{Mwt2>`U-5Z#v4i`ZwNm)Q?*ExHsJl(5?TiHyx$7^>_a09(=-^j{Ml?pY*1qdh|x> zEZZ(OyGwDY>Oa_s0Nv=Q30(X~e{_@o@VPIqwo81QX1RkmLAdF^dB1$pc@^z;y?MXHy!o&*SzFSN8c^{vNs(Sq4^bW zI+9=AtKM{^R|Btk(~-VhNsYSga+3>{cDdzCbVreMV!Pbv zNMG9a^QNPEK19o@ZI@emM0Xi2ptfCZbku%)kCsf^E;qVuc>YInCTy1*9ku&kq-D{z z%Z-k@THUk|+IG3oQ9E8FSm^Mo0E^ zJ9U0+S24O5sIzRl+~_E-GMySP+f|HiF)b>#U2b$_!aqzwRNLi7M{A*nsWRCvH@YT} zY@kl7?Q)|dm-BuK!q_f1I_ffBO+gsjO^s!xTbku&FLY32YxzUl!-cN&nw#$u< zLRa%Dz3C`)`Y#`J^lG1^#?W@TOpSMX6au+zwl^KA$^|ET(~$}KDg{?;ms>fg3f*^#Ke`uA^+$Jftv|YCoi`m- zp|j?C)6w|HmG$0qq%Ze1c+*k7|8DfAqbhmKJa0OZb6e7zj_U8)W`A^-%=e}vQ~%Wk z-gH#nhg!Vpwm_d=ZS_ZY)k1H&Tan(WZQgXB2i*%k=%`9w+U}hmb&>CTw>KTNTeo%i zqkFj1n~q$ye=hQ-qb}&ACEj$@e!Sv?j_lPtmU^d0_T@ewbktP-_jK>{D710>d%fw% zMLc+!Hy!2sjx)UJ$S>)5pEn)Z=b`1^bkr1Gy26`o8_N6Rls6rvx1r0Mj_U9Cy8Y2T z+2c)j7)U1edef0Tc=JkcItpbs_IcCM_dPV@O-Dlpm1la>QAp~aKIq6Ld2*F^dPH~V zYHvCUT{RAP(@{N-XZ_L5AM~apJy?F0Hy!Eog*kt8UmWtLqb}4vd2c!z@_TC7n~vg5 zSFG`-qpt61XM5940m+$bz3FI(bKN>`x|2W>I>(!i+Vkb__ok!wTmJ!XI{I#(`Jgu) zb+v9g*PD*ot>2yJkM8C3z3E6UZ~l-!y5xo4bkr3*`yy{T%J-^^z3J}9_r34K-gG3F zD?Z{)NA~Kr_1<*!Js#TNO-Fv>iy!qz_x6u@)6vk!qD|g(q<=LZ_eYofgf|`6%gz4i z&ite|T@)lA{FFBx^=GzT;!Q{X%l)7BrX&0O@}=H%R4)(tj5i(mlhMn(>8O8s^yS`k z)KB@XPrCg+=P$ikS9sHrf3@UFZ#t681y}i_yXN!Wbo+zkM_at<$d3Q?3*K}T+PLs) ze{{E8<4t!QNd9=OHy!Eoq%V2XQQYz5>%8fx{at*$Hyzc>v%c(2cQ8mUy1^gar*8D7 zqyFlao4o1Bf4TiD-gNYRfA>{yI&;6M<9mS<)-|tOF@s~$^&{4npya&9~ zBR}WH2fgVggXEEiyy+;t-~Zg3j{Myzzx1Y~a>O6@rmFx+>Q~-$)P8h5;!Q{X%ZDHJ zrla=!>%aDgA`x8iYcI`T^@f9p+`0LdA@^QNPI&m~Xzqw9LoA6@wO{^$Zv zdDBrnzuyNPm1D;rywfB7yW@}Ebkjic$3J<~Q9J$0)82HXFGoG=O-JqToIiWh#X!>c z7jL?Eg5-+7dec>dBz3V`ZsSnnu7eDzkAb>eg41>Z@R-ka``{J>CQ*KUwPh} zZVE_d{?nT-2$FaG%OBmce|ys%50VeO;E(PL|L09d`f~S+-gK1j-~Z!HN9i5*k~dul zB&WRWO-J@`^()?VWY<3Xsy7{dk9%M9rXzd$m%un^gLS!$U;YY@-!#sfj_k&BKIo=` z?$8O|=}~{{xQYJg68rh1Yu?|Rj>@rYk~bYq3IEUm-gJ~+=VX6$>kjm$qxk}#e}gw2 z&EvlGAa6RFQh&<9-gM;GO`hUSNB!v;Q@!cP-ZvcLk8b4~z3E8rKYFM)9of?x4)dm? zcI%$QUFh=ZwfX6*2Ou`SCgJx_ZyFc)8~&pUY=Pj^_7$@nbn)?sPl9IVTLfLa2;HH$ zKj$bjU$^v#uEPgi1L)GA`?91h_I}GjcQa_-_*Rkk1pMum?{T<4ThajXuK_eS9wXAD@^gA?%?%_-4-Pm^&;asPJ2g~0i}xr}cLISo03HImw@O;51?Crn z&XL|U+&>vKolZKJ^v(j!2c2{->3t3~H#_NE(t8jzk2~oc=}~!Kk~DyP6)W%f>Ei-Z z@E={p%6k}|%>+%Iq$7PPmfix;oaQ6FVbE-F(z%rPI?&wgq;r&)-tR%s{LxA0lHT~^ zQC|Eq;sT4-}iAz1ISmg z@9{^_{liCkQ{L{cejEY1<0Ne{`BD9-1I_79I+yaE4Vnv`bdK^;dS3v|ZB9Cu^nL}J zr<`<-^yqt3yklJ85d24%E{98cCxPZyn0F z5I?n3YYX4T2a`-cxYO7HL)PCY2hm+W)c2i-BCo8yD-1kkPUL3bSJHu#{U z^4{c=?g1ZkZ$Wzh@~2wu48@O21|YGA_r|-OT)st*2d0bgA4=tnJGnWl@=Q4x%BRVTOE4Hj_IMd&=Y|YTj zHQ`uf=GsJTCid*Y7IHIJ=a&uTx|wBGPbRmlBi)})4W*Z51~U0s*{(AKvjgusB+!My zhQOhLqXLiS(cO^$wq|gY(onWHADq!~La=QRTX1F0!9hU5`t0h#49*0h*B!gYBrqm{ zF$s)GU`zsI5*U-fm;}ZoFeZU93B0Z)K*2Qi9~Fc;*A)Q@@lY47B0#|k3UE~fC=7B0 zqac2%Q(6(2f#0_>3gI`%s2ac2Rjvrs;`i;0lK7==c155azm<%Z;`by*EASg()Q4XR ze^&$s@k=RH1lHpBWJc%X_f$sf@mt4eGkzNwU54LzjJDu+KBMdL+sbGwekt#Yz^(Z0 zWV8*xOBij(@9B&l!0$3fkKmU=-xYx;@QZFE&@=c=GunaQK1MI%cNHTL1O^yQ0y>Kk z4QipIiAOXnem0{Z&^e4~s_6$A(V*b@jA%IdLPoVfA7+#U+Q6tC=wpnQ0)2wf3ZPFh z>I1rz(I5~>1o8v=9HaAru41$v=nITC16|ALGN9`iZ2_YF=_&%(1JSbEiojMNk|E>= zbTgxEK;L4t9f+18R0JLXqJi#;z#~93AiqK}IxQ^b1DQfN03EA`k@nH6x0OJkBTt^aP`7pr;ts0{w|m5{Q;VLH~eg!f-`k zDbU{;tpIwSQ6CU3|APJj(U*n%fL>yBJ`nAjQ4v@VRDl<+2y6zL!00ld{TXcmqRBsy zAJ9RJwgOFMbSn@IVO9jT0lkUQcAz&idH{$9${;@=8ft?4fM^mJ^bd%JqbmYCfMzgy z5s0V2a3paS-i&foQ@5^be?tQ4nZ0qZvS_FbV2fB~ZRv@aI zsJ}ozXS5CIVMg15Xyz8`FVJroJp%MQMo$3Iyd>x!&>tD?0HWHA`U^y}Y4CrHywUs? zv>!k;;{@#o5X}LB{sGaf4Afts|1z2ZL^B*J0wJIPG`S*B4K$unEzo|9l0Y<~j`|Bk zW8A2}Ks4%H5m*64MR z8U!K>j`|Dq7^Cxne#>Y*(36Zd1O0)~Wk63e+5+@vM%M#9$7m}M*?iPrpno#j2J`}> z?Lhxw^Z?Myj2;1cjnNZ8<6z}be}N`4+5t3)(ThL_G9tI{U`CUG4q-GE=rBgpfR11k z1bPdj89;Ak6aoq|ss=iaQ7zEh86|;EVAKv&$!ICiNsLwiMHuw~(R2vZU!ZD6Yk^K? zbUx6jjMf9yG1?5&!00ldd5pFI&1ZByP%ERYK<$if1?pt94QL6Y?Len9dH`q{qep<2 zGkOB3i_tScX+}GM`WU?kw2D#S0Qi55CIOwrXev;i(KMj583lpPVKf8igN#Bz=QFAX zx{y&V(1#f%fi^H|2l^PJr9huxv;yc;jQW5sWi$wM8Kbp8pJQ}B&{d4q1AT$fW}s^s zT?TX=qb)!;FuES-D~z@RQ5y{X1G<^fHlS}Y+75IZqX&S#%jglHI~Y9y^aDoE0R4#3 z4j^i^QGbE%WkiEeKVvir=s`wPfqubg8qlv81%ZCeXa>;Zj6y)v&ZGSRdWumk(4QD3 zfu3d54)j+>OM(8*Xa&&ojQW87&1evaJOk8UpqCh(5A-Ud^*|M9_t1U-O<;5x(Eg0J z08M6eJhXa>+Jj6y)QjH-d^8Px(cF-ih8GinEFVYC#e zjnN9A4n}=Iix~|9EoHP8=)H{22YMf)^*|{`n}K>5T?Vw0(H5XH8C?&wn$cFEK}NR% z4KdmVw1&}kpmmHM0Qvx_^aRj{7(D}YF{2$o>lwWWw2=|b!1*|%NkE@uG!^L6 zjHUs7hEWjcvy5f{UCAf}w1rVM&^3%|fxg5j3G`(~?Lap%S_4+WONzOJ&d*h{e;o=K=(1)3Pipg>MzjG8Epf4n9+8i zM;V2p;z*(1RHTOyPV2E>mC=Td#W-%Mqmqu)T01)xVz6#@DqP9ua^Y57Al!>osuRy< z%R{Rw11blc3?vh-v1bsfte%_6_hf?$8#|++V0$iGnVQ`duI!rK6{@5|&G1L4QXKU) zyDu~=228I)xEh#Wg8qo$kKsW=VSdG-zU**+PdYcdDd^4e9i8v=09Bu zX7N{v@(sxZV&YGoLX8$gR0|?j$p^0?yKv>&*9b+fyoC4>_RMa6+nrfkN9L#h%E zMM?^%v#B1MLnocKr+VD9$9|@rQU{MOUf$AiRUUhGXPYMeg?~OOF>t3BE zSsJfO6^_o_+sTR;Gb*C6B)S^Ky(?nEtccPA=@eu=#h0}zVnoTKhU#I&s~$#UVSGz` z$V5n}9Q}c-vaUCu&aLdvo*iuOjAEL|Kt7l4$3zjWZV_p$$`%oy#0YJ0e%g}45+<#r z4oj=7tX6ShMYPq58o~;B39CC4=GGz{jT_oiIX9Khr}{I!>7Y8}mBf@FrLU4=a+X#o zL&*Y#)!Rk2NsX7#>_k_XkHkaO z-^#g*o0{rc+JbXC=e36up>VJ>oy(+$f+V6iX?j$7FJ#kq!DtExMO9;m(ez;lqoYy+RoP(Of>3oA2?j>eYWK>vlzT~cirGhQTSFx* zP&^%C3sjvBnfB3YK7uor&TU&7L~|2t%I1R7X+ELA7$tU1hm3mW!{asE4yi$^orM#k zJb$ZNX@|GUS34U?gxJ%q#$~TqmG$eo(mA+FJuB0B_L%C2yV8#KR=OlRQLA(j{5u<( zMY{cHqHGFru4r-OD^cBg#{|25`B z_)J7yvIREP0$m%{10|uE%Iz{lq!oi5Fi(41RU_?fSoa%QNRp1d%&FDY6ZTY<2%fX2Or+DPS)_~%8JK>Rr`?G43cC@BcFEqk&=VnpMG*Q*)RE}S z%)rbriGn-Jdq78IM|u}j1n!?Q9abfZt2*RQLzIh-ZlP&98kaV{JJ`__T--UAEeE{2 zAR4AbfiWG)hNo;}>LvkGKRn&FP*13rG@{z+t~F&=_T}X?_SHDo8d?$wg%i|e*>ycp zRmSPL8*K|hHB@7CZSdirlr}1^8e_`K)23*7$^L+-O>l2r%O0OAE@VSav~m zQVcAJbsL#rtUyvV|E4bzaY3|w;Kojp;Q1zhh~d@$ z^M&BIXt-27OByUz0(28-%!HgC7a6(v|LXIV;mv6lZD>nZPgNy*acS#n1N`Ql`Rt(b z(+VnR*`L>~q#tv*Hs%~KOs4Wf!vpDHYi8AOu(L1gh@I?OU-9)TFT`<$ z5v@*`vAAR=Pf>-&o=iTI9SGLv`-c1bhELpmx+OwS+N8>`lI1cu0}2V{GWfH(%Ik|e zEN^8po67`UdOWe<4D=5<$?jh%%(R5KC{Q#HdHI&ZLX!5rszzqa$UzwEIwFtGlh`wLvj4bgB)m(xPavZuhmX`+htU zeR=7%g^kcmWwN8LJraZ$(%yMeXXi-^6ET`VL2>Ln_wa%kDBbJakc!10xMef z5Qg?RIGpA=T%r2#;ixfM0h=+LnV*5Tj+uQ9FVrZ2t{5j`PGRZkPlYr49Fak@gX;O} zdUW6EEM<)0{YWS#hxZGluU~#7rY1U~4@Dy|*2k8fQ4wp0i3o)rf*CybEh4jgpG0y;rkZc(*(O$F)@v+_~d*olteM1@cfIq zZVHl+Ja#Qqu#ZJ+J-bC(Jk`a-(-aSjDd-~-mwesIr>3ZUsz$SXu(*TU*f>@Q7}mHI zzI}Zve~xH+crd4`i;_KSEv5E`N+jf;K?p}(>?0U>f`G&@nLha=Hi^yn+g`=iBXjUkt zAd%gyA5|h|Asm>IpEKqb7&p7Uo-Mv5uxj4|+l?9~yhLSjO_N=GriK+KP@P06aX%(| zXEiKTOv4s6M#$=jrjCoU>yBjU7^(J&{Wofw#d4#qnW{UhL!n|iBt#P13nD4QEGdzU zMC@Ewt9YR!)J=X+U9LOTleP&2^S6SXd$_gojF=X7&b{Jnz70;)xgr7rIsdkUXl-U@mfNV5uF582HxVATw zOV903os+glzjkikP+37x|80X zVoIk$vsjL(Y%zF`3^@hZpXaVi94({7!MdK*AQr3_e894I(vVhAd}zBr$%-J{NmC2T zkdst&8P6O^sp&CE6%Q}ab6O=Nr4*!KKW0a*%nV?SStrHEJ5%}L+(59~Sm!U>lbz5Z zOK`#psG_O?I_r61G}o>zp22NZzth!b!L9mnS|$^$M@=8X98+r@s#X+~kvFB#A#U0* zMGnf+9tCPo3M{S%#-0?k!-;At-L*s)*1rYREZ$zY=lGVYK-fp5h{=FR7V{)(vK=;| zX#JSc&^$0WoF9S7V5a#jIcVlzT07rfczUI9E`-p+X>$R>!p5bG+(tD=YGhw^SoHv- zo|M35lfQbYwbxxeVn>s3+?<0_xiB-3$8HAMU`Lv^@W>3T;;Gi1!-H5YC#EX6)(%I( z+&*MUC(!g@Jm0@6ErygsHAcWVWW9gq*_k{Bt7!7SS&w&*+q>6w)zi0$!9KB>51aFj zDi@xqtgMJ`P(aTRl+~t+$N75m;A?iF7L3 z79ttBB%jkUS6F+BDVmV3pV4u^gpRhwr`Pd<3^#qEMu0c5=%Q7Ar2Vk`))qz73W(;Q zTDJyLV{{ERG)Txnl?`R3Bt0q+_nM@!b9h?RN~unjHA8@hJ;UTvmYM(ot?4Gc!IFGq zMqg!n3?slepUS>U#TfVG_OPt2J!DJi>^KzkDMe9jqT?G%TyT-?UV*0-SKg566X27# zXL6|l^a$5t7aXzOlf%r7fUl!kC(}#x(^rt+SS8@>4$0aArLn%aIVZ%^%J#^`011Rx zq=(4=RJLc&PUq^_xHhiU&Jl!TI!AsdeJKa&^|#JMsZLeg7-@m(bn@A0iI^3NBocXDOGLWt1tAVkE37vG za&}s2w8->ri>eB#4SOY0ZMeO3ZVT$m42#)Wwx+gB&qPhn(kW=a&DKt7pH1u!>e+(F zy5$VhYIBMyl*TC{bj)d!Ej3Y7M||KkD95b|NC*f42;sKHwA&_aiuOI^@T@X2=KdZ& zwm(tZ1jz)P0S;^TR2Lh=+mD4gDhOYz`1Cau_Asq5TbXE(X0CPiWxH3Ew7$L+XfN3s z7s>eB=|Z{q<}4Z^mqh5q;F|EP1n-YyxV2@Q;L`O3 zkrol07P(eN?ER{|y2^K_2Ii*J=n+;eb<)^Cker=e?>?DkSHuwttV+SoEHEf6GzUv|CRX5F-&Ih2zn0WrlM#tTI2wXY3e~see=FZzw{UJ< zu%V-EVPmkaqrR@8F*v{NblyT}*T1m87DPEvMZYZUWLeFI{;(0%QpyT1v{~)H5p3@t z9-=~y#0XG9WZR4kd&lqO7S&kAV$Mu+yz{$b9d%9g(!3ijHecSg(1j!32~kk3)KyAo zWyt`Z>@jH;T?;v)?-{1kiW!L*Jtwj}U8!JO*HES>lNzv@Aa0F$%2{i+hx^`pzU?n# z%8YUz9Buzd%%|3}!?}qixo1+#kXaitLtZ zYf@|hUGZ8~R!gDEUu|?RsQhWn8IZFUF&2mONp^X4RO!Z0706+LRp-jv4N?j020Npr zWJJ^V9VzV_21Q9JF{Vo;Vmew%W4h!+O2$SKXyOa(axA!{g*T7bD?X5WAEme@+9}(t z515iJjwu7!<~_R8so$`%Zo#ZLu}i$q-(*2mXX3I8r+mGFR%*#uGX>eiy$taGn3&9- zrstr8nmJeK^XaKmW$f*u4{oD#0@U~e9Xr4S5HsZ}CaY`j(NFdqRnmbf!)a$<1QWk7 z{c~1#cD0xVhIO~vYeR3DJIc+njrU_OD#)MP7Dh9zdu(C6Sy-J`@d~S?33OhXo$1TFHisg`t4?}21BbNrTpkPFV!35ywxBeE;UKGZKSQ(R~QdDI3|9gW6Dsgc;+1*;#j zE7ie6Jkvr=A}D)AxD0&~b014aj#X^ObM>;NPv%5GZi`E84yE)d)NSrqt_0MM83uer zS9jWRK$9USsCt<*CY4T!N@n+dScIa)A^@m63T4+oM?BD00WHI1`7HkAXvF5pdPD&IcDa;ga~f=`2Ub#%N*&~@YZ@I}YrC`}#i~Q4G-&kHw5}o=R8v!^ zKxIosRV$|#zwaxMwnUbESdp{>K|VaCDOhLNYr}!u#c8E`Q%e3usdY6AJF3}`@QZTd z5Ix!KOB=m&rr9}Hzoc;XiN*|Ohn>Ypb&V0=fC|y7#^rL^b^)^Po^s6LiVQQ&ZJf1EL7zrRW3@WRtNd~z0suzdIR2wxjqX5 z>F!&d?aK6L^6P?26EmaLOA0iiY|qHlh?3Q0pJ>cffG8Yy9EQ56FE>1tU!5AlJ_m+F z6d@t8#f2X2c3U!%LMmoUcy3gwUWXDAWdS z5^+N^m5T=!3}nw9fz74&p}xO%jr*3v{}uPOjj<&gKc_R@{GBy zyeG*>YEVg!V4rZD^{{l8V?&oE=>d%B%DH$-NMv=4*htwPQ)zwDEs|=m)aa7h+eZ`V z;bDKu5Q~d#39x~`*`_aTY+I^_5Jg8bG1H}=S$09oa1Hl_B6!Y(4_Aq!jbky#;jv3I zscdV;*$!z}N3}mYy(A;zjMkfGH)>9e_utJ@&5@k?pfo4t=IrS33i_s4!@}LoQnL-{ z$YhF@(Xq+)t8yvtZRA)aw`&0lRb!lDGHi`_6wZr(C0P>i-o zvGp-pQ{BO~&fwBYz4R-j=hsQ`$N`SZG3l_P$oQqDJ6z3_bUK^rp*!RnW3~|;>&2Db zO_AI*qh!6%4T~@Z-d_?kYT3_-M&vHM)ux`mCyh;|%9x=TxSPXqw=L{sRTs#ho%byB?AO96c}cCRZjLj>`Wd8wY2={$c^ zm(4Mywcm-@qBh??`dsqkYZl93+lU+0TOi# zx9(17P&MFYhm1V zor#l5f=i=`P$`eV)^n#VA*pb(x2}5bzITU|A``Vp>qgn$fFn?yvXslk8{i(i)4jBb zOAbNBu;~%J@2W&N(UXWHTpdpEip$Y=e7#LJsxQ(bW)#_unHH|ns5)l4gj}qxW znHlR#m4ruGN@SyHT}N?|nHzv&=$S<}FTI*(H}1|O%#9vy;S$wd^a6@Z+_MimdwYti zCfbfcmln!?#CLQAHak{f0B7+2^&}+g9CQ~U?S8ZEZlHGEpR~>Mu$=Fmwdq9z0}^V>>)rxL@Ykt<CjO$ymNEzWT*lyfA z0-|<{9=(TT71kN00wZ)v7WZGP<>ZJcby{~}*#i2%JSHv{!^X_PwXR5E7p!3G5KPz+ zyU-IFO_2@jIqPTo)Clo0C8Kox_6qixAwg3K@ zj2yEtl^q&8#-Trz$HBd;XP3|;>!^z{J#y$#bxl}~ZT1>FZ&iw2t=k69Nd*@*7R>$} z9RVt9%Wu{jYRH5F3E_0qHP2tX>yG@+jF0alL%&);(U7q{uhgE?GW|GFkvA(Gh2c%r zmoBkyruzxpj&)qz=`9>-6j2j&Pz$=bdZdy2cFr9L3hiXUi>khzbvE+8v%zQK>$_}B zDQoH2#*{9tVs$voOMi5~nEi9wm%}>oo{So6q26hti)SCm8NT+lxq61LV^_s4$HJb% zwcZ6&5(+mVk-b(NGojAsNm!d;7ivP69O8sA(gvGKXD=Eb^KBc}Hw;r;9e?MXtK?&L zzmBL_3xjP7u?k-{8W-nON5Uz`_B^~qWbZBw(e9ehnpiwh29^i53+!!DiX(M}Ley1z4>%cO^b3p1;`+)ksiAIwhMP^y&} zG))Xs!=zcZ=7EW@xsD6_Fm#2XWX{8w7p?=2h@QiAdq*4#%4}1I5h!zMAG=iP&-IR^ zyA=Oif2EFAi(=|8Jt|7AzIC{&gnnahFl`0iq87q-@(bno#<8jp_aQDk*+3czOatb_&s|}8p++Xg_Ab2 zZrd1G?FApj>D;raP)=Pv!g~(Kb=XSOq(#})>2#3$t2Ck4&$;2{FJRu~F1O3;3$L-9 z*LQPkJQkPQhXK6<1CXd3^yQb+KfHMncckpSlp>SW{c4|C8u$%-LyXkRoi?-z74D@` z(3!;f=VAz4rXUG)5?Ga^+HE;l&Y=`#(7oow%eA5LszeR`*OTb2iqTF+5loUNFRt>m zOa_OFtj^~7*a8-fI#Ps=UFT^K*k?g4nzbhJW0xA?s6|v?)L9>~D40ZJmBek8tSkr5 zSU^!Rx4*`<=UluTVcGK}Xe};t&N*yN%7cG}O;#Phz z5#Q3KjEGW~)NjZ94onH*+^saE61cmnLRQrzt8kU8u%v%p&~=d&qjHq5mzLt`PDDhv zC1%-Xl2GN+uI$<%Eh(p-aF0Wwj5v&Ly1M+UlU!!!?Ah$Y{XC^d>8N?gvJh0;KzdA2 zqGl;U^@PU+RdR10EvTL`LHQCCmgk$>53-HYkvh|RG)$CUjOW+CQ6Y$Zd^fB@S6e9+ z28e~Mq9NWkM3^Z*va(h#mMbhVYGB!PV+ttz3%etP%|7VQk{*KWd#Lra4hKOErMdeD z?mMg%msdKqv${3Pnm<(s%hs#WQwN=U9O8T((cRtMdmO^U=YE(Te=b!6WpH^{YM|_k z88uLkXZx*z2o3Pbrx20ae?>^^J&hf0yb`@VrWW=UjKY+?U#2qb&N0JM`y1@-`5Us^ zH@4HE)z8C;6vJzaZ*!=E)@mca(XasQO+}Tg9QuTAun0Fg z^vT#WQ`>8J<7&@UxAJ;4LMqPZ=l#&@6z^s2mM5AM`RVrd`@L@V@pOFmg7;>rB2Xmd z>b3vqu6}msHlynGWEECN_(r9#h0YI8m94Dn#aSaO`?F^k#Ao;@U+zL8dZPzq)JD@g z>#jNjz=mTXf~G3ODK~y8sr<6Ssy>j6gX73I# zlyFo9l1GIktRtR;-R#O@gZ}o;rNMkQ*p4NU*?~3b9O@J)fn)Nk8Y|!!oY>7ANF_HbNmu!eo}-eeP5p}q$J&bBwxN6Z z*YTEWI=wpA4zDQQvLTmRnH}iJ45fq31KqQN^U?#D%hz2nkp8-?@h;AS>+%DKu(XpU zg#=LvVKvqTI|sA5Ji7^wu|i|E@g9lS?3KM>9iq~wjK+I;0>9QPax-{4_xC5oPJ%S? z1!Jurv^iB}wxik$*du#$sDetTYHY)8wWd)CMmbcyGM*V$lf-0YAr0V-+i7pN?x>@> zjL5jv>#P%^>`FN56qPi(OJ~l-Yy`Qt<8GG_cIG5cOjj$nDLZ1il6LM5?;H^oV=7DO zjqUyP(zJkjg$`*~OSMXSRzR4Zv`Yf&QuDdAhOTxtzARwYBlJCtEU8MRWj7D}Db>egdX zAGM5TShMJLS*|R@sX8Vt207X2iP9YBHidS<8ddJ095v+=};PmCVG1T=wJCH&-%acbC4meZHt+ zbj$YQ+|7qJP6d9vg{%x)+>)th?0@oPzM6?C8Lq-3K)9i?EIG>5^>7N z&E9H7D%lk<+`fd%IV+vPmDWDYQf;I|>$ggk3=S628zHcAVyRAp zwb!2ztQ$!6XIBPWvppQ6ceK<}Q-qUex@++M zxOzizt{+xu=GSvG8k|?x+Sp##K+Vk_Go}8Et?JasRSDS%QU_PyUv-Hp(U;9-v@kF| zedo@6m!H32HnHjm%O)3-#Fc}tJ$C(pxn}bk7TY#~j_<3A!S9ZOSl^dU!l`eY6>M45 zFe}*9JTJMZdEvZZ=c4BN1-t*u60NPfxPxGk(kA3KAw^2tk;al=d2%n-9L(BF2S)6b z**V1|CdZfdZHblPnD4w{aBk^ZL}KcE(qa;8tZNC@b=222G}5}3SxcfWosgaLE(!*r z3K|XfKEAGWrUmg?UUl}GRbCiE_p`L93Eb@``smX5Z!9#6x5MODD01STKcVdYjh|Hs z%P=jP#cd>3&xz!=#zQD6>%d1bN-YnTujEtus6XDgG`MIu*Od)gYi>u`tOeB`tMjld z#Tm8dVHL5j>YOKc3GM!>q#6)MNL4v#GSo^tH_H{E+Cftun^<9p;D#Af-Q{|wbx579 zt_HK{+&Q@F!M25kTj`CGSwSiSqEEk45fC|MRmKiuv_h5wJUHjdS~qJu{7S48wYqKv zuB_S2ddx|19(x6cUGz8f!BH-+&V5Ss%D4}rzwk&dGbRqd?!?K5N+h!P*cHdY#?;-yF&g}@{+g=? zQ{B8(A;;XJJKKLOLmWQVD=F1=w^%lD6pKr;XAmwr%N=XFq^_vmwN&or0Ss@{b>pn? zEcpk`GpmRoIHM`EvM*0Zv{EEL*pgb89nP~y34zT<-&kopiJ@fV%()(4J2b4=9o#Ua7;`uD0WC=u>rz^X z3mX!VlWRZIGHyT9a!g#TPGNZfVWC}WsQ?Z(N(trO}UyTBEpD7plmV1vxOyJwjMB(c385)lyUAME?XldRm4xQ7~S# zi>PgiJpHxM#ToN#FnU|;Tc3u`a%*Y;9R;T!sK=^Rq`mC(@uY^hZ_%K;0YYI)YKZJ9 zXcnb0V6wUn`oMVC4bGKUqrwT*BF>VaUGZ>XDy8U2>C;NuUmmuvH_#;N!$ zDWwwCp{QtcRlr6UvX=suYytMnk;tl`WtbPuVg+nmB7No9lj=~lFLCVt`k~6USH``y zcEqA=LW&rSPV%L2%2lxQL|T)+>q8=?n!%`yIt6CDq zU>Uh8@KYRyQtVf%w=XppdKhyrN7iUc$7SD(GpLFctrj9HY+H(oEI6aHsd)+ap$*BE zJ+h!Gnfrc=~B45nm0nw{Yy0A^{M1bI(iSBlx2#e%c&A5B&7!TDI_x#i<`&caORGW3Z{i&fo9--!C z(WbqY123|NDK;jjcwFg?MU*}9(?U6V)3#kj

?-Cg~82AGfYb><}XNAL15DcBV7k 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 z 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

WVw2O^0f^D~Iu~V(vzdqI&bvKyO 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 YRD0V;(@k=#soP1@4Z530*)T@_7hdlxy8r+H literal 0 HcmV?d00001 diff --git a/Code/ThirdParty/glfw/lib-vc2022-32/glfw3_mt.lib b/Code/ThirdParty/glfw/lib-vc2022-32/glfw3_mt.lib new file mode 100644 index 0000000000000000000000000000000000000000..bf57748839d3f23a2a557b4a79a7f923f54ccc1c GIT binary patch literal 528132 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ⅈ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�Gsn%0u4ip@=GFm%-!jm8EKgJw4d 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 F{{zmsZg&6x literal 0 HcmV?d00001 diff --git a/Code/ThirdParty/glfw/lib-vc2022-32/glfw3_mtd.lib b/Code/ThirdParty/glfw/lib-vc2022-32/glfw3_mtd.lib new file mode 100644 index 0000000000000000000000000000000000000000..353f2520493a2081ec85542d15a8d4e643f06841 GIT binary patch literal 1099612 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

D#ebER^p<@tWG+_QGri^jRv>Yf; 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ⅅ(LG*%d+4#t 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�*`tkM~01EeE@vlN|KSPWkg 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

R4ibiXSI&AeOt)D*_cXm2R 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 literal 0 HcmV?d00001 diff --git a/Code/ThirdParty/glfw/lib-vc2022-64/glfw3_mtd.lib b/Code/ThirdParty/glfw/lib-vc2022-64/glfw3_mtd.lib new file mode 100644 index 0000000000000000000000000000000000000000..ff71ec1df20dc5dd073ed077670838c5f86fd29c GIT binary patch literal 1154996 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
(&4J(7B?V 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

pO zqs2*cNGx8V6k}8}ix-eSHD2;dB#IhMU>bn7N={^-D5CZKD|S@W5pgd>In(e9OMSv7 zs52(l%6^rUOv>k>J{#ga3i1jVGGMItaJ)&yiBUCB3*^Q@SLw4iB`skb#*0%V8?CE9 zj+}ymLK7^yqoylAgW{7W;$>0ps;i>R(7(;=qdXg?=0I!aX6&Yrfzfye60;FgnI8zL z%&<*r(YrBpF^f7xXF;QuXHi~XIu&d;nI>a@9Z``ZURfRn_otRWseuNFF&Sl;N}1EL z0MetnQMM3+%^X>m@P@RfLuI8b>El~SSnsvu?2p7FX+;PLO!Y|a&(`;m-suh*KQ19v zBfW5iIHKq0mP+L&o1x_pSPVs(ge4oONRClxMpoW*tVkq<7uPr)%AW=THnMV63Mfo#!khYX3?t_OnJ0;8lsmvTSxUVf2P9GyS67A-lw3j3R3se6{Gk0ruz%EW#t7sYGmSLWAlc#u$G(yWT@V`_mYjA}Yl^`kx zx?|+HkOnVT;8j<=yyslE00NMbrLF!!Qc9$35mKF*c>5k%p+_5iP~0 z*MZi^_EdAB%BHHuK}pde(-+`HhH7ib?rZX7_+b!}1gHCTsXnOPi4J#Qz(n*?-0y7? zWuYrW@OrAah=h8Oc;v{PIdzV7M+7fw(QO`bS&LLPj`U7$1P+UGTrCpQU*qL9UKbdm zU5~-ngJX8Ur8nsIAt$38#lCv<%bxWjP%BY3Nk$t=tsi4T2%+7E*lDP+D)==z-0+QA zk@cJ9fp3Uw-!7lW`|qsx;ih$quC<+b`30|_UhDATl~K%BIC}QLK3Dt;Ys`+!f5O-Q z)%kN~)TmvuZN;9cBM%+u;)aWm=$k!8hjibW1KZBpl0EF3Nzuh|^Vcug`(RzwjmO?< zvLvN_R$%a({C!jKwYxZOLaXV86B@5>Iq&k2di7sQoImyGr6Zl+dThu04|~rYihGbC zpwVG{;a^&llp(#p|9iV{$oEqMKTnJ}n3&Oi{fAd36b2@5M;)Xv-*K<-2mAZyjqVuT zA;a;_k7_nfyZzPdnFaA@7qlr_a&<#7?uKK&2GbsHuk&Hc^M7{BKHKS=j$Vg8Hr@EG z`GpPR+s}C};qk@zs1&|CfqZ@TKKW6@OYXaC77n=m+@S9B-*mq7&2#zV+sutmcCPoJ zBu%5cX2Ex0?AYSawp(t_YWG#2$i$;=iF?0^SQzEG^3~XTub$g_0M`p`Vm{}+E82`N zD*54X!_oEL-qvt?eCsXE1Gc~7>h1nVLG$}><1TyLd5ZLoum5#o%1qgE+8!A;0!(bJ5tV>%-G;pT7FmFL&Bc@@@a-?`?N} zvhK^w{2jQf^kwFAeKoSP;=<3dUWdD&j1JerXQl1Ty7s}e-)o1y+VRZ$A#Z9; zbKC76_g8$zoa#Sr+pcN*n6L2On?d~>d55!=7&Q((lWitNk(f_vqK&UwQRX z?YVr<7Se06quQ1=H735+y4~U59(3GI%+Bi9GtYhUwT)$iw=89MQk2dNG%R)${O`x)-F zV!o#meVevwd8yGF{~58v!)9dVr44QW_n+5#&nxKM$h+x^8~Dx<^R+P#-MhBR^PdEN zJEv>!M&>N9^cg+(zuh-?OP~A4hBnxgfcwRex6$Ep{pgv&gSylXc66^A^Z2RwEi+gD z{-1nH8%aL9q-r8KUUNVcTY0k;tn;_if1*9E$aT@ay8$hN3ZlAylwdrhd)O; z@BD1G+mh+{9u)H}{k5m@-qn|XI^(=?@r}CqT_@Ch`(cZLYv144dt>{;(GK6^yf*Hu zH98pIoc{3RZ8fG^>WuyHhYr#6e@U&g@UAw8v)|WqMJa_1p7thW5 zeB#NGMMpL+Z!_nE>za0h`EDE~j{SG`r`%#$-xZjRqI=+?KtU76Z;+nDX` zUlJcGFgoORU)iA~d#Hchv&T;Ty*Tvznz=(tz9=~K)X|r(UGF&igXXvk7dB{g2tRTn z>hEsd8?C!qZRwHC&&N4r-Pqi)=4;F6PF>h;Y2Phx;BHIiYg%-)*{!V?j%`Q{51O?p z_=%{KmuEG3b=!y=G5tndZ4h-CZzxxG1pRjHJyko~jf1uy4WT`}GnB6c%krer0_~%g=X@`V@YH`SPYc7IeFc z=NI2TSL0;j&#mMB*fqJsuIhcB|1hp)twCMyLC%$I7Zciykljw`)tz5d;ocb(pTyKeCE*YY23w>Wv; z$^QP}G02Ada*Yo6dw=jpmmw3hV}{8;KT-AEX9s=?|Bu1-@O#_4PFZsL{oAkNZb#-T zYC7xM&=!X?U+V0-=JTK~KQGEF2p{xn|Ln&(CdH znY41;@XZc)zMY&B+~Ms_uXOuxC^~;<+^cJJ`1o$`UZ>7<^=?*j|8C)jX)V^ehFl4` zGx&ku-5C*=bJsnC-E!u8*<7vdyWdscmm7NK{hR`QzU}S%m*J&z_v_$7#^0H*mh-@Vd!B!K z{rrvrQEzr~|FQnjXST1Y;c(%>hF)z07I*jncQ>LeMu#TbPt0ik(!svdyKnEjHDure zmuK31-RI;hH`?UI6Z-WxiE=zP*+gaqN$@lpBxlIQUl5w6&kEb67L;ugj~P zCM|hBZ2`XP#(Zt=#|&BfYu&=gsi}+Jo>%8}%i-RQGoJY& zuKVo`B@ymjX5*emj0oWm4%EN;#<=1I6NbACi)hnj{yXy`;_t4Sm$jl(`Wts0j$vFf zo%tM{x^G<;+-g|RZ%dk`Ztc6z^vM$&uf4b6X!8rhC(QaguLbVDWxfr^oj=K}{?_ZR zUZ!u}|Hb_!{=;@Mqt^8lMcE@Wk&f4|4_&Xxgv!frpkk4}UFOx4uD!rrl+}%RYw^ zqP-Ji?)VJY7CPcwm0y-0xi%}{it**-zZ$Rkbn7AvVC$27gSWaZ-QMo_sEc>+C;fJ| z@q~W&XRPWq%qmOQ`o*NHny&W>o( zwZ_I3x2H_p^20Hd!yRLCqeH{PBOMfynD2`^kIkNQ zci!AP9sT~cEF2z?=+~jes+6aPt?&JDtE|5+qrEl5WWnfgvv5&nlV|_#)Nsxvht+>h zJo20W;km!%cI&ZpOY9eOmaj&7iOg5B{Mt(wcfOZ?<<7FFHr9D{uluwrmuK}!Ti4ID zbl8g5nuNd)G2fYb1I}%~)6?^*r|RFzdopqEYjfWobfsJ8my%}Gx|3V;k4f;)m>C%z zX3nTuxc9U36WcUf`q{bkWjEqpxwY7N+RLWKQ$F9;pxSTnLlctd>vQdzeR*=p*u>^HPhJ>=yV;p8(wJGyW@AczFDsH(SMB3|y4h_xT6&9(#S%aL*dEH=Xz+_fpbtAEUoyz7tbjFWp(X z?Ao1c-^~gN9RBQYE;o+_?rGd}Xncdl4Y$7=rfK_`FQZ}gh~)ckPrI=A_s^EScc9tc za?3cgyDjQ7+UQ@(3!*ZK2!QB3G_Ue}f_v8<>+HT-UP^!eW>{MqMI z-vwvu!KaO3zWDd+w$l3eTl(goT-i~t*hMeE`v_t*wJ+?;tw!7J@nzn}dwv2TA zD}89wnW^jAY;WrI%83ifEpANQzx8yBdyDtI?zcGUWe-N!Hf{xa@?Wxj#C#&o}P!}2huSLZ1Ss|MEDS#`_aS{sLG zjUE=%@aueFCho{*zGU<0H~MU?y?E*Iyk#ps=uki5zT5nsY2VhLcln1y&$pipz5Ky^ zyD#w~rP;)UrZBwvq*j=OulcihuA zzhlX+cjkBdsOlSW)t6Oi{=tCS)mtMNu~mEk>3e)xm;^BHrC&h+}JTXJ!=8|iM#s?96F zIJ+t38+j@-Py3*&Tc;1hvs}_6Zhmww_~?vQXTwc?Yqt;ep}XC~neX)4%lq!%dvBv> z)+DFqZ3Yi`HSx<@ed3eGrnRmX_3QrF<``!)-+=1-2CsJPS*!4gNk>+lelYLYubrkJ z&04r6`kRe;PP=?C*8LCjT}TO;)^^BJ8!oCh=eV#eO`e6 z$onahZ%NZe)d%+as>fqPwpX9_Rj2gSQD2>yV96Od@a2F;T|PcC7~e=>zE3YMnshOC z*6QDW_-p)-*XF03AL#Yw#_!*%^J2fX@4TGeECGIl`Ig7-owIXWr%P9+^t}|9+Uobk z5p$cELhetEpYiE0i=(TL$Gt(ATNoX39yU%n;=bc_->hH%YW&Nlu*hSD!HFZU<<*$7 zw&%E^p3reJ^M!u#^!nB}s_q+6W!YPQ?euy7>x`ojznfC37WJ91XYvd>sB)P37JTvD zd%OQ0*ZYOQTkpgtcz(a*hrBh_Q}!$hIGnrsxbp${@dif9x6g0i-COx&_q^CaAEf@~ zmt41MY|r&0PM)4*aoqWRzkma%w}H&J*DZ2d)7ZFrwc@_md38f!_KB4v_fB8*VD!pC zQ@?Jurtdm@qlNj}E%|Ptz7q}G&WG-v zMBi_8=;ZfV?Y7hJHS;=R>18_qRKM-<$$uw)8~fb@hoU~`I$iw(cY`zE3yad4Tzg_` z(mP9zj45%RUOnUM2WJbu>2&F1OURM`^jJ0z-$-M=syCi^%lGrEk=d7H5@-A5G`c-% z-GgW9uW&k0b=r`O8WZ2ZxQ_W294|cdPVb@5|I)JG)JgZ+)k(;^GXHLu>|;gWWE>p# z#JE^oq3|@xH!*G0h{0bxIeE<18#O-Z(aiL9w{`CxIgtHS-4ku6Jd<`|B)-?pe9fNn zI6h_I2B855FGht92Tx~e+bFZ2CW zefOIGJiqyVy=g%wk1c<)*3RAqZ$1~a;F~F1-K z=dSq?Nm;wIUVr@3#Pdr>L?>+Ck~=pZ=XRLy=<2Yshdm-2YR6t!8s9f!l&@vI!+YWF zzTVTWTlF6Y{5}xlE9QG@!`r{Mjk~$@{ppS&wGO$u9p11tq1Up26&nooYCqZdD$3CS zb85_gYYzVOk5f|)ZRoi2KYcP&zo_?N&+~sCYSVPp!lu2puf5n2>t@V%smGeB4`$!} z`_p6RUU~Y+wdc3rdH(Om21ae${M`K)F3yedLchg)1FEkrJb1flqxH2L^v~$mc;&*@ zGe4W=^JMFk%#R)W{4!)M#*?in-Mcpsm*p{38#L~03t9&q9^UGV+JD}SS zOS-?i1NVb7-@GG_{T}c3dd=_dr7pUc^ZMLz18?W=@tFL3r?!)qANj;H1K%=YzPP*% zXCvPlK4|vbnoc!NJ$Ylm?pZB83Ww%Zf9kmxy@NWxi`UKFC||9>vMc>9Q^yO%pFTCY zXmZqd@5M)Sm|N?Q`x}p6nYY~G0?uYI-?2VhroZIyYQ4{U<*sk|OP5cVT|av|A>zBk zuiT3I+NE&48Q+0tzF`+0|M1kX0mnZ-J^tc0bJrb1x;$TK~??%`7>vaCT1bhpL z`L29bJuv_B&ij|^x^`Ll(dc(uuUd3^+y~nyo~(U5x=)9?f8rJ+_-LcUl}kl+e;Hf# zTI0Vm*N^Soa;>>ebZ_@-_g8foT%%3hty$>zBbaYTiw}MGuJ?W`G3v!zxhsqPrd@1& zy+k4(~H2U9I8@u;m?c%9d--2G4@5KY5hJCXR z{yshB=E1X@Za4gE&pqE=1Aj^WD#0(g=GWdD)-jncwO{zErQ2>;7IYr+tyi_cXR3s~ z+O^PYdBoH0hKFstI}UU6znJffu;w|heEWL9OOqBYtLJ=v&5%}qwE8~uXx@}h+YL^5 z_sBzx!;og%cKEM<@9{VyG6|<*jM#SxPc*uvc=Tv9UTnxD8izz#632ITA0HJP8l4mt z4zi0s|9A$(G$ zq=WNx2^CK$$r2Tf4eP{kOU2U)jftze3Y z^tw^l_=Nb-#E|F;rj-GajZ&wOPR;N_B|>hGO?~S_Kn? z&hR2jD9^jsIC=EOtu_YI*tJ+rc^LBay60R(d6qZn3B~2hJ{v= zcYx-RRy+h7s5*W$@<~DPXY^)z;&}ROi})`wA(UJb_Vo2b$Q3LPG?N^c+@l*bQz^Y* zR7^}INQ9wHC5<nS3;}Bp%@&)t27IWPmGMmYik}A*B0yt?;2Jx9ckB=X>pa| z#AUOspiIDaY%*DgKOOe8!dG`4@mgFfFOi9;DY-}a;_LfL|dNC{>Hc=_Phm@^S(t^o{ zPD+XjtDw4&3}#``aUo%NlcU082c*VlqcIJe5*}9Z^rXV5oMGV+6)dVuOm<7%DwrC% zoWzuv@}`KD=WZ}ZhCVAOseQRSmy=qh3LKJ93F{vi_(z4|t@jGgPf<;Y(_`@>L4|Ew zs*yVW$}&YU(XDuLC}h~gN-~qg`0!A%Xi*6xN}B2>V%$)9gUTu439;ePEMz%`{J*Rt z%KEe^ZxEF`w4!=MW#ABb9L>RnBDuIq81!TP zfG*e)!?em+GOvO`z--)lZ@hO^V;TkVxefr zcu(FE7mpi0Cp}_W?0*?8+YO_VD`lvMrj4RbrCZym68^iMjh7cEFNNc4faJ-+IP{GuobF643R>szYwP9COCLXeq+xj;vn3xn59oB*NiaO8= zEv?=LrS$05!G|3Cc-lFlFj|tt6-*VB%BuGeT0rKd6D=e`Q=`-f@XoPYL;lHTTLB zuKd$4m6tvmskm7pbo&48tfpacJEEd~7@iaR{*}_v>$BEM>zt*pO6H+oB`uoDZAnb{ zP*au=nzEPE82+ar1Z{REOhf4_;fxS^v1mD161)2U-S7dOK28?kW-?1eTtX%6Hoz-asRcAf5$s)I4zdIty9+C1udI zC~UjJoa<;>I`h?%ltFu6VOtfpS78Sfc2r>}751aTepcA;3cI1OhYG8Lx1LD?gH~Ho zHMP15YpSs33hSV-&I)@*VO|Ows<06Xo1m}|g{3GgRblaXe{e4A#Ud$#_N&4!DU9xV z6nu9S=74wI1Xf*A2JJD0J)y9t71ml|T@}_-Vf__0NMYj@7Ob$oc()~kW%iU5+JeF^ zE6fq^`DQX7eQ$**gEm27AqtC87~Rb;_+}|AU150&Tcog+3Zu7=McjOa?NL|?-u<1& zvZPANp#80|s(3?}LeUl^Ra0xCu!W%JbKJ#}GHAYdw^m?&k}_yH3VT^$%N4dtVH*{; zSz#Y5Y@fouQW)KBMY$QYvkE(}uwsS%p|JZ3D^XZYyl*RHc9E1pds1P|6xK~)9tx|E zcV=H?9W<1bL0hA+^$OdgFnY_DVi>f(c<(if<9bTUpnb2f9~D-lu-_GSPhk%gRs-*; ziu7tr%AlDP=BBVUpt3pN^^!7Z1MnWCzy?dopam-|Okrn0E#SE4BxTSN@UEc1rb)`6 zEmqi4g{@K8dWCIQSiZszDy%?Z=M+|`uuQxMn!~bWNeVLKJwt(oNy?zbE6k#>EQRGN z>@KKWPVa%F4B9HAj=du(gSJ^=+Z0xyupsy~HR=O=BxTS}DC}#6xwX)=mzb}; zq|kRitz$+>8MO8ab5~ejg?TE>S7Ck%3sYF6!b~RI!NmExNy?xdR9Jz+&MB-=VSQWT zeO-?0DJg^Yn!?^t*cOFtSD14vOGL$3OefOprj1i<8C_ESW*VfU18l6mIZ1t$IX?LLHkKzzbNdk z!X7BhuMO^J;JE&hGH4$vY=^>*DC~s7Ol>vob&l&MDT6jsVRICgqp+71wp?MW6t-Pq z`3h^&PScif9!5zSG?(@|_L!s$+A|9CQrL8b%~IGVg>6xop@W`Y9Z4Cq#tM5%VQm%G zQDMCm_N>C5Q`j(tJ+H7A6gF95u?m}^u-OV*ps<$|woGAfD(pRleW0-23j0K1hZS~A zVLvGBCxzWs*jZEB)xjwc?%Ah&9>sSp*88oB9ObSZ@^#;dHm6Sm{t+4MDc2!~5 z73R}f)0S~uv!o2#N`<|puzZE>QJ8BNapzu5t-hoT+7yMwDJ)ZASqeJ`Y6a(8C@F*H z*;U7UB!zhjsFlpOLQ=5FZaU^ADT6jtVIve4sjz5;Id|8zH#xmplENHEVG9+uLSd^F zwq0TQ3N!W4v{js*o1_fdYK5&)*j-SoneTz544S2A@k7NA zFz4R7EVU$M(AI-`hh^R*Db#Nt9rKcuK}%NHOog3L*w+ek?yJYGB`J(;71l&yZVGF! zFb{?GRhU^}z6uLe*m#A-E6k#>{AY0Y372h;qzu|Ug*{YQ{bzN)hLVD9fLhCOQzT{3 zPATkLgow|E zuS?3H9rn_(W0EpxKPc=ch22)zU4=z^YuW}*FJ4jx?fL#X_JX7g+GK^rDr|w`#|L-#aUNz#Va~3w?FtJVfV(=GZ@i>1Zc`47>wLtKtPNf|VJHeO<5BxTShDl9@_sR~O|*aJ`noSrsRPzG(Uq-tsh z6m~{o=M=VZ81Am*xQiu)wHt+9P}p^a-By@3T#xH0DTC&!u=)yfQ&@Y2tp|0O^W7vV zthM;*SY1gOw5|&4sj&VE8>FyN3JXwJsKO>GEKy;}3d>d4LWR{Ip=n>Sd<`XK(55SF zmckY*Y^lN?fI1@TW2B%^my)WfMJOy)VQC7ZyHt*H+{==}+VChH>nkaPwjb0n<~t}U ztVR0kSVKu+&I#%`^DUK>L3?7fjy)+UgVtJM?G)BiVSN-fNMS=17ND?k3Y(;`DGEzd zSf;{U$KXy5mao2~AhW`jDr}9y)+=ng!txb%P+FgJy@SD1&w`YOy%Vg3p;K9Bp1xEv-)8MH|Xo1(B}h0Rphiwet8*b;>;SJ*m* zZB*D!g?+5BLkjy!VTB62ps>~BH0?CYyhc)3(;u&6wIl^yDXfXY+!fYMVM{@M&FQU> zltH_wup)*1sjzzrbDE&XtsyDQNfc&MSU#w4IFCJ&Lf`m;j@6KqL2IC}MhbIRST}_g zfcloxJ0dBA789gnQzd24mMQE_h3!+=X9_#6u+s`VudrVg_J_i5DXc_c4#7eK%$+4w zQ+rHd%@p>u!a6CetHSyztiQsBD{Pd)f)p02usDS!Dr}CzG8DE{VJj52Is|vEX*7mg zBPpzBgKAiXu*;G%XtzK$V(gBjFjkp}d+8XfCMknf7gPhr8b}JZ0qSwaOp-Ea?Lc`m z)=5$r^MmqY%u7-RZ8#`T#zsjB>qwybF%~WyplC<3 zrnX#C*b4;Jhq3o1Wzaqb)tj+>lENMps9ubnl$1d`56XkFUnOPGZh-2^*q@RzXbz#8 z)`PL?l7iiX>dsgrNul2Y)s3-sk}_z$Ky_v88A%zmA)vZ2He6EJUjWsau@Ffav^Y@i zj3r9SprwQA#MnGZ8MIeHb!2Rbq_D;fssm%|C1ub)0@a?eU6L|rUw~@I*kMT-wC_N* zW$dh^4BBN-Z5X>MDa?gHxiR)oQU=WsrfIDit0O6_)q`rqSTjjstrS#C#@riEP){+o zPErPKJE*3NnJI#Hz_PmVV^1Nkir}%>v5eWWzhO4te?U@P}qkGD^}Pa z3cIhc5{1>AqUYfvDcG*UnklTE!a6CekHY#XY>2{!D{P#?f)qAIVQ~tZsjxW;%Td_N z3R|wQRSMgvu+0klSYi7V_LahpE9|Vo&MT}~VSgy>zQRfrRx?`ZPg2mI!kQ_pox(aP ztdGL_DQt+shAV8G!h#ewMPc~f3ipUuZ&%nHh2<#hWreL#*m{NePt&wB+^+^o3jI;C zj%7>AplwswPKA{y%ppa@z!p^YFpgDN6NR}cti8fK6xLT^W`+4GEKp(N z6&9~Bi^9@oYTEZ)Z<&%ZXx9~XTVZFiap!VX8b_RyltFVuyacU5gT_T;_eM7F?DgXE zoD}csSA5{c|M^vde?LUte<;3w#`hBPA?}W0Q3-;G51XiY2AI>Yu0|&2yi}9>t|p-J zkKpgtMz4H7Jaj!}&hs^SUIwWh@-cZ5hF_nj@oUa=BG{bmV={OBvZR6j5V%{LgP1l* zq+-o9rGZTkLrQL*0Pt%BtPSY;rB^-`*_Y8IE9E^VPZ3J<*LQdbkIk#Kv0gBdPWo{WQ@_Tn7@m%phY z{`dWN32(ZzM|LQX8&kocI4eJh@0OjF1tD2rJhsoy%B9Eh3z6e*YEN;b(*8+EJIxu> zQ%xQYo(@`4V^WzrR}z$Eus#)cAraioy`17rIPq4?CZwU2wvS`BsWtojY}2w-Ep7?} z^w2D}iP~gsn+(^zuot#1rF9=zfzhX|Q5a$RK9JlD-FT9q9?}9)OmnuEvydbs#aT;o zv|6l<;4()$`90B6+{rqjx4Slbdc0$Ef)GZ*!rT5DNbCKaewX0&R|;v(oA zv-6{xsnj0Dw{5COqy^$MXD(+fpGib%V1RiZp19K?ZWnS$Qk87ICK1Z*N zyCq4DsmcMev)kopP$V0Y(9-Hq{4vf9Kn=hWT;RqGx# z>8XFprnrgji~LODqhk{az^UUzjTrxk@pVCtt*#~uIY0wuFFRkyZq&&+c z^#Ov56FD(NXLr@nHu_7Cj!w=ep}40Wm)%+$JuU@~enh?$)=PMdj1;qGf!XN={AWsx zBJ6!~S$~8SZ95IJZF5FGjR!T0D`&uYmn#X}$FxZ)kW;FsCqa+8eFzcZ+mV%GphwAIQ)GMpiH6~8GE3`2vz6vvwYWK1 zj*;?0o!bs?$k+vcx#oC;P0`Lr`zZ%Tgd1ek&_W_%d22xKs)hfAnB;PH)l`qj$KM*T@)Xp`RwYf9>M4HsAwKuyJ+w_pzD4No53hrg>+bUA+mR;_FU|- z`zHJ@=_1%(7YH@({^^lnZobIED8|dX(~xi3B#6Te;yfZ)M99dusd^H@zUndT&bO(0 zVz5>{YueI6<_vMn*&JN~ZUBfKomIImv>ey+i1D#rx%h35!aizjNhXE?a!ryTkcyw} zOi-|df&sM$^iN|>TmQ~OH5+?Nzq*j~M$fgYJ}5a^GUw!)R#QNZ6aLrCT@RYGGfinA zb23fq@q@ZFgWMuWUn}ZoMg1do^%91G@o6BjuLira2|8SfWa9O_*jfQt>;RN6o_scb zEwEEmKFv|k3QHPXMgqm?9E7NP^b|V)(Nao9gA6o5bEiRyO(hr!_W{2zk6X#&O9@O2 zr4^0L(+KW*L^QVagQQPuzf+Dq1dI8SEBKVQQAk@=(=17!Y9PSYp`h+lWZkDgSa&jq zJ*G4yrdjHc$V4KbTUnz3>Zb(FI2de|(rO_UwhyH>?rZw0#~e@euF|M_Ws#C-(qmI~ zb`M2Pa4)DFGx+G&mwr*W_4t8_{Qtwq&|=A9`L`>`Ie=es%YN-n<{T#DdmNo13gSkl zjj57!u@yHs>wL_nk!M_u7t0}bHYY9DriH^}!k#-;7I zVnwf7JnhlN^v%NzVYf31M5ddD-^=(%gZuv%OJ9zE;i0T&siADSlPl<}{PA%5)%_@m zuo*a6tDnj>ouB|4n-P70Z(gP;lcV^X!bly&Ce$GUM4kJZ!i1&gshN{)AAy*eG6U)I zxR20Vg-xpHjMlIqHkfoK+*#yuu&v|AM2-84K6cU}o%Q9ULs+TEK+x&$F`Xg8;)+`K zxO0ZmA|Sg81r@5Gz9NVK5yYynJdRjlXc?Z=GAJ&=g5f&HZG`fZ8uivgJQM<+QXM=3 zwje;Yi1dT|@mRJ|lw%+6yJ>7r;|UmvZP!9|L~{r~vK@G9xF(hxwxecJ*75)DYBCjf z`&2UQmJDt9Yy5BgB%poL7)3PNO@sEbLB+OH5L*ds@^>ybW~qi@<);BaX$eX(qy1R< zcav-T*C$%GVVySUPu8B6l?c1*_BbhQJ z*W^LZz078pd2@(@VH2WR*x7R+jE|GC?Z*ia)*?gsp@{bWVbq@Zfq7B;HVcx5jD8fD z%YhDP5n!N>Jy4*;CsDhBBs&StUN>IpB<`~Qg=m~P8ux?J7_uWi=_DxFww>#PN_G;e zL`VnA7|@zc+Mo$56&cBq|9@n!UmsCWN;k^B^ib2TNR&{~PMT*xAsoWPsoHijm~$43 z%CZ&AE`m$uVC0DLMv5B}H0Sx4Qq4JcyYAmbPW{$@`a z%tdYCG!ejtoM|ecjHE4RnvRGk(j#&w7B*bbmw~OcMQ57mxY?t%fU;iz1FGjTeq2jc zk0lIAQn<_R>&+yqon1f%3YLl|k`zzBkIoVdl$TIEQMwi~QtH#h0jGXYERhq-vFu6k%oKqX<-Q zTw%Ff3v4GMdDzDZgiBK)C6qQ5ibuLEz%R8v?t<}57OKjOFg%pnc*`|$HR=P{^n*r3 zDcfCJ`xAG4u?oWlbFXw--QwL2il-GjqfHwrBiOC6{QkL|{-spkf$qbapYi`bzpuW4 zWFv>{57V!vp)g`%+z^yahqaIbpkw;Y$WNjEpSO%6c_bOJtD5L`u>ML5og>Y8z9tiN z*Aj1X?@z6c>9R@idw@RzLm%51&B%-RP?WHe1`VxId^8Is_RssMX^^B$4XXbA(KD{y zSEZAo1njH^0yslzOMhQT-Ru$wZ|D7#rBqLo)?WHh4}qYJCU@Q0c$q1YpKB``4uup zGc7fG(scPTlnK9XR5so8#k85ms-DCgY^O@JiE`KHZrSe)yX$Il>4fa2&D0-nxs1j0 zEtmHDv!EzhW2Fbo5YB{*O)k4HKSnflBBn?1dhynh4^@;=j4UCvO`lra{}B;sxPWxs z;Or?AH_F8A5xlmJKvoc+hajIJCUbqEKh?I_KFnfikG#_%$VT2ptw+EL<^C3oYyv9F zvtAOMuhVrJn85F*f!VtHgjG|UX)rZe4$o1n#ixt0lcv(NA&WDmw?he2Xn8XQgOFsF zTArK0GM>&-Dqok(VI+GduTiXqL?Bn-$6ug?yd}^z_@S;C4C_IT6X+)V1PGMe`FMeD z$Im!{W`U%?VpkN29!mD3>_lK_Oh1k;d0*kj94b(AUgp82c*g!Gz$ss9IgZYVaPS{k zstA?>$-=+Z?M_6N9Tue_)UdRrmPQ`V;#3qttp#~=ELjCEpJY}c(K7B<0f!GbF5`(; zUU*|(rnuNH60;ON!HthMX3EsDOXfVJLX-X5_%-J(<}TE(-k~EJ+`Q55)021gfL`fz zmLjPM!YE#;FgjRaakmY_VUYc{>EOA*#qETi9LrhCqfyv@)5D7ME<%SQoeaDADo&30 zh+{48H(gxO;%~Z)b%M;=O*5PUwUB+NR-c>#?tS#Vemx~MP1fC`JYS<)l@UeQq|%v`OYA)X|9n|cGWk?vg=pT1F%M5A5f-qLi%NuetIjM`)2t_qYQyVdnShqzY2Pcux?$ zCqj!2)tV_>7iT9k0JOQYIxETe`NU&5Q*7asyf56~foC$;4O{kPP zY7di|4$7xNAW(3j_#c#CFZ|Amq%#;s7`LlA6sm>ObftbBbwZn7j#a%}Hv2d`LhHdU zo3XFi?m$ifs~?HDgT;hI+-EhnCIZetd8h;|ZeXDqpQ$*LO6LY8c2nplKisl1vtzg5K+aB62ljOs=7DaM(5g57dSm zp;SFaB7F05xdd=)G$xLxwrz8^1*?H*4JrvV1GAP??x~Pgm?x`L#s0B80;!kH&ruaq zKfijb`d9hWHUFGt8noSGLOTmD+&iKJomUyBWF`gERC+;lK8gN7{ z)6@_cH4O~7GkFZCC#a9Pc<9TUuB3OW5kDD(TJzMBI$|h9nQE5D%G6(R-7*m6)-O0Ka|dm(+nDn4c$UO^`me zOB!u~ZxOiB2Z?5ZMjL@aq=DjYMy^UUePl2gH5AwbT2m|ktAS-#0jl~gFJvq5`2%X8XD<5YSO|h zJ94w0QfAX5M@8jO0E%ouC1HqxDK_;rZbbPICAU4nk(zT-`g5`(q*cZ8l%%R#>PxCB z??_UpbJBAp&1#VFlMdKYp)Bc<+7!d}at1rMJKPRAp@1mP3n&gIa|I5(>q0EqUbTvL z;8&*Zs8V-I8mv->%sHO5+NntYn!c4a+smeGz8i~yqO!e)+UFdROg9kJt9 zXRvMLv|ssP*QK0G*+URYem^09E$CIXA+*DMI3w>XzL}&`Oj`=}Xv`Ih!YrzIjfO z7|p`(2h$JQxI8-cFBIg<$iGXn+MOxPu$o$_{L16D9xCkmC3_`Iv`}h_05}qqUz+gG^;yNSX3`?joC3O+psMW<(5srM4N$2nOwhp_PQu zrqLXF(3Qaz1s#R)t_20aBVg27PO)wKC3dHFxyXJAe#E{T;zML&-VWs;c^=L1kpNz} zqC{ATGCT-?B|l0U3h^sfPFkr8d$cML`pA94Zpaeaaieas^gf|oX<4?i9xmmP)vD^V zkV{1`?zn@psn6?pt8&YG{?Dv@&b!PDRBc#(%N6?vk4UUif?;Eh$x;dH2f4 zIJTtgDb=r_+$rWfeSS`xl?@SxH!HJ1(6omfZ3+!lNf(&y@pxoPe=rpn~=S$PCrlB3#RhJt8#d~M}|9cIIU^Q_;@z$qSZ|KjN+T9ap?<(GGAwoSKrE)QCJ1b ziZaxdLrKjt6}wO)g_8J~QI}o%Vg)FBqcp^@l=8B%x78G2<3BP@X+WScvm1rvp_$n3 zSySDvrU1DI3?E^;2aE{~d0O7p!%P%m{$JNg!<5~A}}0?*ySXA4HVrLYlG-6GtoccEfw75AvLWp z8ScV$Ard09hrh?(cSb&CtR>aSaiUBx1Lj}Bkg*?cv7M02W-~iAn!Y0{$Je0@Yp*J7 zmHxNNZ_Nz~#S3VBW)m-sO_6yPh&=UT_MkUn9$m~QM0s)=P(f|VB=$lenl9D9$jI`I zp_e=hke@K97NBels*nQg42qgE466J?5b`usrb)!Jt$w(695E;mbw`$nQwO>1ZMZ|d z!Oi*B8Zt?WoRJb-Vu`grg_T%>Q5@p>@`wW<6f8HH%25nF?;0@JcEsU& zd?f>S#A2rf`dJTt@)k5nrnoeRw(o{>7Bds?nv^uS4l}{43}VU5ENY;*d-<`EoY-s; zY^9?i_od*#Qjq`bn(_gn_@iq6k2>H&B&JFU8V~jz0*c6;hjnO0wi@(;{?4tnwb`D( zw421Apj9+JzD3HiHEs&9GwuRrmD^-6Fg!|wMIk+DRn1d#nMe0$pzN0sO8q8&Fgc~4 z*_NnuL8T)nOFj9}2tk%H{F<9>HRE7Zrs*!iXq*ez%m49%T)(qmr2sxSBc&T3N7v;! zf$A)dV^@SXz>vpvq@kt3g|)U#F_6T?+YYXjNMJ^aqf?TTh}2b&ab`si*`F)T)`q2!MF>gOyY*d9=-gOXeM%VFWLQW?XiF zB5l|+!0z&5u1Jk=`6ji?j!YU-ARZ|g?>ZhRDU^xULqM{x&4WwkQ9v?>4m1>zd7!c= z$r>&%wkwlCISD`IfP@2N!t~&hNmu@>gpriJ@E0JN%ZtZhMUv;=g*S4tCtR@FwPAOcms0Q(HPt+mbF+$DW7MqLB^?suhi(R8UZ=GA#-3bs#t+pMo_D ztOQS3z2LW{`LL%a8-`6H;M0m~ArW~J6RT}j7Cj-SqAM7GJSsJ;FJJ$MV2&pCW_Z!W zGb6=S&QwKK)SKzqBCR!?mM}hZ%j?hy4O*9?d}Ph^tKC51y6aD#^yI2P#nV&O;-_qK zt${>`Bhlij#q_eF56Gg%oQX}Y9RYB`i%M{8LT@+P8C=NFT7N1z3j^V%>glo*XN)0A zM0VCf=(^}TNQKTalGLfQYv&L-On)jlkH}+KESH^W6ba)PEM=jFp-EtS2tFhdu_7^fu0p*-WN|H>i=MC*LE4PSPNzJeF>1Xu53$syEe<@8 z-4xf94Cep4->e{G;j5J9s_ZQv6$eJUIEendenAKtz`!u-9HFSMY zO@ggK*7V1M(E~||WnW6m>PNUM3ZZ>2 ztTCuJuYpBV!y&G^F7v)ccI78clAx+;qk5yqf-c$sR++9ipnwn~Fm%uIm6SZO&Rc;iwC)m(-O6TMg1|S7s?#0|XvKU@tLV z!28+Hz-y7TqmfSWW4Zxe1P=m@2!xg_TGDX6_^wGb%t?Vpc;1XR#-OU*bQHu|kL54~ z+A$O>ZMIMH(z$iJKzcB$=(5Q{Wt^LRXfe%?O37o-Q8X4V6zU@5CU?oYqlc>am*fhA zqQf8bSCoeTB&VY-rxS6K=@BQ2q7{#oY}IYqoNd`aYjnAU^iH1P(z z!8~t&(E|LaHp;!?QuGX8vwWqU0)@bxf}cCYNUD;gDPH*v@hi6eE`y?fq)_^$5Rg~# zgRDhFvwqY86;2o$Hn9q+Iq5@blr&XRc^#p>t%E(2*hk^|*!CODZi0cRQ*(id`_ik<_613&r!VU!u`wprH^_ohoAjsYD&pg1Ya z5fQlXvIsos;&zyi3F)0-aWhVcMBqpys2zh4Rg}Pb;ftpfTip4A+B#Q@^+^i|^rtEg z1$Lt{LD%jo3<6urHw!Us%LlJDnG%D4qDrD&cS;qrA$qX|!`@s@QPfI~Q<{mLA+bz@ z>#UuEXRc`2G=W@Ea_|AtS547?h(V_DAH*=u$Px@FMRpKe@l}7G%9XrB&C`=AcM7OdYTmVJ4LJ#zZN+%K# z%r+6KT3WI28Tl3{olXkNltg#8Nk--liXJFgq(mfA@}-o>Y3jEpm7X`CwNY-pvf`1t zr7n61&YT9F+{%Or4`{!dCR(|3_aW3x#AndgN2=z@xzlU4zcB+2#j4J=GXN??hlpCreZSh@*4dj`VIaC~Gy zl4pB0lp*60!r7>hCNeq}9QBm2+Nh@#TqY%>Oew5PO7OR+cV6|I_a*fA$d^MgR)bL1 z1C}@~iDzynP(RUbr2f3cOjErRzwF6yBpVOFHsMEK3l)W=Q`M_Q;FdCh^{F+B!0lxM zoe@Y;kSv*keX_M+SSC11YrPd+cf?W}7`39B93acB56%8UaM2O`Cp02nH4*#JqTL|H zQ`X>Av{wy7m}P(>c74~IH8F3$OJ*FhFy~>+M!)>FohvwRy+@ccTN3R#Nle-{^`~we z2BAvZ<90jq182S+fZ`Je?G=(HK-#|dL{f+oO4KrFil|m+kkTHzlmP6v1CSnZ$fPOE zHfbu1NE#{A1K3^hLlps%az>ji#1C!3h_f+NNCzCK!#D>NPC()9EfKT6HRd@H^FrB} zUXCiNm!qi5eyE3{2KY~v&vq_j`%(;!HDPFhY!s*7hn3;###~evK@XXM_|4_#oWYLjAd$fF<|g=Z#6cyD%-pePL(_gY(lsSV!9F== zlvk&DfMIJMh@s(ymBl8K7DTQrobJ(!XemL7rk9l_PBtBYP~v~US#(0Ovyq@Ao=8^s zvE8&sOPVK0G--rK;(_L7^egW{5XW-Kn&T-D&LEI}?PBuaZ9HHelT*0em>kX|3>f|K z8yEDzlR_e(49X21Ej_v9tpt~JwTl_D&kAy+h*?HG#sL1~m8sR9jw)ulS#|Dl+(o+K?(fhm1fY)-8MEJX3= zIwWMWQ#8(9hLP#HFxTYhZfJi9T|QL0Rnk&#>zg|LMK zD?}u+dRy!QW0{PJ1^U2JSCYsuwa*OKbk{bL9)R{rIPzJ8A3Qw}PY3Z+v=slrS%={# zjmDh#C6auskUf|EUCv-!A4}5(3LpoUfvsmtJvr2yA7a3a+|cjRAISESBu1(kycQx> zLlofY2&5a>z#WL6_J~LpGaj@UZMp%u^`1J`U{^-UhT7Fq=GKi9d$lvExg7j|*n1D~ zD9Y|_e3A_idP0#R%7T$z(&#AJB%5R*W!c?O1l+WRMAAs12@(Mj5fl{#5fu>yD^*1W z1wlmxX%uK_c_nZ>^!?0c-!x~e*f?P&6UmEbD#5^=RCd4%r3EL7|U5| znBZe_fwBkNusgTT@u|#^zQ**$97?!~cV~q%y*{hD&qDH=g%nN|5@%eI@eO9lWnPr2 z^^0l}Jvo3`B_#yAXOws91NdA6tJ8owCyla9F9qWxlgMz&eALK^IH^-uvX00qh`|(A zEM4_jg-vy7rn1t5At<6O1QmLi3IPXpqOV+urD4x~!kT0Sj>5~S`C z2au3@77Wao*k7q=E%nrzrH`xVJ$@MX=0^?M|In0E?%hHgB=mM2?G+gM`VAsbpttLw z#>0hozS0|B_&j#O&kxbJmh;n4aooqwxQ!Bodo6eXD+pe3cZA6kz89N&VDUir40^Z9AY3)YnDC&l){MC&(xcRD2IVu z_=Mo?Aw>~Z#vvSaWFhQZ5~Bye(fz>?>|4QhY*`qxk~ zh$99_#8Cz$;IE=0)#686Re(U-r5D06`3uylbgT?{1by#yrEwh8D# z*85o3+o|jA2NLmq4@5OSL^%dDmeDC)dJ#yZ{BIx;N6kv|W97xR#pnlAq(@_I-8Xq!uGmwyW)sa<~ zx`94oy-7M+2;^XHosPZ*x{~ORtak-y3b*NCRB+Lz9YC~K9-=%7 zRK$9(0Eryh2(*p4oj_X|oz$h5bZI>lvyk2bWM#dPKphy32D+Ey9SbDly&LEUmTm$P z9vlElV6G9W;R76^8ITAO0VG0{0f`WA0*R8|3M5MUJWvr^2}2_i>1YEa(h&_LJRPh{ zvvlb=T{;^`q+=(LNXOSe53^SXfP_~kfrMAFcoac+RRxsD9()MYp3yF#$2sg5KqBl< zKq72+JX9jWjsX&3?*ZD*VYdPaD?5RnVk>)rgq0tGgq0?Zk!u_xA4u4nr*p3XrLpu) zAdy46fJ6=*0uniN9!TU+t0tPXGmwxD020#SKq7~J0D6JFIs_!V`V&Za)vGDKa)aZw z1C=wH3Umvj*L1WWs55ha>KsjB=vkH!rRxn^h&yyN52zhWHvn~I^eIq(MhAdm8Fgr; z<;FcgUoiI|&^|`r0g2o=3nX$Qw7HhvRzM=X79b(D>(V@3dJmAujgNsueK`*FCC70E zXdR=h7K&nLbU%=={4UU7=Dqpr(wnfo^A13RKQ}uZVeE+X!!CWPz6hO z>C$h3ny~cmPFfs;(R79|mklJOg*v(qsFJNb3?$-M1T>zxWjePWh@Kw{QQig;Y1;uL zO1e=OEp0X+(Qi}&iBebqWMvON1)_yxh_VYvSUCVBtk}`%im(MhBJ5dLBrW$EQFEtoIX;jnM@inIf@nWUjuB zngP)lZigtXfJD3IvSy)w}C{SUIG#`1zT?|l}?~|j&~T4 zh&LZdq;f70`CLO;3>413ybL5#zCo43KcJy3-LIoFy7Z!s8uw9@aje%4=v_u0AdxRc zIx1ID4dq@S5$_{FBHrh8y;p%myc>apy-$J4*m9k|TFO&^hA}q;XgH&q{j?g^14xv9 zw$6(#b};MR}P~Um(E^2l|}3$w2cN z%>oj7mx0zY7iv+I5=OK%-pi;3&>M_y)48EKw_N8A0HI1FpHBjb+=xX7(UQ60KrI-x zPSj>RaXKp2(Oez9uA`bs_;G3uTNg-p)gI_A=B5Clk|ExI0M%s_jbZ5qMs}dL8Lb2o zUe!i-xq-P(I+_h6q}ze+VCm;N_k)fO0o}>cb3mgQUD2g=(3J@*VLIxjBMXqQoCY*G zn0y`zw2`gk>UtdqYW~dt65hWAw2VW%4fH05_)+JM0$}oTjacx&VE_Tu-2VjEaCn$|nH{%dY{w!qVeF z+ZnY-^DJU?8;}T*4z!IqH_%o_i-A67 z3iJsh577IJ?gbL{_ znu)h~SQ-U%Go#yqMsPY3fWBpJ2+$9V@_>4CUy=_*U;b`V3V~WNDg~k+0XHcXK>Zj^ z1fm}cHz`wq`ZKBmvM`zn)RNI`AlmUZDRY5ZGnx-XKXh+W768%D+nba{KnaY@L&Q&= zo0JHkTbb(sWM(HFbp-K(S4BeWLp04nDYIY3L; zUWJa{1`=&>FOaZzPDjm0YBPWyKpojiArLwi__7A56Qeq4Y;YEw2S~K!X+R$^w-{&- zqXR$>FggWv7yI%j(6`LhL{^A))Dwt&si9bbHnMa=E>4Cc4jA3gzkQ&%rK7Z@T+u!x zpj3oP8vojbul@h+_R2iD6_i3>zq89c*~F*d6Gq_QJShGDNqAqs{-^!z{a^N1%g5@{ z@t?*wp&+j!A3o=M3dZE4BxeGL;G-RR0LJV8G(OGl|J2#!V^}Niq5`aj)VfM4zIr94 z+2blbVyfG`cW*42@Ih_NAk!d<S|+6@7T3OQNecL1z8LG7MD8iR?aY|R zBrnfJ1;ud|AEWFGpX)`qHshlm)E*CPIc!$Nw04{{zG-7RrS-pUpXQ=kogn+e@G;i+|1>_b z`L7(l^(F;@|C{Aw9PhL-TpRata`2Q4K6KO&C;dOo2k6*(%cF=o{<5 z!PNgRAeAT8sekwIZEsrL)yiig3>)oJeE&)P`B(k)t-r;di5NvNo)meM@`A~jG2&j9 z+DB@ACHY=nQdyP@sW$GEawxP%7!0LA>Opr3jp^Bs3^86W!nHB|^i-{}zKJIjHEXz^ z;v+u}k#GHu^s4_q^#8FOsO{tLMC$NyOj6IID+>#Us%yFlrFi-e*D31SuBarB>#Nqr zCYI-B7lN6jo~ho_6+W;pZ`;XBHk~v;k-VquoG@865|Dl2LC= z(w}FP0zq1ggDR;HZtlB^e&?mpm!Jz1A3bg{U+V#j5+|(m)!*^y@7Tx zN&)(e(P^MB7=_lv-62NJf%Y<53Urv!2B1TXwgdglXg| z4@E{Jr9nyuAbM98z5rciv>zylrS#-6eW?-316@{4Ms}bEjPil%GnxogkI@AndYu{e zPzjncN&#xgXg1J|j8+1*W^^2g$_a7c=2S;U&4D^Fnhiw1KN_Sg0_x6aKTss2Fl?{) zWz+$v52M~dRN6sG3Q#Xb!+?4+$_MHpP<=&-W3&>;!e~3tAV&Lv1~N)%fTwC0EdmJGTII_gwcMWOh(6nT#PONIT?jEM7?L!9B443{pf7(VAMMtyLgOJfW|Ny z1~i&cK9GmeL?C)CHb|Kbl*?!lP!6M&K-r8o0A(@S4&)YGW2~kb1+_FOwS$@{!5CwL zP`ovxgG+;u-A&5EN`txtD>sxiDh)zmH;As|JqHH~{T9JWi|D3;FN3^Juu>6p#N|>WwX^SpY zhInsD^`GO?%Cc^-QrA&SL5zG#%;UX&sE)JXM>&drf`Wlc(3B$;qu zt(zip5j7L(XmNY6(rj;Ij*asXjq-*+P+n@fTHw0QT8c&7qX{zO`cc@_&OYgHf#yi* zC4Ks5yrwZCsGUivAJj_tt=63u=$z}LPKZ#VPH6FK=N5fJlm)OtJMhiJw7I7vyNylPjH8IbXG@{`$C$hqun|}lTxMq zbu>~(b9F>_>V%bTI--$DaF=xyhEYgxaDeZv(wUA3apM1v8So+lzRQ3u28=FTKb$&J zl-~`wvjKNC;Bf}r%z){Rw|4B-0M2xuTswZz0M2+oK|kIz=*-nwQ5&_(XEcB_jkntI zs|IjBVZhxCn94^x25JE3_SIlpHM}v;jbW1v`tM_O*N(m#z`5-|fm<4MwixhQ1HQQ$ zTx{SE8E_D4kaif$%c7Auw=v*!1IDdl{b*#!!%CeM&rNHW?`Qz$mkjZuQ_>HbS!jn_ z130fU;CTjop8*@|Gj1L0#~B^r&X6Il5e9tHpmW54sRz)G1scG4lflm~4Fxk3^Dgb6 zyY|}gBY;T>!GD1;u~JeIzlom^ILOj4{1>PRke#K?fqudVW0a1}K$$G18uv3kCSL6c z)CJdfurv~g%G$*5g9y|c*CSclALuYk<8+h=bSFzwfG8jEbcc@YKv^tx0Uc%OFddBq z%3*01&@p^Wd|yhSd|XqHh^IS%jM-@P$SvnDj+9{ri(NPr;jXWm4uSvaxNtuoR z0?h@wi>32{sJ-Lq4jnB5DrD&rppz_Js-xvV#VlP3^cy}Vep*YQ)wnKY>3X13EZv}^ zjX-5A-3&y1qlupn5okNED_FV%=rl`r>*x!h@hsgBMD^1|-!rVDgFq8mO6BthJ|@mF zfhY}ASxQ#_Wa(KQT>zTS(#t@^qoLtipb(%rEDgo~zgSvNM`1woS=t2u&#|<*j_5h2 zCs=C6|MM)3&`}4VB`ocN|Kx>G!G!g&*!O|2RQ7d_g zrPLxWvDBp_S`)s)QmWOIW)s&@fvCp4#!{+3S6E85K_DvIRV<~Fy2?_@cY&q=tzl^u z{{PL=nL3&cw2q~7@t<uBVnn$k&{Ckcm|Kqjm`)??N*%olL?fO_ zSxx^Lt=G{8pe@X8#QzXRn{~7eXe)Eu@gEa!SlOYY-9R5Q_XYk_uWM5F>*xT`$IKnX z|5}U=>*zSpC(ND1|4>G!b#xYptecbz_+OjRWgRK#E5BlnUc9fvC{#!FfXEAzf(fls zml3TX1;RvB`Ifm>K=l~W3{9X2Ao3giA5eWpG{+K%)`&ka7Yo#Y5v>db>JN03xj3MP zj1qN}0(648RG=_Mb{)~0?pNk$6&TKFq>i$Heq$~Vh(<;{-KL{Lpx>D*1!~NwLPryU z&M-Fxs0pJg9nAzf$J}h7tz0MP>S#U?KPe)jeDOgs4iv-%k(pVi~;iB|sX@8)- zEREAqA`q5W2upiT`&gQ)BRfz6OI<)ThT!Q+9gPG^Vrdr8mn_ZGQ9e)#OACR%Vri+4 zDuB{iIuYn=mQK-870^hQ&IF3pC>QU7$b2&kB)^gU`6wjVxsVU|SK z6w~eaEN(8Y$*(AUo<|6hQw~JpLuE_Xl-G2<7O~JZl?+{fhYwv-{pp0yQuUf@Y9D-P zlq5OTYl@FNrR(Q`Bk-ZxMb`^~Y1Z~)4RQUDdQH7G$>-v_CqCpST|bC3rH9f**K=^D z_^5}c>j!{i@gY6BrdbQgGaw&YP#hE8*PN7HQ0U1sSCp7@@vvQm$LvUsx0rJZDvGj8 zp;^6NQFi&*e@3q$7Y`9#!%l8xSvfsm6MYhoPhL7PA58$twe-jFd^GYUo^{Wf7 z`Qyg>QwdmarmKq8=Yz0p&MnL?FZbHl{L$?B#;0A|ipOUc7UY?6o2EDy_i)U&7O==K zJ~bWX71_mk*=2cVwSfHevI`4Ka;e6QDJ;p!E;Q#uztCeIT~Y=Y3rcfJ5EwD|g+r*Z za+tt=l$3gk4VL`uTu+XAH{MfL;Wa^(yc}g*Jcc6lvsaB@Lk77Ar8wN>m1U!|sqU%Q z6R7!kSF8Lz65Tt9EnqSM~2mO{o8ic@P7S*YEaFGzUEs| z2Mq^xf#_8X2Q4Txriyws9Cya?DehsMH^<}FNdjMs9W;Vf!4Y?z|8m_Me^|O6JoM@x z%Vr(;*s^Ixx91;k9lC4v?ZZBN=j@%c?n$_*qRm(Hf4KSS-v^GmVcqYc7e8y*IezHw zS>3KC&w2EQ!mfWl{%pHdnWcX{cW>Rv+WE%;*^5G6>i*rq26w)lXqo3Ht4C@)MwcM5Zc|K0LDIhA7~ zoJ3JbQ&2wU)$1`tcn?*_MGOf{K@+_~6?LmX^@u3q&NhT~+=%Q&m<&EV{9&O~X_%X(<8xa>xY_vl# z$FxhF1#{Jpp%?YEL+EtyW9VfT?GQS4KPK0Ysq|xLp{pIj&U1du20w;w(P@VW^|K#C zx6`yk=rj>0CIzIMOxht}vL7?dkD-Z_b_h7rk9pdUS?9-m;KzL9$IzrlI|QUDvvvp= zZfFI9p^2_`2!_6eSUUtm(^KsbOs*d@$&Y!^k6G%+tnp($@?(zrF<1PUX4F8{LwI3)pck16(JX819S{FqgK%oaappC5DBkGbNBrEQrinw#vH5Dn26} z6oNNhN5CwV7^OBgD$rASby|bTl9)s=v~2e3+zDp4#8eT3cIef43Jg8|;bqo>u}jP@ z3MDbWf{{~NvyLxg26I{pMPJnxhurtZl?BF()Owl8V6tG{%g|T2+41o*YjCw%Vs_xF zs-98jC>V2nBSY^O&u?I4ZUht8(8%-zL*IhnjcX_|jf@O^1>9+gc@j)yW24U7V8WUj znFC<5B<4Jr`4ZCzDcCGA-N1z1V6>A2CQf4R1XC(8)4?p2n5V#;mYBD}Y;I+=`~?{L zrXg?I&wz=Pn0m<3EQ#p|X1>HEf>|vw`CzJUHd>wqCa$%Sc@a#h#C!y1sl*%sV>TN@ znNXf#ZH&x~V9XIlCI(EL#5lmrmzZKOnPnWV(Q<>TP8Dfr-P;A@v&~4+nxdC^6Y!R`)mR6oQ#Q)W}Q&W5%k~ z+y6WYMjTrEdeM(r@5g-L$I$PCdhJA{rX$tj2*IhQ0tPvQGUahuWsnc(>x>NRC_FB! zI<#M^j?~6bVx%@&&f-y6WoXw`9jR3&iXsyuwNXcm)J8^()GEWN5F@q9u!mx#RvDC? zHVUf@rz?&}VU>v@B{2%C45v$s!Yac)i&0o*PzSV8SY_BBF$x)h*4N& z*h4W28$*dvSYlo*ALj2MNDj2MNDj2MMgCJJ4KItr_dC>6L2-pk3|#hMsQyI68$$IYJ2?_Vc4UU^$P6_eiRnd_ z-%2!C?nORJOmB)yW+*P1p}1s*;*uH4Lz$t1mzbzX^Z~CV8T^T&N>(_~$V9`Thhzp0 zZIc-|6f{T*1&4eX#1$p$pipHd261IeIx+CalV-FWi`X~F43c_IVyNK5?Z!}4@Mf8T z&z)ojKKn2zuv|%}C+u7rY_!}Hv4=Y)1}Tj*GE@{wnA%dfhBG5ZVQOF9%JTHvTv*Cs zZ+UZL@g?e4n~vQ>p~dlQBXMROhK->Y2IOV>gMrH`(`};HGHoK5g3K5r!-0PJZQV;a zsmBAVUCQ&EG5`@mp2X0US+Osu5S?gsJYD&DvpU?`L~t_mD(Td1CcZw%8&_8_WZ4^6Dwv6qox8w{lyn{jGgH!82ZnOqYv*e) z^Cg{sfGL!8+M@WDNIEt!6_U<4Fe@dUMPQ~#I`4p4FX?;-hCKB8a}~^HNypp*U(74% zB!bx?>5KuhK+>55X1}EKDwupQ-Ws(V3_UR9W&Q#~_b|LnD?BnvY4>_~JD9_gWjB~C zDbx%wRT8rjOuoeI0<&DQdjpF)Qo8uHrt z9ZaOeG;M_*Kw@qKvt5cS3k*H1CdYM9ifcM_I!Jb215+w7-+);yF}1M!azKiU=8yEi zmK@h^DXwAA*(}+a3Fe^0tO2uKVh(~iDaBO>b4;^eT$`o1VxV(b3N->u7d;e2%5*UF z2$naWUnR>Za4+)}7`p4@WfbffMM_L(FsCJE7?=>mMNUYJ70d$3!*O6vO0h2i(_9L*4a`A_ISGcc3#8ijHf@K8)FhoaFiWJk zMuWK^#q}TGHl-|KA!9l@-ZbnIYSNp{AAp)&QxwFC_H ztF`plw}81IrQ#5nDg^PSv_=QKyel#7!OWK!8<^D+QwU~}#5@9Ko8-?LFtNHnT78}m z??QDCcSC2t6zVjXI6V{;m4+QfjY4#4>GTAXD(Q>_b6m1h1%~eTdvoJ?FsCJ*ufXI< zI-#9JnR?@j2Sa0%*UsHwR!V7q5zJ~Rcyo0xn9~x&zf%D_UdtUji?5;dTBa}L50!NC z!OWIozXwd1q_Ysr0!e2T7#gX)acu>&RMPnh3>Ade=U>5uNDNJ|LnWpum@tXy3}&~) zB!DqXu@3?Bsvf&m6RLy*YMJIk=b&U~CK$R$==Jb9FvlgG&0wgGc~kl=m<@h$l}d5_ z37rd)od#V|>!i3kf}!0)Z|qhu^g~ZxCKpVi6#En~+w|BGsj>hJ)m5*DuY=hw>3j_4 zpk(0;W*1>;`jIvOEP$g{1Q+7^*nlwzC4v z6iH_zn0k`VZZHd^*iV5uEiv^XVY#j`H#&obQY4W9v> zvr=43!OWK|(@#L`mY5&FQ0w;Q{6#SIAiPMs7FV1US7Yp)9F*+z19MVha>1OHm8kItI07Fk!d40Ye%ombQCYUTq zXDpc2l0S37Y>=4Oz-*S7U0~uG7}ND97;4MjRM1aU6zXwlsW3~ah=h(^vSS4^Ok(Z; zLqD44Ez=S(c@i@dOrgX)38q3~UI#N#Vzz>*l9>HqW=qU(VCY_nH+EAG)cG(Yb0e73 zQrf$Lp;sm3I*&kx5{!e+LCMZ2FvlfkGFg_Gg_aACMo!0&Rh9P$6yZ$n71fJx`Uo9GFwu1DSY~4F zzD$o&ndyyZiG7*gn90##rZP5vt%YFGOE;< ziLUZxdeC~%U^ynT&t@McHhQnVvl(eVN|*K1{F3 z`Myja>P3xqdPnW{WnyRul63me4ug^D6WLp4P&#&BCc4UpiR!i4m+7Cl*^~d=RPH(73)lj4(he8)*NLS;^vSe?lWojtW z5#_U1WkC4YX~cHOJ{=`9etS?0gL$zUigbb%_vpfk%5qO0D>Bn9H-Bt7-QdB24iNq< zVr=~PD{Q#k1x2N9ynK>Yl2=*iN#WOUhH5mwn`7Z8MpZ>-GK=YT7fC7Amq?<=N<|>2 zr^1zw*G=-Q6Fs?={3;9HXwjtNMU;5)&X@=wC1em^x!3>l1ak2=45`!1c^XWQnM#{$~<|3wp8H7rku(OPq`N2 zdJ0K!FkiBnhS%pL0;Mjlks+#C#H&(;cpIw7TR2`_AAzl01Q=3KUXX(?3KY3+E4ShO ztb$ziGM?Vb5_+x@S4pX^bw^1_5gLUElz}(G67*Ng1eZ`)Qtt63;fzit(kL!;;d~(4 zT2xvwNf)TPFp*S}TWLtQ1vS(sgJ5uwXOh#<6w{3<%EF3*(n7VV7+i2p!V8f_X&#hyu12$?sC8u}mBngh@Fq7g zLB(o}`ZYqK-j-?}A|b|02fs>bWT3AW4_-1dghIBV4p2MyMk*8yoF(tB%5pV4(bkFH zOitj}KfM)<@=ClB>Mb)L6%nVa#F>i@O6xMjg{wpeRr|t|q_UDCdr5)bk5ExdaUf2E zw;7{HmrI1b!d7gM>rEiF1a;P%5)qk^}OH zf{os^H8dKn@6tv5YNJ;BxT?las_?i<@P(nCg#7F>#Z6P`L^zXMF|Y(Rwjg(GLP>Ek zF44ookC^B{D(J?MIDai0k}xzmRRj^a0BiKFo6eGoHK2;ll1hdX{XF^ta!)d36llp6 z`6YUBugl*4J+NGurJQi`i>8$GnXaVXhExj`B1N%issQGTy%gRcO0W<0G3J-dxbW|AXo3-MwmlPJNwZcfFaSTCvN-(>i(LvL8 zV3aB;^8^xkYZn((afK7FtQf=EF^JXzYP( zIXw7j8*LQFbQ8lqPuPuNdBzkdu%3r%t(DyrAvmyadlVv(`hvhhePU_!M1<4Q@6*VI zFa^_H%%5df4CRPLNHJCxWjx0<+SZFRqcl6Wpkk72K~E~mrC@S4PkD`@b$OyEx1
X#Q-wXY}ei5;r)7b67tP6Rn(V^^bow}DXL*@>aP__2DgV9@loI3^8c>?09| z{ac~Imf8^g;?=5}pCB=trg45WuUphM(FP4? z#UzY1`lWTEAae6duvp}2wUWy-Djs;Cm&9LqPs0?~i0snR!b!&NzLFS|dckGbtGIR#S(F{Bui(YZ%%&)9KZqsrn*(tWH$~Y8=a%?e`pKAW8&3 zxO_b&qp52wCyd6fp(b_LC<;-L&Na02S1%aUO>sX z)~m*jq!P#sCB|n37syl~wLs>mulOg-1yT!S&N!(HnA@^KAQSRJGf>)mGy)kx^2J~! zmZX8K_^Mpf3{N7iX@xbUeh+yje7JU3E$Ia8_k0aqr{6QG2P^|gL2_BolWVx_s}s;= zU#07~Y*Y{EvZNrntS5$Mb=MdXMK)_n0iE_UbseuI{eW)E8j|07iZqvua~rMm@ly)u zx1ZK^{Fd|s`Ymfz@3+`XsV>(gD_+&>r@^cHucSoX*tuparOa0K0;kHbBDij{d~~m! zE+6H8HerTf*DfhZF;HKIy2z0lcCZ3vRRA?9r}Qe##;#R)ub~+wX69NozlNrIAK}`X z0dqdE(d*>9f1rT59!Ra4JQw|rwBJxowg=J-WK`Xr5b6Ql^U(-oMBY&h=?9ffTRPtbBt6thN41f$~+_GYueJ3q)OtwdsAKY2%zCp zF#>4#w4eYQG4hm4)(BXwWR>ewD6ewBs$>)g%2~tBt3Y{b6kj{Ic8}}YR&=dE#<2D^ z-VqCA$yX(i8MK~j+&l|p^*SM{iRAjX-KvS}`T?byYuvd}@7GmVg{x5wSj(!>y-sxt z5Gr833#g}NEOh5nKIscAm=3w-a*89b?06r}_bX+8#$ z`Mc<=rFrPjtA*@;&rmIDe}T%VHxmsh@)u}M`%C;?mUT3Teb_*EE)5=3C)WI^PVVnb zAWhAufU9x7fU25z)dVXHB#Izl(<~~8^DGH zUrUOz1ZvP$+>uqgjAQI)dZ3Awpt~%N~43;o;L7~dKzPV z{y@*FNa?WzqP3Lxs{1=`)X@BtIn^znhaFVcd|6f5=TQh%*@rC(_<)2VRo797QmR+b zGN5`5|EvhCt7S?x(h2(G90tb&kWq#QKXlFLKx9lHGByy|BM{j$5ZNmb+1rQI@=W&L zKcBpEEpH5rnBo|pY0*;~8Q_5zU8v2x0*2IPU;%|O*D@P>En$yq342~k*y~!t-q#ZL zsYa+}e&GD`F9d%*tuO*fw64Yf=_0L*@s~)?80oK7GOImnq`x-lcJnh};%Ou|CfkK^ zk?MiRkN7%fG~V~bpg?2RYY&(UYv@za*=m*P!`37#l`8>iCOWkd0pr< z_SG}I$4RPod~Q;8)S&$GFN&&rqBY5qnd(Zl#rJJnSy_J1&WANyD5uP)4mzI^#tC{5^>A|>>IrLUZ zSAt#BoI?_#Bcr3;6MM#XO{Cf|vb-#JWI|f@SPwsW$sxMowWN{gTk*4K75uJfx7=_2mHy#WD7*0%t69mOOmDM_b6No&TrDpdU19Fv=xEL;t)Pe1>Br9!@LOAWqO%M> zlF!re>8~WS&wzYT#iBQ+i}2a!l?2$8a21y0$EzEKnW3p2RHo_?A08H_gojftrf(GR=Nb6i=9A{W;K(+;6TAcdsE3qh_4${7 zH_`Z>K|Y>urY4%w949#bPd-qZ>H8tXyUF;5I`~X}^})Fb&d{l9i*rAmNvA)~l%{F; z^zlhk0yqjwc@$nvnv(JM@xNJ!>O0oTi^lZ8U;Uu?DLvFaP)2+VfWPEZ9L`jR7M#hy zc$_I6kKyB+jx=x$@xhDY%9quo1KZsHPC6PPW5{I_zPlnL2*2W3>EQ|rxA=Iey0no` zzG<@}4diDM&Qvz=w~Bm5-Q={*0>0g+jD~`v{1}YSXVs)Ff%mM^@CNe4>$EmX4z;$Q zn^JO$I0Usf)D}Ko(~`sOEly?WM1J_zy+QDsd`rcd$_i<&qKrw$nf%Sb`3%nY<1@e~ zUAKdyu#~x9RFf{XJ^d#MGs8R`dcu6$6#3zsE(iQ3-<&v8n{wgY4(Cjq$=@M3Q@Up2 zmK?&PSYJYQ(29`nS30nrX^6_Gp1!{ zHE9uFX7Jxkjp*yImmas8o-8#z*=l-n)b#XduP9BGTH#MLLL!y)j6|#3mOjLiYD?7V zAVFJGt!dVDm(ont4i>b<<#O2KGhJ5vE`l&)5(1ZXm`k})f(%AVM)WEd`otTl3$-L%g9hrB#hTE<9DpwI>T_0hR!;;LQTS4Jf&cI=5sgzF? z%&lcu3soAV7^R#&TEJjQl%P6$lNt~|VQnz0``la=hsa`AA{P<)Q$v#2ZCo7BLlC6c zEe@yEonT4NNVg@RxbLuXC=v#%!X$^ynx2?CTn}YZ1t`Bv2NhMOBUKlMs6t0ZhD&#m z>I#{xp$c^Y6%Pq&ssc-TLP~~1X`|A$R2tQQYoybinQnC^Sk%IxkfEAMtEQqVP@a-P zZB@Z;aizGE92sfst|qOcN|6L1BsI+XMA*8jG|iS~<#s>@>#3yE>KI~m=yZLJPDrt) zS#%Q(G}?xyp(VGWN+xEcS#0Tgj)$pqYDR)ZZy6M2xMoDlaW$Z3uaPQOlTHn0cw;VJ zXQo@7sB<&h0AoSQ;7qGyxZ66+ZgX%vZZt=$(iWje9<0h;NVGd6$(?F(y4(pVmh@!N z1W3oE>Lg^OyU-c9xq#62xEhc`h>rp{AZm3atf30g#2r>=3YI;Buc`B>`ti1Ot8T8A zX3moCPPYuPC6mL{Sjk+dD$I0Ro$hq2YiNdJkZ!ZKDzrIK%TY9midhX-$19;8!;+e6 zO+;E8!}Xk~>(vlp-5Cydn#FF16>7~Cc|Bv~tffa?-y58pidE4vpn*YRNwRW%Cu0qb z#!_rfSB7JF5*9|NW-Sq4Fv=9etfvfbgIe(37k<8(Uu>mnu!m(f{H(RMhrk71n`zYU zJ2KL(ZmL+RNI^mhWiBOw06Innneq;MrA zK@C-qkdc5cz{$ff@ikQ*qlLxG)>7HbbQ;pbVf+}EM*?24OSC4Wvfo4nE1=Sx33dxQ z@>HHJ=(NgFeJ0MtsuoR^dS#+Rh<3UX5j>T>C9(#QN%kakR?KV4HCcH$#g)oQAmv(Y z*gjPDEL3F;UaW&M79g4F3GN{_hbt2fQ>!65NYM67DoP=uI!>ZsA;OrdNvKCAiAhMP z^4b!(a9-dThFBbKyVb${5KVc=dy)hxBvI9AVnt*yljwS#qJF;5CK57i={8rq1;cq7 z_GN6Y6o=K4h!)!(!FE98gH)tTTL=C)vZGz6Wfdsy$Dn27O6M!nNgwv~v1glim< zVCBX|e2}8^lp}P(xk0jEuM8fuh6chL12+FPJ%WZQSHu;*es{;)GZd6Vt3|@m2>%P2wQM zAWp<2&4qa_Yfz&k4b)T~_1J*Z>f-Gwo_CTIl~a;xa~d&nQ(s70sHy-6Pw zcVwiZ=dr}2H;Go2gRiNaW*O#=NBl!=iI_`uRl|f_GfW~n1h>nQjLjzDPpxaJ^UB1X zlxj(KDxDDGC(a8)3Tznx6VOA|l@j2qi{_S|Xi233b4W%i76#Zs5m88K@C}xf;YhGz zf@*W2bSHWW! zVYm~Wg*zeDi8UwBPHz@kWM|L4$o|CiIySg zR=J1Ma=5-xORG~}HR^N7SOcRPJ46+eDvVdRovPc=sLOfi9FBD@hJ7()Xby%M^^gWx zOUsXNqZV7swCfds*3aZ#Bcqa#YsIgrG&ZUrHiH!{swPGiv=vuILPn~Zb3B8ksG1s; z^yMIR{v^G@C`IG3CE2Wr{@JS4pk_vO5tCS<=__Lzqsee{qbBB=8C2womgOysQpz0& zDONE$I(Qf*D=m$B>YA4N#tf&8##HQWVacS|?;DNUC~qu(99DaV!=)vNr(9&Wl~I#> zGVHX7NuJ9_BfVDLZZay`)Q;6#g=oS+_HH(+iEe><620SSZInAKLv@E}ZBGWwMgS>RVm4&rTJCkAz1qwb=C1=%!{~H={E8CMR|wXotsFUn}bFMt#{hPk=Ipq71dF z6=_uF?oyp#;$EXDyC_LR>@FEvqSm|Oo~6)_HtKVA$E?7fie0rdn=_5qvsz~mV^pCku3xKYu|_?LJJm8=?$NcLx`$EI=}gTWMw?Ud=%fazb9AbXJtZw(YPq$B z>5ZLc^rYQO(oVNwvYv=Z5EkIZVM=Syy^Y#EW8*RRq{$5LOV9*}EJ`}GnWtBrKE}`p zL%t=tBXxP-fbu9^-Y=j$T9@|^D38(Qw*{2P>hjwI%6sVY0RiPbb$MJsc`sdV2`KNa z%i{ye`{?q7fO3m2PYfuJ*X7oL@&sL;6i}Y1%aa4jz4OeJfbt~0XR!s8M@8xi0|P5W z=?a4aD@5xGseu(@bcM9Q3b8y({}I(!Q4(x+TB!_jCuL$mMcWF*W9bWCU1?#H5EBaC zts@yG>5!#chg!W;b?Y$nWKLZL%Xg^o-l{&ES5>qauy!Xan9R{SI0>VdONmlr$I=}# z-V~+an9qnUduXcjVYG3+9mU-+Ifd0cf>?*qSecrHaWI*>R&@uSHrq2YT|Av4W$aKv zIWygf?P0eo!)=Mj{DN0IB*jh@d1ggxby(wZr-cVo`qf*kcI;R*rl!VY?Sj6*mce&u zw0n89#F-4WAT`&qs!*%))T@N+*YH7FA2280}E_etkPtM1lnqW1+*dJrWqks z8L^kc>mE|n77QYKmqY0BWEbmbnqiWbwqjtdVTlgh@vvcesn-o{xxjL5smS-tXz@xG zwABJ@sCNOmcF?Fv3ffA66==`WhIqre`iy51)hZI!?(*v4aT!E;=$R4BJo^eeo^&q=Lc}p8SHCmL$5awu~9UN_B(C#DZ zMQHdf=nC;2%ac9s3e=_0@O5Fh8In1aHg!7Sk~Z-S8(@B0cw)1x2{h@}pc~fh&P>_{ z#&&%}upkxec_q6s-A5sYa_&J(Y*kR+psoooGIc%5CAu2~J@pFWiuNXO%i*K3WUaJ& zk3F6tw4)Uo{w^gULF9K^T$jLvJy2oewpDy)GMas8IQ`Bxp6m6m5UNgl=+M@sq1^no z26>P3W+>7YAh!Xrc~3XqX^n)Q$jTYjh%$;whLdYXa^r_%iAhzZ5Bttlg|Y%Ma#6F4 zs+AM>{oO9?8-?;7m%~#^zl>0xP*RqXSC(E`L zwFyJcQJYyru^V$%zs*6ug_GM(-1VoyFEo60b=iszOhgPz>h>E~$l4S;ejxxn)y!($jMGAsOhB$lVIK;3+FBEYYO%+&1p?tcc~Ea3P+D_BoDanlI1 zqfovVtF=fx&KQsPFvPcBiZ)4QhE#F|LWWXL@xDls_YM?y0@PsOifA!Z?I>ZCx7_Y; zpkj09mQ`qFM~^(aODl75SDRBpH@o4j;XXI_n3O|Qone{lGu0XDb^|suj5VSBND~a< zk%@HlFKncl8Yo~sjU{V(84l&|k>_%toaZ^iW^f@)+dA# z?qG3QQ`U`xl~iGd3XobK1>jznh=C=E~k;5h@j86+NaqQPW=>V?!_qots)L1(5l7>bP& zpbkouE%90dK!p@pM_nu3s)EzWsTuLOuVTl5nu1#j@WRP8oNi5t9)L=>G37J$W2jv; z;_MQEv3-Ucmt141`Wf?#(oY4JQ&Lihi9;wqgoXI%aVgx>6Um|)SPDgMNu)#%*6=V$ zk3gvdA?5H=5ubLilY6Cx$PcNumeP-O;3p4YP&tcFOJ=QHxasnW;8#9>uGPYcU1krj?642ZM{g^i(Pib@Uq&4qHeo%oXd>(FvUo0UPMDY3t+4BikZ0bg+p_BH zXZPH_z4W^|9ZxJg`O>fAH-pWlrsJ=yZ?N{(AODJd;JfZ$cC&o^Zp4|RZ4SRQvdgrA zWj8EXf=O*K#hbY4#y6TDi+rc2h?7*5Wq2l*w&8E;zOFE7`@%Oi%HqUId zY+dv9rR`U@8M^+_u=vQ|x3{^p3=e(&gYE5Fc_^poo$&l87w*6O)re7-&TjmD-odB8 zK79P%@lU7h@hrpbeG~haeP}?(Bj!FaSN1L2ck;QP&vzM<+U1$wI=%JYice;4c(azG zJj{AwkL5>&T%0m@;jQm>tL$@NS^KsJ<_>ATb7s!{C#&?>%&>!*1F}x-}a+C@F2I@bYyJ#@2{?XdEM}wn-{KZHT|t0 z$Ne?*^=)%sTh-_4!KcdSe~4KO>z(pUt$J(rsn^HxT-cp%IQrF#b@wm?2|F*w@2g`@BUi(74C~{8}Va1MOnsre<#)r>9@f-#p?l{I?DY1_pvbuR{gGi`rb&U=@qnA$#_dt}pA{AMic-CUk}Q@dM_ zwOH<&T%3_NdG@@jv@TcwI@R~S?NKe_Z(4FjQ9fb4C!5cBAS!nI$@lKM5HsrZ#2YV7 zSQ4H;C}zwLe>G{GW7#ko3lqd`HvMSo_VwePXNLD4+97S$v7RHE&i!!O<9Cd#QFY{= zCqDXd1nNr;>&4WHi|o?u>m{Guzh~N6>$x+nuUxEMc(LVoW6zyv`;+UXg^Kbd>y0}2 z?fg%xMt0oLuIKJ8^*h}Y_VlzpE7}de_p>)&3*YehiFS%|l=T*Lty}f$)aJz}dR#tU zGj-?AU;5hCJ+;I1mm~D8t@m_Th_`<_qwbqciw^ZNUp)En5Bo!3S#TzNL(HhU%dWId zdf~NK`o7ZTV5aFCbjPe`erD2@ch}V(SJ7bj+HboS&iZ*ugQs_QKDA_HoAQ!P5$#@6 zl+CPH_H|h5%$Z3c<<4WC7c4(jb+(3myuxbypHMmN!Ii1*j;cnwnvK=n%8~&sp;e9cV5(g^^xN(OeoS4m_rw=%TC_?pJ=^AZMg^T557C6;ehYgyj=VT`n67Y2gGc04=KG6TH53H%FUB%PmlYx z`{pBEHfLpjHT~}iFLm!3J!KIVi>%i%>5*ZLCReVye{X~QEB&`0ztpJQdhoExrkC)T-1_=$hkia%bmrYHFI-AmpV$3)ypzFtQz{z$Xz%{!FMaAg z@%1McYAjn8p7qq@8?LOcs1bMmfp4~bj$fB$y-R&x|2=xpDCP4ycm32X_`udJKY0F8 zC+yRg*T;-qxbL;Ik15Jt);n?2)Kh6~Kb`qdRM_$l-O)ciGH<&l`LTot?mD^nP3Nh> z7@#8>kbfs;{#^6kE4Ll%|I@(LPgg!YB4d^5{8x8P%<8)A)kkC3reUxyWxaPV^zE~E ze@uMqzb{=lxVEb83t`#6WS_TPwqKY$`uN-xc!}mM)_XXmW~UdwuJ!)h-2InsFBtM? zRGYhxMLym8RY#w}s|J4-9f1ukyrg0_4XWR7OYdJ^nfJ-}aqq9G{nypypY8p0)uUha zO+8oVp#zs1;6UgPW&ewWv58kN2K&GPiqGrC09Oi_;SzHvaKy-!DMU$d#!x|4_A>hxHoqR{NpY-;_+ z@>zM?T0F8~+>}R_-PhoWickBtoN?Q?B|Xl*^!Mn<=zA1pA?wZE(&XfmBYvGTDx+cg z=#J5|p1*H&>4j(So4us_y-!{+eU5p=PplVGqsN-XS?$u@M;Er9vZnw05$`p7<317d2JP?D<*KLr@KPmn_26*C&DZdU%vKpr8DmN_3Nv*512DIe$bpQin4|EPB<)|j>)<2 z>IZvX8F%5A_ZO`CaYyBY8DD(Z;fI0|(}xXz6MJWvmzqt{LtmToSN~zP-%A_S?6-zj z9<*6+8qj{rm5OOs4jo*vvgr)Wb6D?q;>Tr$@#RJ56RqoV2OkLf`KcYJrVjnZ{P2Wx zEth|=<`G3%!+N$g9Tu(cyvupy!llZi-?bby;L_x0`=r}{j2V1zdfLDT|IuXO?4bFr4-FjVQlx-`BrSz0&^j zq48Z>)NA#4r#3&;>0{lvZqKZGWBMVjFS6cU?~MQD-IF=@eEZ!CuXKz|d#3x@U!Q)? zbLHNbYLC3Hb=)18BVJ*>Nn_i#t6Dg})&n!&ZsF>B@7!aS`Fq3bhCln*2P?MD?mX%U zrsjBi%4}M4{=`q8yfJc0kDKrR`;JA2a^C#=yTPquYQM7N?AV;u-+qpCEMmRppE^Qr z82ZSJjXjstc_?#ulkY}WPN+5FvEj`Ie6-OzJTnXP2-bV@%DoqpEcU+&a<{&_>gC5T z_M0)KZL9cRM-M%@@=oQKXZzqCD$L2vrjHslzGvEn`=+1oX1`i7KVxXQy=&WNC*G32 zvhTa?W}iEb_I5w({c-S-nXPWW+P(R-W2U8l`gHoyxv@PLtuFp(+EYtm?>pA} z`>9h89eL~Jdw)5<_~us{Jhmxve9-Z!{i;?Bh**@qY@WS_L~+u8g|3$D`X`y0dxTZj+DPd1=$#bN0_#HFfs5%Xs!u8Nqs?-~WBz z$*MD*o96d=_w$S=7F1nbdZ<(Aw?9nTa@Xgdg+97RQJ!bLeafh3JB-@9YUS8=$vIsQ z|2gxE=`&y0S!?GHWh>e})@!B%<0b3u9v61({G!FD&Y${vs(V<*?MEB_@%gZgEqkSv zHf`B_{fl{u(xC7A3U&QZ`R2Z6Yw@P z>%CCF!C$*h6y*-IoLaoFVo8&6o(rDBAAcM5SHBNZ=X}=)ebsxcSNd9bJEfniqW^|H zPe&e|_vV4igMNJf7E_ZRJ=csr`c7+%AN5*NysI4{=k86r>Fy~jIZ_@lKEu6 zHT4%P+BI+SlGnR7DZA8RRi(S3=(D_42N`)D7MKe*5`Zv2O%FSyF3pP@C6( z8T`m!XCp45eXw3--l=n={to@Uu{+Y)_qCqc z4euTO#~TN-c1~{hohQQn!uqttQ|Oy_vfjQIj=z8D;>)kZ%^p*uO-GycvGPyq^((C$ zUe&&4!J*B?Z7|QiiQ=`^df&D*q*uLz&Bp9_cHiauK0nlb($3lQR~LTy%DftHCt_}z z!+M7&W{>YQXz;T9C3BvfG^gb~`7xR02m9amf7tsD=%$XK-D?Z5G1U$U9R!#T#sv(f z1b18DB3vODge}Ph7YRvjRMR`5g-$4;6FLDxNdkltdP_(G1c%-U9b(G+X79Z!MrptF zzjNL>?{e^5&Ca&j+1c5>yE{YUdgwNOcHl6^qcx0fcHNpzp?*hwKj^;IDeq{T;e%t3 zp6X+m7!&$wVomQ|$7CG$lF{wEJ}vEf&XC17etn+Q{j)IzmqPxr2^{9OFbM_3|zNO90JDHttY6dsCKQnbi9rxst0osB4uFTAGO5(UljBetaS_Q{E zx1H@g?&|YeSH4uGpD6C9k9jb;eCG1@y(9g>lgo@wd9cx{rjH!I?cp$Q$@A^O>&}fl zo_gQC!0~pcKD+x5q_2A3^(o&82hXqB`L=h*zCE9Oq1E~SvhCN&%bW^!PfI*9Y4J(t zz0l)B7+t3u=U*+X-EMMD*!saYgH(N zDrydHzqh)0{HcX8dkUw$j$ary;9UJ>omX<)Ge*~P_W7xXXYYGo7KRT!EOwY^VmB)M~+djuJtl8vMON(k`K6N&l+1|B&|{pWQBdPIg+I8S{s2 z>?d`*ru2$_@$IP^Eykb@BN<&A`Tj~R3SZR^IA-v3zg(~DR&D-U{ZBdPUrTOxy4dF4 zL!9+wbbY54)p<~TQ|=eDk0rcwE_51s?)8PkKeoBK%aDBRPv3c?vD*r^gjC}AsQQwK z1NYL$-^$hx4W3x@Y3$0^U8*f8yVo(V`^fSsb79vpx)UpA&pH3WrNdk6`&2v7xw%v8 zq4STnUefjB8ON&r>D#5(5RO~K=u(Ped&myf?w_#fQTcCt>${(8yK=>`z2ob-o@$ZV zrRW;;>0L%wzg~xv1J^zX-1S)U&4UUHe)DS>#HoV!oVg#CklijW@Fn_hBPw6l`a>W5 zc}6>ZtnBc-7Sfr=_CFcdeACZ+XFoq-7n{=vcUhh z-U;$AieKszQd{I-SXUzr@^^&MUE2C`+18a?Dn&o)eRMPB@|+%7x(ypAjnH!3W=3~>v8vaR4(T*FCUK!{~1ME*tQA z=*zeJPF$Sc=-7i#w!Zk}?FXS5TQ+nn>3e-db^yjL%+X0-EieB5Y2BKuDt#CqicM6!J@g-r?tEJXv?Jh>T@nUbyz=?lTTjMF|qBh zv)irMhWij0-RNT<+}AdnRpI=r!P8z%oHe3%=+hm$JM_QbrbYkx$G-6&$#D&vQofqW zt1qN4i4Ge&qC(m7XKFtR**Tbl6zbjLLWC zs8i1!x3-tua;@sU@T>S0O&3i&+k5@il+%??W_4=q`V4ns@N_qCyI$$#_@LJFQLB1+ zHC`TGIjf`RgOWw9W#yZ@ZW@Pi{{*Ak)^Kygo>hTM^ciEHOj>wXo_D?0A2pQDflHcx zvu9cvryS%7oiCM?6bw0={i1OX`B!DyrxuJG7I5Iyg>_Y5H+Bm7c+j1|@kF`KgUs zMys~G?2Wl}Uq*LO)nMZEpJpXaNt-s$&H3`O?oA#x`9*nra^}94GTn+}Z@_1yIUTfI zknwU8DZ8UY+N_|1Z}TLqpTqB%UfLagK9jsWlQMFYS-C1TUOhZLyuI;-)Wb6=7oSj) z;GI!TpHlSdWSuhIBi*(Xvy*alS=pK#+ta}nD>`+WUDCoap)Zx+` zd$j;=0ZPT)J9cP+Y`P7ITGPfV3hd%5s8nil@@z~HJi~=Y_9-0FO3g^YM=QH9tRRD2 zcH3UP9QZ<1X*0C;X~uLUW0&f|$E-q`jSt3p+pDOu6RU7VmHlKCUE21VLBjPK)&qTP zOw6QcR7yMbLevmxX;HAhy*-RwAx4*kp_k!8u>P7ty#elMZLAMETfQdWw=J&pB zJKOd|P(!qsz0xsY2b&#wM>^cp+e3*95~S6q!`F3Y2it22`N`4SI=Bm^GUUNywe3Yh z1CmK-dqSe)TKiZqLM2f;hsc1BjAjYTx2NR0`v)b>nOugX-ZGI5E9jfJGaS)HxX z6LRiAU(M`nK}8kc7L&D?9}_!nA9Za34{N?)YEBM@U)EWHwAX!31l`$ zZOFG(-HTkw$+5$z%HK(;g-qCG^bpEsm$V@A$~3y|)8;uQW;5*WLukx*-zbIE((6ySW?S+ds#`% zt_4ok*SxG`4txXl#}{` zL2s+Nw^Hd`JIFIz`{bp@KDAZpGGG+kEK&jGHwywFM^-K%Xc4$EqDksa<;Y?H<{PLt7N~KAL zEZ9LjlMQN83wDuEbYz1%+n~{EvNUObu`KpqtYr%`D&H=q9)tr`9gwTm6;dPoyOE78 zFXY(c3nnX{9v*vEU!dc&C zV!!m!N#Pk(hp!HW|JzyRVR1XvRy~Z-3g6f5GSG{&R=W+(Lg&tBrk|Y_P1R@}d=tZj z4=rU#rYXCX&hTGU5I6`$mWSHgVJ{9j+!Kr?eh=BdGaoSMV`l*_)i9)LbawcTpRFvg zl`Eue@|D8yXVV5mY!_tT740DbW;#$|uhI##CVMbU+*$`q)E>L_uv){s&(W8@EOlD4 zk}PJs>`ly|x%7XLP_@N3RgQavZK=-qUyh4#U4uQ<#dycDD_kvujl}HDh4Xe0alXQv z3m0L;$&I*kc*D^t#Qj-#bK#mginx}-n+xY}#0491tMG>7Pl)@a@aDq3Fycy#xT+G7 zuA1=X!fEk_qe+Ns5Z+w4vqs!`BkrCN_lFS|QHJh?qPTM5&4pWP#H}#mb{lcu8FB7q z=|)+K+e~tMunHsVltPRD)tVXfP}_M|uP3K%AIfXl=I@n{ zrPuGjriar@a6L#j9lGOhSN29iOZYOlB$Dpsqqpw(>(Ace@fYW1f%_bPak3Y08}Sz% z9dDQLH-Noe!{0#mb{l{B^j_f&=j%X6DmRF|`Qa^?y?u-~o-P(|(AA)ujJFW>HWP0o zIc2!HM!I!)!#M@u9^Y~_h1!Au8Mbs_wl9ZkqD=!Kf=>dd;uh0h)<;W0+?v_PVFQ< zR4?%{f0qI&L7i~GgS}Cgr;`~H#-|4Cjarm{qjtpkA%xQK(vZE8;^p6@cq8$aFxhCt z-kRYr|JDj`-V8@HBs~(Yt?{h`-sqQv9FgKuPkQq=zEOMoG90x^6ZS@3mw%JvjpE}9 zQ2cGm-g+9}lJG{Hg9jSGB)Im~aT+cSf0N;uHk-@fa_~#RX&Jshr{W|uQ@=Pa z22L`mpPE1azx+v%mwzu`*<3D@paMI{7`4OyZT{O<{`Y0*|Ml`y8{ot=Gu!B$e{jAR z7)SU1FMize)#LrzRr8X|#TQ*X6tHKc#}}X7b8c2IKT8R&j$rFD9 z@|e-@VP?OFS^XYnyAdOn@R)!pV=VJkV2beHgu#6V+; zvcM$ZmlVY}#mWXoYs4t>`2}xeg-0ym7|`&Kh#`B*gmI6EYA60CewX8bp#fZ|g*oOs zU@d9*TA0)DwJ^u`O`hyBrX2*il^g(`fC1-{w@`2!Du+l z#Eh}ZAynef4}WXm{}cDt0RY0YSBS-E816DKWGnIM5b7N;WLuhO>Vd~qEoeFdL#dl+ z;suN;odLkOThL4bMrx4`*_hO$Oz9j4hHNcUIuC&%TgpU3O9d3mMAHTsvZzcnk-&7Y zpveJ-Ix0`&VPY7rYA24(p{B)?UtyC!d*R$;!`gfLbs&R{rx7vjwWTqBJ1j6>INDoW z8sjAgXIWk>9nknKE`{;(tcu#2(|GyzD~)M?suae%gA{c$kLB$*wG_suU2$oQFD;Dl zu{?AJrMoPWsSc6`i39yb;e-bnvS$j?poh_LELI#Jt30rO6>FIgi_vf%%JfV1y)^^XL0DFXztpT)wUYTv<-!$Uf2sMr+SPu$T zXQ>T;5f+!F51@0mLILm-cjzW0XXUC*nArC)p*l6fX;nlyhrHjz@yYT|$yp)9{46}mTZBXyeX?7i&E1>hM&2OS0D;&;O84`^ zX=i$_0q2);IQLvS)2ec}h-|8zJ5xx18EP%E84s+*HV?KIU0{{9sA7<{XaYB_MH7Rp zMKfo(wYV1H))KI27;7n55?D*Z)PmOHn}u47Y~Ie+qML_X$bnH+SjdA>6}YtV@@pqG zd%S$xwQKL~?d9WVhQuq>pRcd4RO;i~wjCd#pNk3?JkFPIOp%P|r{|;+%uO}=O@`Vs zlV&0m^hj0EsZ(;(+?lyXsKp~;>_BfV9ZkRZWfgy}YM{BvM)(5!PZ&dQriam)nQas@ z2>(xjPBxaOqhUnK$@`fP*c3v;;%I?}e$(U6dHS0V(S)O+aUtmT3bdpg8J*5-WCE@q z{?{Id{PCY2QpNt9+~3#^49lzJPeC(Vpd%LfSM}%V1SL(R&iKCsG^Bc;4W zprPOFfxbr5wGkYWN5}#@Hq527L^ul6@L!=3B`7j3xD+v*xR48x*oIOXgXzn~D*W%y zInbKf|HkSy|2dDo19~Vuu-_01DxF=4)u*tqC*_g{(gGh3O-BHm#Wa^jYY{19AojRP zar{qFm^KOB78I0u~dfUfK(1Fi4{Epq=xk` zRo+10kUBHAPLwLIIG&IyrDF5rAr;#nF~rBR*lwJwEAnT{X3-9LYy_pM&_WwMVpXUf zWU7e|m4oU*vd~IEV!^G5$_BHcs39P1_M)bMu+3O~((xW#sy?(B>WKf;v+BCx5C2$< zSYmxJd}Biy_7vdz3*Ag-dMxWitf%st^PTc3&38YPi}J>TT@mHqNhoK8KYej?VprO8 zTvT*0{Fp>BU${oJ1CNG3<4E#hL;hoCq4bVC8lDVeWP$N;3qih=DL}#p#E~;q@(x6} zGCVGb`KN*Fdgdd9Jj767Ss{ZcxR@qyexdNVK`toB#WjVOGY^L(@mMDw3r8;G8JD~c zkrRlRcs^~hPR>Hc(UGk1VdUPMLLDqZ8GFQtjut_1_{5SW2eA}UVi9UAGkIg9;4+rM zalCI^3Mp$50@ut`%`aF{X{ymhdKr9gPKXMv$HGI;Nd=w*xrZ^0}8 z?HA8{K*2wXF%a(TS)kybhi5Cv3MC0g_AJm?c4{69C?^EK4FLRgaO7f#&~RSQ=$TI> zNMtPhR>3!TfSmVXNF>f;lH{S2kq89DQz9rY5RfY&MJSvq8XZbeD87NR98d*5ka-*; zXT%hWZ?r6woa(WDK*)*$k~y`DF`_Gp=%DbB$N(r;K8eaAT86G6R=0|Pgy#tO6Et$X zs(?27BBh=|S-Ogeh#VIpis`ut;X>7^!;mW;2e?0pheMdq0P?^=iIJxc2afsafWI)g zOz;tg?ihk^41Bnw5KfN66w#pya_pzzy-_gVYLtdVpkYp);A28`TE)bG2+EWqV2+ci z*HK_uArM_0-a*1)n(+8?Mm$6x-ho1l$vKJ11w@e}L|GUWn53AJa~1;O#VM8?jKh6Q zcVn96g+Ry-@75Q?Cm+ql6e7414uP{ba>pccqJoKnj|-nwaLg>1!yz2?X3D&xdFG7D zm~|ynbkM=!r>n(I;K}B^CZWd(>c;e$;D#Nky>Zwy@ZL? zX%;5KeHX^55H&ctP{KWeyaOWz304GZ5EM?#r7BRkgE1VgFW`_hgm(u=L5{{C=8#UP zH-$)yA&3M|YluYcLH?4A`N3h5QTnKjDbSc11%`Kzh-5yc%drr02*vvsA#sUCTsbrk zWUCiG5jwe&zY*Afvf#*AnL==c9TgoD8Nj>lqhLt9WpGHMF)H+#MHpNhMaUvCuJS2E zt62mG#{`6u+ZsL;YRw{47G?B?N!6yjq1-G;;9Wb;m^l=jMPN)wf(&I7Gl!zH2u9-3 zp-hL6zb>o~kw+HvviL~W*o1_`a)uP#o|7sdG~AUlbYygJd_)M7MMC4#9YeFm3Jt)h zN;;WB;H#X4kUvu9)s%WE1;AN33kZs4PD0r*O!#sF9-~D-tP$%ZVBw`6ZokOu`%Ts! zL2$GV@5vFY+=PM$#UMpwY!LjZK^U2}U_=Wzste)ZNfD$0A}Og1h#tXQ z@DUPj6N40?@=z!%h8Kz98xh34D6a@sSR#fGL?kRvv@98XA2O_2Daa=d41Ku7QNU$a zTs#U)y@t>ZJX#)4P00t5j8l*!AA~Vg3?Yq7A^1j0X_4^C$bXp=bK1n5N-5wH*XX{A zN>A>b9LU|2NKS?oAsrbKsuvDdNj}L*5HMy~5I+()Bn8L_qmMlmX2lWd7f*e(roE$;l^@>#_%A&k{jW`Dp2WLoC z1v*EDgRrnJM?RFm5-5`}=H^ZT|Ml?K6Np-p`ln!c`7{Lw!$^xGk3K{}osuXZsV0ip zkT^CKWOgToLO3l#MVp3qxlT%fs35B*D)@ecSI!7F5>p^#))Xk1+cdC=MTG2{!ui)w zxRXbll26~ONCB0Ijtq+k#9&U|w9)kx!O>CCaSFr>h6l1x_<`iLBVCyfmrTJJtKs+; z#&JRjIc8!$L{reK9n4+Dz31W&j^_iRO}vpU5j*}Zab!SGMIiD|lm*9yhI#{Vh40nJ9S2gXH=8cgBmqadszEpq)T#QGwEq@z6V?g5ganDnyYG z9RUj#GiW{wi#n8!78)HBL@vYODOvCxODZQoi0W)!pMQ>uhK!94h20e(huBwg^#|Aa zhfNb%zazJO7_~I{YF#`wB1a|{WMt=N!?q1yKqK92hYKc%4359+x3&5O7L{=iC=rLU^L{&n{$j>1kvl{!| zfpuj{$(?=+Ll_M_gmWz7iWrvZrC>I4kV8BSgS}#*K;Y{UF00u9MraI#JeoXx(qxm= zDg|ID zV_X&<1KR>jV+4%_0?{=tBM5{G;3(0FDowVHg%N$^GBS|@8CejCu5uX>OfZp-5sCiU zMUT1fXGkg@y(bDzkww?%qW@e*ESTHK)r?Z~yDs|DEuFU+X(OS^qI+FN8c%b7-b@dQ zmh(nDF;4Wc%ZT99lIK3AKo~tmck7~uT}JbsOLURLqMKbtCCZe^&pPQL%24#Q%O?g~ zJ4AFrYoZlB$BWK)87*tH*j`a6zTmvsSU}MiFQY>pEU83(h>mzosl~(H9fm#<0J0RQ zc%mO(M#P7U%`cLOu6V`V%u*4v5`FP967-e0Xm~^xIL8K1%1ZRdE2M)7I&xwI0)>ix zcv&d#={h9%eYT1cB)a5fbBdto=?`M^G0sBG^Z7q2zx)& zIGnVyAn=h3uGo#O(b_y5>n5>eIttBZYz+^g1|H_b&`q)AULLDHrRl|{ZevbwnRu)M zJvKTKZ77PCr#Ugx-_+S+;Gq%1a) z&2h!H@i8Zr#|Of3b2xNw0<3Ii@QQ-g)|`&=jtJ;QCV+`j97@`mQ^v+d#P_5Ht3W8J z?tw>O3dSPk!B3=gy#?q>`SvKk&>3=g&%9%u{?u^Jv^3=g#$9&8K` zvl?!)GsCThhZ;4D%xbuor;(tWbpkIVL3ir}-bR85>jXYVf=KHGZP{WE`Ln^)UM8oR zN_RzQJSJJR)IfMlhk+MnUsyPlq05m`Lt&WBBP=Q;F~nr5hxCLdi#3v9N)HmY-fFbw z1rjj_%;zZ;bbV;Qs8EbvaX6I0=YZ)v!q`G7MVE!*iwc{P8%-sufIxC>PO}|K3aeLCvJmvv zm=HL_j$?!AU4&q^BR9HMhAxmrv#&Pd_dQyw7zi?Pnu1j*tjyBdQA{k;(iA98Pgo#7 zWHN;n%O*iYAx=;j1r%;ffbl~M1&h-Y790WFAs(|RRy7J0XC*8Y>-aHjenl0hP;olK zLa{m*%N)ehk}!pe^AJ96fI=?o84?j|Oj?|Ih{3Q^F_WeF9z_;s8!R+BmUSb-i&G0e z77C=GNgqFBpm1?k!NLW8h#x_Cqll=)c?F|_iKEr;6-58X1R_f;d}X6vCH5CLLly#F+vkpmj_c zzEcw>$^uKR$AkO#~7MK`RK zIJ<5VQBesYa9K{@VVqsZ11Ss6fU^|?zfUhU6|XFbb(CnZjQ1m+h*swd0WaiyImkKs zNYIFx$f81{6EXL4cC9Al1XjuU4vpUG?E0hCyb=s4SrBVy*B7WEEiT}DjGWCL@(ger@-^osB%HUG9i@aWB6dtmvM_(k( zbsRp!u_a1gSlP;bAXZ%%GrrM4l6ilLZ_l#D9XO7GDS~t3MX%Vp)!#0)ysasbkR?W0SM% zS|0Zv6Dh2{kZx%n63c3`FtE(51sehXlrf$%i3*j4;R^&G*~BUmsYQq^HjRlltW_IX zwrasx+JHAY`8q+gL!Js6!%? zTe*-WUus_ZDOM`O8>Qb=TvoAiLM$Z3M58)l%m>cclle;VMY}5$fR{Hhge0K3F%uK( zsXb-^Z_$(L1Np0vjHx}05|IcU%(o&6VAe+(06WN3RP#R0Ym7vu=d|cDxT&gx!T@8* z*|nmvR7@@KRTn>AC9;l6-N39DND<4&BA?QcDubdSQ>Vdfc&7?Q2r;NaJp0WmL`l*~ zXsVEMwkw@3!uD6JL5PC!bb1SIBZ2(gJXjliiyM$2@> zky4amZmdfmq@3thDEKtNHbo3o{GM_qh1jNMsM&sKd%b*i7phWW1val5{h+V8>2&V6i&aMHbFuDLh2!yfa?D{8GvSZ5lZD{7k2S2jKwNvS8|Yy;KZ;9euNWDEPm5mY(PvP)NK&cHgCkt>6RM! zAwU$?pFF`;Vt85>-L?bk)>?@~E)$o`${U-XtmSL1XKC$0X|U2k+jeNX3sHX$l-Qum zNey3d8eg4F6}J#z#;YeNE-O}Yc6PEZIa>>>(Ajl1&kdA4HZefX_8j1g9j(GpH7U_% zLZWD2%S0(~00Lv;A{0TGr_io6OpdS|iERZmHYXx&USJ}lVf`_a>LhToc-$3(69B9? zkiL&M5@NGPe4Jnak%Yb{7eTmGP$$R*adwnYI$k!+g^Z$qY%04+HbvG`Pck6q@R+bD zg@Vb(WQaK9ZJOFZjhC!a>2S$!YHkiQ8ZV+{u^)%GofvbTBYsF&L{zc?mqrI?=yAPI zVH~cLW2)GIZi+ytG{z2UONCiuQq7klzM?0qHMT7T^3zGoIiT*S=+;<^y*7dIVT@)g zrT8~AG%O7_%OMPtVR-=GZ6^UQWQNMkN@2J>^GuT*iyz zFWG9;j5Gt~A*3Z{L0yUVUQk6YEFvr<4qs0(TPE`?i1jQ|D5#gvX3Xr! z5vvWqhZzR(@C{Y4EHwtNGXimB1s#Q@k;^x5Ag=CFC+D#Kl`@VzP4CT+&co>iE;%t4-<3h-!|eGgQBD zjJDWfAPen<38%Ab6kiMUb?^gSJS2+Nl4E(!h+Uql+XsvYPK;CpM#RSihCt$JZN}Mk zsK5n5591yz9Dw3=Ur2$0u`pO5fwG7tuYnO6dV?PGVt#ZFi^xqWG^kl(l}s$<)e6rE zu?ke-C=^53OTj+V@Oy>Xw2D*7O4J|Zsb zbWD6_q9~RlEkl!566pk$M6!AxsWHY=t!M^DDvl;$#G=jk&3XvN12r5+!8Ka0R;$q& z)GAUU6rV~Oo(PswD}^JE@JQ_F#r{DwGpU59Knb#D9G~<|JJk^+$87T1f#)5omkhyT zT8w^=SQwQWx29?eh2BgBA>BP5!N`b711bJ6EFiOrk+p@h46GEv`Pm^k$thXtz^q(d zpgJAm%5#@#xCZC|@v+zk%-7ykh=g*-vP)ni)#TPdF9{>+ce z=AD_E?GlPBjvP$;`J0N!7=?i$V;~f8#417(}i5TV?P+JPUS)GHO z8I<7|k$o^O*x1$9lwoLAu0Eah%85vmwKxv2=#q7XeCNQb6cPkIE%s2WzP4ypQR~qB zV33#q-EfXmAxv`_n@$gdAcdJhY!sqy(NZXeQN_d>&=FY=kK-$7y@!jo3#Ac;;+SiA zq14nu9|%lBE08rJqtlT%dBFxiL207Xj~tE`qe7BtV|8$4>TEDYB>Nq` zmO8$%!LniJ3LTBVWYR!+kq9`L7;8F`%4$qmy=Otungtb!x1gw0G&E;Ysn`&l3!4+2 z2OI0CL93b)H#dTaMQI2^9Z^s+%1Hb1N%9JiCY$}lL`A=cEXin4Qcn47h)UHcbD0Q| z)fi(D#HyQP&?}R()Kpn&M2V?9acUjB&5(#vm1yolvplUqhbb!YorEevo)C>1w!qIw zJ|-{2Y=xMgW%Cxe411YOCU}xqaG~=d664Zs($Pj6pPi&-S(S%qMc~skv^6zx8X7Sn z6Jr;zs-Y0HxbBt)YO=sQg?-wKswg2Nj(tcgD~wNekd3_BL;8XAZMtwt%7=Hh-AN6QY|AVJLXWf7Q~~N3p#m4J8-Yx(c0|d{l@ViFP1aQ6<^bx*BA0l1%s}oL zsfCmc1x5+kK(F)TN~BOt(&WT$Vj=F|^CF ziHv0-vS}lqP+4j%B}zeKJNg<8^^|WsEkKj7(f1vNwa+_Dk78)FwQg?bx0kx7;J|YkM7UIM~F>PKz&=a5=No47OjRMui5gUHlj;-Xp5&8|^ougni zWM!c1L3(1L$fz5TR3Iux-Buw--N-if0>-Qxk@V19BtekB7(-TqS_i?zUo!t>aB0B` zL7ys62Kv0i8{C$vfu&CtA)VL&op26>mBGYa1?@z~On{0`qJ(WJQSov`SWI-hoE3vU zFDmd+DmX$R3xeZfS&rU-E3y>0Ou~zoGbmd*jB46S>ddw*7z;()te94aKq4l^ugucu zS#PGXgiIO*TM;4=qf;XEx#bgVA;bq!#vd8ZSmGd3Oc)(YWJV<`@^&JnL`6-_T8GRo zvLW-~C5?syVnA;p_e?eG+|-YVMEH=1HD^@byc>nk)_sh_30^G!31UY1IVwRxQ7*fP zWkI}%lFFq;8X6(;G7~fzs?gjV{zeEQWnB^H6(?*!D<-+E+9o2v2ztvtn^rQ4z;xzqAQA zMvY|>I8O@F=)zUHs9YG18OmUFDlU4~8;v@CX_=Tt4Q`=0&03rk>l~_$xkMOOXefVI zVktjGA(4%>&Q;~4N2MivF098L(Uc ziVemTe1y;nc^NA5TW(bFjGMSIh0+t-kCzG|J<_h0{a&X|#oAXoWk%D2`2v??>GTJk zLlqX?sUY1%rou~vMrWMvV`~E`C^kM%F5O5%BQh;W+qR*G_VmH{KPZa1 zWRvO3av{waAq+fJ5IS>%gurk%ypg_cE2gA06bOBY6dCc3w>hbmXzWMXb2Mm83LSvo ziA+nEDR5fyT^P)Or(7o(XUWW2TUa#lQ(!hW^DGwkXn~+7gT+b2ETh@MI;?ksg#T zEFwA(=TGEVpby6}3*-~a1PH?<$15FT^asR2ii(CN^>LDqj4j1MaXp#vkR*uQAR(i( z;7Fbhr{ky-Z`4uSYeC24l8ETMF|%vvS7PdhRKb zbpD7o6=8$1!qg53jR4(;`B_Lk%3GrHjsgF;&j**HGx$F!`wnlY

`Y{8J-#q5EqoX)wfRn;;-2|i!Jh&~cQQcz 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 z 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

&O! zf%i7nD>?bxpnzkJ4!Mhj=D8=P?5}nG+K26vM;u2&G-u^T{R9*gPWc6c^7bxuB!hwL44rgX?axn4nOcCt?Ff=vO> z{WjvQ46L++OS~fGEOeP)NcE zf(r4dS~{p7QM?$2LNq@(kDn9M9(V8q6qxS7%yhxfVDy&@hT6;zg>$Ae1enb(m{MT) zMdhK3=HC30FzY1*D2H-qGP=PZR**y=p zCHUJ4zv5rLV#O!`fnqGi!_c9?)I^Bo#W3+A#>tZoOg$H#VZhV}#>q1sm_{xWg9WW$WXF9ilY3GuTH_T{H7oL}ZA$4%36ADa>%o9}Tlm^w!!)-bJ#m`tA zHyS{^EQm!H<6)sZVCc??nGB4d3uYBCGhHxyfT0pP%kw=j7GQY2f-vSf(sFQ*GZ69f zaHACII`P%sZ+XZH9t_LuVmvJLC(8uH zfHT%EF&5)-=>;S!XI|4{|H^ZYu(X~>7vpis%O6;0UN0`_J=huRFEJM5Ve#G29Sab0 z%7?y4G!q!7d;)-xYRt`5KVWE&2O3GVhqT=AR~rcvkEknG^aV0yuB@bS1rK3ghtYi4KtNk}dG zL?F3`W}AcEM8bhe!@HD>LxTf;igFxDZ0(x>}mWNDb_vIb8Lzj*rD#g{YYnLwFI(6z8 z5~e^R*fBV`YuBzSRhMp^J9cBFfxa1&8VHMxo6`;*6NDY&AgNqCA{4DcJR(P1dHMRe zth^BEcPu=-3b*MMnx^0yj9<9m7ol83B0PDhY0D|(ycnNiwTCG0V%Yz2xgeB&$oWP9 zs08Cc6xJz_a611aOhZSW$XZ?w`Svyqmb-li*iTdgPrIgJ<+-jLn&zV)jUs{`kEM z9{0~VAJsQp2o6`y7l}f0t_hwAB3~1UPcf4szHn4<^B(xP`{<58at#-Z;mR2f;mLRH z^96+zmv69(Ur!YBr(Z3@7w%WSd^BfB17DuV>w$a5SEjy{-t>Q&-dyl4FPmPO`VK^T zpMj^zegtq)`-c0Wz7^!#N#tRSjIZK)bO&FQ$m=2TDP{^3zro|te^ zea{@lm;Ughi?y#`c(`l=IGXWY2hW|ddy)L4A z^CCLu4v#jP|0^`2M8;V(Wta_mO}sizYi_RcL{>NPTZ3Pg;6~H3{}+4q#pfzP=|MOU z11~-F^cMzVVGNTIm5_>_Cqd`gl!2z!Dth>jFS5eNQ{i070-V57NadsQ?!~WXnaAHd zfumXER{YjeH{cg}O7t2*B!9L8ADzCT%$|h@OFV$op5ldP;m_eAb~tXMFcCAj@xx%* zlkGqt+c0E7p{+POzlgps>+i3U(fmOPrr=@zbAhCbKIKgJ@AF%B&mMdW?9q3rh$cXF z_!?b~)*&2(z?J4Mlv2IY0by)~48RtEnSeb32LYM@2Lq-9<^b9N^8s@KhXT$3ECgHx zh!x1vm4L;7TLDV|Nv2l(dX$lAN8rc;x5aORt4!g)iLw+W%S5UIqjb57w8BUIls?s$ z^st>6Zv@IidA<(V6mTRU+GZME=r6Wum&#a|(-yEJYotoMQp0Eyn@Ug6jmpc)&@3G;&M^q_&$1NDriE z08-uF1f;g2C5*0RWRMCR<<$?rjpb#a%Y);Dhm`+A^J)7=I8q?(Gq_>S%OgEg3<=<) zi@v7LmHHO$k{OQwp>mNNNFDSdeirIMWt|JC0-Og(x-cIw3~(V}AHc?8Py2d10J;wSYr?rv(JNM ztFfPwpX3sUy5f2f{1m-RaqTP)nV$bJHhdQktwi_UJf5&oyiXGEXNmW##QUwdr&hg1 z@kJa3N!HY+jS;?02wW@CHY&i?fRTXj0+LNx2S~D94@ln52EZwR8v$nmV*S5#3E)=1 zjey$#w*&3~BvE2_XXzQh&jCq3djabr|1SU=0v-Tt3wQ{y1K<(B2*9I&I>2Lqv(fMWp90L}(H3%C&QJm7l3UjRw>7T_0JrteJ!j{5Zk z{5JXF55H*aft@tsXf|~Q9`@o9Ea_daLDb7M)sEV6w3yNiMLP{t zq)z23YlD7AJ*cdI0JaCb1Q-Q)1uzNlDj>DnbwFyjKLJUHZvj&M{stsD{DoiH4S~ym zqjltk_^oxyfz71&G+&qJ?2LRZjwBKee(7?R2pJwDNL(UVzkxfz^qovhIen)-rjiME zM`|H$NON}2;h;6Z4;S^BU_hRRG^xxlWc`%-Ehm%=vSGQA_dnhbNuaa{*HT7XrQt zNb(;JoeV3Zhg&g_)&uQ*z?Eg>A2}#L-)@VFz;KPDVg83A(%!ysBt#!nHMn6{QZ~N0 z0?~21#Ibm(pUxq2;CMKCOb0|X2_peO&%c| z#pdRcr=6aIvWnXVQ5P}U+-y6}X3JvbAT{A}S;BE5i7Yo7L@q~8ej&?_l2-vQCNFw{ z#7*+z3Bk^bg`<*__!JpL;uI;K6d&f8?{*(;AYCMT(gpI#u8H^$1wPJy1lS1poqz#= z9|N`n#Ke^81SXVB7d{6Z4E$ceQo#Ly;{d+|q`r&^Lg{kAV}S1go&ekf_!Zz0z>|RI z0lxvf0{AT;+4|FfEdYN6>;ZTVPz(4gAld%k08;_40%ikV2ebqJ3AhsQZ@`U!cL2`= zJ^;K5_z@y%FjI zHu1o7Ou*KFO#u4?HV4cC3;5^3t(5ko`B(i zy#V!quK*?jh66ePBLPPPMgvX-#CTCU8?X=HB0!8Ar7Hn3Zj`PCGyqcHG6GT`^g`a@ zW%}T1%piM#HVtr1nLcQ;VLyg_kmxb19WZBUd`v)zrV*g$~1 z#VLq5*B~WM1~QQK)pW||ySLpN6%({zvz@nVyeCY!}~31d@AmSYezno9nSU>FMF;UYUd7m(+cnUjiTe6q1h z_OYO+co8>VRP*=W4#?SaQ|&{_ag%p=g>zHAzm>T$WZ)r4*6<2rBvk_+J%sZ2zx}^s zkUaJ|W6;(kUZOPHpj1o-3(MsZhZqf^2e_DhLyV7^K(lfpVYYY#8p!uC9yt1-()}N0 z?xjsMl7sdTibt2kKZ(m#cJSztGF_6x_q5D?4zGqxKV9a&H7~TBJ{`$G7nPpMmnz=N zvmZW}r4uNmi~0fCLz>TA6Y+`YH`F)q4QXcQ;D?ot$35N%Dt#N!2KX*uCg3)}L4dGb z0{pa6*c$TtOPfN7d4TBiLOx)3zyd%uAZ%7?3ZMg!>=`yUm(n{%!vMztVxLjz1i(>% zZv&16Tm}eQ>AQdv0ZFCb0Q?zn3g8pKX@D=F4$}bx0cQZV0elOv9pEg$VSw`hrvokk zTne}d5OWq`DIo20Spm2Ua3vu8SYZtyZQkAt7zDT#@O8i)fTIBM)VlNt;OBtf0`37k z1Na5tHNY0REVfXxAq1BL*81=tJlYd{U)w}A9!(rG~Ifg}Z?B0Pg`}i@tCl za3|mcz{7w~0e=MagfBzA))&wVDp(7!E+BT+m$n3~0~iA62dD+C3m6TEwkV~(+X%1_ zuqogeKo#H|z-EBU0haU#vy8(6u zj0D7+Xr+At!vM1Ydjbvx>;+g1_zED62e0GTyUch%Z=(4EuL4|AW<1c@@z^#yLmUqj zo|y^}q)RazU}=i1JsIk<)?QwNprJszC~xY6fk5a*d?$?ARGtvP7XZ5e0!Qbal)eH8 z-?UTGl;k7EGbr#HcD&K#z$%~ z$Z&c!C0z&*vECeOG#MhbX0t9n8U;67ObI+~sZKs(#)ddn_!q>;)j3*Yh)iI3shqy9 zc&jDFsKwq|UXB`Nh*2hWG>hE`4DT}mCdcVXP87{539NxgbrY0SCLSrGy9+5&ENo*j zB3}7WBrBJ>zDV|TC0jJCiKskYE)=7VHODFt+ytZAWY$_E)$xXST_l?ORV|A}M0b%G zWzuQmHTo1emWN0{`z4sDsS-?jndm7JO$LKSE+Xj)CFvy+Wdb!15vqvV^B;VDM_uwA~KLniJ`j4U{qUTtWhRI94oFw^%be80w)q1 zJW?LFhDeRm#c5eTpag4*NVC?Is5QyxS`s=kMjNM=lc+7Bb?6#Wb?b;ojUi60iXc~>65~KM#DP%F!dc9VIx|mXANz`z1@VHik$r`6N8j%Y1 zX3D&#GIPcyXI;w~oplv0-qYrhYAYz}C@s@>O014Du^64%Vlbsd;lUQvtRbShqfN1t zg2iiFp}L?TCp#VM6#02ftxhtU4&V2ap4+nqug=iW?pF=*S}Q4*9yN%JA>mRLi0&px zbRDX%h6Gs^h~zGlU{TE$vED@SkSU0yHBlsL52G?alQvq`K5Ank%9#-{CRQJZ7o)xX zt1$|iTmwDR=(VISX2dnZ@<6vzuqNy6KME4UELEq8GwZBqFiQfO+hB@Q>zQMw3>ri^Gx;PZ?Itg{(2Dqb#gtC}Eg27pg8E15Pxw*UYL-EHG{^ELx4u zB4-W*=R!1T6Llz?lsOEY3mJ(UqL>Y-%>-(Rg=o;r65?266VgrKND~a7iI38Rb{Elc z22Fxq%Nml<9wM4GR+Ji}D%oVBc#0H_&J5cZ8N-y62zXJO8mV#}CD8>wgICX~AXRGc}|sD>feGjBmgi#RfCg!5pmYKfJs zGNC;QZMJ9-UC&BONH0Q08KYpV7+zwo#+XwmFFmUQF?+LwjY+O0^AWL%Qfvb=9+)P? zM_LngCQAYeOudHCZX9h)pr+&`(s3fWa}vf>i9!~cC?1?b%BzcHjkAX3kf=6Ujan14 zL*(*M>51Yd5JhAs$BK~d3<=X~=KA?LOCr*si`Q8q)ELg=@LXMIi7{!_8uZv!i1rm& zJWHAA^yWxQvQ-WDC=o`~njG2{ju;!s$T}@&X=yN!u(n4Pw5)Rx-c6A4BoVq{(jc0< zlZFyA5?L%Fc{oYbtzp`Y%mx$9(@E3C8TGnIodxFA5Yb1V%3cNs>|Ki4nxu>G*j2{4 zNw|TG-lPx4J=&F+|S{tu5L50ZSB_edzNfg~}8rW!rB06-} zN$0^RwGP7+9xHqM{{{|J!Vnj&kHBCasWp<%VAUAn4Hhfn!Him?;AeB|80$~6jMHGO zj*243J5g)Zz!hwZl+w_v-Gn}d2rDEH8V#aWxCU?xF}|A&dRQKH1guFXk=gwpnd8*S z)(GUEq|?BcYA?pYnJ@p4fd&S_YEehy^$lJg?|)=xGZSl+UL9@5(JkKozc5)SGSC?+ ztUwo$*QEkwdC}eCHEKN#n282GCI*;2@+@5HP&QhW!4#>5gQ~NjchOwLN+w4wM)gtF z=YK~W#<;xm{}xDb;8Kw0NHTD`VyAE{7PntP&EmKey&qvA}Aqi z5mJ0(R?gIqkh+fYeLZ#`%DOV86hQal5JvWgaPFm8&n7IhOMGa10z7scq?lnqtdV*% z=A|@%5gG#_M@OM+&}5U$FcB~mass*U%mI}s7!93Ks9UpPgyLW{f^d{kIYR>Uh1mjP zau*a#=yvhcN8wP@q?70#O1cTY1%$>JT8IpuN`?q+H1aVd#p?~Qd@urXVZ4-V5(hGJ zVXCHNf(s_`F($GYR3dLBlS_tV;?aBJEoQ9IaAqGRv*>OkR|RKlk+ZszQ<1lVl{`i& zfv=J^f#&|)O^-Afxf4%JHIz(dBnUQ>7E>UMp0tKQJT;X(%-hjv)QK>)%<4%JuBGIX zbjry_c8C(Itz=^bBE=+yaq_kldFv>7nGDS-nCrq7;KPViKtClP>fp*H$-`gC#ZpT! z$_hYpYARk`B@?Gh%`dS$r({8Hid3Ym>M2>!S1g7|gI<&z^J*!p=ao$I6p;o5qQ0P{ zqVwpYbXrY$u}T{BqLQ8G#Aj{tY?;PwO1Qp~6TYW`njEK%acTo4m81hA<;q7)6B}A7 zm4-?_ah^-I(O}lmIE(czOrvD|eo4uV_QsURq%|5$7O6ta4Wo1$DLI)X!|Drn{46>e z{Uvp4tYp-QhSjM;l+3VAW~@xms!v&dsi`|C`CSudPLUxAZ78W$u#%aXOVR1X>1|y3 zI=XQ16(>bcl&mYxH{<-Bl>AKH;T0J5SZRyXnd8_TS26}6N>*b+gkEQkf$fz|zoclL zm3)-9UY+7<(IrdWMagM4>l2b`!72hqDpvH{sXujf;bPM-tJE=_xs#Vq+}&Kb<8^T0 zHE@D3DOV0tQhyFra(C?<0e_U78ManI4iKg2!b1yuvf_j(V@ocWHCU#1uaMqRruV3j z-btqStdJfe(|c7&?<~__sgT}9ruVLp-c_cDS4i(B)72HyLuGnIh4e6)9$6t>Ez>m> z(j#QLwnBQOOpmINu94}{71Eu4W=w_jDA}^;Dx~AQ0?85WQ!ztFnIX1fhE6hrzG8+D znIW!XhR)1OKL_>29v7XFW-77Ps02*1XsLnlm<|Ik&c3j42#12L;1LZ@I%x6QB(2j` z*CxY~nPnDC>A}L*TV-!vWRY^fe4bK)Ge>jdD2!efoG8h2$8;VvwoppZ;m`18d~k~X zF#0%qM8(W76$&$aMA0VGSgDV~I2cW)Ra}*)1$aY(g}GD2j8!WzC&ZhvWNft>+Q}Ww z*bqCK*kU)9XlyaoSQ1S%vBefk5{;Tj5_?ND*4Vz!nOC_Y`p)~!eICDmey7~+Yj$>a zc6N4lc3)dy8lpmi@b-l})9Z-AXeSZ_$%u#`j9p+0!h7>u8~Obn4RMA7%|?&g%N>< zSS(o{-x7{Io)B5Vt2P?=QiMEs;D~SxR%xb>BIMBmN6;jRhCD)28F7Ax$32874;aMk zW1>Vnc6Kq2CJ&Ra0jjcf){kVgxQA-x%7?Vw(h z5af{pBhWl%INnnz9Xs`Gge8v{7>hksjiM_ujyy~-!BI4Z#y3Pq9w0CdYBeMZjRNzg z(s-XxiDzoB=2Sj+{w&ukO8LAyIoLXDKI$DpKI3{^xq0=YBSoqq`T z`j23rV9^i|fT~TYHA*!{A}Pz9M4TYOh>-XSnreI@pj>`T)J1cS9{_^tV(OSQM&D%b zv_^!zAViAmAknpyA&IOm$3bK!HP{63yDWIhq*wRwP`rT<6B|WEDzylS<*G5thHJHn zS)L}5q@OD}ok@-aoFNi33b!eMwIniBb0P;8RTj&o50cQt8LLRF5#bqVmewas*CNcUr<(S&G>eG2ck36$V8lzgX7W zNGVH^Yf<|tRSLru?KiT^1*m+kdB-P+NPhy=cb}rt7L_~)6g{^nPW6p~?poU?fWPb_0puN*rV9B{y@=X;R&QzcZ zraD3`q!=|4*}a#hcXUs!K0!QV#A2N^adGR#iVNx=jb$WQ3e_#TTTm=qV|%Aj$i=je z2*zH`B&}a8TW+eBXCMP)F_ba+892|qUajb=ore&7SWswTa9ZVjofGdC+^ds~(=*loL)gz>TP;b0DH+#I|%qp1+$l9Ibi$suI(5a!Pu|) z9(T=Y60n^dVOgH!77hRbk|%~AV%c9PI+@$H$UZDIBB~q2PPI%+`Hcn;HD$VOkQ818 zlMg{l@@G~nk@&<`7=&Yipu60o2(0NUvj(t zh7^?cAd*s=18u8;r%x}7$zkqFLxeyq%0QFmDw_#b%)1o^Q|p)Uq^3`*bQ9Fr2$9Cn zaDz+Uls9MLi@ z?)!0I15*kv$O_4(Q>ue-3R{pC$2lj9#b-;<2x`|i8mm%iv5mbG?eC-Pp={AbIPE&C zrxyF2lJt@~ksvD>QJ`Unkf>3|Ah!pxhcRsoB-dXc3)zISl?X7hNZL)i_0os(qCXCE zU(?>GAQtV5#4EKLI^&zIw6Bq3_sl$f8h0_JAi+jMI$m5 z-836NgUkk9%uHg3OG15F8;J_qP%w<5K|VKw<=2ha6jzVaiWp5`Y#`R1)5<=wbdM3+ zJ6d|TPtJcxTrB2w#8G5l9{E#;NN$X&4?~)4faYK#E`sGqy-gS#80wmyh{$0OE9nIF zwB>dMnEJ7I8b%4pr<3&GMk)&=LT8zYr@u3+MCXOxngm7piM=&tNxeh{Wy!q+9e5`S zitL4>k+^AxOXW>P6bb+?sJvtWM3SNrpwUIVOcYKbJ1WeT%1AOsIZBSCK-Cu!*{?TP zYKh05BA%!cJclQagGBENi`69eir610=OpPX5^=Gvl3`K&H}MQC%Bm_VF#<0SVPZ(& zsSs(u3}wqUTA@yx%UuTb%$}0k!YqWN2h7st=pp8uY|%y}a}5&j;tONeg@34ysMq6B z)*Z-3b_{6MM+iG0$u>jY52XTh!|5!kTG4J`i;*q^ASt?7ND;iSiR&&2pnRWz1^pEH zv;HKB^r!+z)9SLI<(IG2^m<9eV46f@D4%>t_Ku7b4bE^Qx`E}I1Z*x=nDxZpJ6kTups){)`tf3dYDRg(NHQIklUH<6O`jit_*tTI_B3@|NB6j|i}@MUV& zc@RU3{Y)0hy|C0zTvSI@M{cI9$7X&e322{8TNJTqLP*zWY$lPG@jm`&3eF zu@Uvk$?le!4%ZYa5uJq1V(2kQACOd_=Apsz0+yN=ASQaAl9$b1Wj{%&q70ch5j8!f zNIDlaJUbnFphEHMBw(^NYkf=^ZMrSKmlY zXjJdMk<13YcF|z6J~%=X-VJARhG*k&hRjS24!89Zl@jeP68;x0v9sqFuL@JNdYya8 z2oN!#LT!x9M|)oslH3Yf25O?)FD$d<^`bPPLrW+5-GR6enl>@f z+7i6Mp{0QKPDADLNcN3PBh?7a_lwj0gjFbGrK2M@DK;J3oS&e{q${GR*nK70XW?Wm zZDO9m00~J#R-*_({n15Go642x;c62-yN&Q)sKxuU9J$4lQ?wTJ*p^_>Ar3WYf>_kn zY?%g*b4|w$V`9Uk!BPvvQ0JJR0b9(fnw_MTJy5Q3kmcsb+8QS@jjMZdGBb%^Dhh4Y zHqV-KCTVm4eNsia_opPpJk?S(HkN5(SSP5&p%HnBMQ{aaghmS}qqG=&WANE6CpRoP zw->IaflG~piqkO&Wx4Z|Ju4&C9x0<)Phg^r)KknMahYnXGVUjSoTv^(hn|{Mv@9@D z=&XE{9nwoCl^aXAB#sn13^g$iuV>i0Qz5D2t4b{4+~0&uGWax5*oXw&x^Mu8c+iqw zKBtKik;D=tn$%3Qa+37~r?x zxG+SU+7-D1{W9d_+$D?R{A_Wo;0JB+;Wz!rXk}L@2(OQ!MLIs%Mrst;&Tp6_@35744KI zj+0&JENiLl5;MfrJ9Y1ySzA`1_nH6L?NbaJuOLPnyoA&^)>=kL~F>aC+R#q@1!CX#AH1>&bs}7Y*Dv3-Q|B)J3 zrYNb8gWaGB8SzYKv6my+y$f>G@JWp+2Wn(U#ij)6LtWq3Kmm`&Jt}O_se8bzg4jP$ z714QX+-8Vp7QK4w;zjjAM6>AqZ_AJ3anID#T3}o!Wu(1wKqUU4B+n^AO+z$bzh6Bn?fe{%B(o3PF2%m?v53kO(E9c03#y<{Q*7 zliW9i{mGdUIWzYNO&wh+CXeM7PmGCOI?qIy7F#qa5V2O#9ubqecBKcATxk+|kgTm} z0!F{{J@Cl7ladHIkq1J~o4Fk%A|yC+jyuX!q~la- zqq*`?k%HKBP~#_WhUzUfle{OkG3Hg74$^Q=DMwO5x&wlp2Q&(*y6?rzum%`AvP2Bf zm#d0uCK(u%Lo!CFM1`tPGzZ;d6EP3U27q>WgJ;?sjtxxWNQJ~rYNtuhLDOd~)PXiz z7&02PshFK~+WsxM>6GDOk(RvAi^pBHP)xISr_14{Nr!~uU4|@1$=~24=3>Ap^mODY zOa3mnScwA~Z1AgA-HymwFyWHnNkoEUXYakbn60%pe!61Xt(J*b-VN0FuV?^iGhSKW z5#2joiz%x*B5m6n5iv8yjT~CF#`8@Jb_|KyzuVjW8O~H>yyA%Wy0;v@eqyg5Q!}sU zj9WQ-=aUt-YmP2)on6>^LR|bud?pm~ZFOXr)vA?c_XXF&9vy#vwmBl<=Zv_$`jkETlGZCXUK>;vSFjl(#ThKX z`#wkFr} zxwB6{`DwtQ$9H%9Ii+mjsS8(%^B0C4*Di$}Q!#%De{^keQSI;Z^yJc$HyK`>-1^mu@5XG~g0n+DU_8eeX}-IsI3!jeU^W-M$!zA(`yqx z66#NG^~Heux{{Gqe%Z7cXU{NR*`tp%-RcGdhO{s_pa0&%45wZkGJ1KT)sN3#ePG+9;Z0vTv8P3RIyywBy>^g0WE_pZOv>AGvugH`Rm*f^(a%cv?i$b`<1QLCJP(5}31d&fT_rtkfcwP*Kx5;dUN+6A6- zPu~Bz+rh_?kTablqgFk1j6X4={`~lq!+(W8YF+J-?aw1m_e}ii$uL#pg-I88ev9*F z8LxppqJFccm+LNz8JgWYdFX^Gqk6V}cJEflu?M{B2Gw718)xq@-dvZGiC(@3ZhSTP zq0gYd3g3KOu)ry;hfnIS_nco#4BVE21zX5ltvavrIQ3zxF;0H5?mfp{Za<*T(5 zd}m;#Q5Q$d+IM~c^d*t;e5wR^wtnN(g73y3A9*+A{_TcOA63nKRPSuY{i}_Ci&=$3 zOy)A)pt3Vl4~`nxVq3HJ$9C6fIl^(_$m1)T^)EiOWv$b;qgR{Zd`HHc*{0g4>%(2L zueN(~rEEtbuY?(>$fA^XBXit9O%AUHRq2G>PI&|`1Q2?nwhtqw)qUI zw)AP^?#tJ%>A0qKSzp!9I9rMF)E^Z+{c=;)A%>d$H=b#eIqvsiH5VRhb!)+nM*5tc zZq0C5$}YysJ>?iNW=wZGee`AR^1$ClwF+_Ezao6><)3GJ+TD$B`zh81R;7GH|DN5l zw$mTWKlR@5!DsbG_gp{z-0;1L$D^(uUNgVN$j|=58DNZecV^1RE_o;4&K_v{x6SD{ zhZf!$xIOgmpDtY+(sEP3&8>0h%M!+$+-_l;=M#IztaQ^5aQ(MjHynZgu#er_A zRrRkPY54bs3rANC(`tr)8vjQ6@hih!XKd+|dQWxJA@!gyry1`9!|yQ@<7a+6p;vm|Q@2gwe%<>7Xzvbh zmU2G&$hDAd*Kh_=HOhC^4~^=&_R`&Lbj9=izX~3&Iy9xB?cs&BCUwytS^WI#O`tcN z@%9hiwmhkx_gm{XEWFj@%<;Vs25sov=I*@4(+X0aogUCN5GRW>Ufp`z-tu;McXsV( zVcxON4*nLges|omKJO*g>iWxu)!BDo*IMG7Ahk-tgF& z@d-bTeqOMuZF}!wb1+rMcrCh5i>o~}Z{7G4HPfDUK5*r6ZGA}D)l~)4S0*&w`$hCO zIER< zwRdOWj6}w}T7USho{bNVdEd)%*lfxN9MF56>cLNg3**}?{dBtT#-8Y`b&U7r!;bzZPWuEkeE#@h*~U?g zmpdk0OL!3eB=X_Vlq-{0;PA7pjQ2rU<(8kEs`B;Zq|=YzO7Hi#SEKhXdoJ|*G|Iov zx;}@z-LTLXhlr|GJ!*8??RRa>l<$5C_9Fo-&^6=3_$}y}ze(QM=7v z8xp!dsnw;$51o!rzulsLrTU3`ro`f0SH@eks z$9TW~KC*f3?U!4xm=qA^tB+P4&p6xY!0L{_e7fT7!Nw^eEpQGk;|)qUwng9TuaefD zmBWN9$KLE(`@}-G0~>Z$*>vNNtu1GG;@l}XYid=)&zFr$-cxtl%pt?3Egf5Pmf>K> zdL>=XUoN%_XwQ##CVf;JKvZ);QFLNy=(PKY2iKY!rCgyWy}6oxgVb>WwwGR!=(8=tA#7!=FuQj5EUE@Ig<%xBqHP zl_j$r1KoaH`@84+>RzEIo3=XA@vFJ;`*s)Z*`qCIjF~^);Qyn@vcS%9!yOf`|O+JYlb|$_Vvtl=MU$V_Woh7`>*K( zM#uHvf;Gi(8`UcB*tL`Hb&jk0RnI|h+^qGqG(4n!*XFyQ8b&_-qin^>IwkOP81G8( z{@lzUeb$5EkWEQ_&e{Av|M0EhvDefe6x^@3?3)eK1YrZ?g>P`5v$@sx(H9>+&bxHB z-k`3Jhc5E(6?xvLPub|6ZhebQp@~-} zyf#oI zv%PLio8rlr1E-#Fs^+w4#y2azozQB~MR@ylh~9z+SAYBN^MS+KH5mW=ojHFbZh3yT zkE>7BH4E-$B(6Vm6y=~5s%n+X!6>`eW2cquXurVW{l5L3&koEhs4`$i|2Mks+Y!>g zZ#?`6#+&=J_)+)3$b0EY-+sAn^@oo-l?-d_8r0#^A9Gi}D_mRTkMrH&ldDzxYQ8pN ze=EyTH2rab=dB~M-SOgKaO+O81Gzc z`WM~5jw{wp$P2Dnug^r6dTn*7+xm<@_PXPxqOX4cQV>ou-mxK$mmkcTck98eQ^PfJ zz2CZ2>(0@*9rZf&)YYlyviXx_+zwoq_$zU#l2Y(^Y5s+oH@}^?dUwN}^Y^(fJ(;nk z^xWYS@i(p(;G8+eTVA8)z3;DPCA}SZYu;?b0_P#xhuX~ZHwWG8^i9O1v$bJ^wlkh? zty43hQ;ebWw&M#uFHPBU?n#gHUpG-Xw`;#4<5IRIk&tqhEhe>y!1nhsSiCaP{8MJu8mX z__oK~FTTHc^8@skjMsg8zjhC98=hwQdu8M<>RxlJ?fRY7*YptTK0Q!1(rfp7=r7-- zd<(+*&h50J#>_e2Pnoyivo_ATkKM<081<9$*ehrDzteg!1e`@zdht=N)L~QeTzWw8IzMtF9&8afa zrqO5D`b@ib*X^+&Tx7hwYa3X z{YN#goc_nI>_*tiQJ?Y+sq%IBV!IC2%ic&myy)bUu}A-CTXbZ?)b*J^u9;G4doX;{ zL5z2yFd@HXk3LJ&7EGF3G^yT*G@riuvd&{i#PrEs|KZ*P=#Q2&-t78yt9182)c&;| zo2%p>YFj)k`p~gKhSI3+AH>%6{_=1*&c0;4Z!S(ty_h|G@uf5O2ln`IT;cidfgi2; zc}dOjU6+6SL2<)eLFm|k_?w@-bL7@dZ7*NT=zKY6ShJfmQ%1YGB|ILY8~V-fGc&6U zgxz4g(x>$b4|{Go*?Gbr_v`)sX>!`pvUq*ettnMAmUkG?GXOFHH{A+tuXY-=WAIRV?bfCt$EDeagzEqw4*F zy12@C-6O(6g8G%!OMbuLkCXQbzFWRih~7Q)^)GWzHXbwoZG8^>d*}@MBgdtil0$Ds@(7_V*Qw>4T8J!%+u*x>JWzCqW`x`Jo= zpR!LqQC;nHuI-IKaRw{ny*q7`>#a97gY!K{#xaWW&gah?s4sW&GDo2->km1}cg%<(H6~-7#;`l=5w`YUv*>bMDMpTV$6|eZQmo z!Brb_{pZClSmjW=#+&tSpd5var>++M&7UVS_OJ3-_)n)X!}itQ*x~%W{VnP*np)p~ z^YV)x=+7DNa{FaNo{V_-?3<(KrZ+i!>z&OH-g)*~_w-Hc-hTY<#nD-T=(jLNSF0)? zTGKJ|waQO_eq*q(@~r{eJ(iss*ZFBmQeQ*6=HJh~xexso-2k%~^1Q!F&Yc zjXnI@O`ZF!YNs9zoA#)5*60D5g4PWk3cS#>sTN$=1RqpMY_dg9I7Azut{>Q~lt zN|gq0j}Ov#eS)*08BaK1*j~KE&EvxLZyF4~Iyn8*YF$d3(bfNayyp9BW9O?b2*PT{ zJKAY|(fg_ywfFi@Ug`3?_c!zYI(srV<a1mCwhf^zxU+8 zi<`oHw)F6QI?w;ZVJWBjR=t06+oN2Z5e%EJR$V((C2rf5t&gubIeIVryzeK?7fm}k z;Iqw%$7_6_*{O}wJ&f~2yvtXee(!I4tKR)FEBkvjT^?35v!my&$BWv8S8d_6VFLV( z9gMf7@y3XqD}$Ek)5rfkdExcQ{EPMea!IleTGIThozv{9WW&E|N%=l59DXwELDN2w zpWAgvDV#7eaPP6RYaO37trGIqd)I=hj>1bX#+$RH<=)3Z(`LEWy>V~%#!G>lJ3O*e z$J}0?z4K{}>qBlVfm|4G{O%-&uZQosSyXsu&)HA!y4>IKC}Ml}-wO`qMix~2AxOYJ z)mD`6u&&xgb2i;JO!DgSQ()z|E;h+Ce98jnr!;BRJ9*Q?0T{zaFy6l8My1n#niczg z>a=;a?awdk(d^G=KPMfTlJQNe@Z3)hKjk|D#EY7`bsUIy<*9i4tHw$!tzPY3=-0l* zK)ipzl3TsHN4h~j(93gRdUjG~Ua}TJ4^IzoZ>$9I@En+jmsSIlamS?=0GbYJrQe5tRk?&bh>)F;>Dx;nv!+tI_p$p z8pv3scv$4ENunhy`id7Z*-E0qZaC}dD4KM|O9lg@A*Ce#4BXqQ&15FaQRM$-zD^=&QeF*}JE@{_L}g&nKl{?+42yO6 zq_$wtSJd2>Q|LS^=rhlKidtix(kAEPYTjIHRI}N%tmq_KhedsIzQ&4d^2C=FJYmyW zXcRX|SER8*Lk45H7@1o~axkGFmtzH|pO)lfrxjA&^L&b$+ompbZis^E6G$ySeSF%aOWxJW_ zspSpItmhu(C*|g4lVWgJlWhe@3GY5Ky({kAK*jV$xS%{G$11c$_pO2zqo}=i#R(;2 zHz&RAs5m8<9G%r%Q&>WMzLl(Mh9S#JGXdZ#HQ5THGR{d`p$5TJc4kF;GTCs5Gm}=} zDklNDP;sTgCPyuq1*>Q%8Zu5SGUVuRkWlJNX2kv*N7>ASDzJ)|ho+694xs}~s1p8N zr^Yi2+17aZNxD>?n{PcspNYM21}kYR&3ghRH0wHQqWH8+Ju`VsDkq)_>B1 z#Ju#(7^0H(QG6(g;tO&$x1-(2{d=`pIGB}SMrh& z+Q`YQ_*9SyZgmNIEVd|5Q~#UxYb;K7vK5p_^0~DYf1@s~wy?_lhxm%9!XB#0=&79g zvz~oW9KnC3T%_JPdQ7DxykffDdd!u-z{Gm=(MZMp_DMzm*IDIbUOT0tb{M@CUaec9 zqn8vu-3p^idF1{SX>pl?T~mLD1{t^T?%ZE0z0k1&MB~XRCW_in=FMKgu4ptp#t-( zD&uvQLJmS1LT;S)f)sKPg0Wv*goQ~V2O$}IrJFKdniO&n0&B{!5Gmv!3{hZt3T&|g zTc*H{DzFm@3`e#|dDuxI2fX-epB30I3hb%^yQ#n)DX^ysjLtk0kWV00jpn6`@oi&0>4 z3XD#1Z^m^*hwV|wK{&0z&KY5iadrUXos&WixN-{nMuj?c>Rs)>Gp&(V;Q0Bag+W!W z1*6fwdS2l_k0`s*>A1WPfJby5$?3UbK$n~-giVZavyTlcx#1aB8tfJjHZj;u9X6$g zE4IX5LDq;5c5^T3LO~&~rq7A(HiC^9b3H$-WSE;;Ff^i+>XL1^cMCYLh0#41*u?3e zAoe6gcfrs`O5nl?!b&6D+)F3gA(j6G`ZmjZ7K+aO0y zm=z|H3u#&y@T62n`8jklD-c(f$gCoETSe@(Ah-ZYaB=13MIunjA0IXawYeS2ENr8Q zzt@o9byN#Ffn>4lKgr@XbKzfo8@l^4c3osGQP}m_b+s-ffCA`heI<=kCx(|PxV9Gey9@SgzFBhRJ%x%5%TrN@9?P77&rIr zD(o(lBt)GmDSH@|I84Z^BXekP%>DY%FeKBFV8U1tz-5(f)I_hxU!Qk9!jxWsL@$!) zMZSbyOQILaf|lqRBzmkV$O$d$`P6u#Rr)Zj^svMfBZrml4=dRdZ?4ixeR@*90bFyJ zDEX_j*s|HY^|ESHgkn-{*O}D-iPbd9tHh|(VH0EA92KS*D^4^ra>>LFCoWiIU4K*q3UhAuX=Oqu-d2iB_CzJ;dhU)SI>c|#` zfTB3#>tngbz+`~A=t%1i2O|d;bEZ9^NcPY1!LOtA>q5U_vWD%qqwZR`ZeMEW_I%ew zJ2zw&>2K#&t0V??9l)@RU16*>#$u?6qkxja*20Jy6jW0XobCWo>I?)azPd1?juc;A z$Rky@Ll*d!;vJ3gj^)KW8{?hJi+2}BND?J;Q5x>28y(J&mM2UnDK1?(84d*+_N4*#=Be#V!|h*44d!t+hRl3n zbqgxhO9QH#Q>k7WUR|c*ES11nt~ra;j->&P=BXV^!yR9i+Swwtb7_FHd1~jMvea%CsohEg z+{{zEm4>^$EVZXaYR}RDPxI8CrQx10OYJKd=o0+_Sjf%HL4Lm_uEZR$K11noe_9>3M`>xf@x{JLD7{TQZ) z5l!qY8!vpBny%s-0o(--bMxFD46RlA^~r9L+|^cMUG~`%HgSxbAESy8WD^%QMG3<- zP{L_s^mJky7$cFH>=uW_Xl)bOj|(dmBleFXkI+U?z2F7-g_Vjdi1uCdtmI_Rr*a=6 zVT4UAroLSAzFvyMy{(jQSjjd@A{c7R=ztJ{kk|NyPMwU6AF~1Hq8)~V+ilq=5R349 zDiel00;KLVglJN6iy<(TiMy+~3D=!ooyjrC5;F888M15Q$vWg2mP9>N$*?_ffa^Dy9l6wT-8_+&!Fj;L1l z{u79UVQ;-Os@B*t5{^_zW6J9O6R0S)rtCI}HsP?hoTPLV;h~z{jS$Kc5H&%Fk>JuW zv~D>ZU@zBl71=+$-qV=a3gpZ*b3P_vWa^UVI}A;fha@umg@(f}tt^z1ZS?pbn}D}T zMn*~18hafQkTX(T@3kb>DKp(>;&*$4(MAl>0Y}ypQ&MI#c9*d+?jPk0MnFzb;%yO+ zUQyOj7b*U_r&K~o%M40gloUFfH1GYRO(+#8ApfF(qXdP zEHDNTLq8Bh{YG0dRJ?;@q7ad1lA9ax_277F0p5cAL}?l;ejjjD;Q-fQ!D7R&N4SZDlW9MiB}1RE=&kdw)7;D z!jp=gc&f%T7_PExy;QRG0;#DoDayH{NCpK!x;D}S^&Hd+kzH^pBr4AIn9_)lX^8z} zt+75N0ZLF(Xm2wNCX$2Ig<(MoG_RTrtuzu{n22j@gxZWmEr?K6UOO3AH3F>{P|+@P zz-W|BrwlMz4LAe-w&BA4)E;A3RUx!MftAZH~EQzT_muB2>@k`n%{q&{F(W=UgS zPtt%wHJJp1m|bz9nkT)D?{cVX$HzN@@YNHAfH)@bZB5vgosU)_n5}LH5 zwjdQBh;8-eeu1BLmCBk03k|SNjRmzewSc&!exX+dQBns#dxyg z^R$<6$O|ya$4>A^NTd>mkeHhWp`{#~uE6Fic&ioICJAOIP>~vOio*zf%%PtU66tx_ z3c@mmq27h%9O{CQ$Uz7~A_p-DHRjkv31%mxA|z6N51~&ub}T}TIkX6&6&zZn!0Mx? zU&*lM2#I(d5yGKnC~p=*t2k7k#7;t}3Bxub)Qdw~5yDZLNO2vZ)f~Em&>9XsKuF~N zIYJ`$HR0rmxz$C8V0J2-RoUB81?cBgHekE!o5&M+ZTe#35IN zN;%|?&}0s!AtdIJg^-xXNQ6kE?D*v1DI8i2*!vv1gAg?YJK+gJBBzz{9!5+-?`EcQ zY%hew*jR+%6d*-{0?R;1OtBOpk>`B~sTr?5ra-21C;*{W9MT{(gG1>EiInN2-> zrohG_BvS4Im*GQ>4Mj*yF&QE9VeEui3T!b#Vv4U3n$5BI5SqiG=L%j`ya^KVmLP-! z&_LxAgy>zKoluH*Df2iq6(JEu?{MZbY@-6JhbiO*3~Pvxh&L9Yg$$dd!02Mlj~Lbk z??}abdn5EN!(tF>&7o9;JUR3QLSiZD8nI%ARl>PoB8+bN8_h7fM?r+0K&XUa=M-2y zyoVXXFgJumJi1qBEW_yTQxQg&(2iqRsRE-*CC4+Yva^gwcb-mQ7+tU`rk#k;M25{! zV0cp@4x=^SVgx9R;ArTxa2tQbWS|g=Vi`Zs7Qq&O&~zai!V*6L8u3aIEWM{i9=Km4 zJ4KVDqr0i}u#R+ortxF11l2)Kj;=y=rzQ$S(_2gwjf?Zj=yT0nnDgj9=@rR)r2A`WYyMwmkC2!z7I_wV9K*wPr9EwmSrOK9eq-dhuCJ0TR`EjT0# zdM%zjEd<>MFnUkk1AlZ2ko3{y>qY5ivRqBYVlU$eBv)s_$teJki>SWdHX7+#Xo7|r zp}1N#E5RTTG!jrpoPlD%BU&43)#8W~ds~ z08{p;FzKE*ZbD*xg&{)z5U*5Us9d451l*7MA^s2I*B`%!@Ee2Q!}uM9-y`@I=;O*LxdxSNF#bPjOvs8PZjeahA2;JqZo7Iy90+v zeqtyRp=gFteG?^>5T}F&BGi{*@%SdqP?5ovLTLz*XR8u2@!gR_R9RxkfDqxTgrpqo z&q7H45a)LC!~gJWQhl6Shr83#3vu5aJ}H?AsT9ac&}VQYzOcIjTR~EbUiO@*O-sm6 z&&ieJY20qg-(5tQKL23xyxHP;ro}VKQ;om>|MTx8K$gk$ zKb;T|Te=vs$1`a^<{IkS3U#CEa2jf5@`qZYm_iIu3hGN#g3_N#sDAjR*#Gro*&19x z$bdglT6r9@X$vl=i(HcZmp@$)5V;gX#0NDKl@OktkDZ&zYFZJDlW5dQSS?FlojNcw zTaWvPya>9_u@4H>)uRnZ6Vs z5^X_3j+gn&#jRa>11`VRtLb<6thSNu93$7kPS` z=BbpsO}CzELg8*J@~(v8sqjHr9xBCO(d(+vn^{uBq$|#1^x>> zP?9JuHpF4;Ua}=s*1*>4)EtAtfTEP;r8A-as-!G`QQoZI|4H7V5gJ_2uHmh;8XTgA zLnpbU65LFEC_;i8)ts>z9ugO$DG%NwEJ|JutVzkt)2HzhuBN4=shQoNz_~)VgzRjH zf^KhAi~C3n>VkAbnmPeLbSj(Lkd|OjrzPms**UT-jV%V!ky?brPj`3$1BFPeBFw>% zELTVnvhXh*HZT=FgO1^Y1+9<-TcrnPDtw3(p};Jp2UZdwNuZGpJgrcOZx1}p-=-3){l2|Q? zTG%+XHcJPaXx6+<@c+Lpzo?-}sBh9-?MrH1Qg-~9%ge;b{+IP{q$spO*v8};SAj9a z)@|^EA2)q|XZG7W?j6{X@aehzfjdh)KK}4KA>z*(gIuN<+Vyz8t5&bIGa^=X`DNai z6u(VnOT({S&ptf(M7PM+>wFh2a9h~u#)E6Q)!N#=nejCI(#+JY$)B&k5kIqEr*)lY zUkLs#@vRME`uYBKCtWzWzQ=E`rMVq8w9T3)G|oCYaZin#bxwD?5Ye+{!SG`?2c{1R z-2H7#-iE*`Z#?^c%0q|uI?nxY-2HK%<<1)(TRFb%z6O(T{jjdD?%tB(YD48;xkv$I z+&t2g6NcK^JbzA3M?eak3=dDwsWvvFBuIWvrbkvX<{t1ujBz}YaTvHk?2bt~DjS-j zGyiz7Id!9P4X0GuT$n8ggUyg6oEQSC=+CCmES?@b$n|l{BEO9X04f{0w1^z2vd-<} z32Kf*GifRtavX`XCt-9QCUI`c4>`9gn*;ck-P}re8DLI_#+xb|awjSElKi`1&5{ne zYATz%_?CwzRbHS|m2rq)DxsavB%oT-abO&Bj%7MknGV1T#7E6#JSJsHj<^EJgnuG^B%Ev`lFZLA8HMT4 z!_*fbivfv8agF@!1jG^5V1yh8k66o~tX0mMhny)w#8pGpd(u>>*V z(90Y8RAC%xj));ul~lnmq>6h1lJWw?@B(D48N@B37meZhL$zI50K}Ibci~Tg(7b_E zrxFg0kEA-4AYP2bbt*v^Al9jjL%I>qa+V-I1QF#dL41iJQO**?nBXY&>2%z=Tu}98sP6? z+ux_-NBZoLQZWw0&HzF!Qlvwmhk#JL5vLBM?igzl*e~cD#kI(tF~EQaeq(7 z9kmj&a83#^j$o?KuW_n)d_(A%josmE?1^qksThZ1h39|}zeb1?I@Cx7Vrl`L0X0gj zTeT(Cjg*^8-7w>rm7)%(k|h>5Woj2=D%z??AI1?hbXtW7;BV$%2m+2=OSbR<6oZ7j z$BCZ;X zyxUE%#PM5c0rBy2F;C_1{kc*cPOU5mQkw`?6H;OQ{%#k_*cu2!+vdlhQKu?S1KiU(AZ$J3lI4 zTabc`0BvrRrW(8D<>qSf-h;rHlan5$NQOpZazcDPt5=@G=~N=j8!$i_JV)p0bUC@0 z#geH-;*7??WDJG$deQnsO6L(ErctK z-Gjg&4*L-kL}^oyLz={MpaJNKGHrc7njeq7dVZVf2oFgBENmlVGIxWwD`KW9`qX~@;!}M&XHkVTYAfNlM zNg^_s=gP@Q*9vZVbj3`v+e<3QjlI5?#+oF4u^LU%mJ?}`)U>Wm5}AQ5&=pm%z*pc@ z9%Eg~D&hvU?}fP*tm%I_0)!i^)hE3IqdV^F(gstXWh%ZGvlC3XD=*fhP>_(R-kKz| zjFA$tV!ljkrR1;1F(qW7;il;=qL^m6%5Ngve}Uxnie{ux^8PnSKK};E_unA3`wvL6 zX1uz1FKWlj@nsEp6^3a&g_mbqOlzxr1ewGuY>-UkRVXqU<8m80l@TJ2*_9gf6pR2_ zd`8HNq7vg|u}Du{EmlAUboJ`m^%bkD0s{O4{LSs7(oM3}l

# Contact -It seems that various gaming studios are making use of this code. I would enjoy hearing back from library users, for general comments and feedbacks. Always interested in learning of people usercase. I can be reached through my [**GitHub profile**](https://github.com/sammyfreg) (email or twitter) or a opening a [**GitHub Issue**](https://github.com/sammyfreg/netImgui/issues "GitHub Issues"). +It seems that various gaming studios are making use of this code. I would enjoy hearing back from library users, for general comments and feedbacks. Always interested in learning of people usercase. I can be reached through my [**GitHub profile**](https://github.com/sammyfreg) (email or twitter) or creating a new entry in [**GitHub Issue**](https://github.com/sammyfreg/netImgui/issues "GitHub Issues"). # Summary @@ -12,13 +12,13 @@ It seems that various gaming studios are making use of this code. I would enjoy # Purpose Initially created to assist game developers in debugging their game running on a game console or smartphone, from a PC. However, its use extends to wider applications. The only requirements are that a program is using **Dear ImGui** using C++ and available TCP/IP communications. -#### 1. UI access with applications without display or input. -Some applications lack display and inputs access, preventing feedbacks and easy control. It could be a program running on a [Raspberry Pie](https://www.raspberrypi.org/products/ "Raspberry Pie") device, or [Unreal 4](https://www.unrealengine.com "Unreal4") running in server mode, etc. . Using **NetImgui** allows the display of a user interface with full control on your PC while the logic remains on the client application itself. +#### 1. UI for devices without display/input. +Some applications lack display and inputs access, preventing feedbacks and easy control. It could be a program running on a [Raspberry Pie](https://www.raspberrypi.org/products/ "Raspberry Pie") device, or [Unreal 4](https://www.unrealengine.com "Unreal4") running in server mode, etc . . . Using **NetImgui** allows the display of a user interface with full control on your PC while the logic remains on the client application itself. +**Note**: *SampleNoBackend demonstrate using Dear ImGui without any backend implementation. It is a simple console application connecting to the NetImguiServer to draw its Imgui content. There is no rendering/input backend that's usually require by Dear ImGui* #### 2. Ease of use -While inputs might be available on a particular device (keyboard, gamepad, ...), it might still not be convenient for certain aspect. For example, text input is still more comfortable on a physical keyboard than on a smartphone. Idem for gaming consoles with gamepads control or VR development. - +While inputs might be available on a particular device (keyboard, gamepad, . . .), it might still not be convenient for certain aspect. For example, text input is still more comfortable on a physical keyboard than on a smartphone. Idem for gaming consoles with gamepads control or VR development. #### 3. Declutter display **Dear ImGui** is often used to display relevant debug information during development, but UI elements can obscure the regular content. **NetImgui** sends the UI content to a remote window, leaving the original display clutter-free and with the freedom to use the entire screen for more elaborate content. @@ -44,7 +44,7 @@ Here is a quick overview of the logic behind using the **NetImgui Server** and o **5.** *(NetImgui Server)* **Receives the drawing result and display them** -**6. Repeat the process** +**6. Go back to 1** #### Note The NetImgui Server application currently compiles under Windows, but few changes are required to properly have it running under other Operating Systems. @@ -82,7 +82,7 @@ The NetImgui Server application currently compiles under Windows, but few change - `NetImgui::IsConnected()` and `NetImgui::IsDrawingRemote()` can be used during Dear ImGui drawing, helping to make selective decisions on the content to draw based on where it will be displayed. #### Dear Imgui versions -- Tested against **Dear ImGui** versions: **1.74, 1.75, 1.76, 1.76** (docking)**, 1.77, 1.78, 1.79, 1.80, 1.80** (docking)**, 1.81, 1.82, 1.83, 1.84, 1.85, 1.86**. +- Tested against **Dear ImGui** versions: **1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.76** (docking)**, 1.77, 1.78, 1.79, 1.80, 1.80** (docking)**, 1.81, 1.82, 1.83, 1.84, 1.85, 1.86, 1.87, 1.87**. - *Note*: Should support other versions without too much difficulties. # Related @@ -102,46 +102,21 @@ Related projects making use of **NetImgui**. - ~~Commands to assign custom backgrounds~~ - ~~Add compression to data between Client and Server~~ -### Version 1.7.5 -(2022/01/31) +### Version 1.8 +(2022/07/18) - **API Changes** - None -- **Bug fixes** - - NetImgui Server memory leak fix - -### Version 1.7.4 -(2022/01/30) -- **API Changes** - - Removed the `bWait` parameter from `Shutdown()` - - Always wait for Shutdown completion before returning now - - This prevents multithread data release issues - - Added a `NETIMGUI_API` define prefix to functions exported in `NetImgui_Api.h` - - Similar to `IMGUI_API`, allows library user to control dll import/export - - Takes the same value as `IMGUI_API` by default -- **Bug fixes** - - Compression feature causing some out of sync issue with NetImgui Server - - 32bits index support crash - -### Version 1.7 -(2022/01/10) -- **API Changes** - - Added `SetCompressionMode(...)` / `GetCompressionMode()`, allow library user to manage the data compression feature - - By default, Client relies on Server Setting -- **Data Compressions Support** - - Drawing data generated by the Client can now be compressed before being sent to Server - - Greatly reduce the bandwidth between Client/Server at a negligible cost on the Client - - Using Delta Compression. The draw data usually vary little from previous frame. Sending only the changed bytes produce great results at low overhead - - Highly dynamic UI content lower improvements - - A new sample (**SampleCompression**) demonstrate the use of data compression and its metrics - - At 30 Fps, data rate send from client goes from ~ **3400 KB/s** to ~ **22 KB/s** (~ **160x improvement !**) - - Since it depends on static content, moving around a Window reduce the benefits +- **Dear ImGui 1.87 input event support** + - Input handling refactored to handle new Dear ImGui input event system (thanks to @lemantisee) + - Added gamepad support +- **Compatibility tests** + - Now compile simple compatibility app for each Dear ImGui version supported + - Allows to make sure the NetImgui Server works properly against any Dear ImGui version - **Other Changes** - - Added OpenGL3 support to NetImgui Server - - Still DirectX11 by default - - OpenGL3 support helps with the Server Application port to non Windows OS - - To enable, set `HAL_API_PLATFORM_GLFW_GL3` define to 1 and `HAL_API_PLATFORM_WIN32_DX11` to 0 - - Added support for Visual Studio 2021 - - Support up to **Dear ImGui 1.86** has been tested + - 32bits support bugs fix in client code + - NetImgui server popup now centered on main window + - Some OpenGL fixes + - Visual Studio 2022 LLVM support fix ### Older [Release Notes](https://github.com/sammyfreg/netImgui/wiki/Release-notes)