summaryrefslogtreecommitdiff
path: root/libopie2/opieui/opixmapeffect.cpp
Side-by-side diff
Diffstat (limited to 'libopie2/opieui/opixmapeffect.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/opixmapeffect.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/libopie2/opieui/opixmapeffect.cpp b/libopie2/opieui/opixmapeffect.cpp
index 05f851d..794c7b2 100644
--- a/libopie2/opieui/opixmapeffect.cpp
+++ b/libopie2/opieui/opixmapeffect.cpp
@@ -1,211 +1,213 @@
/* This file is part of the KDE libraries
Copyright (C) 1998, 1999 Christian Tibirna <ctibirna@total.net>
(C) 1998, 1999 Daniel M. Duley <mosfet@kde.org>
(C) 1998, 1999 Dirk A. Mueller <mueller@kde.org>
*/
// $Id$
/* QT */
#include <qimage.h>
#include <qpainter.h>
/* OPIE */
#include <opie2/opixmapeffect.h>
#include <opie2/oimageeffect.h>
+
+using namespace Opie::Ui;
//======================================================================
//
// Gradient effects
//
//======================================================================
OPixmap& OPixmapEffect::gradient(OPixmap &pixmap, const QColor &ca,
const QColor &cb, GradientType eff, int ncols)
{
if(pixmap.depth() > 8 &&
(eff == VerticalGradient || eff == HorizontalGradient)) {
int rDiff, gDiff, bDiff;
int rca, gca, bca /*, rcb, gcb, bcb*/;
register int x, y;
rDiff = (/*rcb = */ cb.red()) - (rca = ca.red());
gDiff = (/*gcb = */ cb.green()) - (gca = ca.green());
bDiff = (/*bcb = */ cb.blue()) - (bca = ca.blue());
register int rl = rca << 16;
register int gl = gca << 16;
register int bl = bca << 16;
int rcdelta = ((1<<16) / (eff == VerticalGradient ? pixmap.height() : pixmap.width())) * rDiff;
int gcdelta = ((1<<16) / (eff == VerticalGradient ? pixmap.height() : pixmap.width())) * gDiff;
int bcdelta = ((1<<16) / (eff == VerticalGradient ? pixmap.height() : pixmap.width())) * bDiff;
QPainter p(&pixmap);
// these for-loops could be merged, but the if's in the inner loop
// would make it slow
switch(eff) {
case VerticalGradient:
for ( y = 0; y < pixmap.height(); y++ ) {
rl += rcdelta;
gl += gcdelta;
bl += bcdelta;
p.setPen(QColor(rl>>16, gl>>16, bl>>16));
p.drawLine(0, y, pixmap.width()-1, y);
}
break;
case HorizontalGradient:
for( x = 0; x < pixmap.width(); x++) {
rl += rcdelta;
gl += gcdelta;
bl += bcdelta;
p.setPen(QColor(rl>>16, gl>>16, bl>>16));
p.drawLine(x, 0, x, pixmap.height()-1);
}
break;
default:
;
}
}
else {
QImage image = OImageEffect::gradient(pixmap.size(), ca, cb,
(OImageEffect::GradientType) eff, ncols);
pixmap.convertFromImage(image);
}
return pixmap;
}
// -----------------------------------------------------------------------------
OPixmap& OPixmapEffect::unbalancedGradient(OPixmap &pixmap, const QColor &ca,
const QColor &cb, GradientType eff, int xfactor, int yfactor,
int ncols)
{
QImage image = OImageEffect::unbalancedGradient(pixmap.size(), ca, cb,
(OImageEffect::GradientType) eff,
xfactor, yfactor, ncols);
pixmap.convertFromImage(image);
return pixmap;
}
//======================================================================
//
// Intensity effects
//
//======================================================================
OPixmap& OPixmapEffect::intensity(OPixmap &pixmap, float percent)
{
QImage image = pixmap.convertToImage();
OImageEffect::intensity(image, percent);
pixmap.convertFromImage(image);
return pixmap;
}
// -----------------------------------------------------------------------------
OPixmap& OPixmapEffect::channelIntensity(OPixmap &pixmap, float percent,
RGBComponent channel)
{
QImage image = pixmap.convertToImage();
OImageEffect::channelIntensity(image, percent,
(OImageEffect::RGBComponent) channel);
pixmap.convertFromImage(image);
return pixmap;
}
//======================================================================
//
// Blend effects
//
//======================================================================
OPixmap& OPixmapEffect::blend(OPixmap &pixmap, float initial_intensity,
const QColor &bgnd, GradientType eff,
bool anti_dir, int ncols)
{
QImage image = pixmap.convertToImage();
if (image.depth() <=8)
image = image.convertDepth(32); //Sloww..
OImageEffect::blend(image, initial_intensity, bgnd,
(OImageEffect::GradientType) eff, anti_dir);
unsigned int tmp;
if(pixmap.depth() <= 8 ) {
if ( ncols < 2 || ncols > 256 )
ncols = 3;
QColor *dPal = new QColor[ncols];
for (int i=0; i<ncols; i++) {
tmp = 0 + 255 * i / ( ncols - 1 );
dPal[i].setRgb ( tmp, tmp, tmp );
}
OImageEffect::dither(image, dPal, ncols);
pixmap.convertFromImage(image);
delete [] dPal;
}
else
pixmap.convertFromImage(image);
return pixmap;
}
//======================================================================
//
// Hash effects
//
//======================================================================
OPixmap& OPixmapEffect::hash(OPixmap &pixmap, Lighting lite,
unsigned int spacing, int ncols)
{
QImage image = pixmap.convertToImage();
OImageEffect::hash(image, (OImageEffect::Lighting) lite, spacing);
unsigned int tmp;
if(pixmap.depth() <= 8 ) {
if ( ncols < 2 || ncols > 256 )
ncols = 3;
QColor *dPal = new QColor[ncols];
for (int i=0; i<ncols; i++) {
tmp = 0 + 255 * i / ( ncols - 1 );
dPal[i].setRgb ( tmp, tmp, tmp );
}
OImageEffect::dither(image, dPal, ncols);
pixmap.convertFromImage(image);
delete [] dPal;
}
else
pixmap.convertFromImage(image);
return pixmap;
}
//======================================================================
//
// Pattern effects