+protected:
+ /// Get a handle to the application this state is running on.
+ /// Do not call this while the state is off the stack (e.g. in c'tor/d'tor)
+ /// or you'll get a std::domain_error (potentially evil in d'tor)!
+ Application &Ctrl();
+ const Application &Ctrl() const;
+
+private:
+ /// Do some setup that needs an application and/or screen handle and thus
+ /// can not be done by the constructor.
+ /// Called when the state first enters the stack.
+ /// @param ctrl the Application running the state
+ virtual void OnEnterState(SDL_Surface *screen) = 0;
+ /// Do some cleanup.
+ /// Called when the state is popped from the stack.
+ virtual void OnExitState(SDL_Surface *screen) = 0;
+ /// Called when the state becomes the active one.
+ virtual void OnResumeState(SDL_Surface *screen) = 0;
+ /// Called when the state becomes inactive.
+ virtual void OnPauseState(SDL_Surface *screen) = 0;
+
+ /// Adapt the state's graphics to given dimensions.
+ /// NOTE: currently, this is only called for the stack top and not
+ /// propagated on stack changes.
+ /// Will be fixed soom ;).
+ virtual void OnResize(int width, int height) = 0;
+