void KHueSaturationSelector::drawPalette( QPixmap *pixmap ) { int xSize = contentsRect().width(), ySize = contentsRect().height(); QImage image( QSize( xSize, ySize ), QImage::Format_RGB32 ); QColor col; int h, s; uint *p; col.setHsv( hue(), saturation(), colorValue() ); int _h, _s, _v, _r, _g, _b; col.getHsv( &_h, &_s, &_v ); col.getRgb( &_r, &_g, &_b ); for ( s = ySize-1; s >= 0; s-- ) { p = ( uint * ) image.scanLine( ySize - s - 1 ); for( h = 0; h < xSize; h++ ) { switch ( chooserMode() ) { case ChooserClassic: default: col.setHsv( 359 * h / ( xSize - 1 ), 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ), 192 ); break; case ChooserHue: col.setHsv( _h, 255 * h / ( xSize - 1 ), 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; case ChooserSaturation: col.setHsv( 359 * h / ( xSize - 1 ), _s, 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; case ChooserValue: col.setHsv( 359 * h / ( xSize - 1 ), 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ), _v ); break; case ChooserRed: col.setRgb( _r, 255 * h / ( xSize - 1 ), 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; case ChooserGreen: col.setRgb( 255 * h / ( xSize - 1 ), _g, 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; case ChooserBlue: col.setRgb( 255 * s / ( ( ySize == 1 ) ? 1 : ySize - 1 ), 255 * h / ( xSize - 1 ), _b ); break; } *p = col.rgb(); p++; } } /* if ( pixmap->depth() <= 8 ) { const QVector<QColor> standardPalette = kdeui_standardPalette(); KImageEffect::dither( image, standardPalette.data(), standardPalette.size() ); } */ *pixmap = QPixmap::fromImage( image ); }
void KColorDialog::KColorDialogPrivate::slotVChanged(int v) { int _h, _s, _v, _r, _g, _b; _h = selColor.hue(); _s = selColor.saturation(); _v = selColor.value(); _r = selColor.red(); _g = selColor.green(); _b = selColor.blue(); QColor col; switch (chooserMode()) { case ChooserHue: col.setHsv(v, _s, _v); break; case ChooserSaturation: col.setHsv(_h, v, _v); break; case ChooserRed: col.setRgb(v, _g, _b); break; case ChooserGreen: col.setRgb(_r, v, _b); break; case ChooserBlue: col.setRgb(_r, _g, v); break; case ChooserValue: default: col.setHsv(_h, _s, v); break; } _setColor(col); }
void KColorValueSelector::drawPalette( QPixmap *pixmap ) { int xSize = contentsRect().width(), ySize = contentsRect().height(); QImage image( QSize( xSize, ySize ), QImage::Format_RGB32 ); QColor col; uint *p; QRgb rgb; int _r, _g, _b; col.setHsv( hue(), saturation(), colorValue() ); col.getRgb( &_r, &_g, &_b ); if ( orientation() == Qt::Horizontal ) { for ( int v = 0; v < ySize; v++ ) { p = ( uint * ) image.scanLine( ySize - v - 1 ); for( int x = 0; x < xSize; x++ ) { switch ( chooserMode() ) { case ChooserClassic: default: col.setHsv( hue(), saturation(), 255 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ) ); break; case ChooserRed: col.setRgb( 255 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ), _g, _b ); break; case ChooserGreen: col.setRgb( _r, 255 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ), _b ); break; case ChooserBlue: col.setRgb( _r, _g, 255 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ) ); break; case ChooserHue: col.setHsv( 360 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ), 255, 255 ); break; case ChooserSaturation: col.setHsv( hue(), 255 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ), colorValue() ); break; case ChooserValue: col.setHsv( hue(), saturation(), 255 * x / ( ( xSize == 1 ) ? 1 : xSize - 1 ) ); break; } rgb = col.rgb(); *p++ = rgb; } } } if( orientation() == Qt::Vertical ) { for ( int v = 0; v < ySize; v++ ) { p = ( uint * ) image.scanLine( ySize - v - 1 ); switch ( chooserMode() ) { case ChooserClassic: default: col.setHsv( hue(), saturation(), 255 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; case ChooserRed: col.setRgb( 255 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ), _g, _b ); break; case ChooserGreen: col.setRgb( _r, 255 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ), _b ); break; case ChooserBlue: col.setRgb( _r, _g, 255 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; case ChooserHue: col.setHsv( 360 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ), 255, 255 ); break; case ChooserSaturation: col.setHsv( hue(), 255 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ), colorValue() ); break; case ChooserValue: col.setHsv( hue(), saturation(), 255 * v / ( ( ySize == 1 ) ? 1 : ySize - 1 ) ); break; } rgb = col.rgb(); for ( int i = 0; i < xSize; i++ ) *p++ = rgb; } } /* if ( pixmap->depth() <= 8 ) { extern QVector<QColor> kdeui_standardPalette(); const QVector<QColor> standardPalette = kdeui_standardPalette(); KImageEffect::dither( image, standardPalette.data(), standardPalette.size() ); } */ *pixmap = QPixmap::fromImage( image ); }
// show but don't set into selColor, nor emit colorSelected void KColorDialog::KColorDialogPrivate::showColor(const QColor &color, const QString &name) { bRecursion = true; if (name.isEmpty()) colorName->setText(tr("-unnamed-")); else colorName->setText(name); patch->setColor(color); setRgbEdit(color); setHsvEdit(color); setHtmlEdit(color); switch (chooserMode()) { case ChooserSaturation: hsSelector->setValues(color.hue(), color.value()); valuePal->setValue(color.saturation()); break; case ChooserValue: hsSelector->setValues(color.hue(), color.saturation()); valuePal->setValue(color.value()); break; case ChooserRed: hsSelector->setValues(color.green(), color.blue()); valuePal->setValue(color.red()); break; case ChooserGreen: hsSelector->setValues(color.red(), color.blue()); valuePal->setValue(color.green()); break; case ChooserBlue: hsSelector->setValues(color.green(), color.red()); valuePal->setValue(color.blue()); break; case ChooserHue: default: hsSelector->setValues(color.saturation(), color.value()); valuePal->setValue(color.hue()); break; } bool blocked = valuePal->blockSignals(true); valuePal->setHue(color.hue()); valuePal->setSaturation(color.saturation()); valuePal->setColorValue(color.value()); valuePal->updateContents(); valuePal->blockSignals(blocked); valuePal->repaint(); blocked = hsSelector->blockSignals(true); hsSelector->setHue(color.hue()); hsSelector->setSaturation(color.saturation()); hsSelector->setColorValue(color.value()); hsSelector->updateContents(); hsSelector->blockSignals(blocked); hsSelector->repaint(); bRecursion = false; }