Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / libClipEdit / pixastic-lib / actions / glow.js
blobbd93c810e4988c7bde0e89e0fdc4e9ca20dd08d4
1 /*
2  * Pixastic Lib - Glow - 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  */
8 Pixastic.Actions.glow = {
9         process : function(params) {
11                 var amount = (parseFloat(params.options.amount)||0);
12                 var blurAmount = parseFloat(params.options.radius)||0;
14                 amount = Math.min(1,Math.max(0,amount));
15                 blurAmount = Math.min(5,Math.max(0,blurAmount));
17                 if (Pixastic.Client.hasCanvasImageData()) {
18                         var rect = params.options.rect;
20                         var blurCanvas = document.createElement("canvas");
21                         blurCanvas.width = params.width;
22                         blurCanvas.height = params.height;
23                         var blurCtx = blurCanvas.getContext("2d");
24                         blurCtx.drawImage(params.canvas,0,0);
26                         var scale = 2;
27                         var smallWidth = Math.round(params.width / scale);
28                         var smallHeight = Math.round(params.height / scale);
30                         var copy = document.createElement("canvas");
31                         copy.width = smallWidth;
32                         copy.height = smallHeight;
34                         var clear = true;
35                         var steps = Math.round(blurAmount * 20);
37                         var copyCtx = copy.getContext("2d");
38                         for (var i=0;i<steps;i++) {
39                                 var scaledWidth = Math.max(1,Math.round(smallWidth - i));
40                                 var scaledHeight = Math.max(1,Math.round(smallHeight - i));
41         
42                                 copyCtx.clearRect(0,0,smallWidth,smallHeight);
43         
44                                 copyCtx.drawImage(
45                                         blurCanvas,
46                                         0,0,params.width,params.height,
47                                         0,0,scaledWidth,scaledHeight
48                                 );
49         
50                                 blurCtx.clearRect(0,0,params.width,params.height);
51         
52                                 blurCtx.drawImage(
53                                         copy,
54                                         0,0,scaledWidth,scaledHeight,
55                                         0,0,params.width,params.height
56                                 );
57                         }
59                         var data = Pixastic.prepareData(params);
60                         var blurData = Pixastic.prepareData({canvas:blurCanvas,options:params.options});
61                         var w = rect.width;
62                         var h = rect.height;
63                         var w4 = w*4;
64                         var y = h;
65                         do {
66                                 var offsetY = (y-1)*w4;
67                                 var x = w;
68                                 do {
69                                         var offset = offsetY + (x*4-4);
71                                         var r = data[offset] + amount * blurData[offset];
72                                         var g = data[offset+1] + amount * blurData[offset+1];
73                                         var b = data[offset+2] + amount * blurData[offset+2];
74         
75                                         if (r > 255) r = 255;
76                                         if (g > 255) g = 255;
77                                         if (b > 255) b = 255;
78                                         if (r < 0) r = 0;
79                                         if (g < 0) g = 0;
80                                         if (b < 0) b = 0;
82                                         data[offset] = r;
83                                         data[offset+1] = g;
84                                         data[offset+2] = b;
86                                 } while (--x);
87                         } while (--y);
89                         return true;
90                 }
91         },
92         checkSupport : function() {
93                 return Pixastic.Client.hasCanvasImageData();
94         }