Save / load window SDL2 window position.
Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
parent
c7bf4f5a39
commit
e8bcb72771
7 changed files with 58 additions and 0 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 §ion, 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 §ion, 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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 §ion, Geometry & geometry);
|
||||||
|
void saveGeometryToRegistry(const std::string §ion, const Geometry & geometry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue