@hxa-rn/react-native-gcanvas 6.0.24-beta.1 → 6.0.26

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 (86) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/LICENSE +203 -21
  3. package/README.md +207 -207
  4. package/harmony/gcanvas/LICENSE +203 -21
  5. package/harmony/gcanvas/NOTICE +32 -32
  6. package/harmony/gcanvas/OAT.xml +37 -37
  7. package/harmony/gcanvas/build-profile.json5 +16 -16
  8. package/harmony/gcanvas/hvigorfile.ts +1 -1
  9. package/harmony/gcanvas/index.ets +1 -1
  10. package/harmony/gcanvas/oh-package.json5 +14 -14
  11. package/harmony/gcanvas/src/main/cpp/CMakeLists.txt +126 -126
  12. package/harmony/gcanvas/src/main/cpp/GCanvasNapi.cpp +485 -485
  13. package/harmony/gcanvas/src/main/cpp/GCanvasXComponent.cpp +106 -106
  14. package/harmony/gcanvas/src/main/cpp/GcanvasPackage.h +24 -24
  15. package/harmony/gcanvas/src/main/ets/GCanvasModuleTurboModule.ts +448 -448
  16. package/harmony/gcanvas/src/main/ets/GCanvasNativeEngine.ts +206 -206
  17. package/harmony/gcanvas/src/main/ets/components/GCanvasView.ets +64 -64
  18. package/harmony/gcanvas/src/main/module.json5 +21 -21
  19. package/harmony/gcanvas/src/main/resources/base/element/string.json +12 -12
  20. package/harmony/gcanvas/src/main/resources/en_US/element/string.json +8 -8
  21. package/harmony/gcanvas/src/main/resources/zh_CN/element/string.json +12 -12
  22. package/harmony/gcanvas.har +0 -0
  23. package/package.json +4 -4
  24. package/packages/gcanvas/.babelrc +4 -4
  25. package/packages/gcanvas/.eslintrc.js +133 -133
  26. package/packages/gcanvas/package.json +19 -19
  27. package/packages/gcanvas/rollup.config.js +13 -13
  28. package/packages/gcanvas/src/bridge/react-native.js +286 -286
  29. package/packages/gcanvas/src/bridge/weex.js +210 -210
  30. package/packages/gcanvas/src/context/2d/FillStyleLinearGradient.js +16 -16
  31. package/packages/gcanvas/src/context/2d/FillStylePattern.js +7 -7
  32. package/packages/gcanvas/src/context/2d/FillStyleRadialGradient.js +16 -16
  33. package/packages/gcanvas/src/context/2d/OffScreenRenderingContext.js +48 -48
  34. package/packages/gcanvas/src/context/2d/RenderingContext.js +787 -787
  35. package/packages/gcanvas/src/context/webgl/ActiveInfo.js +10 -10
  36. package/packages/gcanvas/src/context/webgl/Buffer.js +20 -20
  37. package/packages/gcanvas/src/context/webgl/Framebuffer.js +20 -20
  38. package/packages/gcanvas/src/context/webgl/GLenum.js +300 -300
  39. package/packages/gcanvas/src/context/webgl/GLmethod.js +141 -141
  40. package/packages/gcanvas/src/context/webgl/GLtype.js +22 -22
  41. package/packages/gcanvas/src/context/webgl/Program.js +20 -20
  42. package/packages/gcanvas/src/context/webgl/Renderbuffer.js +20 -20
  43. package/packages/gcanvas/src/context/webgl/RenderingContext.js +1479 -1479
  44. package/packages/gcanvas/src/context/webgl/Shader.js +21 -21
  45. package/packages/gcanvas/src/context/webgl/ShaderPrecisionFormat.js +10 -10
  46. package/packages/gcanvas/src/context/webgl/Texture.js +21 -21
  47. package/packages/gcanvas/src/context/webgl/UniformLocation.js +21 -21
  48. package/packages/gcanvas/src/context/webgl/classUtils.js +2 -2
  49. package/packages/gcanvas/src/env/canvas.js +210 -210
  50. package/packages/gcanvas/src/env/image.js +76 -76
  51. package/packages/gcanvas/src/env/off-screen-canvas.js +74 -74
  52. package/packages/gcanvas/src/index.js +56 -56
  53. package/src/components/CanvasView.js +20 -20
  54. package/src/components/GCanvasComponent.js +408 -408
  55. package/src/index.js +69 -69
  56. package/src/packages/gcanvas/.babelrc +4 -4
  57. package/src/packages/gcanvas/.eslintrc.js +133 -133
  58. package/src/packages/gcanvas/package.json +19 -19
  59. package/src/packages/gcanvas/rollup.config.js +13 -13
  60. package/src/packages/gcanvas/src/bridge/react-native.js +288 -288
  61. package/src/packages/gcanvas/src/bridge/weex.js +210 -210
  62. package/src/packages/gcanvas/src/context/2d/FillStyleLinearGradient.js +16 -16
  63. package/src/packages/gcanvas/src/context/2d/FillStylePattern.js +7 -7
  64. package/src/packages/gcanvas/src/context/2d/FillStyleRadialGradient.js +16 -16
  65. package/src/packages/gcanvas/src/context/2d/OffScreenRenderingContext.js +48 -48
  66. package/src/packages/gcanvas/src/context/2d/RenderingContext.js +801 -801
  67. package/src/packages/gcanvas/src/context/webgl/ActiveInfo.js +10 -10
  68. package/src/packages/gcanvas/src/context/webgl/Buffer.js +20 -20
  69. package/src/packages/gcanvas/src/context/webgl/Framebuffer.js +20 -20
  70. package/src/packages/gcanvas/src/context/webgl/GLenum.js +300 -300
  71. package/src/packages/gcanvas/src/context/webgl/GLmethod.js +141 -141
  72. package/src/packages/gcanvas/src/context/webgl/GLtype.js +22 -22
  73. package/src/packages/gcanvas/src/context/webgl/Program.js +20 -20
  74. package/src/packages/gcanvas/src/context/webgl/Renderbuffer.js +20 -20
  75. package/src/packages/gcanvas/src/context/webgl/RenderingContext.js +1479 -1479
  76. package/src/packages/gcanvas/src/context/webgl/Shader.js +21 -21
  77. package/src/packages/gcanvas/src/context/webgl/ShaderPrecisionFormat.js +10 -10
  78. package/src/packages/gcanvas/src/context/webgl/Texture.js +21 -21
  79. package/src/packages/gcanvas/src/context/webgl/UniformLocation.js +21 -21
  80. package/src/packages/gcanvas/src/context/webgl/classUtils.js +2 -2
  81. package/src/packages/gcanvas/src/env/canvas.js +210 -210
  82. package/src/packages/gcanvas/src/env/image.js +76 -76
  83. package/src/packages/gcanvas/src/env/off-screen-canvas.js +74 -74
  84. package/src/packages/gcanvas/src/index.js +56 -56
  85. package/src/specs/v1/GCanvasViewNativeComponent.ts +42 -42
  86. package/src/specs/v1/NativeGCanvasModule.ts +140 -140
@@ -1,76 +1,76 @@
1
- import Element from '@flyskywhy/react-native-browser-polyfill/src/DOM/Element';
2
- import {defineEventAttribute} from 'event-target-shim';
3
-
4
- // use srcs to [Call drawImage() in loop with only one GImage instance](https://github.com/flyskywhy/react-native-gcanvas/issues/41)
5
- // just like what Web can do
6
- let srcs = {};
7
-
8
- let id = 0;
9
-
10
- class GImage extends Element {
11
- static GBridge = null;
12
-
13
- constructor() {
14
- super('img');
15
- this._id = 0;
16
- this.width = 0;
17
- this.height = 0;
18
- this._src = undefined;
19
- this.complete = false;
20
- }
21
-
22
- get src() {
23
- return this._src;
24
- }
25
-
26
- set src(value) {
27
- if (value.startsWith('//')) {
28
- value = 'http:' + value;
29
- }
30
-
31
- this._src = value;
32
-
33
- if (srcs[value]) {
34
- this._id = srcs[value].id;
35
- this.width = srcs[value].width;
36
- this.height = srcs[value].height;
37
-
38
- // in case another `new GImage()` set same src, so we also need `this.complete = true` here
39
- this.complete = true;
40
-
41
- var evt = {type: 'load', target: this};
42
- this.dispatchEvent(evt);
43
- } else {
44
- // TODO: remove useless `0` arg in preloadImage of js and native
45
- GImage.GBridge.preloadImage([this._src, 0], (data) => {
46
- if (typeof data === 'string') {
47
- data = JSON.parse(data);
48
- }
49
- if (data.error) {
50
- var evt = {type: 'error', target: this, message: data.error};
51
- this.dispatchEvent(evt);
52
- } else {
53
- id++;
54
- this._id = id;
55
- this.width = typeof data.width === 'number' ? data.width : 0;
56
- this.height = typeof data.height === 'number' ? data.height : 0;
57
- srcs[value] = {
58
- id: this._id,
59
- width: this.width,
60
- height: this.height,
61
- };
62
-
63
- this.complete = true;
64
-
65
- var evt = {type: 'load', target: this};
66
- this.dispatchEvent(evt);
67
- }
68
- });
69
- }
70
- }
71
- }
72
-
73
- defineEventAttribute(GImage.prototype, 'onload');
74
- defineEventAttribute(GImage.prototype, 'error');
75
-
76
- export default GImage;
1
+ import Element from '@flyskywhy/react-native-browser-polyfill/src/DOM/Element';
2
+ import {defineEventAttribute} from 'event-target-shim';
3
+
4
+ // use srcs to [Call drawImage() in loop with only one GImage instance](https://github.com/flyskywhy/react-native-gcanvas/issues/41)
5
+ // just like what Web can do
6
+ let srcs = {};
7
+
8
+ let id = 0;
9
+
10
+ class GImage extends Element {
11
+ static GBridge = null;
12
+
13
+ constructor() {
14
+ super('img');
15
+ this._id = 0;
16
+ this.width = 0;
17
+ this.height = 0;
18
+ this._src = undefined;
19
+ this.complete = false;
20
+ }
21
+
22
+ get src() {
23
+ return this._src;
24
+ }
25
+
26
+ set src(value) {
27
+ if (value.startsWith('//')) {
28
+ value = 'http:' + value;
29
+ }
30
+
31
+ this._src = value;
32
+
33
+ if (srcs[value]) {
34
+ this._id = srcs[value].id;
35
+ this.width = srcs[value].width;
36
+ this.height = srcs[value].height;
37
+
38
+ // in case another `new GImage()` set same src, so we also need `this.complete = true` here
39
+ this.complete = true;
40
+
41
+ var evt = {type: 'load', target: this};
42
+ this.dispatchEvent(evt);
43
+ } else {
44
+ // TODO: remove useless `0` arg in preloadImage of js and native
45
+ GImage.GBridge.preloadImage([this._src, 0], (data) => {
46
+ if (typeof data === 'string') {
47
+ data = JSON.parse(data);
48
+ }
49
+ if (data.error) {
50
+ var evt = {type: 'error', target: this, message: data.error};
51
+ this.dispatchEvent(evt);
52
+ } else {
53
+ id++;
54
+ this._id = id;
55
+ this.width = typeof data.width === 'number' ? data.width : 0;
56
+ this.height = typeof data.height === 'number' ? data.height : 0;
57
+ srcs[value] = {
58
+ id: this._id,
59
+ width: this.width,
60
+ height: this.height,
61
+ };
62
+
63
+ this.complete = true;
64
+
65
+ var evt = {type: 'load', target: this};
66
+ this.dispatchEvent(evt);
67
+ }
68
+ });
69
+ }
70
+ }
71
+ }
72
+
73
+ defineEventAttribute(GImage.prototype, 'onload');
74
+ defineEventAttribute(GImage.prototype, 'error');
75
+
76
+ export default GImage;
@@ -1,74 +1,74 @@
1
- import GContext2D from '../context/2d/OffScreenRenderingContext';
2
- import GContextWebGL from '../context/webgl/RenderingContext';
3
-
4
- function sleepMs(ms) {
5
- for (var start = new Date(); new Date() - start <= ms; ) {}
6
- }
7
-
8
- export default class GOffScreenCanvas {
9
- static GBridge = null;
10
-
11
- id = null;
12
- _context = null;
13
-
14
- _needRender = true;
15
-
16
- constructor(id, {isAutoClearRectBeforePutImageData, devicePixelRatio, disableAutoSwap}) {
17
- this.id = id;
18
- this.className = 'GOffScreenCanvas';
19
-
20
- this._isAutoClearRectBeforePutImageData = isAutoClearRectBeforePutImageData;
21
- if (devicePixelRatio !== undefined) {
22
- this._devicePixelRatio = parseInt(devicePixelRatio, 10);
23
- }
24
- this._disableAutoSwap = disableAutoSwap;
25
- }
26
-
27
- getContext(type) {
28
- if (type.match(/webgl/i)) {
29
- this._context = new GContextWebGL(this);
30
- this._context.componentId = this.id;
31
-
32
- if (!this._disableAutoSwap) {
33
- const render = () => {
34
- if (this._needRender) {
35
- this._context.flushJsCommands2CallNative();
36
- this._needRender = false;
37
- }
38
- };
39
- setInterval(render, 16);
40
- }
41
-
42
- GOffScreenCanvas.GBridge.callSetContextType(this.id, 1); // 0 for 2d; 1 for webgl
43
-
44
- sleepMs(100);
45
- if (this._devicePixelRatio > 0) {
46
- GOffScreenCanvas.GBridge.callSetDevicePixelRatio(this.id, this._devicePixelRatio);
47
- }
48
- } else if (type.match(/2d/i)) {
49
- if (this.context2d) {
50
- this._context = this.context2d;
51
- } else {
52
- this.context2d = this._context = new GContext2D(this);
53
- this._context.componentId = this.id;
54
- }
55
-
56
- sleepMs(100);
57
- if (this._devicePixelRatio > 0) {
58
- GOffScreenCanvas.GBridge.callSetDevicePixelRatio(this.id, this._devicePixelRatio);
59
- }
60
- } else {
61
- throw new Error('not supported context ' + type);
62
- }
63
-
64
- return this._context;
65
- }
66
-
67
- get drawCommands() {
68
- return this.context2d._drawCommands;
69
- }
70
-
71
- get images() {
72
- return this.context2d.images;
73
- }
74
- }
1
+ import GContext2D from '../context/2d/OffScreenRenderingContext';
2
+ import GContextWebGL from '../context/webgl/RenderingContext';
3
+
4
+ function sleepMs(ms) {
5
+ for (var start = new Date(); new Date() - start <= ms; ) {}
6
+ }
7
+
8
+ export default class GOffScreenCanvas {
9
+ static GBridge = null;
10
+
11
+ id = null;
12
+ _context = null;
13
+
14
+ _needRender = true;
15
+
16
+ constructor(id, {isAutoClearRectBeforePutImageData, devicePixelRatio, disableAutoSwap}) {
17
+ this.id = id;
18
+ this.className = 'GOffScreenCanvas';
19
+
20
+ this._isAutoClearRectBeforePutImageData = isAutoClearRectBeforePutImageData;
21
+ if (devicePixelRatio !== undefined) {
22
+ this._devicePixelRatio = parseInt(devicePixelRatio, 10);
23
+ }
24
+ this._disableAutoSwap = disableAutoSwap;
25
+ }
26
+
27
+ getContext(type) {
28
+ if (type.match(/webgl/i)) {
29
+ this._context = new GContextWebGL(this);
30
+ this._context.componentId = this.id;
31
+
32
+ if (!this._disableAutoSwap) {
33
+ const render = () => {
34
+ if (this._needRender) {
35
+ this._context.flushJsCommands2CallNative();
36
+ this._needRender = false;
37
+ }
38
+ };
39
+ setInterval(render, 16);
40
+ }
41
+
42
+ GOffScreenCanvas.GBridge.callSetContextType(this.id, 1); // 0 for 2d; 1 for webgl
43
+
44
+ sleepMs(100);
45
+ if (this._devicePixelRatio > 0) {
46
+ GOffScreenCanvas.GBridge.callSetDevicePixelRatio(this.id, this._devicePixelRatio);
47
+ }
48
+ } else if (type.match(/2d/i)) {
49
+ if (this.context2d) {
50
+ this._context = this.context2d;
51
+ } else {
52
+ this.context2d = this._context = new GContext2D(this);
53
+ this._context.componentId = this.id;
54
+ }
55
+
56
+ sleepMs(100);
57
+ if (this._devicePixelRatio > 0) {
58
+ GOffScreenCanvas.GBridge.callSetDevicePixelRatio(this.id, this._devicePixelRatio);
59
+ }
60
+ } else {
61
+ throw new Error('not supported context ' + type);
62
+ }
63
+
64
+ return this._context;
65
+ }
66
+
67
+ get drawCommands() {
68
+ return this.context2d._drawCommands;
69
+ }
70
+
71
+ get images() {
72
+ return this.context2d.images;
73
+ }
74
+ }
@@ -1,31 +1,31 @@
1
- import GCanvas from './env/canvas';
2
- import GImage from './env/image';
3
-
4
- import GWebGLRenderingContext from './context/webgl/RenderingContext';
5
- import GContext2D from './context/2d/RenderingContext';
6
-
7
- import GBridgeWeex from './bridge/weex';
8
- import GBridgeReactNative from './bridge/react-native';
9
-
10
- export let Image = GImage;
11
-
12
- export let WeexBridge = GBridgeWeex;
13
- export let ReactNativeBridge = GBridgeReactNative;
14
-
15
- export function enable(
16
- el,
17
- {
18
- bridge,
19
- debug,
20
- isAutoClearRectBeforePutImageData,
21
- isResetGlViewportAfterSetWidthOrHeight,
22
- devicePixelRatio,
23
- disableAutoSwap,
24
- disableComboCommands,
25
- } = {},
26
- ) {
27
- const GBridge = GImage.GBridge = GCanvas.GBridge = GWebGLRenderingContext.GBridge = GContext2D.GBridge = bridge;
28
-
1
+ import GCanvas from './env/canvas';
2
+ import GImage from './env/image';
3
+
4
+ import GWebGLRenderingContext from './context/webgl/RenderingContext';
5
+ import GContext2D from './context/2d/RenderingContext';
6
+
7
+ import GBridgeWeex from './bridge/weex';
8
+ import GBridgeReactNative from './bridge/react-native';
9
+
10
+ export let Image = GImage;
11
+
12
+ export let WeexBridge = GBridgeWeex;
13
+ export let ReactNativeBridge = GBridgeReactNative;
14
+
15
+ export function enable(
16
+ el,
17
+ {
18
+ bridge,
19
+ debug,
20
+ isAutoClearRectBeforePutImageData,
21
+ isResetGlViewportAfterSetWidthOrHeight,
22
+ devicePixelRatio,
23
+ disableAutoSwap,
24
+ disableComboCommands,
25
+ } = {},
26
+ ) {
27
+ const GBridge = GImage.GBridge = GCanvas.GBridge = GWebGLRenderingContext.GBridge = GContext2D.GBridge = bridge;
28
+
29
29
  GBridge.callEnable(el.ref, [
30
30
  0, // renderMode: 0--RENDERMODE_WHEN_DIRTY, 1--RENDERMODE_CONTINUOUSLY
31
31
  -1, // hybridLayerType: 0--LAYER_TYPE_NONE 1--LAYER_TYPE_SOFTWARE 2--LAYER_TYPE_HARDWARE
@@ -35,31 +35,31 @@ export function enable(
35
35
  0xffffffff, // clearColor: opaque white ARGB
36
36
  0, // sameLevel: newCanvasMode = true && true => GCanvasView and Webview is same level
37
37
  ]);
38
-
39
- if (debug === true) {
40
- GBridge.callEnableDebug();
41
- }
42
- if (disableComboCommands) {
43
- GBridge.callEnableDisableCombo();
44
- }
45
-
46
- var canvas = new GCanvas(el.ref, {
47
- isAutoClearRectBeforePutImageData,
48
- isResetGlViewportAfterSetWidthOrHeight,
49
- devicePixelRatio,
50
- disableAutoSwap,
51
- style: el.style,
52
- });
53
-
54
- return canvas;
55
- }
56
-
57
- export function disable(canvas) {
58
- canvas.disabled = true;
59
- if (canvas.webglInterval) {
60
- clearInterval(canvas.webglInterval);
61
- }
62
-
63
- const ref = canvas.id;
64
- GCanvas.GBridge.callDisable(ref);
65
- }
38
+
39
+ if (debug === true) {
40
+ GBridge.callEnableDebug();
41
+ }
42
+ if (disableComboCommands) {
43
+ GBridge.callEnableDisableCombo();
44
+ }
45
+
46
+ var canvas = new GCanvas(el.ref, {
47
+ isAutoClearRectBeforePutImageData,
48
+ isResetGlViewportAfterSetWidthOrHeight,
49
+ devicePixelRatio,
50
+ disableAutoSwap,
51
+ style: el.style,
52
+ });
53
+
54
+ return canvas;
55
+ }
56
+
57
+ export function disable(canvas) {
58
+ canvas.disabled = true;
59
+ if (canvas.webglInterval) {
60
+ clearInterval(canvas.webglInterval);
61
+ }
62
+
63
+ const ref = canvas.id;
64
+ GCanvas.GBridge.callDisable(ref);
65
+ }
@@ -1,20 +1,20 @@
1
- import {Platform, requireNativeComponent} from 'react-native';
2
-
3
- // 不能写在 Platform.select 对象字面量里:各分支会在模块加载时全部求值。
4
- // 鸿蒙上 android 分支的 requireNativeComponent('GCanvasView') 会先注册一次,
5
- // 再和 codegenNativeComponent('GCanvasView') 冲突,抛
6
- // "Tried to register two views with the same name GCanvasView" 并白屏。
7
- let CanvasView;
8
- if (Platform.OS === 'ios') {
9
- CanvasView = requireNativeComponent('RCTGCanvasView', null, {
10
- nativeOnly: {onChange: true},
11
- });
12
- } else if (Platform.OS === 'android') {
13
- CanvasView = requireNativeComponent('GCanvasView', null, {
14
- nativeOnly: {onChange: true},
15
- });
16
- } else {
17
- CanvasView = require('../specs/v1/GCanvasViewNativeComponent').default;
18
- }
19
-
20
- export default CanvasView;
1
+ import {Platform, requireNativeComponent} from 'react-native';
2
+
3
+ // 不能写在 Platform.select 对象字面量里:各分支会在模块加载时全部求值。
4
+ // 鸿蒙上 android 分支的 requireNativeComponent('GCanvasView') 会先注册一次,
5
+ // 再和 codegenNativeComponent('GCanvasView') 冲突,抛
6
+ // "Tried to register two views with the same name GCanvasView" 并白屏。
7
+ let CanvasView;
8
+ if (Platform.OS === 'ios') {
9
+ CanvasView = requireNativeComponent('RCTGCanvasView', null, {
10
+ nativeOnly: {onChange: true},
11
+ });
12
+ } else if (Platform.OS === 'android') {
13
+ CanvasView = requireNativeComponent('GCanvasView', null, {
14
+ nativeOnly: {onChange: true},
15
+ });
16
+ } else {
17
+ CanvasView = require('../specs/v1/GCanvasViewNativeComponent').default;
18
+ }
19
+
20
+ export default CanvasView;