genode/demo/include/scout/fader.h
Norman Feske 3394be9464 Clean up scout widgets
This patch integrate the scout widgets with Genode's new API headers
'util/geometry.h', 'os/surface.h' and 'os/texture.h'. Thereby, we get
almost rid of the platform-abstraction shim that was never used anyway.

Furthermore, it extracts the parts that are worth reusing from the
scout implementation to the public location 'demo/include/scout'.
2014-01-27 18:54:06 +01:00

82 lines
1.4 KiB
C++

/*
* \brief Fading class
* \date 2005-11-10
* \author Norman Feske <norman.feske@genode-labs.com>
*/
/*
* Copyright (C) 2005-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__SCOUT__FADER_H_
#define _INCLUDE__SCOUT__FADER_H_
#include <scout/misc_math.h>
#include <scout/tick.h>
namespace Scout { class Fader; }
/**
* Class that manages the fading of a derived class.
*/
class Scout::Fader : public Tick
{
protected:
int _curr_value; /* current value */
int _dst_value; /* desired final value */
int _step;
public:
virtual ~Fader() { }
/**
* Fade to specified alpha value
*/
void fade_to(int dst_value, int step = -1)
{
if (step > 0) _step = step;
_dst_value = dst_value;
schedule(20);
}
/**
* Set fading speed
*/
void step(int step) { _step = step; }
/**
* Assign new current fading value
*/
void curr(int curr)
{
if (curr == _curr_value) return;
_curr_value = curr;
schedule(20);
}
/**
* Tick interface
*/
int on_tick()
{
if (_curr_value == _dst_value)
return 0;
if (_curr_value < _dst_value)
_curr_value = min(_curr_value + _step, _dst_value);
if (_curr_value > _dst_value)
_curr_value = max(_curr_value - _step, _dst_value);
return 1;
}
};
#endif /* _INCLUDE__SCOUT__FADER_H_ */