Source Code (Use browser search to find items of interest.)
Class Index
qt'QColorLuminancePicker (./qt-2.1.0/src/dialogs/qcolordialog.cpp:256)
class QColorLuminancePicker : public QWidget
{
Q_OBJECT
public:
QColorLuminancePicker(QWidget* parent=0, const char* name=0);
~QColorLuminancePicker();
public slots:
void setCol( int h, int s, int v );
void setCol( int h, int s );
signals:
void newHsv( int h, int s, int v );
protected:
// QSize sizeHint() const;
// QSizePolicy sizePolicy() const;
void paintEvent( QPaintEvent*);
void mouseMoveEvent( QMouseEvent * );
void mousePressEvent( QMouseEvent * );
private:
enum { foff = 3, coff = 4 }; //frame and contents offset
int val;
int hue;
int sat;
int y2val( int y );
int val2y( int val );
void setVal( int v );
QPixmap *pix;
};
int QColorLuminancePicker::y2val( int y )
{
int d = height() - 2*coff - 1;
return 255 - (y - coff)*255/d;
}
int QColorLuminancePicker::val2y( int v )
{
int d = height() - 2*coff - 1;
return coff + (255-v)*d/255;
}
QColorLuminancePicker::QColorLuminancePicker(QWidget* parent,
const char* name)
:QWidget( parent, name )
{
hue = 100; val = 100; sat = 100;
pix = 0;
// setBackgroundMode( NoBackground );
}
QColorLuminancePicker::~QColorLuminancePicker()
{
delete pix;
}
void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m )
{
setVal( y2val(m->y()) );
}
void QColorLuminancePicker::mousePressEvent( QMouseEvent *m )
{
setVal( y2val(m->y()) );
}
void QColorLuminancePicker::setVal( int v )
{
if ( val == v )
return;
val = QMAX( 0, QMIN(v,255));
delete pix; pix=0;
repaint( FALSE ); //###
emit newHsv( hue, sat, val );
}
//receives from a hue,sat chooser and relays.
void QColorLuminancePicker::setCol( int h, int s )
{
setCol( h, s, val );
emit newHsv( h, s, val );
}
void QColorLuminancePicker::paintEvent( QPaintEvent * )
{
int w = width() - 5;
QRect r( 0, foff, w, height() - 2*foff );
int wi = r.width() - 2;
int hi = r.height() - 2;
if ( !pix || pix->height() != hi || pix->width() != wi ) {
delete pix;
QImage img( wi, hi, 32 );
int y;
for ( y = 0; y < hi; y++ ) {
QColor c( hue, sat, y2val(y+coff), QColor::Hsv );
QRgb r = c.rgb();
int x;
for ( x = 0; x < wi; x++ )
img.setPixel( x, y, r );
}
pix = new QPixmap;
pix->convertFromImage(img);
}
QPainter p(this);
p.drawPixmap( 1, coff, *pix );
QColorGroup g = colorGroup();
qDrawShadePanel( &p, r, g, TRUE );
p.setPen( g.foreground() );
p.setBrush( g.foreground() );
QPointArray a;
int y = val2y(val);
a.setPoints( 3, w, y, w+5, y+5, w+5, y-5 );
erase( w, 0, 5, height() );
p.drawPolygon( a );
}
void QColorLuminancePicker::setCol( int h, int s , int v )
{
val = v;
hue = h;
sat = s;
delete pix; pix=0;
repaint( FALSE );//####
}
qt'QColorLuminancePicker::setCol() (./qt-2.1.0/src/dialogs/qcolordialog.cpp:377)
void QColorLuminancePicker::setCol( int h, int s , int v )
{
val = v;
hue = h;
sat = s;
delete pix; pix=0;
repaint( FALSE );//####
}