Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / libClipEdit / pixastic-lib / actions / emboss.js
blob51e4252c0018d637974f3d43f69cf7a844c47f43
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  */
7 Pixastic.Actions.emboss = {
8         process : function(params) {
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;
15                 var dirY = 0;
16                 var dirX = 0;
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                 }
53                 if (Pixastic.Client.hasCanvasImageData()) {
54                         var data = Pixastic.prepareData(params);
55                         var dataCopy = Pixastic.prepareData(params, true)
57                         var invertAlpha = !!params.options.invertAlpha;
58                         var rect = params.options.rect;
59                         var w = rect.width;
60                         var h = rect.height;
62                         var w4 = w*4;
63                         var y = h;
64                         do {
65                                 var offsetY = (y-1)*w4;
67                                 var otherY = dirY;
68                                 if (y + otherY < 1) otherY = 0;
69                                 if (y + otherY > h) otherY = 0;
71                                 var offsetYOther = (y-1+otherY)*w*4;
73                                 var x = w;
74                                 do {
75                                                 var offset = offsetY + (x-1)*4;
77                                                 var otherX = dirX;
78                                                 if (x + otherX < 1) otherX = 0;
79                                                 if (x + otherX > w) otherX = 0;
81                                                 var offsetOther = offsetYOther + (x-1+otherX)*4;
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];
87                                                 var dif = dR;
88                                                 var absDif = dif > 0 ? dif : -dif;
90                                                 var absG = dG > 0 ? dG : -dG;
91                                                 var absB = dB > 0 ? dB : -dB;
93                                                 if (absG > absDif) {
94                                                         dif = dG;
95                                                 }
96                                                 if (absB > absDif) {
97                                                         dif = dB;
98                                                 }
100                                                 dif *= strength;
102                                                 if (blend) {
103                                                         var r = data[offset] + dif;
104                                                         var g = data[offset+1] + dif;
105                                                         var b = data[offset+2] + dif;
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                                                         }
118                                                         data[offset] = data[offset+1] = data[offset+2] = grey;
119                                                 }
121                                 } while (--x);
122                         } while (--y);
123                         return true;
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         }