Save / load window SDL2 window position.

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2021-10-30 15:24:54 +01:00
parent c7bf4f5a39
commit e8bcb72771
7 changed files with 58 additions and 0 deletions

View file

@ -189,6 +189,7 @@ namespace common2
if (vm.count("geometry")) if (vm.count("geometry"))
{ {
options.geometry.empty = false;
parseGeometry(vm["geometry"].as<std::string>(), options.geometry); parseGeometry(vm["geometry"].as<std::string>(), options.geometry);
} }

View file

@ -8,6 +8,7 @@ namespace common2
struct Geometry struct Geometry
{ {
bool empty = true;
int width; int width;
int height; int height;
int x; int x;

View file

@ -1,5 +1,6 @@
#include "StdAfx.h" #include "StdAfx.h"
#include "frontends/common2/utils.h" #include "frontends/common2/utils.h"
#include "frontends/common2/programoptions.h"
#include "linux/network/uthernet2.h" #include "linux/network/uthernet2.h"
@ -24,6 +25,7 @@
#include "SaveState.h" #include "SaveState.h"
#include "RGBMonitor.h" #include "RGBMonitor.h"
#include "Riff.h" #include "Riff.h"
#include "Registry.h"
#include "Utilities.h" #include "Utilities.h"
#include "Interface.h" #include "Interface.h"
#include "Debugger/Debug.h" #include "Debugger/Debug.h"
@ -133,4 +135,39 @@ namespace common2
RiffFinishWriteFile(); RiffFinishWriteFile();
} }
void loadGeometryFromRegistry(const std::string &section, Geometry & geometry)
{
if (geometry.empty) // otherwise it was user provided
{
const std::string path = section + "\\geometry";
const auto loadValue = [&path](const char * name, int & dest)
{
DWORD value;
if (RegLoadValue(path.c_str(), name, TRUE, &value))
{
dest = value;
}
};
loadValue("width", geometry.width);
loadValue("height", geometry.height);
loadValue("x", geometry.x);
loadValue("y", geometry.y);
}
}
void saveGeometryToRegistry(const std::string &section, const Geometry & geometry)
{
const std::string path = section + "\\geometry";
const auto saveValue = [&path](const char * name, const int source)
{
RegSaveValue(path.c_str(), name, TRUE, source);
};
saveValue("width", geometry.width);
saveValue("height", geometry.height);
saveValue("x", geometry.x);
saveValue("y", geometry.y);
}
} }

View file

@ -4,6 +4,7 @@
namespace common2 namespace common2
{ {
struct Geometry;
void setSnapshotFilename(const std::string & filename, const bool load); void setSnapshotFilename(const std::string & filename, const bool load);
@ -11,4 +12,6 @@ namespace common2
void InitialiseEmulator(); void InitialiseEmulator();
void DestroyEmulator(); void DestroyEmulator();
void loadGeometryFromRegistry(const std::string &section, Geometry & geometry);
void saveGeometryToRegistry(const std::string &section, const Geometry & geometry);
} }

View file

@ -67,6 +67,7 @@ void run_sdl(int argc, const char * argv [])
const int sw = video.GetFrameBufferBorderlessWidth(); const int sw = video.GetFrameBufferBorderlessWidth();
const int sh = video.GetFrameBufferBorderlessHeight(); const int sh = video.GetFrameBufferBorderlessHeight();
options.geometry.empty = true;
options.geometry.width = sw * 2; options.geometry.width = sw * 2;
options.geometry.height = sh * 2; options.geometry.height = sh * 2;
options.geometry.x = SDL_WINDOWPOS_UNDEFINED; options.geometry.x = SDL_WINDOWPOS_UNDEFINED;
@ -79,6 +80,8 @@ void run_sdl(int argc, const char * argv [])
const LoggerContext logger(options.log); const LoggerContext logger(options.log);
const RegistryContext registryContext(CreateFileRegistry(options)); const RegistryContext registryContext(CreateFileRegistry(options));
common2::loadGeometryFromRegistry("sa2", options.geometry);
std::shared_ptr<sa2::SDLFrame> frame; std::shared_ptr<sa2::SDLFrame> frame;
if (options.imgui) if (options.imgui)
{ {

View file

@ -136,6 +136,18 @@ namespace sa2
{ {
} }
void SDLFrame::Destroy()
{
if (!myFullscreen)
{
common2::Geometry geometry;
SDL_GetWindowPosition(myWindow.get(), &geometry.x, &geometry.y);
SDL_GetWindowSize(myWindow.get(), &geometry.width, &geometry.height);
saveGeometryToRegistry("sa2", geometry);
common2::CommonFrame::Destroy();
}
}
void SDLFrame::setGLSwapInterval(const int interval) void SDLFrame::setGLSwapInterval(const int interval)
{ {
const int current = SDL_GL_GetSwapInterval(); const int current = SDL_GL_GetSwapInterval();

View file

@ -19,6 +19,7 @@ namespace sa2
SDLFrame(const common2::EmulatorOptions & options); SDLFrame(const common2::EmulatorOptions & options);
void Initialize() override; void Initialize() override;
void Destroy() override;
void FrameRefreshStatus(int drawflags) override; void FrameRefreshStatus(int drawflags) override;
int FrameMessageBox(LPCSTR lpText, LPCSTR lpCaption, UINT uType) override; int FrameMessageBox(LPCSTR lpText, LPCSTR lpCaption, UINT uType) override;