1
0
mirror of https://github.com/blupi-games/planetblupi synced 2024-12-30 10:15:36 +01:00

Save the window zoom and fullscreen settings in the user preferences

This commit is contained in:
Mathieu Schroeter 2017-12-14 23:07:17 +01:00
parent f97d1c3644
commit 1db67ed200
5 changed files with 53 additions and 57 deletions

View File

@ -936,10 +936,6 @@ DoInit (int argc, char * argv[], bool & exit)
return EXIT_FAILURE;
}
// Load all cursors
g_pPixmap->LoadCursors (g_windowScale);
g_pPixmap->ChangeSprite (SPRITE_WAIT); // met le sablier maison
// Create the sound manager.
g_pSound = new CSound;
if (g_pSound == nullptr)
@ -981,10 +977,18 @@ DoInit (int argc, char * argv[], bool & exit)
return EXIT_FAILURE;
}
const bool zoom = g_windowScale;
g_pEvent->Create (g_pPixmap, g_pDecor, g_pSound, g_pMovie);
// Load all cursors
g_pPixmap->LoadCursors (g_windowScale);
g_pPixmap->ChangeSprite (SPRITE_WAIT); // met le sablier maison
g_updateThread = new std::thread (CheckForUpdates);
g_pEvent->SetFullScreen (g_bFullScreen);
if (!g_bFullScreen)
if (g_bFullScreen)
g_pEvent->SetFullScreen (true);
if (!g_bFullScreen && zoom != g_windowScale)
g_pEvent->SetWindowSize (g_windowScale);
g_pEvent->ChangePhase (EV_PHASE_INTRO1);

View File

@ -29,6 +29,7 @@
extern SDL_Window * g_window;
extern SDL_Renderer * g_renderer;
extern bool g_bFullScreen;
extern Uint8 g_windowScale;
extern bool g_restoreBugs;
extern bool g_restoreMidi;
extern bool g_enableRecorder;

View File

@ -72,8 +72,10 @@ typedef struct {
Sint16 language;
// v1.2
Sint16 musicMidi;
Sint16 fullScreen;
Sint16 zoom;
Sint16 reserve2[91];
Sint16 reserve2[89];
} DescInfo;
// Toutes les premières lettres doivent
@ -1539,8 +1541,6 @@ CEvent::CEvent ()
{
Sint32 i;
m_bFullScreen = false;
m_WindowScale = 1;
m_exercice = 0;
m_mission = 0;
m_private = 0;
@ -1657,25 +1657,22 @@ CEvent::GetMousePos ()
void
CEvent::SetFullScreen (bool bFullScreen)
{
if (bFullScreen == m_bFullScreen)
return;
int x, y;
SDL_GetMouseState (&x, &y);
x /= m_WindowScale;
y /= m_WindowScale;
x /= g_windowScale;
y /= g_windowScale;
m_WindowScale = 1;
g_windowScale = 1;
SDL_SetWindowSize (g_window, LXIMAGE, LYIMAGE);
m_bFullScreen = bFullScreen;
g_bFullScreen = bFullScreen;
SDL_SetWindowFullscreen (g_window, bFullScreen ? SDL_WINDOW_FULLSCREEN : 0);
SDL_SetWindowBordered (g_window, bFullScreen ? SDL_FALSE : SDL_TRUE);
SDL_SetWindowGrab (g_window, bFullScreen ? SDL_TRUE : SDL_FALSE);
SDL_SetWindowPosition (
g_window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
m_pPixmap->LoadCursors (m_WindowScale);
m_pPixmap->LoadCursors (g_windowScale);
m_pPixmap->ReloadTargetTextures ();
/* Force this update before otherwise the coordinates retrieved with
@ -1699,16 +1696,13 @@ CEvent::SetFullScreen (bool bFullScreen)
void
CEvent::SetWindowSize (Uint8 newScale)
{
if (newScale == m_WindowScale)
return;
auto scale = m_WindowScale;
m_WindowScale = newScale;
auto scale = g_windowScale;
g_windowScale = newScale;
switch (newScale)
{
case 1:
case 2:
SetWindowSize (scale, m_WindowScale);
SetWindowSize (scale, g_windowScale);
break;
default:
@ -1748,12 +1742,6 @@ CEvent::SetWindowSize (Uint8 prevScale, Uint8 newScale)
CEvent::PushUserEvent (EV_WARPMOUSE, coord);
}
Uint8
CEvent::GetWindowScale ()
{
return m_WindowScale;
}
// Crée le gestionnaire d'événements.
void
@ -2092,11 +2080,11 @@ CEvent::DrawButtons ()
SetEnable (EV_BUTTON1, m_Lang != m_Languages.begin ());
SetEnable (EV_BUTTON2, m_Lang != m_Languages.end () - 1);
SetEnable (EV_BUTTON3, !m_bFullScreen);
SetEnable (EV_BUTTON4, m_bFullScreen);
SetEnable (EV_BUTTON3, !g_bFullScreen);
SetEnable (EV_BUTTON4, g_bFullScreen);
SetEnable (EV_BUTTON5, !m_bFullScreen && m_WindowScale > 1);
SetEnable (EV_BUTTON6, !m_bFullScreen && m_WindowScale < 2);
SetEnable (EV_BUTTON5, !g_bFullScreen && g_windowScale > 1);
SetEnable (EV_BUTTON6, !g_bFullScreen && g_windowScale < 2);
SetEnable (EV_BUTTON7, g_restoreMidi);
SetEnable (EV_BUTTON8, !g_restoreMidi);
@ -2574,15 +2562,15 @@ CEvent::DrawButtons ()
DrawText (m_pPixmap, pos, lang.c_str ());
const char * text =
m_bFullScreen ? gettext ("Fullscreen") : gettext ("Windowed");
g_bFullScreen ? gettext ("Fullscreen") : gettext ("Windowed");
lg = GetTextWidth (text);
pos.x = (169 + 40) - lg / 2;
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, text);
if (!m_bFullScreen)
if (!g_bFullScreen)
{
snprintf (res, sizeof (res), "%dx", m_WindowScale);
snprintf (res, sizeof (res), "%dx", g_windowScale);
lg = GetTextWidth (res);
pos.x = (284 + 40) - lg / 2;
pos.y = 330 - 20;
@ -2690,7 +2678,7 @@ CEvent::MousePosToSprite (Point pos)
pos.y <= POSMAPY + DIMMAPY)
sprite = SPRITE_MAP;
if (m_bFullScreen && !m_bDemoRec && !m_bDemoPlay && m_scrollSpeed != 0)
if (g_bFullScreen && !m_bDemoRec && !m_bDemoPlay && m_scrollSpeed != 0)
{
if (pos.x <= 5 && pos.x >= -2)
bLeft = true;
@ -3591,7 +3579,7 @@ CEvent::DecorAutoShift ()
m_bShift = false;
if (!byKeyboard && (!m_bFullScreen || m_scrollSpeed == 0))
if (!byKeyboard && (!g_bFullScreen || m_scrollSpeed == 0))
return;
max = maxLimit - m_scrollSpeed; // max <- 3..1
@ -4126,18 +4114,18 @@ CEvent::ChangeButtons (Sint32 message)
break;
case EV_BUTTON5:
{
auto scale = m_WindowScale;
if (m_WindowScale > 1)
--m_WindowScale;
SetWindowSize (scale, m_WindowScale);
auto scale = g_windowScale;
if (g_windowScale > 1)
--g_windowScale;
SetWindowSize (scale, g_windowScale);
break;
}
case EV_BUTTON6:
{
auto scale = m_WindowScale;
if (m_WindowScale < 2)
++m_WindowScale;
SetWindowSize (scale, m_WindowScale);
auto scale = g_windowScale;
if (g_windowScale < 2)
++g_windowScale;
SetWindowSize (scale, g_windowScale);
break;
}
case EV_BUTTON7:
@ -4720,7 +4708,9 @@ CEvent::WriteInfo ()
info.language = static_cast<Sint16> (
this->GetLanguage () != this->GetStartLanguage () ? this->GetLanguage ()
: Language::undef);
info.musicMidi = g_restoreMidi;
info.musicMidi = g_restoreMidi;
info.fullScreen = g_bFullScreen;
info.zoom = g_windowScale;
nb = fwrite (&info, sizeof (info), 1, file);
if (nb < 1)
@ -4779,10 +4769,15 @@ CEvent::ReadInfo ()
this->SetLanguage (static_cast<Language> (info.language));
}
if (
((info.majRev == 1 && info.minRev >= 2) || info.majRev >= 2) &&
!(g_settingsOverload & SETTING_MIDI))
g_restoreMidi = !!info.musicMidi;
if (((info.majRev == 1 && info.minRev >= 2) || info.majRev >= 2))
{
if (!(g_settingsOverload & SETTING_MIDI))
g_restoreMidi = !!info.musicMidi;
if (!(g_settingsOverload & SETTING_FULLSCREEN))
g_bFullScreen = !!info.fullScreen;
if (!(g_settingsOverload & SETTING_ZOOM))
g_windowScale = info.zoom;
}
fclose (file);
return true;
@ -5160,7 +5155,7 @@ CEvent::DemoStep ()
}
SDL_WarpMouseInWindow (
g_window, pos.x * m_WindowScale, pos.y * m_WindowScale);
g_window, pos.x * g_windowScale, pos.y * g_windowScale);
}
if (m_pDemoBuffer)

View File

@ -142,7 +142,6 @@ public:
void IntroStep ();
Uint8 GetWindowScale ();
void SetWindowSize (Uint8 newScale);
void SetUpdateVersion (const std::string & version);
@ -199,8 +198,6 @@ protected:
bool m_bSchool;
bool m_bPrivate;
bool m_bAccessBuild;
bool m_bFullScreen;
Uint8 m_WindowScale;
CPixmap * m_pPixmap;
CDecor * m_pDecor;
CSound * m_pSound;

View File

@ -188,8 +188,7 @@ CMenu::Create (
pos.x += DIMBUTTONX / 2;
pos.y += DIMBUTTONY / 2;
SDL_WarpMouseInWindow (
g_window, pos.x * m_pEvent->GetWindowScale (),
pos.y * m_pEvent->GetWindowScale ());
g_window, pos.x * g_windowScale, pos.y * g_windowScale);
}
m_selRank = Detect (pos);