summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/theme/ogfxeffect.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/noncore/styles/theme/ogfxeffect.cpp b/noncore/styles/theme/ogfxeffect.cpp
index cc5bbcd..2071a67 100644
--- a/noncore/styles/theme/ogfxeffect.cpp
+++ b/noncore/styles/theme/ogfxeffect.cpp
@@ -1,144 +1,146 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 1998, 1999 Christian Tibirna <ctibirna@total.net> 2 Copyright (C) 1998, 1999 Christian Tibirna <ctibirna@total.net>
3 (C) 1998, 1999 Daniel M. Duley <mosfet@kde.org> 3 (C) 1998, 1999 Daniel M. Duley <mosfet@kde.org>
4 (C) 1998, 1999 Dirk A. Mueller <mueller@kde.org> 4 (C) 1998, 1999 Dirk A. Mueller <mueller@kde.org>
5 5
6*/ 6*/
7 7
8// $Id$ 8// $Id$
9 9
10#include <qimage.h> 10#include <qimage.h>
11#include <qpainter.h> 11#include <qpainter.h>
12 12
13#include <qpe/qmath.h> 13#include <qpe/qmath.h>
14 14
15#include "ogfxeffect.h" 15#include "ogfxeffect.h"
16 16
17#include <cstdlib>
18#include <cmath>
17 19
18//====================================================================== 20//======================================================================
19// 21//
20// Gradient effects 22// Gradient effects
21// 23//
22//====================================================================== 24//======================================================================
23 25
24 26
25QPixmap& OGfxEffect::gradient(QPixmap &pixmap, const QColor &ca, 27QPixmap& OGfxEffect::gradient(QPixmap &pixmap, const QColor &ca,
26 const QColor &cb, GradientType eff, int ncols) 28 const QColor &cb, GradientType eff, int ncols)
27{ 29{
28 QImage image = gradient(pixmap.size(), ca, cb, eff, ncols); 30 QImage image = gradient(pixmap.size(), ca, cb, eff, ncols);
29 pixmap.convertFromImage(image); 31 pixmap.convertFromImage(image);
30 32
31 return pixmap; 33 return pixmap;
32} 34}
33 35
34QImage OGfxEffect::gradient(const QSize &size, const QColor &ca, 36QImage OGfxEffect::gradient(const QSize &size, const QColor &ca,
35 const QColor &cb, GradientType eff, int /*ncols*/) 37 const QColor &cb, GradientType eff, int /*ncols*/)
36{ 38{
37 int rDiff, gDiff, bDiff; 39 int rDiff, gDiff, bDiff;
38 int rca, gca, bca, rcb, gcb, bcb; 40 int rca, gca, bca, rcb, gcb, bcb;
39 41
40 QImage image(size, 32); 42 QImage image(size, 32);
41 43
42 if (size.width() == 0 || size.height() == 0) { 44 if (size.width() == 0 || size.height() == 0) {
43 qDebug ( "WARNING: OGfxEffect::gradient: invalid image" ); 45 qDebug ( "WARNING: OGfxEffect::gradient: invalid image" );
44 return image; 46 return image;
45 } 47 }
46 48
47 register int x, y; 49 register int x, y;
48 50
49 rDiff = (rcb = cb.red()) - (rca = ca.red()); 51 rDiff = (rcb = cb.red()) - (rca = ca.red());
50 gDiff = (gcb = cb.green()) - (gca = ca.green()); 52 gDiff = (gcb = cb.green()) - (gca = ca.green());
51 bDiff = (bcb = cb.blue()) - (bca = ca.blue()); 53 bDiff = (bcb = cb.blue()) - (bca = ca.blue());
52 54
53 if( eff == VerticalGradient || eff == HorizontalGradient ){ 55 if( eff == VerticalGradient || eff == HorizontalGradient ){
54 56
55 uint *p; 57 uint *p;
56 uint rgb; 58 uint rgb;
57 59
58 register int rl = rca << 16; 60 register int rl = rca << 16;
59 register int gl = gca << 16; 61 register int gl = gca << 16;
60 register int bl = bca << 16; 62 register int bl = bca << 16;
61 63
62 if( eff == VerticalGradient ) { 64 if( eff == VerticalGradient ) {
63 65
64 int rcdelta = ((1<<16) / size.height()) * rDiff; 66 int rcdelta = ((1<<16) / size.height()) * rDiff;
65 int gcdelta = ((1<<16) / size.height()) * gDiff; 67 int gcdelta = ((1<<16) / size.height()) * gDiff;
66 int bcdelta = ((1<<16) / size.height()) * bDiff; 68 int bcdelta = ((1<<16) / size.height()) * bDiff;
67 69
68 for ( y = 0; y < size.height(); y++ ) { 70 for ( y = 0; y < size.height(); y++ ) {
69 p = (uint *) image.scanLine(y); 71 p = (uint *) image.scanLine(y);
70 72
71 rl += rcdelta; 73 rl += rcdelta;
72 gl += gcdelta; 74 gl += gcdelta;
73 bl += bcdelta; 75 bl += bcdelta;
74 76
75 rgb = qRgb( (rl>>16), (gl>>16), (bl>>16) ); 77 rgb = qRgb( (rl>>16), (gl>>16), (bl>>16) );
76 78
77 for( x = 0; x < size.width(); x++ ) { 79 for( x = 0; x < size.width(); x++ ) {
78 *p = rgb; 80 *p = rgb;
79 p++; 81 p++;
80 } 82 }
81 } 83 }
82 84
83 } 85 }
84 else { // must be HorizontalGradient 86 else { // must be HorizontalGradient
85 87
86 unsigned int *o_src = (unsigned int *)image.scanLine(0); 88 unsigned int *o_src = (unsigned int *)image.scanLine(0);
87 unsigned int *src = o_src; 89 unsigned int *src = o_src;
88 90
89 int rcdelta = ((1<<16) / size.width()) * rDiff; 91 int rcdelta = ((1<<16) / size.width()) * rDiff;
90 int gcdelta = ((1<<16) / size.width()) * gDiff; 92 int gcdelta = ((1<<16) / size.width()) * gDiff;
91 int bcdelta = ((1<<16) / size.width()) * bDiff; 93 int bcdelta = ((1<<16) / size.width()) * bDiff;
92 94
93 for( x = 0; x < size.width(); x++) { 95 for( x = 0; x < size.width(); x++) {
94 96
95 rl += rcdelta; 97 rl += rcdelta;
96 gl += gcdelta; 98 gl += gcdelta;
97 bl += bcdelta; 99 bl += bcdelta;
98 100
99 *src++ = qRgb( (rl>>16), (gl>>16), (bl>>16)); 101 *src++ = qRgb( (rl>>16), (gl>>16), (bl>>16));
100 } 102 }
101 103
102 src = o_src; 104 src = o_src;
103 105
104 // Believe it or not, manually copying in a for loop is faster 106 // Believe it or not, manually copying in a for loop is faster
105 // than calling memcpy for each scanline (on the order of ms...). 107 // than calling memcpy for each scanline (on the order of ms...).
106 // I think this is due to the function call overhead (mosfet). 108 // I think this is due to the function call overhead (mosfet).
107 109
108 for (y = 1; y < size.height(); ++y) { 110 for (y = 1; y < size.height(); ++y) {
109 111
110 p = (unsigned int *)image.scanLine(y); 112 p = (unsigned int *)image.scanLine(y);
111 src = o_src; 113 src = o_src;
112 for(x=0; x < size.width(); ++x) 114 for(x=0; x < size.width(); ++x)
113 *p++ = *src++; 115 *p++ = *src++;
114 } 116 }
115 } 117 }
116 } 118 }
117 119
118 else { 120 else {
119 121
120 float rfd, gfd, bfd; 122 float rfd, gfd, bfd;
121 float rd = rca, gd = gca, bd = bca; 123 float rd = rca, gd = gca, bd = bca;
122 124
123 unsigned char *xtable[3]; 125 unsigned char *xtable[3];
124 unsigned char *ytable[3]; 126 unsigned char *ytable[3];
125 127
126 unsigned int w = size.width(), h = size.height(); 128 unsigned int w = size.width(), h = size.height();
127 xtable[0] = new unsigned char[w]; 129 xtable[0] = new unsigned char[w];
128 xtable[1] = new unsigned char[w]; 130 xtable[1] = new unsigned char[w];
129 xtable[2] = new unsigned char[w]; 131 xtable[2] = new unsigned char[w];
130 ytable[0] = new unsigned char[h]; 132 ytable[0] = new unsigned char[h];
131 ytable[1] = new unsigned char[h]; 133 ytable[1] = new unsigned char[h];
132 ytable[2] = new unsigned char[h]; 134 ytable[2] = new unsigned char[h];
133 w*=2, h*=2; 135 w*=2, h*=2;
134 136
135 if ( eff == DiagonalGradient || eff == CrossDiagonalGradient) { 137 if ( eff == DiagonalGradient || eff == CrossDiagonalGradient) {
136 // Diagonal dgradient code inspired by BlackBox (mosfet) 138 // Diagonal dgradient code inspired by BlackBox (mosfet)
137 // BlackBox dgradient is (C) Brad Hughes, <bhughes@tcac.net> and 139 // BlackBox dgradient is (C) Brad Hughes, <bhughes@tcac.net> and
138 // Mike Cole <mike@mydot.com>. 140 // Mike Cole <mike@mydot.com>.
139 141
140 rfd = (float)rDiff/w; 142 rfd = (float)rDiff/w;
141 gfd = (float)gDiff/w; 143 gfd = (float)gDiff/w;
142 bfd = (float)bDiff/w; 144 bfd = (float)bDiff/w;
143 145
144 int dir; 146 int dir;