mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-22 14:15:38 +00:00
Moved most of the sleep code into the Window class.
Input is now consumed on wake.
This commit is contained in:
parent
61d45532cf
commit
489298ef26
|
@ -11,7 +11,7 @@
|
|||
#include "components/ImageComponent.h"
|
||||
|
||||
Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10),
|
||||
mAllowSleep(true)
|
||||
mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0)
|
||||
{
|
||||
mViewController = new ViewController(this);
|
||||
mHelp = new HelpComponent(this);
|
||||
|
@ -108,6 +108,17 @@ void Window::textInput(const char* text)
|
|||
|
||||
void Window::input(InputConfig* config, Input input)
|
||||
{
|
||||
if(mSleeping)
|
||||
{
|
||||
// wake up
|
||||
mTimeSinceLastInput = 0;
|
||||
mSleeping = false;
|
||||
onWake();
|
||||
return;
|
||||
}
|
||||
|
||||
mTimeSinceLastInput = 0;
|
||||
|
||||
if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug"))
|
||||
{
|
||||
// toggle debug grid with Ctrl-G
|
||||
|
@ -169,6 +180,8 @@ void Window::update(int deltaTime)
|
|||
mFrameCountElapsed = 0;
|
||||
}
|
||||
|
||||
mTimeSinceLastInput += deltaTime;
|
||||
|
||||
if(peekGui())
|
||||
peekGui()->update(deltaTime);
|
||||
}
|
||||
|
@ -193,16 +206,6 @@ void Window::render()
|
|||
}
|
||||
}
|
||||
|
||||
// draw everything
|
||||
/*const unsigned int drawBGAfter = mGuiStack.size() > 1 ? mGuiStack.size() - 2 : mGuiStack.size();
|
||||
for(unsigned int i = 0; i < mGuiStack.size(); i++)
|
||||
{
|
||||
mGuiStack.at(i)->render(transform);
|
||||
|
||||
if(i == drawBGAfter)
|
||||
mBackgroundOverlay->render(transform);
|
||||
}*/
|
||||
|
||||
if(!mRenderedHelpPrompts)
|
||||
mHelp->render(transform);
|
||||
|
||||
|
@ -211,6 +214,14 @@ void Window::render()
|
|||
Renderer::setMatrix(Eigen::Affine3f::Identity());
|
||||
mDefaultFonts.at(1)->renderTextCache(mFrameDataText.get());
|
||||
}
|
||||
|
||||
unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime");
|
||||
if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && mAllowSleep)
|
||||
{
|
||||
// go to sleep
|
||||
mSleeping = true;
|
||||
onSleep();
|
||||
}
|
||||
}
|
||||
|
||||
void Window::normalizeNextUpdate()
|
||||
|
@ -325,3 +336,16 @@ void Window::setHelpPrompts(const std::vector<HelpPrompt>& prompts, const HelpSt
|
|||
|
||||
mHelp->setPrompts(addPrompts);
|
||||
}
|
||||
|
||||
|
||||
void Window::onSleep()
|
||||
{
|
||||
Renderer::setMatrix(Eigen::Affine3f::Identity());
|
||||
unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF;
|
||||
Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity);
|
||||
}
|
||||
|
||||
void Window::onWake()
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ public:
|
|||
|
||||
void normalizeNextUpdate();
|
||||
|
||||
inline bool isSleeping() const { return mSleeping; }
|
||||
bool getAllowSleep();
|
||||
void setAllowSleep(bool sleep);
|
||||
|
||||
|
@ -41,6 +42,9 @@ public:
|
|||
void setHelpPrompts(const std::vector<HelpPrompt>& prompts, const HelpStyle& style);
|
||||
|
||||
private:
|
||||
void onSleep();
|
||||
void onWake();
|
||||
|
||||
ViewController* mViewController;
|
||||
HelpComponent* mHelp;
|
||||
ImageComponent* mBackgroundOverlay;
|
||||
|
@ -58,6 +62,9 @@ private:
|
|||
bool mNormalizeNextUpdate;
|
||||
|
||||
bool mAllowSleep;
|
||||
bool mSleeping;
|
||||
unsigned int mTimeSinceLastInput;
|
||||
|
||||
bool mRenderedHelpPrompts;
|
||||
};
|
||||
|
||||
|
|
29
src/main.cpp
29
src/main.cpp
|
@ -238,8 +238,6 @@ int main(int argc, char* argv[])
|
|||
//generate joystick events since we're done loading
|
||||
SDL_JoystickEventState(SDL_ENABLE);
|
||||
|
||||
bool sleeping = false;
|
||||
unsigned int timeSinceLastEvent = 0;
|
||||
int lastTime = SDL_GetTicks();
|
||||
bool running = true;
|
||||
|
||||
|
@ -260,11 +258,7 @@ int main(int argc, char* argv[])
|
|||
case SDL_TEXTEDITING:
|
||||
case SDL_JOYDEVICEADDED:
|
||||
case SDL_JOYDEVICEREMOVED:
|
||||
if(InputManager::getInstance()->parseEvent(event, &window))
|
||||
{
|
||||
sleeping = false;
|
||||
timeSinceLastEvent = 0;
|
||||
}
|
||||
InputManager::getInstance()->parseEvent(event, &window);
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
running = false;
|
||||
|
@ -272,10 +266,10 @@ int main(int argc, char* argv[])
|
|||
}
|
||||
}
|
||||
|
||||
if(sleeping)
|
||||
if(window.isSleeping())
|
||||
{
|
||||
lastTime = SDL_GetTicks();
|
||||
SDL_Delay(1); //this doesn't need to be accurate
|
||||
SDL_Delay(1); // this doesn't need to be accurate, we're just giving up our CPU time until something wakes us up
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -283,27 +277,12 @@ int main(int argc, char* argv[])
|
|||
int deltaTime = curTime - lastTime;
|
||||
lastTime = curTime;
|
||||
|
||||
//cap deltaTime at 1000
|
||||
// cap deltaTime at 1000
|
||||
if(deltaTime > 1000 || deltaTime < 0)
|
||||
deltaTime = 1000;
|
||||
|
||||
window.update(deltaTime);
|
||||
window.render();
|
||||
|
||||
//sleep if we're past our threshold
|
||||
//sleeping entails setting a flag to start skipping frames
|
||||
//and initially drawing a black semi-transparent rect to dim the screen
|
||||
timeSinceLastEvent += deltaTime;
|
||||
if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime") && Settings::getInstance()->getInt("ScreenSaverTime") != 0 && window.getAllowSleep())
|
||||
{
|
||||
sleeping = true;
|
||||
timeSinceLastEvent = 0;
|
||||
Renderer::setMatrix(Eigen::Affine3f::Identity());
|
||||
|
||||
unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF;
|
||||
Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity);
|
||||
}
|
||||
|
||||
Renderer::swapBuffers();
|
||||
|
||||
Log::flush();
|
||||
|
|
Loading…
Reference in a new issue