ace-colorpicker-rpk 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/.babelrc +30 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  4. package/ChangeLogs.md +22 -0
  5. package/LICENSE +21 -0
  6. package/README.md +117 -0
  7. package/addon/ace-colorpicker.css +1074 -0
  8. package/addon/ace-colorpicker.js +9602 -0
  9. package/addon/sample/colorpicker.html +199 -0
  10. package/config/rollup.config.dev.js +52 -0
  11. package/config/rollup.config.prod.js +53 -0
  12. package/dist/ace-colorpicker.css +1074 -0
  13. package/dist/ace-colorpicker.js +9736 -0
  14. package/dist/ace-colorpicker.min.js +1 -0
  15. package/gl.html +56 -0
  16. package/index.html +172 -0
  17. package/package.json +87 -0
  18. package/resources/image/ace-editor.png +0 -0
  19. package/resources/image/colorpaletts.png +0 -0
  20. package/resources/image/colorpicker.png +0 -0
  21. package/resources/image/grapes.jpg +0 -0
  22. package/resources/image/palette-type.png +0 -0
  23. package/resources/image/scalecolors-title.png +0 -0
  24. package/resources/image/scalecolors.png +0 -0
  25. package/resources/image/screen-shot.png +0 -0
  26. package/resources/image/sketch-type.png +0 -0
  27. package/src/colorpicker/BaseBox.js +94 -0
  28. package/src/colorpicker/BaseColorPicker.js +404 -0
  29. package/src/colorpicker/BaseModule.js +19 -0
  30. package/src/colorpicker/BaseSlider.js +97 -0
  31. package/src/colorpicker/BaseStore.js +71 -0
  32. package/src/colorpicker/UIElement.js +46 -0
  33. package/src/colorpicker/VerticalSlider.js +57 -0
  34. package/src/colorpicker/chromedevtool/ColorControl.js +47 -0
  35. package/src/colorpicker/chromedevtool/index.js +36 -0
  36. package/src/colorpicker/index.js +37 -0
  37. package/src/colorpicker/macos/ColorControl.js +47 -0
  38. package/src/colorpicker/macos/index.js +38 -0
  39. package/src/colorpicker/mini/ColorControl.js +40 -0
  40. package/src/colorpicker/mini/index.js +24 -0
  41. package/src/colorpicker/mini-vertical/ColorControl.js +35 -0
  42. package/src/colorpicker/mini-vertical/index.js +23 -0
  43. package/src/colorpicker/module/ColorManager.js +111 -0
  44. package/src/colorpicker/module/ColorSetsList.js +132 -0
  45. package/src/colorpicker/ring/ColorControl.js +47 -0
  46. package/src/colorpicker/ring/index.js +42 -0
  47. package/src/colorpicker/ui/ColorInformation.js +216 -0
  48. package/src/colorpicker/ui/ColorPalette.js +130 -0
  49. package/src/colorpicker/ui/ColorRing.js +68 -0
  50. package/src/colorpicker/ui/ColorSetsChooser.js +96 -0
  51. package/src/colorpicker/ui/ColorWheel.js +257 -0
  52. package/src/colorpicker/ui/CurrentColorSets.js +81 -0
  53. package/src/colorpicker/ui/CurrentColorSetsContextMenu.js +63 -0
  54. package/src/colorpicker/ui/control/Hue.js +40 -0
  55. package/src/colorpicker/ui/control/Opacity.js +65 -0
  56. package/src/colorpicker/ui/control/Value.js +50 -0
  57. package/src/colorpicker/ui/control/VerticalHue.js +39 -0
  58. package/src/colorpicker/ui/control/VerticalOpacity.js +55 -0
  59. package/src/colorpicker/vscode/ColorControl.js +40 -0
  60. package/src/colorpicker/vscode/index.js +82 -0
  61. package/src/colorpicker/xd/ColorControl.js +36 -0
  62. package/src/colorpicker/xd/index.js +36 -0
  63. package/src/extension/ace/colorview.js +198 -0
  64. package/src/extension/ace/index.js +11 -0
  65. package/src/index.js +12 -0
  66. package/src/scss/colorpicker.scss +65 -0
  67. package/src/scss/colorview.scss +32 -0
  68. package/src/scss/component/button.scss +33 -0
  69. package/src/scss/component/colorchooser.scss +141 -0
  70. package/src/scss/component/colorsets-contextmenu.scss +33 -0
  71. package/src/scss/component/colorsets.scss +89 -0
  72. package/src/scss/component/control.scss +93 -0
  73. package/src/scss/component/gradient-editor.scss +260 -0
  74. package/src/scss/component/gradient-picker.scss +241 -0
  75. package/src/scss/component/information.scss +141 -0
  76. package/src/scss/component/palette.scss +45 -0
  77. package/src/scss/index.scss +5 -0
  78. package/src/scss/mixins.scss +21 -0
  79. package/src/scss/themes/macos.scss +71 -0
  80. package/src/scss/themes/mini-vertical.scss +94 -0
  81. package/src/scss/themes/mini.scss +76 -0
  82. package/src/scss/themes/palette.scss +85 -0
  83. package/src/scss/themes/ring.scss +57 -0
  84. package/src/scss/themes/sketch.scss +172 -0
  85. package/src/scss/themes/vscode.scss +93 -0
  86. package/src/scss/themes/xd.scss +88 -0
  87. package/src/util/Blender.js +29 -0
  88. package/src/util/Canvas.js +128 -0
  89. package/src/util/Color.js +27 -0
  90. package/src/util/ColorNames.js +14 -0
  91. package/src/util/Dom.js +361 -0
  92. package/src/util/Event.js +30 -0
  93. package/src/util/EventMachin.js +349 -0
  94. package/src/util/GL.js +8 -0
  95. package/src/util/HueColor.js +49 -0
  96. package/src/util/ImageFilter.js +9 -0
  97. package/src/util/ImageLoader.js +137 -0
  98. package/src/util/Kmeans.js +237 -0
  99. package/src/util/Matrix.js +196 -0
  100. package/src/util/State.js +42 -0
  101. package/src/util/blend/composite.js +124 -0
  102. package/src/util/blend/non-separable.js +118 -0
  103. package/src/util/blend/separable.js +76 -0
  104. package/src/util/filter/StackBlur.js +517 -0
  105. package/src/util/filter/functions.js +829 -0
  106. package/src/util/filter/image/crop.js +16 -0
  107. package/src/util/filter/image/flipH.js +23 -0
  108. package/src/util/filter/image/flipV.js +25 -0
  109. package/src/util/filter/image/histogram.js +45 -0
  110. package/src/util/filter/image/index.js +18 -0
  111. package/src/util/filter/image/resize.js +18 -0
  112. package/src/util/filter/image/rotate.js +39 -0
  113. package/src/util/filter/image/rotateDegree.js +53 -0
  114. package/src/util/filter/index.js +11 -0
  115. package/src/util/filter/matrix/blur.js +12 -0
  116. package/src/util/filter/matrix/emboss.js +17 -0
  117. package/src/util/filter/matrix/gaussian-blur-5x.js +17 -0
  118. package/src/util/filter/matrix/gaussian-blur.js +16 -0
  119. package/src/util/filter/matrix/grayscale2.js +16 -0
  120. package/src/util/filter/matrix/index.js +58 -0
  121. package/src/util/filter/matrix/kirsch-horizontal.js +13 -0
  122. package/src/util/filter/matrix/kirsch-vertical.js +13 -0
  123. package/src/util/filter/matrix/laplacian-5x.js +16 -0
  124. package/src/util/filter/matrix/laplacian.js +14 -0
  125. package/src/util/filter/matrix/motion-blur-2.js +18 -0
  126. package/src/util/filter/matrix/motion-blur-3.js +19 -0
  127. package/src/util/filter/matrix/motion-blur.js +18 -0
  128. package/src/util/filter/matrix/negative.js +16 -0
  129. package/src/util/filter/matrix/normal.js +11 -0
  130. package/src/util/filter/matrix/sepia2.js +16 -0
  131. package/src/util/filter/matrix/sharpen.js +14 -0
  132. package/src/util/filter/matrix/sobel-horizontal.js +11 -0
  133. package/src/util/filter/matrix/sobel-vertical.js +11 -0
  134. package/src/util/filter/matrix/stack-blur.js +15 -0
  135. package/src/util/filter/matrix/transparency.js +16 -0
  136. package/src/util/filter/matrix/unsharp-masking.js +16 -0
  137. package/src/util/filter/multi/index.js +9 -0
  138. package/src/util/filter/multi/kirsch.js +7 -0
  139. package/src/util/filter/multi/sobel.js +7 -0
  140. package/src/util/filter/multi/vintage.js +7 -0
  141. package/src/util/filter/pixel/bitonal.js +24 -0
  142. package/src/util/filter/pixel/brightness.js +19 -0
  143. package/src/util/filter/pixel/brownie.js +23 -0
  144. package/src/util/filter/pixel/clip.js +21 -0
  145. package/src/util/filter/pixel/contrast.js +18 -0
  146. package/src/util/filter/pixel/gamma.js +13 -0
  147. package/src/util/filter/pixel/gradient.js +52 -0
  148. package/src/util/filter/pixel/grayscale.js +27 -0
  149. package/src/util/filter/pixel/hue.js +28 -0
  150. package/src/util/filter/pixel/index.js +52 -0
  151. package/src/util/filter/pixel/invert.js +16 -0
  152. package/src/util/filter/pixel/kodachrome.js +23 -0
  153. package/src/util/filter/pixel/matrix.js +28 -0
  154. package/src/util/filter/pixel/noise.js +24 -0
  155. package/src/util/filter/pixel/opacity.js +14 -0
  156. package/src/util/filter/pixel/polaroid.js +23 -0
  157. package/src/util/filter/pixel/saturation.js +30 -0
  158. package/src/util/filter/pixel/sepia.js +28 -0
  159. package/src/util/filter/pixel/shade.js +21 -0
  160. package/src/util/filter/pixel/shift.js +23 -0
  161. package/src/util/filter/pixel/solarize.js +23 -0
  162. package/src/util/filter/pixel/technicolor.js +23 -0
  163. package/src/util/filter/pixel/threshold-color.js +35 -0
  164. package/src/util/filter/pixel/threshold.js +7 -0
  165. package/src/util/filter/pixel/tint.js +20 -0
  166. package/src/util/functions/formatter.js +99 -0
  167. package/src/util/functions/fromCMYK.js +17 -0
  168. package/src/util/functions/fromHSL.js +52 -0
  169. package/src/util/functions/fromHSV.js +64 -0
  170. package/src/util/functions/fromLAB.js +99 -0
  171. package/src/util/functions/fromRGB.js +220 -0
  172. package/src/util/functions/fromYCrCb.js +16 -0
  173. package/src/util/functions/func.js +194 -0
  174. package/src/util/functions/image.js +145 -0
  175. package/src/util/functions/math.js +56 -0
  176. package/src/util/functions/mixin.js +164 -0
  177. package/src/util/functions/parser.js +294 -0
  178. package/src/util/gl/filter/index.js +9 -0
  179. package/src/util/gl/filter/matrix/blur.js +9 -0
  180. package/src/util/gl/filter/matrix/emboss.js +17 -0
  181. package/src/util/gl/filter/matrix/gaussian-blur-5x.js +15 -0
  182. package/src/util/gl/filter/matrix/gaussian-blur.js +19 -0
  183. package/src/util/gl/filter/matrix/grayscale2.js +13 -0
  184. package/src/util/gl/filter/matrix/index.js +55 -0
  185. package/src/util/gl/filter/matrix/kirsch-horizontal.js +11 -0
  186. package/src/util/gl/filter/matrix/kirsch-vertical.js +11 -0
  187. package/src/util/gl/filter/matrix/laplacian-5x.js +13 -0
  188. package/src/util/gl/filter/matrix/laplacian.js +11 -0
  189. package/src/util/gl/filter/matrix/motion-blur-2.js +17 -0
  190. package/src/util/gl/filter/matrix/motion-blur-3.js +17 -0
  191. package/src/util/gl/filter/matrix/motion-blur.js +17 -0
  192. package/src/util/gl/filter/matrix/negative.js +13 -0
  193. package/src/util/gl/filter/matrix/normal.js +8 -0
  194. package/src/util/gl/filter/matrix/sepia2.js +13 -0
  195. package/src/util/gl/filter/matrix/sharpen.js +11 -0
  196. package/src/util/gl/filter/matrix/sobel-horizontal.js +11 -0
  197. package/src/util/gl/filter/matrix/sobel-vertical.js +11 -0
  198. package/src/util/gl/filter/matrix/transparency.js +13 -0
  199. package/src/util/gl/filter/matrix/unsharp-masking.js +14 -0
  200. package/src/util/gl/filter/multi/index.js +9 -0
  201. package/src/util/gl/filter/multi/kirsch.js +7 -0
  202. package/src/util/gl/filter/multi/sobel.js +7 -0
  203. package/src/util/gl/filter/multi/vintage.js +7 -0
  204. package/src/util/gl/filter/pixel/bitonal.js +22 -0
  205. package/src/util/gl/filter/pixel/brightness.js +14 -0
  206. package/src/util/gl/filter/pixel/brownie.js +11 -0
  207. package/src/util/gl/filter/pixel/chaos.js +20 -0
  208. package/src/util/gl/filter/pixel/clip.js +20 -0
  209. package/src/util/gl/filter/pixel/contrast.js +16 -0
  210. package/src/util/gl/filter/pixel/gamma.js +16 -0
  211. package/src/util/gl/filter/pixel/gradient.js +59 -0
  212. package/src/util/gl/filter/pixel/grayscale.js +22 -0
  213. package/src/util/gl/filter/pixel/hue.js +19 -0
  214. package/src/util/gl/filter/pixel/index.js +54 -0
  215. package/src/util/gl/filter/pixel/invert.js +18 -0
  216. package/src/util/gl/filter/pixel/kodachrome.js +11 -0
  217. package/src/util/gl/filter/pixel/matrix.js +29 -0
  218. package/src/util/gl/filter/pixel/noise.js +18 -0
  219. package/src/util/gl/filter/pixel/opacity.js +17 -0
  220. package/src/util/gl/filter/pixel/polaroid.js +11 -0
  221. package/src/util/gl/filter/pixel/saturation.js +20 -0
  222. package/src/util/gl/filter/pixel/sepia.js +19 -0
  223. package/src/util/gl/filter/pixel/shade.js +20 -0
  224. package/src/util/gl/filter/pixel/shift.js +11 -0
  225. package/src/util/gl/filter/pixel/solarize.js +21 -0
  226. package/src/util/gl/filter/pixel/technicolor.js +11 -0
  227. package/src/util/gl/filter/pixel/threshold-color.js +15 -0
  228. package/src/util/gl/filter/pixel/threshold.js +7 -0
  229. package/src/util/gl/filter/pixel/tint.js +25 -0
  230. package/src/util/gl/filter/util.js +185 -0
  231. package/src/util/gl/functions.js +158 -0
  232. package/src/util/gl/index.js +543 -0
  233. package/src/util/index.js +17 -0
  234. package/stand.html +975 -0
  235. package/test/util.Blend.spec.js +15 -0
  236. package/test/util.Color.spec.js +200 -0
  237. package/test/util.Filter.spec.js +12 -0
  238. package/test/util.ImageFilter.spec.js +16 -0
@@ -0,0 +1,76 @@
1
+ import { sep } from "path";
2
+
3
+ // refer to https://www.w3.org/TR/compositing-1
4
+ var modes = {
5
+ normal ( back, source) {
6
+ return source;
7
+ },
8
+ multiply (back, source) {
9
+ return back * source ;
10
+ },
11
+ screen (back, source) {
12
+ return back + source -(back * source);
13
+ },
14
+ overlay (back, source) {
15
+ return this.hardlight(back, source)
16
+ },
17
+ hardlight (back, source) {
18
+ if(source <= 0.5)
19
+ return this.multiply(back, 2 * source)
20
+ else
21
+ return this.screen(back, 2 * source - 1)
22
+ },
23
+ diffuse (c) {
24
+ if(c <= 0.25)
25
+ return ((16 * c - 12) * c + 4) * c
26
+ else
27
+ return Math.sqrt(c)
28
+ },
29
+
30
+ softlight (back, source) {
31
+ if(source <= 0.5)
32
+ return back - (1 - 2 * source) * back * (1 - back)
33
+ else
34
+ return back + (2 * source - 1) * (this.diffuse(back) - back)
35
+ },
36
+ difference (back, source) {
37
+ return Math.abs(back, source);
38
+ },
39
+ exclusion (back, source) {
40
+ return back + source - 2 * back * source
41
+ },
42
+ darken (back, source) {
43
+ return Math.min(back, source)
44
+ },
45
+ lighten (back, source) {
46
+ return Math.max(back, source)
47
+ },
48
+ colordodge (back, source) {
49
+ if(back == 0) return 0;
50
+ else if(source == 1) return 1;
51
+ else Math.min(1, back / (1 - source))
52
+ },
53
+ colorburn (back, source) {
54
+ if(back == 1) return 1;
55
+ else if(source == 0) return 0;
56
+ else 1 - Math.min(1, (1 - back) / source)
57
+ }
58
+ }
59
+
60
+ function separable (back, source, mode) {
61
+ return {
62
+ r : modes[mode](back.r / 255, source.r / 255) * 255,
63
+ g : modes[mode](back.g / 255, source.g / 255) * 255,
64
+ b : modes[mode](back.b / 255, source.b / 255) * 255,
65
+ a : source.a
66
+ }
67
+ }
68
+
69
+ // alias
70
+ Object.keys(modes).forEach(mode => {
71
+ separable[mode] = function (back, source) {
72
+ return separable(back, source, mode);
73
+ }
74
+ })
75
+
76
+ export default separable;
@@ -0,0 +1,517 @@
1
+ /*
2
+
3
+ StackBlur - a fast almost Gaussian Blur For Canvas
4
+
5
+ Version: 0.5
6
+ Author: Mario Klingemann
7
+ Contact: mario@quasimondo.com
8
+ Website: http://www.quasimondo.com/StackBlurForCanvas
9
+ Twitter: @quasimondo
10
+
11
+ In case you find this class useful - especially in commercial projects -
12
+ I am not totally unhappy for a small donation to my PayPal account
13
+ mario@quasimondo.de
14
+
15
+ Or support me on flattr:
16
+ https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript
17
+
18
+ Copyright (c) 2010 Mario Klingemann
19
+
20
+ Permission is hereby granted, free of charge, to any person
21
+ obtaining a copy of this software and associated documentation
22
+ files (the "Software"), to deal in the Software without
23
+ restriction, including without limitation the rights to use,
24
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
25
+ copies of the Software, and to permit persons to whom the
26
+ Software is furnished to do so, subject to the following
27
+ conditions:
28
+
29
+ The above copyright notice and this permission notice shall be
30
+ included in all copies or substantial portions of the Software.
31
+
32
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
34
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
36
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
37
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
38
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
39
+ OTHER DEALINGS IN THE SOFTWARE.
40
+ */
41
+
42
+ var mul_table = [
43
+ 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512,
44
+ 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512,
45
+ 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456,
46
+ 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512,
47
+ 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328,
48
+ 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456,
49
+ 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335,
50
+ 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512,
51
+ 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405,
52
+ 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328,
53
+ 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271,
54
+ 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456,
55
+ 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388,
56
+ 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335,
57
+ 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292,
58
+ 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259
59
+ ];
60
+
61
+
62
+ var shg_table = [
63
+ 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,
64
+ 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,
65
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,
66
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
67
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
68
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,
69
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
70
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,
71
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
72
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
73
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
74
+ 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
75
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
76
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
77
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
78
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24
79
+ ];
80
+
81
+
82
+ function BlurStack() {
83
+ this.r = 0;
84
+ this.g = 0;
85
+ this.b = 0;
86
+ this.a = 0;
87
+ this.next = null;
88
+ }
89
+
90
+ function stackBlurImage(bitmap, radius, blurAlphaChannel) {
91
+
92
+ if (blurAlphaChannel)
93
+ return stackBlurCanvasRGBA(bitmap, 0, 0, radius);
94
+ else
95
+ return stackBlurCanvasRGB(bitmap, 0, 0, radius);
96
+ }
97
+
98
+
99
+ function stackBlurCanvasRGBA(bitmap, top_x, top_y, radius) {
100
+ if (isNaN(radius) || radius < 1) return bitmap;
101
+ radius |= 0;
102
+
103
+ const {pixels, width, height } = bitmap
104
+ var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum,
105
+ r_out_sum, g_out_sum, b_out_sum, a_out_sum,
106
+ r_in_sum, g_in_sum, b_in_sum, a_in_sum,
107
+ pr, pg, pb, pa, rbs;
108
+
109
+ var div = radius + radius + 1;
110
+ var w4 = width << 2;
111
+ var widthMinus1 = width - 1;
112
+ var heightMinus1 = height - 1;
113
+ var radiusPlus1 = radius + 1;
114
+ var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
115
+
116
+ var stackStart = new BlurStack();
117
+ var stack = stackStart;
118
+ for (i = 1; i < div; i++) {
119
+ stack = stack.next = new BlurStack();
120
+ if (i == radiusPlus1) var stackEnd = stack;
121
+ }
122
+ stack.next = stackStart;
123
+ var stackIn = null;
124
+ var stackOut = null;
125
+
126
+ yw = yi = 0;
127
+
128
+ var mul_sum = mul_table[radius];
129
+ var shg_sum = shg_table[radius];
130
+
131
+ for (y = 0; y < height; y++) {
132
+ r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;
133
+
134
+ r_out_sum = radiusPlus1 * (pr = pixels[yi]);
135
+ g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
136
+ b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
137
+ a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);
138
+
139
+ r_sum += sumFactor * pr;
140
+ g_sum += sumFactor * pg;
141
+ b_sum += sumFactor * pb;
142
+ a_sum += sumFactor * pa;
143
+
144
+ stack = stackStart;
145
+
146
+ for (i = 0; i < radiusPlus1; i++) {
147
+ stack.r = pr;
148
+ stack.g = pg;
149
+ stack.b = pb;
150
+ stack.a = pa;
151
+ stack = stack.next;
152
+ }
153
+
154
+ for (i = 1; i < radiusPlus1; i++) {
155
+ p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
156
+ r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
157
+ g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;
158
+ b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;
159
+ a_sum += (stack.a = (pa = pixels[p + 3])) * rbs;
160
+
161
+ r_in_sum += pr;
162
+ g_in_sum += pg;
163
+ b_in_sum += pb;
164
+ a_in_sum += pa;
165
+
166
+ stack = stack.next;
167
+ }
168
+
169
+
170
+ stackIn = stackStart;
171
+ stackOut = stackEnd;
172
+ for (x = 0; x < width; x++) {
173
+ pixels[yi + 3] = pa = (a_sum * mul_sum) >> shg_sum;
174
+ if (pa != 0) {
175
+ pa = 255 / pa;
176
+ pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;
177
+ pixels[yi + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;
178
+ pixels[yi + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;
179
+ } else {
180
+ pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;
181
+ }
182
+
183
+ r_sum -= r_out_sum;
184
+ g_sum -= g_out_sum;
185
+ b_sum -= b_out_sum;
186
+ a_sum -= a_out_sum;
187
+
188
+ r_out_sum -= stackIn.r;
189
+ g_out_sum -= stackIn.g;
190
+ b_out_sum -= stackIn.b;
191
+ a_out_sum -= stackIn.a;
192
+
193
+ p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;
194
+
195
+ r_in_sum += (stackIn.r = pixels[p]);
196
+ g_in_sum += (stackIn.g = pixels[p + 1]);
197
+ b_in_sum += (stackIn.b = pixels[p + 2]);
198
+ a_in_sum += (stackIn.a = pixels[p + 3]);
199
+
200
+ r_sum += r_in_sum;
201
+ g_sum += g_in_sum;
202
+ b_sum += b_in_sum;
203
+ a_sum += a_in_sum;
204
+
205
+ stackIn = stackIn.next;
206
+
207
+ r_out_sum += (pr = stackOut.r);
208
+ g_out_sum += (pg = stackOut.g);
209
+ b_out_sum += (pb = stackOut.b);
210
+ a_out_sum += (pa = stackOut.a);
211
+
212
+ r_in_sum -= pr;
213
+ g_in_sum -= pg;
214
+ b_in_sum -= pb;
215
+ a_in_sum -= pa;
216
+
217
+ stackOut = stackOut.next;
218
+
219
+ yi += 4;
220
+ }
221
+ yw += width;
222
+ }
223
+
224
+
225
+ for (x = 0; x < width; x++) {
226
+ g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;
227
+
228
+ yi = x << 2;
229
+ r_out_sum = radiusPlus1 * (pr = pixels[yi]);
230
+ g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
231
+ b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
232
+ a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);
233
+
234
+ r_sum += sumFactor * pr;
235
+ g_sum += sumFactor * pg;
236
+ b_sum += sumFactor * pb;
237
+ a_sum += sumFactor * pa;
238
+
239
+ stack = stackStart;
240
+
241
+ for (i = 0; i < radiusPlus1; i++) {
242
+ stack.r = pr;
243
+ stack.g = pg;
244
+ stack.b = pb;
245
+ stack.a = pa;
246
+ stack = stack.next;
247
+ }
248
+
249
+ yp = width;
250
+
251
+ for (i = 1; i <= radius; i++) {
252
+ yi = (yp + x) << 2;
253
+
254
+ r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
255
+ g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;
256
+ b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;
257
+ a_sum += (stack.a = (pa = pixels[yi + 3])) * rbs;
258
+
259
+ r_in_sum += pr;
260
+ g_in_sum += pg;
261
+ b_in_sum += pb;
262
+ a_in_sum += pa;
263
+
264
+ stack = stack.next;
265
+
266
+ if (i < heightMinus1) {
267
+ yp += width;
268
+ }
269
+ }
270
+
271
+ yi = x;
272
+ stackIn = stackStart;
273
+ stackOut = stackEnd;
274
+ for (y = 0; y < height; y++) {
275
+ p = yi << 2;
276
+ pixels[p + 3] = pa = (a_sum * mul_sum) >> shg_sum;
277
+ if (pa > 0) {
278
+ pa = 255 / pa;
279
+ pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;
280
+ pixels[p + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;
281
+ pixels[p + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;
282
+ } else {
283
+ pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;
284
+ }
285
+
286
+ r_sum -= r_out_sum;
287
+ g_sum -= g_out_sum;
288
+ b_sum -= b_out_sum;
289
+ a_sum -= a_out_sum;
290
+
291
+ r_out_sum -= stackIn.r;
292
+ g_out_sum -= stackIn.g;
293
+ b_out_sum -= stackIn.b;
294
+ a_out_sum -= stackIn.a;
295
+
296
+ p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
297
+
298
+ r_sum += (r_in_sum += (stackIn.r = pixels[p]));
299
+ g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));
300
+ b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));
301
+ a_sum += (a_in_sum += (stackIn.a = pixels[p + 3]));
302
+
303
+ stackIn = stackIn.next;
304
+
305
+ r_out_sum += (pr = stackOut.r);
306
+ g_out_sum += (pg = stackOut.g);
307
+ b_out_sum += (pb = stackOut.b);
308
+ a_out_sum += (pa = stackOut.a);
309
+
310
+ r_in_sum -= pr;
311
+ g_in_sum -= pg;
312
+ b_in_sum -= pb;
313
+ a_in_sum -= pa;
314
+
315
+ stackOut = stackOut.next;
316
+
317
+ yi += width;
318
+ }
319
+ }
320
+
321
+ return bitmap
322
+ }
323
+
324
+
325
+ function stackBlurCanvasRGBA(bitmap, top_x, top_y, radius) {
326
+ if (isNaN(radius) || radius < 1) return bitmap;
327
+ radius |= 0;
328
+
329
+ const {pixels, width, height } = bitmap
330
+ var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum,
331
+ r_out_sum, g_out_sum, b_out_sum,
332
+ r_in_sum, g_in_sum, b_in_sum,
333
+ pr, pg, pb, rbs;
334
+
335
+ var div = radius + radius + 1;
336
+ var w4 = width << 2;
337
+ var widthMinus1 = width - 1;
338
+ var heightMinus1 = height - 1;
339
+ var radiusPlus1 = radius + 1;
340
+ var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
341
+
342
+ var stackStart = new BlurStack();
343
+ var stack = stackStart;
344
+ for (i = 1; i < div; i++) {
345
+ stack = stack.next = new BlurStack();
346
+ if (i == radiusPlus1) var stackEnd = stack;
347
+ }
348
+ stack.next = stackStart;
349
+ var stackIn = null;
350
+ var stackOut = null;
351
+
352
+ yw = yi = 0;
353
+
354
+ var mul_sum = mul_table[radius];
355
+ var shg_sum = shg_table[radius];
356
+
357
+ for (y = 0; y < height; y++) {
358
+ r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;
359
+
360
+ r_out_sum = radiusPlus1 * (pr = pixels[yi]);
361
+ g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
362
+ b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
363
+
364
+ r_sum += sumFactor * pr;
365
+ g_sum += sumFactor * pg;
366
+ b_sum += sumFactor * pb;
367
+
368
+ stack = stackStart;
369
+
370
+ for (i = 0; i < radiusPlus1; i++) {
371
+ stack.r = pr;
372
+ stack.g = pg;
373
+ stack.b = pb;
374
+ stack = stack.next;
375
+ }
376
+
377
+ for (i = 1; i < radiusPlus1; i++) {
378
+ p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
379
+ r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
380
+ g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;
381
+ b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;
382
+
383
+ r_in_sum += pr;
384
+ g_in_sum += pg;
385
+ b_in_sum += pb;
386
+
387
+ stack = stack.next;
388
+ }
389
+
390
+
391
+ stackIn = stackStart;
392
+ stackOut = stackEnd;
393
+ for (x = 0; x < width; x++) {
394
+ pixels[yi] = (r_sum * mul_sum) >> shg_sum;
395
+ pixels[yi + 1] = (g_sum * mul_sum) >> shg_sum;
396
+ pixels[yi + 2] = (b_sum * mul_sum) >> shg_sum;
397
+
398
+ r_sum -= r_out_sum;
399
+ g_sum -= g_out_sum;
400
+ b_sum -= b_out_sum;
401
+
402
+ r_out_sum -= stackIn.r;
403
+ g_out_sum -= stackIn.g;
404
+ b_out_sum -= stackIn.b;
405
+
406
+ p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;
407
+
408
+ r_in_sum += (stackIn.r = pixels[p]);
409
+ g_in_sum += (stackIn.g = pixels[p + 1]);
410
+ b_in_sum += (stackIn.b = pixels[p + 2]);
411
+
412
+ r_sum += r_in_sum;
413
+ g_sum += g_in_sum;
414
+ b_sum += b_in_sum;
415
+
416
+ stackIn = stackIn.next;
417
+
418
+ r_out_sum += (pr = stackOut.r);
419
+ g_out_sum += (pg = stackOut.g);
420
+ b_out_sum += (pb = stackOut.b);
421
+
422
+ r_in_sum -= pr;
423
+ g_in_sum -= pg;
424
+ b_in_sum -= pb;
425
+
426
+ stackOut = stackOut.next;
427
+
428
+ yi += 4;
429
+ }
430
+ yw += width;
431
+ }
432
+
433
+
434
+ for (x = 0; x < width; x++) {
435
+ g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;
436
+
437
+ yi = x << 2;
438
+ r_out_sum = radiusPlus1 * (pr = pixels[yi]);
439
+ g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
440
+ b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
441
+
442
+ r_sum += sumFactor * pr;
443
+ g_sum += sumFactor * pg;
444
+ b_sum += sumFactor * pb;
445
+
446
+ stack = stackStart;
447
+
448
+ for (i = 0; i < radiusPlus1; i++) {
449
+ stack.r = pr;
450
+ stack.g = pg;
451
+ stack.b = pb;
452
+ stack = stack.next;
453
+ }
454
+
455
+ yp = width;
456
+
457
+ for (i = 1; i <= radius; i++) {
458
+ yi = (yp + x) << 2;
459
+
460
+ r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
461
+ g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;
462
+ b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;
463
+
464
+ r_in_sum += pr;
465
+ g_in_sum += pg;
466
+ b_in_sum += pb;
467
+
468
+ stack = stack.next;
469
+
470
+ if (i < heightMinus1) {
471
+ yp += width;
472
+ }
473
+ }
474
+
475
+ yi = x;
476
+ stackIn = stackStart;
477
+ stackOut = stackEnd;
478
+ for (y = 0; y < height; y++) {
479
+ p = yi << 2;
480
+ pixels[p] = (r_sum * mul_sum) >> shg_sum;
481
+ pixels[p + 1] = (g_sum * mul_sum) >> shg_sum;
482
+ pixels[p + 2] = (b_sum * mul_sum) >> shg_sum;
483
+
484
+ r_sum -= r_out_sum;
485
+ g_sum -= g_out_sum;
486
+ b_sum -= b_out_sum;
487
+
488
+ r_out_sum -= stackIn.r;
489
+ g_out_sum -= stackIn.g;
490
+ b_out_sum -= stackIn.b;
491
+
492
+ p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
493
+
494
+ r_sum += (r_in_sum += (stackIn.r = pixels[p]));
495
+ g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));
496
+ b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));
497
+
498
+ stackIn = stackIn.next;
499
+
500
+ r_out_sum += (pr = stackOut.r);
501
+ g_out_sum += (pg = stackOut.g);
502
+ b_out_sum += (pb = stackOut.b);
503
+
504
+ r_in_sum -= pr;
505
+ g_in_sum -= pg;
506
+ b_in_sum -= pb;
507
+
508
+ stackOut = stackOut.next;
509
+
510
+ yi += width;
511
+ }
512
+ }
513
+
514
+ return bitmap
515
+ }
516
+
517
+ export default stackBlurImage