|
|
|
/***************************************************************************
|
|
|
|
copyright : (C) 2004 by amarok squad
|
|
|
|
email : amarok@kde.org
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* This library is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU Lesser General Public License version *
|
|
|
|
* 2.1 as published by the Free Software Foundation. *
|
|
|
|
* *
|
|
|
|
* This library 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 *
|
|
|
|
* Lesser General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU Lesser General Public *
|
|
|
|
* License along with this library; if not, write to the Free Software *
|
|
|
|
* Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 *
|
|
|
|
* USA *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef COLORGENERATOR_H
|
|
|
|
#define COLORGENERATOR_H
|
|
|
|
|
|
|
|
#include "debug.h"
|
|
|
|
|
|
|
|
namespace Amarok {
|
|
|
|
|
|
|
|
|
|
|
|
class Color : public TQColor
|
|
|
|
{
|
|
|
|
static const int CONTRAST = 130;
|
|
|
|
static const int SATURATION_TARGET = 30;
|
|
|
|
|
|
|
|
public:
|
|
|
|
Color( const TQColor &c ) : TQColor( c )
|
|
|
|
{
|
|
|
|
DEBUG_BLOCK
|
|
|
|
|
|
|
|
int h,s1,s,v1,v;
|
|
|
|
getHsv( &h, &s1, &v1 );
|
|
|
|
|
|
|
|
debug() << "Initial Color Properties: s:" << s1 << " v:" << v1 << endl;
|
|
|
|
|
|
|
|
//we want the new colour to be low saturation
|
|
|
|
//TODO what if s is less than SATURATION_TARGET to start with
|
|
|
|
s = s1 - CONTRAST;
|
|
|
|
v = v1;
|
|
|
|
|
|
|
|
if ( s < SATURATION_TARGET ) {
|
|
|
|
int remainingContrast = SATURATION_TARGET - s;
|
|
|
|
s = SATURATION_TARGET;
|
|
|
|
|
|
|
|
debug() << "Unapplied Contrast: " << remainingContrast << endl;
|
|
|
|
|
|
|
|
//we only add to the value to avoid the dreaded "grey-gradient"
|
|
|
|
v += remainingContrast;
|
|
|
|
|
|
|
|
if ( v > 255 ) {
|
|
|
|
int error = v - 255;
|
|
|
|
debug() << "Over-compensation: " << error << endl;
|
|
|
|
|
|
|
|
//if the error is significant then this must be a pretty bright colour
|
|
|
|
//it would look better if the gradient was dark
|
|
|
|
if( error > CONTRAST/2 )
|
|
|
|
v = v1 - error;
|
|
|
|
else
|
|
|
|
v = 255;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
setHsv( h, s, v );
|
|
|
|
|
|
|
|
debug() << "Final Colour Properties: s:" << s << " v:" << v << endl;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|