From 0d7ac5a10a51a7b144b518e52a088a081c46e1ef Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 19 Mar 2013 09:29:44 -0500 Subject: [PATCH] Added sleep mode/dimming. Use --dimtime [seconds] to change behavior. Default is 30, use 0 for never. --- README.md | 1 + changelog.txt | 3 +++ src/main.cpp | 30 +++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e81c1182..1bde5009e 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ You can use `--help` to view a list of command-line options. Briefly outlined he --draw-framerate - draw the framerate. --no-exit - do not display 'exit' in the ES menu. --debug - print additional output to the console, primarily about input. +--dimtime [seconds] - delay before dimming the screen and entering sleep mode. Default is 30, use 0 for never. ``` Writing an es_systems.cfg diff --git a/changelog.txt b/changelog.txt index 327598a6d..92c8fa0d1 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,6 @@ +March 19, 2013 +-Finally added a "dim" or sleep mode. Change behavior with "--dimtime [positive integer time in seconds]", with 0 for off. + March 17, 2013 -Added Fast Select font tag. diff --git a/src/main.cpp b/src/main.cpp index 8e369b63b..69c3bebee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,6 +23,7 @@ bool IGNOREGAMELIST = false; bool DRAWFRAMERATE = false; bool DONTSHOWEXIT = false; bool DEBUG = false; +unsigned int DIMTIME = 30*1000; namespace fs = boost::filesystem; @@ -58,6 +59,10 @@ int main(int argc, char* argv[]) { DEBUG = true; Log::setReportingLevel(LogDebug); + }else if(strcmp(argv[i], "--dimtime") == 0) + { + DIMTIME = atoi(argv[i + 1]) * 1000; + i++; }else if(strcmp(argv[i], "--help") == 0) { std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n"; @@ -69,6 +74,7 @@ int main(int argc, char* argv[]) std::cout << "--draw-framerate display the framerate\n"; std::cout << "--no-exit don't show the exit option in the menu\n"; std::cout << "--debug even more logging\n"; + std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 30, use 0 for never)\n"; std::cout << "--help summon a sentient, angry tuba\n\n"; std::cout << "More information available in README.md.\n"; return 0; @@ -158,6 +164,9 @@ int main(int argc, char* argv[]) } } + bool sleeping = false; + unsigned int timeSinceLastEvent = 0; + int lastTime = 0; while(running) { @@ -167,11 +176,13 @@ int main(int argc, char* argv[]) switch(event.type) { case SDL_JOYHATMOTION: - case SDL_JOYAXISMOTION: case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: case SDL_KEYDOWN: case SDL_KEYUP: + sleeping = false; + timeSinceLastEvent = 0; + case SDL_JOYAXISMOTION: InputManager::processEvent(&event); break; @@ -181,6 +192,13 @@ int main(int argc, char* argv[]) } } + if(sleeping) + { + lastTime = SDL_GetTicks(); + sleep(1); //this doesn't need to accurate + continue; + } + int curTime = SDL_GetTicks(); int deltaTime = curTime - lastTime; lastTime = curTime; @@ -198,6 +216,16 @@ int main(int argc, char* argv[]) Renderer::drawText(fps, 50, 50, 0x00FF00FF, Renderer::getDefaultFont(Renderer::MEDIUM)); } + //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 >= DIMTIME && DIMTIME != 0) + { + sleeping = true; + timeSinceLastEvent = 0; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000A0); + } Renderer::swapBuffers(); Log::flush();