Extract window position save/load functionality.

This commit is contained in:
Bartosz Taudul 2022-07-25 21:48:06 +02:00
parent 208755ad53
commit 31b6a88923
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
5 changed files with 88 additions and 42 deletions

View File

@ -203,6 +203,7 @@
<ClCompile Include="..\..\src\NativeWindow.cpp" />
<ClCompile Include="..\..\src\ResolvService.cpp" />
<ClCompile Include="..\..\src\RunQueue.cpp" />
<ClCompile Include="..\..\src\WindowPosition.cpp" />
<ClCompile Include="..\..\src\winmain.cpp">
<EnableEnhancedInstructionSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotSet</EnableEnhancedInstructionSet>
<EnableEnhancedInstructionSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotSet</EnableEnhancedInstructionSet>
@ -326,6 +327,7 @@
<ClInclude Include="..\..\src\ResolvService.hpp" />
<ClInclude Include="..\..\src\RunQueue.hpp" />
<ClInclude Include="..\..\src\stb_image.h" />
<ClInclude Include="..\..\src\WindowPosition.hpp" />
</ItemGroup>
<ItemGroup>
<Natvis Include="DebugVis.natvis" />

View File

@ -339,6 +339,9 @@
<ClCompile Include="..\..\src\RunQueue.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\..\src\WindowPosition.cpp">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\server\TracyEvent.hpp">
@ -689,6 +692,9 @@
<ClInclude Include="..\..\src\RunQueue.hpp">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\src\WindowPosition.hpp">
<Filter>src</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Natvis Include="DebugVis.natvis" />

View File

@ -0,0 +1,48 @@
#include <stdint.h>
#include <stdio.h>
#include "WindowPosition.hpp"
#include "../../server/TracyStorage.hpp"
WindowPosition::WindowPosition()
: m_fn( tracy::GetSavePath( "window.position" ) )
{
Defaults();
FILE* f = fopen( m_fn.c_str(), "rb" );
if( f )
{
uint32_t data[5];
if( fread( data, 1, sizeof( data ), f ) == sizeof( data ) )
{
x = data[0];
y = data[1];
w = data[2];
h = data[3];
maximize = data[4];
}
fclose( f );
if( w <= 0 || h <= 0 ) Defaults();
}
}
WindowPosition::~WindowPosition()
{
FILE* f = fopen( m_fn.c_str(), "wb" );
if( !f ) return;
uint32_t data[5] = { uint32_t( x ), uint32_t( y ), uint32_t( w ), uint32_t( h ), uint32_t( maximize ) };
fwrite( data, 1, sizeof( data ), f );
fclose( f );
}
void WindowPosition::Defaults()
{
x = 200;
y = 200;
w = 1650;
h = 960;
maximize = 0;
}

View File

@ -0,0 +1,20 @@
#ifndef __WINDOWPOSITION_HPP__
#define __WINDOWPOSITION_HPP__
#include <string>
class WindowPosition
{
public:
WindowPosition();
~WindowPosition();
int x, y, w, h, maximize;
private:
void Defaults();
std::string m_fn;
};
#endif

View File

@ -54,6 +54,8 @@
#include "NativeWindow.hpp"
#include "ResolvService.hpp"
#include "RunQueue.hpp"
#include "WindowPosition.hpp"
static void glfw_error_callback(int error, const char* description)
{
@ -197,30 +199,7 @@ int main( int argc, char** argv )
}
}
std::string winPosFile = tracy::GetSavePath( "window.position" );
int x = 200, y = 200, w = 1650, h = 960, maximize = 0;
{
FILE* f = fopen( winPosFile.c_str(), "rb" );
if( f )
{
uint32_t data[5];
fread( data, 1, sizeof( data ), f );
fclose( f );
x = data[0];
y = data[1];
w = data[2];
h = data[3];
maximize = data[4];
}
if( w <= 0 || h <= 0 )
{
x = 200;
y = 200;
w = 1650;
h = 960;
maximize = 0;
}
}
WindowPosition winPos;
std::string connHistFile = tracy::GetSavePath( "connection.history" );
{
@ -291,7 +270,7 @@ int main( int argc, char** argv )
#if __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
GLFWwindow* window = glfwCreateWindow( w, h, title, NULL, NULL);
GLFWwindow* window = glfwCreateWindow( winPos.w, winPos.h, title, NULL, NULL);
if( !window ) return 1;
{
@ -301,9 +280,9 @@ int main( int argc, char** argv )
free( icon.pixels );
}
glfwSetWindowPos( window, x, y );
glfwSetWindowPos( window, winPos.x, winPos.y );
#ifdef GLFW_MAXIMIZED
if( maximize ) glfwMaximizeWindow( window );
if( winPos.maximize ) glfwMaximizeWindow( window );
#endif
s_glfwWindow = window;
glfwMakeContextCurrent(window);
@ -387,25 +366,16 @@ int main( int argc, char** argv )
if( updateNotesThread.joinable() ) updateNotesThread.join();
view.reset();
{
FILE* f = fopen( winPosFile.c_str(), "wb" );
if( f )
{
#ifdef GLFW_MAXIMIZED
uint32_t maximized = glfwGetWindowAttrib( window, GLFW_MAXIMIZED );
if( maximized ) glfwRestoreWindow( window );
uint32_t maximized = glfwGetWindowAttrib( window, GLFW_MAXIMIZED );
if( maximized ) glfwRestoreWindow( window );
#else
uint32_t maximized = 0;
uint32_t maximized = 0;
#endif
winPos.maximize = maximized;
glfwGetWindowPos( window, &x, &y );
glfwGetWindowSize( window, &w, &h );
uint32_t data[5] = { uint32_t( x ), uint32_t( y ), uint32_t( w ), uint32_t( h ), maximized };
fwrite( data, 1, sizeof( data ), f );
fclose( f );
}
}
glfwGetWindowPos( window, &winPos.x, &winPos.y );
glfwGetWindowSize( window, &winPos.w, &winPos.h );
// Cleanup
ImGui_ImplOpenGL3_Shutdown();