From b0177e38a4857f900fda4df8e140dbb36d555951 Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Fri, 23 Dec 2005 14:19:43 +0000 Subject: [PATCH] Add support for toggling windowed mode other than alt-enter. E.g. from a menu item. --- stepmania/src/StepMania.cpp | 22 ++++++++++++---------- stepmania/src/arch/ArchHooks/ArchHooks.cpp | 19 +++++++++++++++++++ stepmania/src/arch/ArchHooks/ArchHooks.h | 8 ++++++++ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index db5a04a868..89553fa30c 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -1348,17 +1348,13 @@ bool HandleGlobalInputs( const InputEventPlus &input ) StepMania::SaveScreenshot( "Screenshots/", bSaveCompressed, false ); return true; // handled } - - if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_ENTER) ) + + if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_ENTER) && + (INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) || + INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT))) ) { - if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) || - INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ) - { - /* alt-enter */ - PREFSMAN->m_bWindowed.Set( !PREFSMAN->m_bWindowed ); - StepMania::ApplyGraphicOptions(); - return true; - } + /* alt-enter */ + ArchHooks::SetToggleWindowed(); } return false; @@ -1446,6 +1442,12 @@ void HandleInputEvents(float fDeltaTime) SCREENMAN->Input( input ); } + + if( ArchHooks::GetAndClearToggleWindowed() ) + { + PREFSMAN->m_bWindowed.Set( !PREFSMAN->m_bWindowed ); + StepMania::ApplyGraphicOptions(); + } } void StepMania::FocusChanged( bool bHasFocus ) diff --git a/stepmania/src/arch/ArchHooks/ArchHooks.cpp b/stepmania/src/arch/ArchHooks/ArchHooks.cpp index f7f6e5a8e3..90fd71673c 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks.cpp +++ b/stepmania/src/arch/ArchHooks/ArchHooks.cpp @@ -1,9 +1,28 @@ #include "global.h" #include "ArchHooks.h" +#include "RageThreads.h" bool ArchHooks::s_bQuitting = false; +bool ArchHooks::s_bToggleWindowed = false; +// Keep from pulling RageThreads.h into ArchHooks.h +static RageMutex s_AHLock( "ArchHooks lock" ); ArchHooks *HOOKS = NULL; +bool ArchHooks::GetAndClearToggleWindowed() +{ + LockMut( s_AHLock ); + bool bToggle = s_bToggleWindowed; + + s_bToggleWindowed = false; + return bToggle; +} + +void ArchHooks::SetToggleWindowed() +{ + LockMut( s_AHLock ); + s_bToggleWindowed = true; +} + #include "Selector_ArchHooks.h" ArchHooks *MakeArchHooks() { diff --git a/stepmania/src/arch/ArchHooks/ArchHooks.h b/stepmania/src/arch/ArchHooks/ArchHooks.h index 545f0c3ced..9ccb0cb872 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks.h +++ b/stepmania/src/arch/ArchHooks/ArchHooks.h @@ -4,6 +4,7 @@ class ArchHooks { static bool s_bQuitting; + static bool s_bToggleWindowed; public: virtual ~ArchHooks() { } @@ -50,6 +51,13 @@ public: */ static bool UserQuit() { return s_bQuitting; } static void SetUserQuit() { s_bQuitting = true; } + + /* + * Returns true if the user wants to toggle windowed mode and atomically clears + * the boolean. + */ + static bool GetAndClearToggleWindowed(); + static void SetToggleWindowed(); /* * Return the amount of time since the program started. (This may actually be