From 7e6e08da5b89d7749e887986ad427d134df93b58 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 13 Jan 2013 17:48:13 +0100 Subject: [PATCH] Revert "Revert "New class to handle osd fade"" This reverts commit fb5805aa4981c89fedcea0219735239739dfcf2d. --- src/driver/Makefile.am | 2 +- src/driver/fade.cpp | 107 +++++++++++++++++++++++++++++++++++++++++ src/driver/fade.h | 49 ++++++++++++++++++- 3 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 src/driver/fade.cpp diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index 15d887c31..7bbbd9b39 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -21,7 +21,7 @@ libneutrino_driver_a_SOURCES = \ audiofile.cpp \ audiometadata.cpp \ audioplay.cpp \ - fader.cpp \ + fade.cpp \ fb_window.cpp \ file.cpp \ fontrenderer.cpp \ diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp new file mode 100644 index 000000000..3368d97ca --- /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); + 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); + } 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); + } + return ret; +} diff --git a/src/driver/fade.h b/src/driver/fade.h index 8bef1cb90..e9d472d28 100644 --- a/src/driver/fade.h +++ b/src/driver/fade.h @@ -1,2 +1,47 @@ -/* for compatibility */ -#include "fader.h" +/* + 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