Files
itgmania212121/stepmania/src/ScreenManager.h
T
Glenn Maynard c382823488 Add an option to delay screen loads until after we've deleted the
old screen.  This means that we may unload resources when we'll
need them immediately, but lowers the memory usage peak considerably
for very low-memory machines.
2003-04-25 03:41:38 +00:00

73 lines
2.1 KiB
C++

#ifndef SCREENMANAGER_H
#define SCREENMANAGER_H
/*
-----------------------------------------------------------------------------
Class: ScreenManager
Desc: Manager/container for Screens.
Copyright (c) 2001-2003 by the person(s) listed below. All rights reserved.
Chris Danford
Glenn Maynard
-----------------------------------------------------------------------------
*/
#include "RageInputDevice.h"
#include "ScreenMessage.h"
#include "InputFilter.h"
#include "GameInput.h"
#include "MenuInput.h"
#include "StyleInput.h"
class Screen;
struct Menu;
class ScreenSystemLayer;
class ScreenManager
{
public:
ScreenManager();
~ScreenManager();
// pass these messages along to the current state
void Update( float fDeltaTime );
void Draw();
void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
void PrepNewScreen( CString sClassName );
void LoadPreppedScreen();
void DeletePreppedScreen();
void SetNewScreen( CString sClassName );
void AddNewScreenToTop( CString sClassName );
void Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo = false, bool bDefaultAnswer = false, void(*OnYes)() = NULL, void(*OnNo)() = NULL );
void TextEntry( ScreenMessage SM_SendWhenDone, CString sQuestion, CString sInitialAnswer, void(*OnOK)(CString sAnswer) = NULL, void(*OnCanel)() = NULL );
void MiniMenu( Menu* pDef, ScreenMessage SM_SendOnOK, ScreenMessage SM_SendOnCancel = SM_None );
void PopTopScreen( ScreenMessage SM = SM_RegainingFocus );
void SystemMessage( CString sMessage );
void PostMessageToTopScreen( ScreenMessage SM, float fDelay );
void SendMessageToTopScreen( ScreenMessage SM );
void RefreshCreditsMessages();
void EmptyDeleteQueue();
void LoadDelayedScreen();
private:
vector<Screen*> m_ScreenStack; // bottommost to topmost
vector<Screen*> m_ScreensToDelete;
Screen *m_ScreenBuffered;
ScreenSystemLayer *m_SystemLayer;
Screen* MakeNewScreen( CString sClassName );
void SetNewScreen( Screen *pNewScreen );
CString m_DelayedScreen;
};
extern ScreenManager* SCREENMAN; // global and accessable from anywhere in our program
#endif