mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-09-18 10:51:12 +02:00
Screensaver: add option to show current time instead images
This commit is contained in:
@@ -1419,6 +1419,13 @@ void COsdSetup::showOsdScreenShotSetup(CMenuWidget *menu_screenshot)
|
||||
menu_screenshot->addItem(mc);
|
||||
}
|
||||
|
||||
#define SCREENSAVER_MODE_OPTION_COUNT 2
|
||||
const CMenuOptionChooser::keyval SCREENSAVER_MODE_OPTIONS[SCREENSAVER_MODE_OPTION_COUNT] =
|
||||
{
|
||||
{ 0, LOCALE_SCREENSAVER_MODE_IMAGE },
|
||||
{ 1, LOCALE_SCREENSAVER_MODE_CLOCK }
|
||||
};
|
||||
|
||||
void COsdSetup::showOsdScreensaverSetup(CMenuWidget *menu_screensaver)
|
||||
{
|
||||
menu_screensaver->addIntroItems(LOCALE_SCREENSAVER_MENU);
|
||||
@@ -1430,6 +1437,12 @@ void COsdSetup::showOsdScreensaverSetup(CMenuWidget *menu_screensaver)
|
||||
nc->setHint("", LOCALE_MENU_HINT_SCREENSAVER_DELAY);
|
||||
menu_screensaver->addItem(nc);
|
||||
|
||||
// screensaver mode
|
||||
CMenuOptionChooser* oc = new CMenuOptionChooser(LOCALE_SCREENSAVER_MODE, &g_settings.screensaver_mode, SCREENSAVER_MODE_OPTIONS, SCREENSAVER_MODE_OPTION_COUNT, true);
|
||||
oc->setHint("", LOCALE_MENU_HINT_SCREENSAVER_MODE);
|
||||
menu_screensaver->addItem(oc);
|
||||
screensaverNotifier->addItem(oc);
|
||||
|
||||
// screensaver timeout
|
||||
nc = new CMenuOptionNumberChooser(LOCALE_SCREENSAVER_TIMEOUT, &g_settings.screensaver_timeout, (g_settings.screensaver_delay != 0), 0, 60, NULL, CRCInput::RC_nokey, NULL, 0, 0, LOCALE_OPTIONS_OFF);
|
||||
nc->setNumberFormat(std::string("%d ") + g_Locale->getText(LOCALE_UNIT_SHORT_SECOND));
|
||||
@@ -1444,7 +1457,7 @@ void COsdSetup::showOsdScreensaverSetup(CMenuWidget *menu_screensaver)
|
||||
screensaverNotifier->addItem(mf);
|
||||
|
||||
// screensaver random mode
|
||||
CMenuOptionChooser* oc = new CMenuOptionChooser(LOCALE_SCREENSAVER_RANDOM, &g_settings.screensaver_random, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true);
|
||||
oc = new CMenuOptionChooser(LOCALE_SCREENSAVER_RANDOM, &g_settings.screensaver_random, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true);
|
||||
oc->setHint("", LOCALE_MENU_HINT_SCREENSAVER_RANDOM);
|
||||
menu_screensaver->addItem(oc);
|
||||
screensaverNotifier->addItem(oc);
|
||||
|
@@ -52,6 +52,7 @@ CScreenSaver::CScreenSaver()
|
||||
m_viewer = new CPictureViewer();
|
||||
index = 0;
|
||||
status_mute = CAudioMute::getInstance()->getStatus();
|
||||
scr_clock = NULL;
|
||||
}
|
||||
|
||||
CScreenSaver::~CScreenSaver()
|
||||
@@ -61,6 +62,8 @@ CScreenSaver::~CScreenSaver()
|
||||
thrScreenSaver = 0;
|
||||
|
||||
delete m_viewer;
|
||||
if (scr_clock)
|
||||
delete scr_clock;
|
||||
}
|
||||
|
||||
|
||||
@@ -113,6 +116,12 @@ void CScreenSaver::Stop()
|
||||
pthread_cancel(thrScreenSaver);
|
||||
thrScreenSaver = 0;
|
||||
|
||||
if (scr_clock){
|
||||
scr_clock->Stop();
|
||||
delete scr_clock;
|
||||
scr_clock = NULL;
|
||||
}
|
||||
|
||||
m_frameBuffer->paintBackground(); //clear entire screen
|
||||
|
||||
CAudioMute::getInstance()->enableMuteIcon(status_mute);
|
||||
@@ -136,12 +145,12 @@ void* CScreenSaver::ScreenSaverPrg(void* arg)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
PScreenSaver->PaintPicture();
|
||||
PScreenSaver->paint();
|
||||
sleep(g_settings.screensaver_timeout);
|
||||
}
|
||||
}
|
||||
else
|
||||
PScreenSaver->PaintPicture(); //just paint first found picture
|
||||
PScreenSaver->paint(); //just paint first found picture
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -219,26 +228,41 @@ bool CScreenSaver::ReadDir()
|
||||
}
|
||||
|
||||
|
||||
void CScreenSaver::PaintPicture()
|
||||
void CScreenSaver::paint()
|
||||
{
|
||||
if(v_bg_files.empty())
|
||||
return;
|
||||
if (g_settings.screensaver_mode == SCR_MODE_IMAGE && !v_bg_files.empty()){
|
||||
|
||||
if( (index >= v_bg_files.size()) || (access(v_bg_files.at(index).c_str(), F_OK)) )
|
||||
{
|
||||
ReadDir();
|
||||
index = 0;
|
||||
return;
|
||||
if( (index >= v_bg_files.size()) || (access(v_bg_files.at(index).c_str(), F_OK)) )
|
||||
{
|
||||
ReadDir();
|
||||
index = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
dprintf(DEBUG_INFO, "[CScreenSaver] %s - %d : %s\n", __func__, __LINE__, v_bg_files.at(index).c_str());
|
||||
m_viewer->ShowImage(v_bg_files.at(index).c_str(), false /*unscaled*/);
|
||||
|
||||
if (!g_settings.screensaver_random)
|
||||
index++;
|
||||
else
|
||||
index = rand() % v_bg_files.size();
|
||||
|
||||
if(index == v_bg_files.size())
|
||||
index = 0;
|
||||
}
|
||||
else{
|
||||
if (!scr_clock){
|
||||
scr_clock = new CComponentsFrmClock(1, 1, NULL, "%H.%M:%S", "%H.%M %S", true);
|
||||
scr_clock->setClockFont(g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_NUMBER]);
|
||||
scr_clock->setTextColor(COL_DARK_GRAY);
|
||||
scr_clock->enableSaveBg();
|
||||
scr_clock->doPaintBg(false);
|
||||
}
|
||||
if (scr_clock->isPainted())
|
||||
scr_clock->Stop();
|
||||
|
||||
dprintf(DEBUG_INFO, "[CScreenSaver] %s - %d : %s\n", __func__, __LINE__, v_bg_files.at(index).c_str());
|
||||
m_viewer->ShowImage(v_bg_files.at(index).c_str(), false /*unscaled*/);
|
||||
|
||||
if (!g_settings.screensaver_random)
|
||||
index++;
|
||||
else
|
||||
index = rand() % v_bg_files.size();
|
||||
|
||||
if(index == v_bg_files.size())
|
||||
index = 0;
|
||||
scr_clock->kill();
|
||||
scr_clock->setPosP(rand() % 80, rand() % 90);
|
||||
scr_clock->Start();
|
||||
}
|
||||
}
|
||||
|
@@ -28,12 +28,14 @@
|
||||
#include <driver/framebuffer.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <gui/components/cc.h>
|
||||
|
||||
class CScreenSaver : public sigc::trackable
|
||||
{
|
||||
private:
|
||||
CFrameBuffer *m_frameBuffer;
|
||||
CPictureViewer *m_viewer;
|
||||
CComponentsFrmClock *scr_clock;
|
||||
pthread_t thrScreenSaver;
|
||||
static void* ScreenSaverPrg(void *arg);
|
||||
vector<string> v_bg_files;
|
||||
@@ -42,9 +44,14 @@ class CScreenSaver : public sigc::trackable
|
||||
bool status_mute;
|
||||
|
||||
bool ReadDir();
|
||||
void PaintPicture();
|
||||
void paint();
|
||||
|
||||
public:
|
||||
enum
|
||||
{
|
||||
SCR_MODE_IMAGE,
|
||||
SCR_MODE_CLOCK
|
||||
};
|
||||
CScreenSaver();
|
||||
~CScreenSaver();
|
||||
static CScreenSaver* getInstance();
|
||||
|
Reference in New Issue
Block a user