UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

275 lines (258 loc) 7.88 kB
// Class: lime._internal.graphics.StackBlur var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../hxClasses_stub").default; var $hxEnums = require("./../../../hxEnums_stub").default; var $import = require("./../../../import_stub").default; function Std() {return require("./../../../Std");} function lime__$internal_graphics_BlurStack() {return require("./../../../lime/_internal/graphics/BlurStack");} // Constructor var StackBlur = function(){} // Meta StackBlur.__name__ = "lime._internal.graphics.StackBlur"; StackBlur.__isInterface__ = false; StackBlur.prototype = { }; StackBlur.prototype.__class__ = StackBlur.prototype.constructor = $hxClasses["lime._internal.graphics.StackBlur"] = StackBlur; // Init // Statics StackBlur.blur = function(dest,source,sourceRect,destPoint,blurX,blurY,quality) { dest.copyPixels(source,sourceRect,destPoint); StackBlur.__stackBlurCanvasRGBA(dest,(Std().default).int(sourceRect.width),(Std().default).int(sourceRect.height),blurX,blurY,quality); } StackBlur.__stackBlurCanvasRGBA = function(image,width,height,blurX,blurY,quality) { var radiusX = Math.round(blurX) >> 1; var radiusY = Math.round(blurY) >> 1; if(StackBlur.MUL_TABLE == null) { return; } if(radiusX >= StackBlur.MUL_TABLE.length) { radiusX = StackBlur.MUL_TABLE.length - 1; } if(radiusY >= StackBlur.MUL_TABLE.length) { radiusY = StackBlur.MUL_TABLE.length - 1; } if(radiusX < 0 || radiusY < 0) { return; } var iterations = quality; if(iterations < 1) { iterations = 1; } if(iterations > 3) { iterations = 3; } var px = image.get_data(); var x; var y; var i; var p; var yp; var yi; var yw; var r; var g; var b; var a; var pr; var pg; var pb; var pa; var f; var divx = radiusX + radiusX + 1; var divy = radiusY + radiusY + 1; var w = width; var h = height; var w1 = w - 1; var h1 = h - 1; var rxp1 = radiusX + 1; var ryp1 = radiusY + 1; var ssx = new (lime__$internal_graphics_BlurStack().default)(); var sx = ssx; var _g = 1; var _g1 = divx; while(_g < _g1) { var i1 = _g++; sx = sx.n = new (lime__$internal_graphics_BlurStack().default)(); } sx.n = ssx; var ssy = new (lime__$internal_graphics_BlurStack().default)(); var sy = ssy; var _g2 = 1; var _g3 = divy; while(_g2 < _g3) { var i2 = _g2++; sy = sy.n = new (lime__$internal_graphics_BlurStack().default)(); } sy.n = ssy; var si = null; var mtx = StackBlur.MUL_TABLE[radiusX]; var stx = StackBlur.SHG_TABLE[radiusX]; var mty = StackBlur.MUL_TABLE[radiusY]; var sty = StackBlur.SHG_TABLE[radiusY]; while(iterations > 0) { --iterations; yi = 0; yw = yi; var ms = mtx; var ss = stx; y = h; while(true) { pr = px[yi]; r = rxp1 * pr; pg = px[yi + 1]; g = rxp1 * pg; pb = px[yi + 2]; b = rxp1 * pb; pa = px[yi + 3]; a = rxp1 * pa; sx = ssx; i = rxp1; while(true) { sx.r = pr; sx.g = pg; sx.b = pb; sx.a = pa; sx = sx.n; if(!(--i > -1)) { break; } } var _g4 = 1; var _g5 = rxp1; while(_g4 < _g5) { var i3 = _g4++; p = yi + ((w1 < i3 ? w1 : i3) << 2); r += sx.r = px[p]; g += sx.g = px[p + 1]; b += sx.b = px[p + 2]; a += sx.a = px[p + 3]; sx = sx.n; } si = ssx; var _g6 = 0; var _g7 = w; while(_g6 < _g7) { var x1 = _g6++; px[yi++] = r * ms >>> ss; px[yi++] = g * ms >>> ss; px[yi++] = b * ms >>> ss; px[yi++] = a * ms >>> ss; p = x1 + radiusX + 1; p = yw + (p < w1 ? p : w1) << 2; r -= si.r - (si.r = px[p]); g -= si.g - (si.g = px[p + 1]); b -= si.b - (si.b = px[p + 2]); a -= si.a - (si.a = px[p + 3]); si = si.n; } yw += w; if(!(--y > 0)) { break; } } ms = mty; ss = sty; var _g41 = 0; var _g51 = w; while(_g41 < _g51) { var x2 = _g41++; yi = x2 << 2; pr = px[yi]; r = ryp1 * pr; pg = px[yi + 1]; g = ryp1 * pg; pb = px[yi + 2]; b = ryp1 * pb; pa = px[yi + 3]; a = ryp1 * pa; sy = ssy; var _g42 = 0; var _g52 = ryp1; while(_g42 < _g52) { var i4 = _g42++; sy.r = pr; sy.g = pg; sy.b = pb; sy.a = pa; sy = sy.n; } yp = w; var _g61 = 1; var _g71 = radiusY + 1; while(_g61 < _g71) { var i5 = _g61++; yi = yp + x2 << 2; r += sy.r = px[yi]; g += sy.g = px[yi + 1]; b += sy.b = px[yi + 2]; a += sy.a = px[yi + 3]; sy = sy.n; if(i5 < h1) { yp += w; } } yi = x2; si = ssy; if(iterations > 0) { var _g8 = 0; var _g9 = h; while(_g8 < _g9) { var y1 = _g8++; p = yi << 2; pa = a * ms >>> ss; px[p + 3] = pa; if(pa > 0) { px[p] = r * ms >>> ss; px[p + 1] = g * ms >>> ss; px[p + 2] = b * ms >>> ss; } else { px[p] = px[p + 1] = px[p + 2] = 0; } p = y1 + ryp1; p = x2 + (p < h1 ? p : h1) * w << 2; r -= si.r - (si.r = px[p]); g -= si.g - (si.g = px[p + 1]); b -= si.b - (si.b = px[p + 2]); a -= si.a - (si.a = px[p + 3]); si = si.n; yi += w; } } else { var _g81 = 0; var _g91 = h; while(_g81 < _g91) { var y2 = _g81++; p = yi << 2; pa = a * ms >>> ss; px[p + 3] = pa; if(pa > 0) { f = 255 / pa; pr = (Std().default).int((r * ms >>> ss) * f); pg = (Std().default).int((g * ms >>> ss) * f); pb = (Std().default).int((b * ms >>> ss) * f); px[p] = pr > 255 ? 255 : pr; px[p + 1] = pg > 255 ? 255 : pg; px[p + 2] = pb > 255 ? 255 : pb; } else { px[p] = px[p + 1] = px[p + 2] = 0; } p = y2 + ryp1; p = x2 + (p < h1 ? p : h1) * w << 2; r -= si.r - (si.r = px[p]); g -= si.g - (si.g = px[p + 1]); b -= si.b - (si.b = px[p + 2]); a -= si.a - (si.a = px[p + 3]); si = si.n; yi += w; } } } } } StackBlur.MUL_TABLE = [1,171,205,293,57,373,79,137,241,27,391,357,41,19,283,265,497,469,443,421,25,191,365,349,335,161,155,149,9,278,269,261,505,245,475,231,449,437,213,415,405,395,193,377,369,361,353,345,169,331,325,319,313,307,301,37,145,285,281,69,271,267,263,259,509,501,493,243,479,118,465,459,113,446,55,435,429,423,209,413,51,403,199,393,97,3,379,375,371,367,363,359,355,351,347,43,85,337,333,165,327,323,5,317,157,311,77,305,303,75,297,294,73,289,287,71,141,279,277,275,68,135,67,133,33,262,260,129,511,507,503,499,495,491,61,121,481,477,237,235,467,232,115,457,227,451,7,445,221,439,218,433,215,427,425,211,419,417,207,411,409,203,202,401,399,396,197,49,389,387,385,383,95,189,47,187,93,185,23,183,91,181,45,179,89,177,11,175,87,173,345,343,341,339,337,21,167,83,331,329,327,163,81,323,321,319,159,79,315,313,39,155,309,307,153,305,303,151,75,299,149,37,295,147,73,291,145,289,287,143,285,71,141,281,35,279,139,69,275,137,273,17,271,135,269,267,133,265,33,263,131,261,130,259,129,257,1] StackBlur.SHG_TABLE = [0,9,10,11,9,12,10,11,12,9,13,13,10,9,13,13,14,14,14,14,10,13,14,14,14,13,13,13,9,14,14,14,15,14,15,14,15,15,14,15,15,15,14,15,15,15,15,15,14,15,15,15,15,15,15,12,14,15,15,13,15,15,15,15,16,16,16,15,16,14,16,16,14,16,13,16,16,16,15,16,13,16,15,16,14,9,16,16,16,16,16,16,16,16,16,13,14,16,16,15,16,16,10,16,15,16,14,16,16,14,16,16,14,16,16,14,15,16,16,16,14,15,14,15,13,16,16,15,17,17,17,17,17,17,14,15,17,17,16,16,17,16,15,17,16,17,11,17,16,17,16,17,16,17,17,16,17,17,16,17,17,16,16,17,17,17,16,14,17,17,17,17,15,16,14,16,15,16,13,16,15,16,14,16,15,16,12,16,15,16,17,17,17,17,17,13,16,15,17,17,17,16,15,17,17,17,16,15,17,17,14,16,17,17,16,17,17,16,15,17,16,14,17,16,15,17,16,17,17,16,17,15,16,17,14,17,16,15,17,16,17,13,17,16,17,17,16,17,14,17,16,17,16,17,16,17,9] // Export exports.default = StackBlur;