Skip to content

Commit 9800519

Browse files
authored
Merge pull request #44 from morganchristiansson/save-screen-resolution
Persist screen resolution
2 parents 8ab074b + e27ffde commit 9800519

5 files changed

Lines changed: 48 additions & 4 deletions

File tree

CGame.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include "files.h"
1212
#include "globals.h"
1313
#include "s25util/file_handle.h"
14+
#include <libsiedler2/ArchivItem_Ini.h>
15+
#include <libsiedler2/libsiedler2.h>
1416
#include <boost/filesystem.hpp>
1517
#include <boost/nowide/cstdio.hpp>
1618
#include <boost/program_options.hpp>
@@ -156,6 +158,32 @@ void CGame::delMapObj()
156158
MapObj.reset();
157159
}
158160

161+
void CGame::LoadSettings()
162+
{
163+
const bfs::path settingsPath = RTTRCONFIG.ExpandPath("<RTTR_USERDATA>/s25edit.ini");
164+
libsiedler2::Archiv settings;
165+
if(libsiedler2::Load(settingsPath, settings) != 0)
166+
return;
167+
const auto* ini = dynamic_cast<const libsiedler2::ArchivItem_Ini*>(settings.find("editor"));
168+
if(!ini)
169+
return;
170+
GameResolution.x = ini->getValue("width", static_cast<int>(GameResolution.x));
171+
GameResolution.y = ini->getValue("height", static_cast<int>(GameResolution.y));
172+
fullscreen = ini->getValue("fullscreen", fullscreen);
173+
}
174+
175+
void CGame::SaveSettings() const
176+
{
177+
libsiedler2::Archiv settings;
178+
settings.push(std::make_unique<libsiedler2::ArchivItem_Ini>("editor"));
179+
auto& ini = dynamic_cast<libsiedler2::ArchivItem_Ini&>(*settings.find("editor"));
180+
ini.setValue("width", GameResolution.x);
181+
ini.setValue("height", GameResolution.y);
182+
ini.setValue("fullscreen", static_cast<int>(fullscreen));
183+
const bfs::path settingsPath = RTTRCONFIG.ExpandPath("<RTTR_USERDATA>/s25edit.ini");
184+
libsiedler2::Write(settingsPath, settings);
185+
}
186+
159187
void CGame::GameLoop()
160188
{
161189
for(auto&& callback : Callbacks)
@@ -309,6 +337,7 @@ int main(int argc, char* argv[])
309337
auto s2 = std::make_unique<CGame>(
310338
Extent(programOptions["width"].as<unsigned>(), programOptions["height"].as<unsigned>()),
311339
programOptions["fullscreen"].as<bool>());
340+
s2->LoadSettings();
312341
result = s2->Execute();
313342
} catch(...)
314343
{

CGame.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ class CGame
6969
void RecreateDisplayResources();
7070

7171
public:
72+
void LoadSettings();
73+
void SaveSettings() const;
74+
7275
CGame(Extent GameResolution_, bool fullscreen_);
7376
~CGame();
7477

CGame_Event.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ void CGame::EventHandling(SDL_Event* Event)
6666
case SDLK_RETURN:
6767
case SDLK_KP_ENTER:
6868
if(Event->key.keysym.mod & KMOD_ALT)
69+
{
6970
fullscreen = !fullscreen;
71+
SaveSettings();
72+
}
7073
break;
7174

7275
#ifdef _ADMINMODE

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ ELSE()
3838
ENDIF()
3939

4040
add_executable(s25edit ${MAIN_SOURCES} ${CIO_SOURCES} ${icon_RC})
41-
target_link_libraries(s25edit PRIVATE SGE rttrConfig s25Common gamedata endian::static Boost::nowide PUBLIC Boost::disable_autolinking Boost::program_options)
41+
target_link_libraries(s25edit PRIVATE SGE rttrConfig s25Common gamedata siedler2 endian::static Boost::nowide PUBLIC Boost::disable_autolinking Boost::program_options)
4242
target_include_directories(s25edit PRIVATE include)
4343
target_compile_features(s25edit PRIVATE cxx_std_17)
4444

callbacks.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ void callback::submenuOptions(int Param)
229229
SELECTBOX_1920_1400,
230230
SELECTBOX_1920_1440,
231231
SELECTBOX_2048_1152,
232-
SELECTBOX_2048_1536
232+
SELECTBOX_2048_1536,
233+
SELECTBOX_3840_2160
233234
};
234235

235236
switch(Param)
@@ -251,9 +252,9 @@ void callback::submenuOptions(int Param)
251252
if(ButtonFullscreen)
252253
SubMenu->delButton(ButtonFullscreen);
253254
ButtonFullscreen =
254-
SubMenu->addButton(submenuOptions, FULLSCREEN, (int)(global::s2->GameResolution.x / 2 - 100), 190, 200,
255+
SubMenu->addButton(submenuOptions, FULLSCREEN, (int)(global::s2->GameResolution.x / 2 - 100), 410, 200,
255256
20, BUTTON_RED1, (global::s2->fullscreen ? "WINDOW" : "FULLSCREEN"));
256-
SelectBoxRes = SubMenu->addSelectBox(ButtonFullscreen->getPos() - Point16(0, 120), Extent16(200, 110),
257+
SelectBoxRes = SubMenu->addSelectBox(ButtonFullscreen->getPos() - Point16(0, 340), Extent16(200, 330),
257258
FontSize::Medium, FontColor::Yellow, BUTTON_GREY);
258259
SelectBoxRes->addOption("800 x 600 (SVGA)", submenuOptions, SELECTBOX_800_600);
259260
SelectBoxRes->addOption("832 x 624 (Half Megapixel)", submenuOptions, SELECTBOX_832_624);
@@ -297,6 +298,7 @@ void callback::submenuOptions(int Param)
297298
SelectBoxRes->addOption("1920 x 1440", submenuOptions, SELECTBOX_1920_1440);
298299
SelectBoxRes->addOption("2048 x 1152 (QWXGA)", submenuOptions, SELECTBOX_2048_1152);
299300
SelectBoxRes->addOption("2048 x 1536 (SUXGA)", submenuOptions, SELECTBOX_2048_1536);
301+
SelectBoxRes->addOption("3840 x 2160 (4K UHD)", submenuOptions, SELECTBOX_3840_2160);
300302
break;
301303

302304
case MAINMENU:
@@ -317,6 +319,7 @@ void callback::submenuOptions(int Param)
317319

318320
case GRAPHICS_CHANGE:
319321
assert(SubMenu);
322+
global::s2->SaveSettings();
320323
SubMenu->setWaste();
321324
TextResolution = nullptr;
322325
ButtonFullscreen = nullptr;
@@ -577,6 +580,12 @@ void callback::submenuOptions(int Param)
577580
submenuOptions(GRAPHICS_CHANGE);
578581
break;
579582

583+
case SELECTBOX_3840_2160:
584+
global::s2->GameResolution.x = 3840;
585+
global::s2->GameResolution.y = 2160;
586+
submenuOptions(GRAPHICS_CHANGE);
587+
break;
588+
580589
default: break;
581590
}
582591
}

0 commit comments

Comments
 (0)