diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index 7926792b6..aec789c46 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -35,6 +35,7 @@ libneutrino_driver_a_SOURCES = \ rfmod.cpp \ radiotools.cpp \ radiotext.cpp \ + fade.cpp \ ringbuffer.c if BOXTYPE_COOL diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp new file mode 100644 index 000000000..1fc13472e --- /dev/null +++ b/src/driver/fade.cpp @@ -0,0 +1,107 @@ +/* + Neutrino-GUI - DBoxII-Project + + Copyright (C) 2011 CoolStream International Ltd + + License: GPLv2 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +COSDFader::COSDFader(unsigned char & alpha) + : max_alpha(alpha) +{ + frameBuffer = CFrameBuffer::getInstance(); + fadeTimer = 0; + fadeIn = false; + fadeOut = false; +} + +COSDFader::~COSDFader() +{ + Stop(); +} + +void COSDFader::StartFadeIn() +{ + if(!g_settings.widget_fade) + return; + + fadeIn = true; + fadeOut = false; + fadeValue = 100; + frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha + frameBuffer->setBlendLevel(fadeValue, fadeValue); + fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); +} + +/* return true if fade out started */ +bool COSDFader::StartFadeOut() +{ + bool ret = false; + if ( fadeIn ) { + g_RCInput->killTimer(fadeTimer); + fadeIn = false; + } + if ((!fadeOut) && g_settings.widget_fade) { + fadeOut = true; + fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); + frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha + ret = true; + } + return ret; +} + +void COSDFader::Stop() +{ + if ( fadeIn || fadeOut ) { + g_RCInput->killTimer(fadeTimer); + frameBuffer->setBlendMode(1); // Set back to per pixel alpha + fadeIn = fadeOut = false; + } +} + +/* return true, if fade out done */ +bool COSDFader::Fade() +{ + bool ret = false; + + if (fadeOut) { // disappear + fadeValue += FADE_STEP; + if (fadeValue >= 100) { + fadeValue = max_alpha; + g_RCInput->killTimer (fadeTimer); + ret = true; + } else + frameBuffer->setBlendLevel(fadeValue, fadeValue); + } else { // appears + fadeValue -= FADE_STEP; + if (fadeValue <= max_alpha) { + fadeValue = max_alpha; + g_RCInput->killTimer (fadeTimer); + fadeIn = false; + frameBuffer->setBlendMode(1); // Set back to per pixel alpha + } else + frameBuffer->setBlendLevel(fadeValue, fadeValue); + } + return ret; +} diff --git a/src/driver/fade.h b/src/driver/fade.h new file mode 100644 index 000000000..e9d472d28 --- /dev/null +++ b/src/driver/fade.h @@ -0,0 +1,47 @@ +/* + Neutrino-GUI - DBoxII-Project + + Copyright (C) 2011 CoolStream International Ltd + + License: GPLv2 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef __fade_f__ +#define __fade_f__ + +#include + +class COSDFader +{ + private: + uint32_t fadeTimer; + int fadeValue; + unsigned char & max_alpha; + bool fadeIn; + bool fadeOut; + + CFrameBuffer *frameBuffer; + public: + COSDFader(unsigned char &alpha); + ~COSDFader(); + + void StartFadeIn(); + bool StartFadeOut(); + void Stop(); + bool Fade(); + uint32_t GetTimer() { return fadeTimer; }; +}; +#endif