diff options
Diffstat (limited to 'src/imageplugins/coreplugin/hsl/hspreviewwidget.cpp')
-rw-r--r-- | src/imageplugins/coreplugin/hsl/hspreviewwidget.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/imageplugins/coreplugin/hsl/hspreviewwidget.cpp b/src/imageplugins/coreplugin/hsl/hspreviewwidget.cpp new file mode 100644 index 00000000..3841ca38 --- /dev/null +++ b/src/imageplugins/coreplugin/hsl/hspreviewwidget.cpp @@ -0,0 +1,126 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2007-01-08 + * Description : Hue/Saturation preview widget + * + * Copyright (C) 2007 by Gilles Caulier <caulier dot gilles at gmail dot com> + * + * This program is free software; you can redistribute it + * and/or modify it under the terms of the GNU General + * Public License as published by the Free Software Foundation; + * either version 2, or (at your option) + * any later version. + * + * This program 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 General Public License for more details. + * + * ============================================================ */ + +// TQt includes. + +#include <tqdrawutil.h> +#include <tqimage.h> +#include <tqpainter.h> +#include <tqpixmap.h> + +// KDE includes. + +#include <tdeapplication.h> +#include <tdelocale.h> +#include <kimageeffect.h> + +// Local includes. + +#include "hslmodifier.h" +#include "dimg.h" +#include "hspreviewwidget.h" +#include "hspreviewwidget.moc" + +namespace DigikamImagesPluginCore +{ + +class HSPreviewWidgetPrivate +{ + +public: + + HSPreviewWidgetPrivate() + { + hue = 0.0; + sat = 0.0; + } + + int xBorder; + + double hue; + double sat; + + TQPixmap pixmap; +}; + +HSPreviewWidget::HSPreviewWidget(TQWidget *parent, int xBorder) + : TQWidget(parent, 0, TQt::WDestructiveClose) +{ + d = new HSPreviewWidgetPrivate; + d->xBorder = xBorder; +} + +HSPreviewWidget::~HSPreviewWidget() +{ + delete d; +} + +void HSPreviewWidget::setHS(double hue, double sat) +{ + d->hue = hue; + d->sat = sat; + updatePixmap(); + update(); +} + +void HSPreviewWidget::resizeEvent( TQResizeEvent * ) +{ + updatePixmap(); +} + +void HSPreviewWidget::paintEvent( TQPaintEvent * ) +{ + bitBlt(this, 0+d->xBorder, 0, &d->pixmap); +} + +void HSPreviewWidget::updatePixmap() +{ + int xSize = width()-2*d->xBorder; + int ySize = height(); + + Digikam::DImg image(xSize, ySize, false, false, 0, false); + TQColor col; + uint *p; + + for ( int s = ySize-1; s >= 0; s-- ) + { + p = (uint *)image.scanLine(ySize - s - 1); + + for( int h = 0 ; h < xSize ; h++ ) + { + col.setHsv( 359*h/(xSize-1), 255, 192 ); + *p = col.rgb(); + p++; + } + } + + Digikam::HSLModifier cmod; + cmod.setHue(d->hue); + cmod.setSaturation(d->sat); + cmod.setLightness(0.0); + cmod.applyHSL(image); + + d->pixmap = image.convertToPixmap(); +} + +} // NameSpace DigikamImagesPluginCore |