Commit RELEASE-NOTES line for the wgCategories js variable I added some time ago.
[lhc/web/wiklou.git] / js2 / mwEmbed / libClipEdit / pixastic-lib / actions / emboss.js
1 /*
2 * Pixastic Lib - Emboss filter - v0.1.0
3 * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
4 * MIT License [http://www.opensource.org/licenses/mit-license.php]
5 */
6
7 Pixastic.Actions.emboss = {
8 process : function(params) {
9
10 var strength = parseFloat(params.options.strength)||1;
11 var greyLevel = typeof params.options.greyLevel != "undefined" ? parseInt(params.options.greyLevel) : 180;
12 var direction = params.options.direction||"topleft";
13 var blend = !!params.options.blend;
14
15 var dirY = 0;
16 var dirX = 0;
17
18 switch (direction) {
19 case "topleft": // top left
20 dirY = -1;
21 dirX = -1;
22 break;
23 case "top": // top
24 dirY = -1;
25 dirX = 0;
26 break;
27 case "topright": // top right
28 dirY = -1;
29 dirX = 1;
30 break;
31 case "right": // right
32 dirY = 0;
33 dirX = 1;
34 break;
35 case "bottomright": // bottom right
36 dirY = 1;
37 dirX = 1;
38 break;
39 case "bottom": // bottom
40 dirY = 1;
41 dirX = 0;
42 break;
43 case "bottomleft": // bottom left
44 dirY = 1;
45 dirX = -1;
46 break;
47 case "left": // left
48 dirY = 0;
49 dirX = -1;
50 break;
51 }
52
53 if (Pixastic.Client.hasCanvasImageData()) {
54 var data = Pixastic.prepareData(params);
55 var dataCopy = Pixastic.prepareData(params, true)
56
57 var invertAlpha = !!params.options.invertAlpha;
58 var rect = params.options.rect;
59 var w = rect.width;
60 var h = rect.height;
61
62 var w4 = w*4;
63 var y = h;
64 do {
65 var offsetY = (y-1)*w4;
66
67 var otherY = dirY;
68 if (y + otherY < 1) otherY = 0;
69 if (y + otherY > h) otherY = 0;
70
71 var offsetYOther = (y-1+otherY)*w*4;
72
73 var x = w;
74 do {
75 var offset = offsetY + (x-1)*4;
76
77 var otherX = dirX;
78 if (x + otherX < 1) otherX = 0;
79 if (x + otherX > w) otherX = 0;
80
81 var offsetOther = offsetYOther + (x-1+otherX)*4;
82
83 var dR = dataCopy[offset] - dataCopy[offsetOther];
84 var dG = dataCopy[offset+1] - dataCopy[offsetOther+1];
85 var dB = dataCopy[offset+2] - dataCopy[offsetOther+2];
86
87 var dif = dR;
88 var absDif = dif > 0 ? dif : -dif;
89
90 var absG = dG > 0 ? dG : -dG;
91 var absB = dB > 0 ? dB : -dB;
92
93 if (absG > absDif) {
94 dif = dG;
95 }
96 if (absB > absDif) {
97 dif = dB;
98 }
99
100 dif *= strength;
101
102 if (blend) {
103 var r = data[offset] + dif;
104 var g = data[offset+1] + dif;
105 var b = data[offset+2] + dif;
106
107 data[offset] = (r > 255) ? 255 : (r < 0 ? 0 : r);
108 data[offset+1] = (g > 255) ? 255 : (g < 0 ? 0 : g);
109 data[offset+2] = (b > 255) ? 255 : (b < 0 ? 0 : b);
110 } else {
111 var grey = greyLevel - dif;
112 if (grey < 0) {
113 grey = 0;
114 } else if (grey > 255) {
115 grey = 255;
116 }
117
118 data[offset] = data[offset+1] = data[offset+2] = grey;
119 }
120
121 } while (--x);
122 } while (--y);
123 return true;
124
125 } else if (Pixastic.Client.isIE()) {
126 params.image.style.filter += " progid:DXImageTransform.Microsoft.emboss()";
127 return true;
128 }
129 },
130 checkSupport : function() {
131 return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
132 }
133
134 }