You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amarok/amarok/src/colorgenerator.h

82 lines
2.8 KiB

/***************************************************************************
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