From 7caf70a5e5a78989f88d4f07efdb8143fb6e02e6 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 23 Aug 2017 09:21:31 +0100 Subject: [PATCH] Adding slider to control screensaver swap time --- es-app/src/SystemScreenSaver.cpp | 6 ++++-- es-app/src/SystemScreenSaver.h | 1 + es-app/src/guis/GuiScreensaverOptions.cpp | 10 ++++++++++ es-core/src/PowerSaver.cpp | 2 +- es-core/src/PowerSaver.h | 2 ++ es-core/src/Settings.cpp | 2 ++ es-core/src/components/VideoComponent.cpp | 19 +++++++++++++++---- 7 files changed, 35 insertions(+), 7 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index c632c70ef..5078e9bd5 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -15,7 +15,6 @@ #include #define FADE_TIME 300 -#define SWAP_VIDEO_TIMEOUT 30000 SystemScreenSaver::SystemScreenSaver(Window* window) : mVideoScreensaver(NULL), @@ -34,6 +33,7 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : if(!boost::filesystem::exists(path)) boost::filesystem::create_directory(path); srand((unsigned int)time(NULL)); + mVideoChangeTime = 30000; } SystemScreenSaver::~SystemScreenSaver() @@ -63,6 +63,7 @@ void SystemScreenSaver::startScreenSaver() mState = PowerSaver::getMode() == PowerSaver::INSTANT ? STATE_SCREENSAVER_ACTIVE : STATE_FADE_OUT_WINDOW; + mVideoChangeTime = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout"); mOpacity = 0.0f; // Load a random video @@ -117,6 +118,7 @@ void SystemScreenSaver::stopScreenSaver() { delete mVideoScreensaver; mVideoScreensaver = NULL; + // we need this to loop through different videos mState = STATE_INACTIVE; PowerSaver::runningScreenSaver(false); } @@ -291,7 +293,7 @@ void SystemScreenSaver::update(int deltaTime) { // Update the timer that swaps the videos mTimer += deltaTime; - if (mTimer > SWAP_VIDEO_TIMEOUT) + if (mTimer > mVideoChangeTime) { nextVideo(); } diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 1865d3aff..c1c2dc2b3 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -46,4 +46,5 @@ private: FileData* mCurrentGame; std::string mGameName; std::string mSystemName; + int mVideoChangeTime; }; diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index 51eb8fc50..c057c959d 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -10,11 +10,21 @@ #include "components/OptionListComponent.h" #include "components/MenuComponent.h" #include "guis/GuiMsgBox.h" +#include "PowerSaver.h" GuiScreensaverOptions::GuiScreensaverOptions(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { addChild(&mMenu); + // timeout to swap videos + auto swap = std::make_shared(mWindow, 10.f, 1000.f, 1.f, "s"); + swap->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000))); + addWithLabel("SWAP VIDEO AFTER (SECS)", swap); + addSaveFunc([swap] { + Settings::getInstance()->setInt("ScreenSaverSwapVideoTimeout", (int)round(swap->getValue()) * (1000)); + PowerSaver::updateTimeouts(); + }); + #ifdef _RPI_ auto ss_omx = std::make_shared(mWindow); ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index 1a4863e2b..cfdb86d06 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -25,7 +25,7 @@ void PowerSaver::updateTimeouts() { mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1; - mPlayNextTimeout = 30000 - getMode(); + mPlayNextTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); } PowerSaver::mode PowerSaver::getMode() diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h index f51c8bde8..fb34865c7 100644 --- a/es-core/src/PowerSaver.h +++ b/es-core/src/PowerSaver.h @@ -1,3 +1,5 @@ +#pragma once + class PowerSaver { public: diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 936d5b84f..381b42ace 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -94,6 +94,8 @@ void Settings::setDefaults() mBoolMap["ScreenSaverOmxPlayer"] = false; #endif + mIntMap["ScreenSaverSwapVideoTimeout"] = 30000; + mBoolMap["VideoAudio"] = true; mBoolMap["CaptionsCompatibility"] = true; // Audio out device for Video playback using OMX player. diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 1ab5b0474..38cda4f95 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -1,6 +1,7 @@ #include "components/VideoComponent.h" #include "Renderer.h" #include "ThemeData.h" +#include "Settings.h" #include "Util.h" #include "Window.h" #include "PowerSaver.h" @@ -23,8 +24,11 @@ std::string getTitleFolder() { void writeSubtitle(const char* gameName, const char* systemName, bool always) { FILE* file = fopen(getTitlePath().c_str(), "w"); + int end = (int)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000)); if (always) { - fprintf(file, "1\n00:00:01,000 --> 00:00:30,000\n"); + fprintf(file, "1\n00:00:01,000 --> 00:00:"); + fprintf(file, std::to_string(end).c_str()); + fprintf(file, ",000\n"); } else { @@ -34,9 +38,16 @@ void writeSubtitle(const char* gameName, const char* systemName, bool always) fprintf(file, "%s\n\n", systemName); if (!always) { - fprintf(file, "2\n00:00:26,000 --> 00:00:30,000\n"); - fprintf(file, "%s\n", gameName); - fprintf(file, "%s\n", systemName); + if (end > 12) + { + fprintf(file, "2\n00:00:"); + fprintf(file, std::to_string(end - 4).c_str()); + fprintf(file, ",000 --> 00:00:"); + fprintf(file, std::to_string(end).c_str()); + fprintf(file, ",000\n"); + fprintf(file, "%s\n", gameName); + fprintf(file, "%s\n", systemName); + } } fflush(file);