@ -643,8 +643,9 @@ static void AddDrawListToRenderList(ImVector<ImDrawList*>& out_rende
static void AddWindowToRenderList ( ImVector < ImDrawList * > & out_render_list , ImGuiWindow * window ) ;
static void AddWindowToSortedBuffer ( ImVector < ImGuiWindow * > & out_sorted_windows , ImGuiWindow * window ) ;
static ImGuiIniData * FindWindowSettings ( const char * name ) ;
static ImGuiIniData * AddWindowSettings ( const char * name ) ;
static ImGuiSettingsWindow * FindWindowSettings ( const char * name ) ;
static ImGuiSettingsWindow * AddWindowSettings ( const char * name ) ;
static void LoadIniSettingsFromDisk ( const char * ini_filename ) ;
static void LoadIniSettingsFromMemory ( const char * buf , const char * buf_end = NULL ) ;
static void SaveIniSettingsToDisk ( const char * ini_filename ) ;
@ -2468,7 +2469,7 @@ void ImGui::Initialize()
g . LogClipboard = ( ImGuiTextBuffer * ) ImGui : : MemAlloc ( sizeof ( ImGuiTextBuffer ) ) ;
IM_PLACEMENT_NEW ( g . LogClipboard ) ImGuiTextBuffer ( ) ;
IM_ASSERT ( g . Settings . empty ( ) ) ;
IM_ASSERT ( g . Settings Windows . empty ( ) ) ;
LoadIniSettingsFromDisk ( g . IO . IniFilename ) ;
g . Initialized = true ;
}
@ -2503,9 +2504,9 @@ void ImGui::Shutdown()
g . HoveredRootWindow = NULL ;
g . ActiveIdWindow = NULL ;
g . MovingWindow = NULL ;
for ( int i = 0 ; i < g . Settings . Size ; i + + )
ImGui : : MemFree ( g . Settings [ i ] . Name ) ;
g . Settings . clear ( ) ;
for ( int i = 0 ; i < g . Settings Windows . Size ; i + + )
ImGui : : MemFree ( g . Settings Windows [ i ] . Name ) ;
g . Settings Windows . clear ( ) ;
g . ColorModifiers . clear ( ) ;
g . StyleModifiers . clear ( ) ;
g . FontStack . clear ( ) ;
@ -2535,29 +2536,30 @@ void ImGui::Shutdown()
g . Initialized = false ;
}
static ImGui IniData * FindWindowSettings ( const char * name )
static ImGui SettingsWindow * FindWindowSettings ( const char * name )
{
ImGuiContext & g = * GImGui ;
ImGuiID id = ImHash ( name , 0 ) ;
for ( int i = 0 ; i ! = g . Settings . Size ; i + + )
for ( int i = 0 ; i ! = g . Settings Windows . Size ; i + + )
{
ImGui IniData * ini = & g . Setting s[ i ] ;
ImGui SettingsWindow * ini = & g . Setting sWindow s[ i ] ;
if ( ini - > Id = = id )
return ini ;
}
return NULL ;
}
static ImGui IniData * AddWindowSettings ( const char * name )
static ImGui SettingsWindow * AddWindowSettings ( const char * name )
{
GImGui - > Settings . resize ( GImGui - > Settings . Size + 1 ) ;
ImGuiIniData * ini = & GImGui - > Settings . back ( ) ;
ini - > Name = ImStrdup ( name ) ;
ini - > Id = ImHash ( name , 0 ) ;
ini - > Collapsed = false ;
ini - > Pos = ImVec2 ( FLT_MAX , FLT_MAX ) ;
ini - > Size = ImVec2 ( 0 , 0 ) ;
return ini ;
ImGuiContext & g = * GImGui ;
g . SettingsWindows . resize ( g . SettingsWindows . Size + 1 ) ;
ImGuiSettingsWindow * settings = & g . SettingsWindows . back ( ) ;
settings - > Name = ImStrdup ( name ) ;
settings - > Id = ImHash ( name , 0 ) ;
settings - > Collapsed = false ;
settings - > Pos = ImVec2 ( FLT_MAX , FLT_MAX ) ;
settings - > Size = ImVec2 ( 0 , 0 ) ;
return settings ;
}
// Zero-tolerance, poor-man .ini parsing
@ -2579,7 +2581,7 @@ static void LoadIniSettingsFromMemory(const char* buf, const char* buf_end)
ImGuiContext & g = * GImGui ;
if ( ! buf_end )
buf_end = buf + strlen ( buf ) ;
ImGui IniData * settings = NULL ;
ImGui SettingsWindow * settings = NULL ;
for ( const char * line_start = buf ; line_start < buf_end ; )
{
const char * line_end = line_start ;
@ -2639,7 +2641,7 @@ static void SaveIniSettingsToMemory(ImVector<char>& out_buf)
ImGuiWindow * window = g . Windows [ i ] ;
if ( window - > Flags & ImGuiWindowFlags_NoSavedSettings )
continue ;
ImGui IniData * settings = FindWindowSettings ( window - > Name ) ;
ImGui SettingsWindow * settings = FindWindowSettings ( window - > Name ) ;
if ( ! settings ) // This will only return NULL in the rare instance where the window was first created with ImGuiWindowFlags_NoSavedSettings then had the flag disabled later on. We don't bind settings in this case (bug #1000).
continue ;
settings - > Pos = window - > Pos ;
@ -2650,10 +2652,10 @@ static void SaveIniSettingsToMemory(ImVector<char>& out_buf)
// Write a buffer
// If a window wasn't opened in this session we preserve its settings
ImGuiTextBuffer buf ;
buf . reserve ( g . Settings . Size * 64 ) ; // ballpark reserve
for ( int i = 0 ; i ! = g . Settings . Size ; i + + )
buf . reserve ( g . Settings Windows . Size * 64 ) ; // ballpark reserve
for ( int i = 0 ; i ! = g . Settings Windows . Size ; i + + )
{
const ImGui IniData * settings = & g . Setting s[ i ] ;
const ImGui SettingsWindow * settings = & g . Setting sWindow s[ i ] ;
if ( settings - > Pos . x = = FLT_MAX )
continue ;
const char * name = settings - > Name ;
@ -4008,7 +4010,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
window - > PosFloat = ImVec2 ( 60 , 60 ) ;
window - > Pos = ImVec2 ( ( float ) ( int ) window - > PosFloat . x , ( float ) ( int ) window - > PosFloat . y ) ;
ImGui IniData * settings = FindWindowSettings ( name ) ;
ImGui SettingsWindow * settings = FindWindowSettings ( name ) ;
if ( ! settings )
settings = AddWindowSettings ( name ) ;
else