summaryrefslogtreecommitdiff
path: root/noncore/styles/liquid/effects.cpp
blob: 0c76fbc82265167e79e38f3b9a18e403f54974c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

#include <qimage.h>
#include <qpixmap.h>
#include <qcolor.h>

#include "effects.h"



QImage & QImageEffect::fade (QImage & img, float val, const QColor & color)
{
	if ( img. width ( ) == 0 || img. height ( ) == 0 )
		return img;

// We don't handle bitmaps
      if (img.depth () == 1)
        return img;

    unsigned char
    tbl[256];
    for (int i = 0; i < 256; i++)
        tbl[i] = (int) (val * i + 0.5);

    int
    red =
    color.
    red ();
    int
    green =
    color.
    green ();
    int
    blue =
    color.
    blue ();

    QRgb col;
    int
    r,
    g,
    b,
    cr,
    cg,
    cb;

    if (img.depth () <= 8)
    {
          			// pseudo color
	    for (int i = 0; i < img.numColors (); i++)
	{
	        col = img.color (i);
	        cr = qRed (col);
	  cg = qGreen (col);
		cb=qBlue(col);
			        if (cr > red)
	            r = cr - tbl[cr - red];
	        
	  else
	            r = cr + tbl[red - cr];
	        if (cg > green)
	            g = cg - tbl[cg - green];
	        
	  else
	            g = cg + tbl[green - cg];
	        if (cb > blue)
	            b = cb - tbl[cb - blue];
	        
	  else
	            b = cb + tbl[blue - cb];
	        img.setColor (i, qRgb (r, g, b));
	    }

      }
  else
    {
          			// truecolor
	    for (int y = 0; y < img.height (); y++)
	{
	        QRgb * data = (QRgb *) img.scanLine (y);
	        for (int x = 0; x < img.width (); x++)
	    {
	              col = *data;
	              cr = qRed (col);
cg=qGreen(col);
cb=qBlue(col);
	              if (cr > red)
		          r = cr - tbl[cr - red];
	              
	      else
		          r = cr + tbl[red - cr];
	              if (cg > green)
		          g = cg - tbl[cg - green];
	              
	      else
		          g = cg + tbl[green - cg];
	              if (cb > blue)
		          b = cb - tbl[cb - blue];
	              
	      else
		          b = cb + tbl[blue - cb];
	              *data++ = qRgb (r, g, b);
	          }
	    }
      }

    return img;
}



QPixmap& QPixmapEffect::fade(QPixmap &pixmap, float val, const QColor &color)
{
	QImage img = pixmap.convertToImage();
	QImageEffect::fade(img, val, color);
	pixmap.convertFromImage(img);
   
	return pixmap;
}