@nativescript/canvas 2.0.0-alpha.2 → 2.0.0-alpha.3

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 (370) hide show
  1. package/Canvas/index.android.js +3 -3
  2. package/Canvas/index.android.js.map +1 -1
  3. package/Canvas/index.ios.d.ts +3 -2
  4. package/Canvas/index.ios.js +74 -52
  5. package/Canvas/index.ios.js.map +1 -1
  6. package/Canvas2D/CanvasGradient/index.d.ts +9 -2
  7. package/Canvas2D/CanvasGradient/index.js +23 -2
  8. package/Canvas2D/CanvasGradient/index.js.map +1 -1
  9. package/Canvas2D/CanvasPattern/index.d.ts +9 -2
  10. package/Canvas2D/CanvasPattern/index.js +20 -2
  11. package/Canvas2D/CanvasPattern/index.js.map +1 -1
  12. package/Canvas2D/CanvasRenderingContext2D/index.d.ts +120 -132
  13. package/Canvas2D/CanvasRenderingContext2D/{index.android.js → index.js} +125 -133
  14. package/Canvas2D/CanvasRenderingContext2D/index.js.map +1 -0
  15. package/Canvas2D/DOMMatrix/index.d.ts +74 -2
  16. package/Canvas2D/DOMMatrix/index.js +180 -2
  17. package/Canvas2D/DOMMatrix/index.js.map +1 -1
  18. package/Canvas2D/ImageData/index.d.ts +15 -2
  19. package/Canvas2D/ImageData/index.js +66 -2
  20. package/Canvas2D/ImageData/index.js.map +1 -1
  21. package/Canvas2D/Path2D/index.d.ts +21 -2
  22. package/Canvas2D/Path2D/index.js +87 -2
  23. package/Canvas2D/Path2D/index.js.map +1 -1
  24. package/Canvas2D/TextMetrics/index.d.ts +17 -2
  25. package/Canvas2D/TextMetrics/index.js +44 -2
  26. package/Canvas2D/TextMetrics/index.js.map +1 -1
  27. package/Dom/Dom.d.ts +10 -0
  28. package/Dom/Dom.js +36 -0
  29. package/Dom/Dom.js.map +1 -0
  30. package/Dom/Fill.d.ts +4 -0
  31. package/Dom/Fill.js +8 -0
  32. package/Dom/Fill.js.map +1 -0
  33. package/Dom/Group.d.ts +21 -0
  34. package/Dom/Group.js +179 -0
  35. package/Dom/Group.js.map +1 -0
  36. package/Dom/Image.d.ts +12 -0
  37. package/Dom/Image.js +33 -0
  38. package/Dom/Image.js.map +1 -0
  39. package/Dom/Paint.d.ts +15 -0
  40. package/Dom/Paint.js +58 -0
  41. package/Dom/Paint.js.map +1 -0
  42. package/Dom/Shadow.d.ts +10 -0
  43. package/Dom/Shadow.js +26 -0
  44. package/Dom/Shadow.js.map +1 -0
  45. package/Dom/Text.d.ts +9 -0
  46. package/Dom/Text.js +50 -0
  47. package/Dom/Text.js.map +1 -0
  48. package/Dom/index.d.ts +8 -0
  49. package/Dom/index.js +9 -0
  50. package/Dom/index.js.map +1 -0
  51. package/Dom/shapes/Circle.d.ts +21 -0
  52. package/Dom/shapes/Circle.js +99 -0
  53. package/Dom/shapes/Circle.js.map +1 -0
  54. package/Dom/shapes/Line.d.ts +9 -0
  55. package/Dom/shapes/Line.js +37 -0
  56. package/Dom/shapes/Line.js.map +1 -0
  57. package/Dom/shapes/Path.d.ts +8 -0
  58. package/Dom/shapes/Path.js +31 -0
  59. package/Dom/shapes/Path.js.map +1 -0
  60. package/Dom/shapes/Points.d.ts +15 -0
  61. package/Dom/shapes/Points.js +21 -0
  62. package/Dom/shapes/Points.js.map +1 -0
  63. package/Dom/shapes/Rect.d.ts +15 -0
  64. package/Dom/shapes/Rect.js +63 -0
  65. package/Dom/shapes/Rect.js.map +1 -0
  66. package/Dom/shapes/RoundedRect.d.ts +12 -0
  67. package/Dom/shapes/RoundedRect.js +96 -0
  68. package/Dom/shapes/RoundedRect.js.map +1 -0
  69. package/Dom/shapes/index.d.ts +6 -0
  70. package/Dom/shapes/index.js +7 -0
  71. package/Dom/shapes/index.js.map +1 -0
  72. package/ImageAsset/index.d.ts +28 -2
  73. package/ImageAsset/index.js +158 -2
  74. package/ImageAsset/index.js.map +1 -1
  75. package/ImageBitmap/{index.android.d.ts → index.d.ts} +3 -2
  76. package/ImageBitmap/{index.android.js → index.js} +7 -4
  77. package/ImageBitmap/index.js.map +1 -0
  78. package/TextDecoder/index.d.ts +9 -2
  79. package/TextDecoder/index.js +53 -2
  80. package/TextDecoder/index.js.map +1 -1
  81. package/TextEncoder/index.d.ts +9 -2
  82. package/TextEncoder/index.js +51 -2
  83. package/TextEncoder/index.js.map +1 -1
  84. package/WebGL/WebGLExtensions/index.d.ts +159 -242
  85. package/WebGL/WebGLExtensions/{index.android.js → index.js} +1 -1
  86. package/WebGL/WebGLExtensions/index.js.map +1 -0
  87. package/WebGL/WebGLRenderingContext/index.d.ts +153 -293
  88. package/WebGL/WebGLRenderingContext/{index.android.js → index.js} +25 -8
  89. package/WebGL/WebGLRenderingContext/index.js.map +1 -0
  90. package/WebGL2/WebGL2RenderingContext/common.d.ts +1 -0
  91. package/WebGL2/WebGL2RenderingContext/common.js +3 -0
  92. package/WebGL2/WebGL2RenderingContext/common.js.map +1 -1
  93. package/WebGL2/WebGL2RenderingContext/index.d.ts +101 -455
  94. package/WebGL2/WebGL2RenderingContext/{index.android.js → index.js} +16 -6
  95. package/WebGL2/WebGL2RenderingContext/index.js.map +1 -0
  96. package/helpers.js +3 -0
  97. package/helpers.js.map +1 -1
  98. package/package.json +1 -1
  99. package/platforms/android/canvas-release.aar +0 -0
  100. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative +0 -0
  101. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative-Swift.h +93 -1718
  102. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative.h +1 -3
  103. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +92 -0
  104. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Info.plist +0 -0
  105. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo +0 -0
  106. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json +4435 -0
  107. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.private.swiftinterface +136 -0
  108. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  109. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftinterface +75 -3203
  110. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/module.modulemap +2 -2
  111. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/{TNSCanvas.nib → NSCCanvas.nib} +0 -0
  112. package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
  113. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative +0 -0
  114. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative-Swift.h +176 -3436
  115. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative.h +1 -3
  116. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +92 -0
  117. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Info.plist +0 -0
  118. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo +0 -0
  119. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo +0 -0
  120. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json +4435 -0
  121. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +136 -0
  122. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  123. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface +75 -3203
  124. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json +4435 -0
  125. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +136 -0
  126. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  127. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +75 -3203
  128. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/module.modulemap +2 -2
  129. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/{TNSCanvas.nib → NSCCanvas.nib} +0 -0
  130. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +49 -93
  131. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
  132. package/platforms/ios/Podfile +2 -1
  133. package/platforms/ios/build.xcconfig +5 -0
  134. package/platforms/ios/src/CanvasModule.h +10 -0
  135. package/platforms/ios/src/CanvasModule.mm +14 -0
  136. package/platforms/ios/src/cpp/CanvasJSIModule.h +60 -0
  137. package/platforms/ios/src/cpp/CanvasJSIModule.mm +1105 -0
  138. package/platforms/ios/src/cpp/Helpers.h +61 -0
  139. package/platforms/ios/src/cpp/ImageAssetImpl.h +30 -0
  140. package/platforms/ios/src/cpp/ImageAssetImpl.mm +417 -0
  141. package/platforms/ios/src/cpp/ImageBitmapImpl.h +41 -0
  142. package/platforms/ios/src/cpp/ImageBitmapImpl.mm +126 -0
  143. package/platforms/ios/src/cpp/JSICallback.h +15 -0
  144. package/platforms/ios/src/cpp/JSIReadFileCallback.h +16 -0
  145. package/platforms/ios/src/cpp/OnRafCallback.h +24 -0
  146. package/platforms/ios/src/cpp/OnRafCallback.mm +25 -0
  147. package/platforms/ios/src/cpp/RafImpl.h +27 -0
  148. package/platforms/ios/src/cpp/RafImpl.mm +10 -0
  149. package/platforms/ios/src/cpp/TextDecoderImpl.h +28 -0
  150. package/platforms/ios/src/cpp/TextDecoderImpl.mm +97 -0
  151. package/platforms/ios/src/cpp/TextEncoderImpl.h +28 -0
  152. package/platforms/ios/src/cpp/TextEncoderImpl.mm +60 -0
  153. package/platforms/ios/src/cpp/VecMutableBuffer.h +51 -0
  154. package/platforms/ios/src/cpp/canvas-cxx/src/lib.rs.cc +6119 -0
  155. package/platforms/ios/src/cpp/canvas-cxx/src/lib.rs.h +2854 -0
  156. package/platforms/ios/src/cpp/canvas2d/CanvasGradient.h +28 -0
  157. package/platforms/ios/src/cpp/canvas2d/CanvasGradient.mm +42 -0
  158. package/platforms/ios/src/cpp/canvas2d/CanvasPattern.h +29 -0
  159. package/platforms/ios/src/cpp/canvas2d/CanvasPattern.mm +49 -0
  160. package/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.h +70 -0
  161. package/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.mm +1954 -0
  162. package/platforms/ios/src/cpp/canvas2d/ImageDataImpl.h +29 -0
  163. package/platforms/ios/src/cpp/canvas2d/ImageDataImpl.mm +68 -0
  164. package/platforms/ios/src/cpp/canvas2d/MatrixImpl.h +29 -0
  165. package/platforms/ios/src/cpp/canvas2d/MatrixImpl.mm +149 -0
  166. package/platforms/ios/src/cpp/canvas2d/Path2D.h +27 -0
  167. package/platforms/ios/src/cpp/canvas2d/Path2D.mm +335 -0
  168. package/platforms/ios/src/cpp/canvas2d/TextMetricsImpl.h +29 -0
  169. package/platforms/ios/src/cpp/canvas2d/TextMetricsImpl.mm +68 -0
  170. package/platforms/ios/src/cpp/gl.h +29 -0
  171. package/platforms/ios/src/cpp/rust/cxx.cc +793 -0
  172. package/platforms/ios/src/cpp/rust/cxx.h +1111 -0
  173. package/platforms/ios/src/cpp/webgl/WebGLActiveInfoImpl.h +28 -0
  174. package/platforms/ios/src/cpp/webgl/WebGLActiveInfoImpl.mm +39 -0
  175. package/platforms/ios/src/cpp/webgl/WebGLBuffer.h +24 -0
  176. package/platforms/ios/src/cpp/webgl/WebGLFramebuffer.h +24 -0
  177. package/platforms/ios/src/cpp/webgl/WebGLProgram.h +24 -0
  178. package/platforms/ios/src/cpp/webgl/WebGLRenderbuffer.h +24 -0
  179. package/platforms/ios/src/cpp/webgl/WebGLRenderingContext.h +516 -0
  180. package/platforms/ios/src/cpp/webgl/WebGLRenderingContext.mm +5879 -0
  181. package/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.h +63 -0
  182. package/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.mm +97 -0
  183. package/platforms/ios/src/cpp/webgl/WebGLShader.h +24 -0
  184. package/platforms/ios/src/cpp/webgl/WebGLShaderPrecisionFormatImpl.h +28 -0
  185. package/platforms/ios/src/cpp/webgl/WebGLShaderPrecisionFormatImpl.mm +40 -0
  186. package/platforms/ios/src/cpp/webgl/WebGLTexture.h +23 -0
  187. package/platforms/ios/src/cpp/webgl/WebGLUniformLocation.h +28 -0
  188. package/platforms/ios/src/cpp/webgl/extensions/ANGLE_instanced_arraysImpl.h +28 -0
  189. package/platforms/ios/src/cpp/webgl/extensions/ANGLE_instanced_arraysImpl.mm +108 -0
  190. package/platforms/ios/src/cpp/webgl/extensions/EXT_blend_minmaxImpl.h +16 -0
  191. package/platforms/ios/src/cpp/webgl/extensions/EXT_blend_minmaxImpl.mm +28 -0
  192. package/platforms/ios/src/cpp/webgl/extensions/EXT_color_buffer_half_floatImpl.h +17 -0
  193. package/platforms/ios/src/cpp/webgl/extensions/EXT_color_buffer_half_floatImpl.mm +42 -0
  194. package/platforms/ios/src/cpp/webgl/extensions/EXT_disjoint_timer_queryImpl.h +28 -0
  195. package/platforms/ios/src/cpp/webgl/extensions/EXT_disjoint_timer_queryImpl.mm +295 -0
  196. package/platforms/ios/src/cpp/webgl/extensions/EXT_sRGBImpl.h +18 -0
  197. package/platforms/ios/src/cpp/webgl/extensions/EXT_sRGBImpl.mm +40 -0
  198. package/platforms/ios/src/cpp/webgl/extensions/EXT_shader_texture_lodImpl.h +29 -0
  199. package/platforms/ios/src/cpp/webgl/extensions/EXT_texture_filter_anisotropicImpl.h +18 -0
  200. package/platforms/ios/src/cpp/webgl/extensions/EXT_texture_filter_anisotropicImpl.mm +37 -0
  201. package/platforms/ios/src/cpp/webgl/extensions/OES_element_index_uintImpl.h +18 -0
  202. package/platforms/ios/src/cpp/webgl/extensions/OES_element_index_uintImpl.mm +28 -0
  203. package/platforms/ios/src/cpp/webgl/extensions/OES_standard_derivativesImpl.h +18 -0
  204. package/platforms/ios/src/cpp/webgl/extensions/OES_standard_derivativesImpl.mm +31 -0
  205. package/platforms/ios/src/cpp/webgl/extensions/OES_texture_floatImpl.h +30 -0
  206. package/platforms/ios/src/cpp/webgl/extensions/OES_texture_float_linearImpl.h +31 -0
  207. package/platforms/ios/src/cpp/webgl/extensions/OES_texture_half_floatImpl.h +18 -0
  208. package/platforms/ios/src/cpp/webgl/extensions/OES_texture_half_floatImpl.mm +28 -0
  209. package/platforms/ios/src/cpp/webgl/extensions/OES_texture_half_float_linearImpl.h +30 -0
  210. package/platforms/ios/src/cpp/webgl/extensions/OES_vertex_array_objectImpl.h +32 -0
  211. package/platforms/ios/src/cpp/webgl/extensions/OES_vertex_array_objectImpl.mm +127 -0
  212. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_color_buffer_floatImpl.h +20 -0
  213. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_color_buffer_floatImpl.mm +45 -0
  214. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_atcImpl.h +18 -0
  215. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_atcImpl.mm +45 -0
  216. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_etc1Impl.h +18 -0
  217. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_etc1Impl.mm +31 -0
  218. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_etcImpl.h +18 -0
  219. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_etcImpl.mm +70 -0
  220. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_pvrtcImpl.h +18 -0
  221. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_pvrtcImpl.mm +47 -0
  222. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_s3tcImpl.h +18 -0
  223. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_s3tcImpl.mm +46 -0
  224. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_s3tc_srgbImpl.h +19 -0
  225. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_compressed_texture_s3tc_srgbImpl.mm +49 -0
  226. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_depth_textureImpl.h +19 -0
  227. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_depth_textureImpl.mm +30 -0
  228. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_draw_buffersImpl.h +31 -0
  229. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_draw_buffersImpl.mm +177 -0
  230. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_lose_contextImpl.h +31 -0
  231. package/platforms/ios/src/cpp/webgl/extensions/WEBGL_lose_contextImpl.mm +64 -0
  232. package/platforms/ios/src/cpp/webgl2/WebGL2RenderingContext.h +431 -0
  233. package/platforms/ios/src/cpp/webgl2/WebGL2RenderingContext.mm +4554 -0
  234. package/platforms/ios/src/cpp/webgl2/WebGLQuery.h +21 -0
  235. package/platforms/ios/src/cpp/webgl2/WebGLSampler.h +21 -0
  236. package/platforms/ios/src/cpp/webgl2/WebGLSyncImpl.h +24 -0
  237. package/platforms/ios/src/cpp/webgl2/WebGLTransformFeedback.h +21 -0
  238. package/platforms/ios/src/cpp/webgl2/WebGLVertexArrayObject.h +21 -0
  239. package/platforms/ios/src/module.modulemap +4 -0
  240. package/Canvas2D/CanvasGradient/CanvasGradient.android.d.ts +0 -10
  241. package/Canvas2D/CanvasGradient/CanvasGradient.android.js +0 -26
  242. package/Canvas2D/CanvasGradient/CanvasGradient.android.js.map +0 -1
  243. package/Canvas2D/CanvasGradient/CanvasGradient.d.ts +0 -12
  244. package/Canvas2D/CanvasGradient/CanvasGradient.ios.d.ts +0 -8
  245. package/Canvas2D/CanvasGradient/CanvasGradient.ios.js +0 -19
  246. package/Canvas2D/CanvasGradient/CanvasGradient.ios.js.map +0 -1
  247. package/Canvas2D/CanvasGradient/common.d.ts +0 -3
  248. package/Canvas2D/CanvasGradient/common.js +0 -3
  249. package/Canvas2D/CanvasGradient/common.js.map +0 -1
  250. package/Canvas2D/CanvasPattern/CanvasPattern.android.d.ts +0 -8
  251. package/Canvas2D/CanvasPattern/CanvasPattern.android.js +0 -20
  252. package/Canvas2D/CanvasPattern/CanvasPattern.android.js.map +0 -1
  253. package/Canvas2D/CanvasPattern/CanvasPattern.d.ts +0 -8
  254. package/Canvas2D/CanvasPattern/CanvasPattern.ios.d.ts +0 -6
  255. package/Canvas2D/CanvasPattern/CanvasPattern.ios.js +0 -10
  256. package/Canvas2D/CanvasPattern/CanvasPattern.ios.js.map +0 -1
  257. package/Canvas2D/CanvasPattern/common.d.ts +0 -7
  258. package/Canvas2D/CanvasPattern/common.js +0 -9
  259. package/Canvas2D/CanvasPattern/common.js.map +0 -1
  260. package/Canvas2D/CanvasRenderingContext2D/common.d.ts +0 -87
  261. package/Canvas2D/CanvasRenderingContext2D/common.js +0 -12
  262. package/Canvas2D/CanvasRenderingContext2D/common.js.map +0 -1
  263. package/Canvas2D/CanvasRenderingContext2D/index.android.d.ts +0 -112
  264. package/Canvas2D/CanvasRenderingContext2D/index.android.js.map +0 -1
  265. package/Canvas2D/CanvasRenderingContext2D/index.ios.d.ts +0 -110
  266. package/Canvas2D/CanvasRenderingContext2D/index.ios.js +0 -897
  267. package/Canvas2D/CanvasRenderingContext2D/index.ios.js.map +0 -1
  268. package/Canvas2D/DOMMatrix/DOMMatrix.android.d.ts +0 -72
  269. package/Canvas2D/DOMMatrix/DOMMatrix.android.js +0 -177
  270. package/Canvas2D/DOMMatrix/DOMMatrix.android.js.map +0 -1
  271. package/Canvas2D/DOMMatrix/DOMMatrix.d.ts +0 -30
  272. package/Canvas2D/DOMMatrix/DOMMatrix.ios.d.ts +0 -48
  273. package/Canvas2D/DOMMatrix/DOMMatrix.ios.js +0 -142
  274. package/Canvas2D/DOMMatrix/DOMMatrix.ios.js.map +0 -1
  275. package/Canvas2D/DOMMatrix/common.d.ts +0 -27
  276. package/Canvas2D/DOMMatrix/common.js +0 -9
  277. package/Canvas2D/DOMMatrix/common.js.map +0 -1
  278. package/Canvas2D/ImageData/ImageData.android.d.ts +0 -9
  279. package/Canvas2D/ImageData/ImageData.android.js +0 -65
  280. package/Canvas2D/ImageData/ImageData.android.js.map +0 -1
  281. package/Canvas2D/ImageData/ImageData.d.ts +0 -11
  282. package/Canvas2D/ImageData/ImageData.ios.d.ts +0 -10
  283. package/Canvas2D/ImageData/ImageData.ios.js +0 -45
  284. package/Canvas2D/ImageData/ImageData.ios.js.map +0 -1
  285. package/Canvas2D/ImageData/common.d.ts +0 -9
  286. package/Canvas2D/ImageData/common.js +0 -13
  287. package/Canvas2D/ImageData/common.js.map +0 -1
  288. package/Canvas2D/Path2D/Path2D.android.d.ts +0 -18
  289. package/Canvas2D/Path2D/Path2D.android.js +0 -83
  290. package/Canvas2D/Path2D/Path2D.android.js.map +0 -1
  291. package/Canvas2D/Path2D/Path2D.d.ts +0 -26
  292. package/Canvas2D/Path2D/Path2D.ios.d.ts +0 -15
  293. package/Canvas2D/Path2D/Path2D.ios.js +0 -55
  294. package/Canvas2D/Path2D/Path2D.ios.js.map +0 -1
  295. package/Canvas2D/Path2D/common.d.ts +0 -17
  296. package/Canvas2D/Path2D/common.js +0 -12
  297. package/Canvas2D/Path2D/common.js.map +0 -1
  298. package/Canvas2D/TextMetrics/TextMetrics.android.d.ts +0 -16
  299. package/Canvas2D/TextMetrics/TextMetrics.android.js +0 -43
  300. package/Canvas2D/TextMetrics/TextMetrics.android.js.map +0 -1
  301. package/Canvas2D/TextMetrics/TextMetrics.d.ts +0 -7
  302. package/Canvas2D/TextMetrics/TextMetrics.ios.d.ts +0 -16
  303. package/Canvas2D/TextMetrics/TextMetrics.ios.js +0 -43
  304. package/Canvas2D/TextMetrics/TextMetrics.ios.js.map +0 -1
  305. package/Canvas2D/TextMetrics/common.d.ts +0 -18
  306. package/Canvas2D/TextMetrics/common.js +0 -13
  307. package/Canvas2D/TextMetrics/common.js.map +0 -1
  308. package/ImageAsset/ImageAsset.android.d.ts +0 -20
  309. package/ImageAsset/ImageAsset.android.js +0 -149
  310. package/ImageAsset/ImageAsset.android.js.map +0 -1
  311. package/ImageAsset/ImageAsset.d.ts +0 -31
  312. package/ImageAsset/ImageAsset.ios.d.ts +0 -22
  313. package/ImageAsset/ImageAsset.ios.js +0 -114
  314. package/ImageAsset/ImageAsset.ios.js.map +0 -1
  315. package/ImageAsset/common.d.ts +0 -13
  316. package/ImageAsset/common.js +0 -21
  317. package/ImageAsset/common.js.map +0 -1
  318. package/ImageBitmap/common.d.ts +0 -8
  319. package/ImageBitmap/common.js +0 -9
  320. package/ImageBitmap/common.js.map +0 -1
  321. package/ImageBitmap/index.android.js.map +0 -1
  322. package/ImageBitmap/index.ios.d.ts +0 -12
  323. package/ImageBitmap/index.ios.js +0 -283
  324. package/ImageBitmap/index.ios.js.map +0 -1
  325. package/TextDecoder/TextDecoder.android.d.ts +0 -8
  326. package/TextDecoder/TextDecoder.android.js +0 -52
  327. package/TextDecoder/TextDecoder.android.js.map +0 -1
  328. package/TextDecoder/TextDecoder.d.ts +0 -10
  329. package/TextDecoder/TextDecoder.ios.d.ts +0 -6
  330. package/TextDecoder/TextDecoder.ios.js +0 -37
  331. package/TextDecoder/TextDecoder.ios.js.map +0 -1
  332. package/TextDecoder/common.d.ts +0 -8
  333. package/TextDecoder/common.js +0 -13
  334. package/TextDecoder/common.js.map +0 -1
  335. package/TextEncoder/TextEncoder.android.d.ts +0 -8
  336. package/TextEncoder/TextEncoder.android.js +0 -50
  337. package/TextEncoder/TextEncoder.android.js.map +0 -1
  338. package/TextEncoder/TextEncoder.d.ts +0 -10
  339. package/TextEncoder/TextEncoder.ios.d.ts +0 -6
  340. package/TextEncoder/TextEncoder.ios.js +0 -14
  341. package/TextEncoder/TextEncoder.ios.js.map +0 -1
  342. package/TextEncoder/common.d.ts +0 -7
  343. package/TextEncoder/common.js +0 -9
  344. package/TextEncoder/common.js.map +0 -1
  345. package/WebGL/WebGLExtensions/index.android.d.ts +0 -209
  346. package/WebGL/WebGLExtensions/index.android.js.map +0 -1
  347. package/WebGL/WebGLExtensions/index.ios.d.ts +0 -192
  348. package/WebGL/WebGLExtensions/index.ios.js +0 -250
  349. package/WebGL/WebGLExtensions/index.ios.js.map +0 -1
  350. package/WebGL/WebGLRenderingContext/index.android.d.ts +0 -165
  351. package/WebGL/WebGLRenderingContext/index.android.js.map +0 -1
  352. package/WebGL/WebGLRenderingContext/index.ios.d.ts +0 -163
  353. package/WebGL/WebGLRenderingContext/index.ios.js +0 -1168
  354. package/WebGL/WebGLRenderingContext/index.ios.js.map +0 -1
  355. package/WebGL2/WebGL2RenderingContext/index.android.d.ts +0 -103
  356. package/WebGL2/WebGL2RenderingContext/index.android.js.map +0 -1
  357. package/WebGL2/WebGL2RenderingContext/index.ios.d.ts +0 -102
  358. package/WebGL2/WebGL2RenderingContext/index.ios.js +0 -618
  359. package/WebGL2/WebGL2RenderingContext/index.ios.js.map +0 -1
  360. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/Utils.h +0 -26
  361. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64.swiftsourceinfo +0 -0
  362. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64.swiftdoc +0 -0
  363. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64.swiftinterface +0 -3264
  364. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/Utils.h +0 -26
  365. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64.swiftsourceinfo +0 -0
  366. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64.swiftsourceinfo +0 -0
  367. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64.swiftdoc +0 -0
  368. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64.swiftinterface +0 -3264
  369. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64.swiftdoc +0 -0
  370. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64.swiftinterface +0 -3264
@@ -0,0 +1,1954 @@
1
+ //
2
+ // Created by Osei Fortune on 22/03/2022.
3
+ //
4
+
5
+ #include "CanvasRenderingContext2DImpl.h"
6
+
7
+ CanvasRenderingContext2DImpl::CanvasRenderingContext2DImpl(
8
+ rust::Box<CanvasRenderingContext2D> context) : context_(
9
+ std::move(context)) {
10
+
11
+ auto ctx_ptr = reinterpret_cast<intptr_t>(reinterpret_cast<intptr_t *>(this));
12
+ auto raf_callback = new OnRafCallback(ctx_ptr, 0);
13
+ auto raf_callback_ptr = reinterpret_cast<intptr_t>(reinterpret_cast<intptr_t *>(raf_callback));
14
+ auto raf = canvas_native_raf_create(raf_callback_ptr);
15
+ this->SetRaf(std::make_shared<RafImpl>(raf_callback, raf_callback_ptr, std::move(raf)));
16
+
17
+ auto _raf = this->GetRaf();
18
+
19
+ if (_raf != nullptr) {
20
+ canvas_native_raf_start(_raf->GetRaf());
21
+ }
22
+
23
+ }
24
+
25
+ void CanvasRenderingContext2DImpl::SetRaf(std::shared_ptr<RafImpl> raf) {
26
+ this->raf_ = std::move(raf);
27
+ }
28
+
29
+ RafImpl *CanvasRenderingContext2DImpl::GetRaf() {
30
+ return this->raf_.get();
31
+ }
32
+
33
+
34
+ std::vector<jsi::PropNameID> CanvasRenderingContext2DImpl::getPropertyNames(jsi::Runtime &rt) {
35
+ std::vector<jsi::PropNameID> ret;
36
+ ret.reserve(68);
37
+
38
+ /* Non Standard 2D */
39
+
40
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("drawPoint")));
41
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("drawPoints")));
42
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("drawPaint")));
43
+
44
+ /* Non Standard 2D */
45
+
46
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("__makeDirty")));
47
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("__getPointer")));
48
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("__resize")));
49
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("filter")));
50
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("font")));
51
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("globalAlpha")));
52
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("imageSmoothingEnabled")));
53
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("imageSmoothingQuality")));
54
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("lineDashOffset")));
55
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("lineJoin")));
56
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("lineCap")));
57
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("miterLimit")));
58
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("shadowColor")));
59
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("shadowBlur")));
60
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("shadowOffsetX")));
61
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("shadowOffsetY")));
62
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("textAlign")));
63
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("globalCompositeOperation")));
64
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("fillStyle")));
65
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("strokeStyle")));
66
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("lineWidth")));
67
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("lineDash")));
68
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("addHitRegion")));
69
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("arc")));
70
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("arcTo")));
71
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("beginPath")));
72
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("bezierCurveTo")));
73
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("clearHitRegions")));
74
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("clearRect")));
75
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("clip")));
76
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("closePath")));
77
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("createImageData")));
78
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("createLinearGradient")));
79
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("createRadialGradient")));
80
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("createPattern")));
81
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("__createPatternWithNative")));
82
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("drawImage")));
83
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("ellipse")));
84
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("fill")));
85
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("fillRect")));
86
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("fillText")));
87
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("getImageData")));
88
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("getLineDash")));
89
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("isPointInPath")));
90
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("isPointInStroke")));
91
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("lineTo")));
92
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("measureText")));
93
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("moveTo")));
94
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("putImageData")));
95
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("quadraticCurveTo")));
96
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("rect")));
97
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("roundRect")));
98
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("removeHitRegion")));
99
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("resetTransform")));
100
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("restore")));
101
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("rotate")));
102
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("save")));
103
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("scale")));
104
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("scrollPathIntoView")));
105
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("setLineDash")));
106
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("setTransform")));
107
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("stroke")));
108
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("strokeRect")));
109
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("strokeText")));
110
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("transform")));
111
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("translate")));
112
+ ret.push_back(jsi::PropNameID::forUtf8(rt, std::string("__toDataURL")));
113
+ return ret;
114
+ }
115
+
116
+
117
+ void
118
+ CanvasRenderingContext2DImpl::set(jsi::Runtime &runtime, const jsi::PropNameID &name,
119
+ const jsi::Value &value) {
120
+ auto methodName = name.utf8(runtime);
121
+
122
+ if (methodName == "filter") {
123
+ auto val = value.asString(runtime).utf8(runtime);
124
+ canvas_native_context_set_filter(this->GetContext(), rust::Str(val.c_str()));
125
+ } else if (methodName == "font") {
126
+ auto val = value.asString(runtime).utf8(runtime);
127
+ canvas_native_context_set_font(this->GetContext(), rust::Str(val.c_str()));
128
+ } else if (methodName == "globalAlpha") {
129
+ auto alpha = (float) value.asNumber();
130
+ canvas_native_context_set_global_alpha(this->GetContext(), alpha);
131
+ } else if (methodName == "imageSmoothingEnabled") {
132
+ auto imageSmoothingEnabled = value.asBool();
133
+ canvas_native_context_set_image_smoothing_enabled(this->GetContext(),
134
+ imageSmoothingEnabled);
135
+ } else if (methodName == "imageSmoothingQuality") {
136
+ auto imageSmoothingQuality = value.asString(runtime).utf8(runtime);
137
+ canvas_native_context_set_image_smoothing_quality(this->GetContext(),
138
+ rust::Str(imageSmoothingQuality));
139
+ } else if (methodName == "lineDashOffset") {
140
+ auto lineDashOffset = (float) value.asNumber();
141
+ canvas_native_context_set_line_dash_offset(this->GetContext(), lineDashOffset);
142
+ } else if (methodName == "lineJoin") {
143
+ auto join = value.asString(runtime).utf8(runtime);
144
+ canvas_native_context_set_line_join(this->GetContext(),
145
+ rust::Str(join.c_str()));
146
+ } else if (methodName == "lineCap") {
147
+ auto cap = value.asString(runtime).utf8(runtime);
148
+ canvas_native_context_set_line_cap(this->GetContext(),
149
+ rust::Str(cap.c_str()));
150
+ } else if (methodName == "miterLimit") {
151
+ auto miterLimit = (float) value.asNumber();
152
+ canvas_native_context_set_miter_limit(this->GetContext(), miterLimit);
153
+ } else if (methodName == "shadowColor") {
154
+ auto shadowColor = value.asString(runtime).utf8(runtime);
155
+ canvas_native_context_set_shadow_color(this->GetContext(),
156
+ rust::Str(shadowColor.c_str()));
157
+ } else if (methodName == "shadowBlur") {
158
+ auto shadowBlur = (float) value.asNumber();
159
+ canvas_native_context_set_shadow_blur(this->GetContext(), shadowBlur);
160
+ } else if (methodName == "shadowOffsetX") {
161
+ auto shadowOffsetX = (float) value.asNumber();
162
+ canvas_native_context_set_shadow_offset_x(this->GetContext(), shadowOffsetX);
163
+ } else if (methodName == "shadowOffsetY") {
164
+ auto shadowOffsetY = (float) value.asNumber();
165
+ canvas_native_context_set_shadow_offset_y(this->GetContext(), shadowOffsetY);
166
+ } else if (methodName == "textAlign") {
167
+ auto textAlign = value.asString(runtime).utf8(runtime);
168
+ canvas_native_context_set_text_align(this->GetContext(),
169
+ rust::Str(textAlign.c_str()));
170
+ } else if (methodName == "globalCompositeOperation") {
171
+ auto globalCompositeOperation = value.asString(runtime).utf8(runtime);
172
+ canvas_native_context_set_global_composition(this->GetContext(),
173
+ rust::Str(globalCompositeOperation.c_str()));
174
+ } else if (methodName == "fillStyle") {
175
+ if (value.isString()) {
176
+ auto style = value.asString(runtime).utf8(runtime);
177
+ canvas_native_paint_style_set_fill_color_with_string(this->GetContext(),
178
+ rust::Str(style.c_str()));
179
+ } else if (value.isObject()) {
180
+
181
+ try {
182
+ auto gradient = getHostObject<CanvasGradient>(runtime, value);
183
+ if (gradient != nullptr) {
184
+ canvas_native_context_set_fill_style(this->GetContext(),
185
+ gradient->GetPaintStyle());
186
+ return;
187
+ }
188
+ } catch (...) {}
189
+
190
+ try {
191
+ auto pattern = getHostObject<CanvasPattern>(runtime, value);
192
+
193
+ if (pattern != nullptr) {
194
+ canvas_native_context_set_fill_style(this->GetContext(),
195
+ pattern->GetPaintStyle());
196
+ return;
197
+ }
198
+ } catch (...) {}
199
+ }
200
+ } else if (methodName == "strokeStyle") {
201
+ if (value.isString()) {
202
+ auto style = value.asString(runtime).utf8(runtime);
203
+ canvas_native_paint_style_set_stroke_color_with_string(this->GetContext(),
204
+ rust::Str(style.c_str()));
205
+ } else if (value.isObject()) {
206
+
207
+ try {
208
+ auto gradient = getHostObject<CanvasGradient>(runtime, value);
209
+ if (gradient != nullptr) {
210
+ canvas_native_context_set_stroke_style(this->GetContext(),
211
+ gradient->GetPaintStyle());
212
+ return;
213
+ }
214
+ } catch (...) {}
215
+
216
+ try {
217
+ auto pattern = getHostObject<CanvasPattern>(runtime, value);
218
+
219
+ if (pattern != nullptr) {
220
+ canvas_native_context_set_stroke_style(this->GetContext(),
221
+ pattern->GetPaintStyle());
222
+ return;
223
+ }
224
+ } catch (...) {}
225
+ }
226
+ } else if (methodName == "lineWidth") {
227
+ auto lineWidth = (float) value.asNumber();
228
+ canvas_native_context_set_line_width(this->GetContext(), lineWidth);
229
+ } else if (methodName == "lineDash") {
230
+ if (!value.isNull() && !value.isUndefined() && value.isObject()) {
231
+ auto lineDashObject = value.asObject(runtime);
232
+ if (lineDashObject.isArray(runtime)) {
233
+ auto lineDash = lineDashObject.asArray(runtime);
234
+ auto size = lineDash.size(runtime);
235
+ std::vector<float> dash;
236
+ dash.reserve(size);
237
+ for (size_t i = 0; i < size; ++i) {
238
+ auto val = lineDash.getValueAtIndex(runtime, i);
239
+ dash[i] = (float) value.asNumber();
240
+ }
241
+ canvas_native_context_set_line_dash(this->GetContext(),
242
+ rust::Slice<const float>(dash.data(),
243
+ dash.size()));
244
+ }
245
+ }
246
+ }
247
+
248
+
249
+ }
250
+
251
+
252
+ jsi::Value CanvasRenderingContext2DImpl::get(jsi::Runtime &runtime, const jsi::PropNameID &name) {
253
+ auto methodName = name.utf8(runtime);
254
+
255
+
256
+ if (methodName == "drawPaint") {
257
+ return jsi::Function::createFromHostFunction(runtime,
258
+ jsi::PropNameID::forAscii(runtime, methodName),
259
+ 2,
260
+ [this](jsi::Runtime &runtime,
261
+ const jsi::Value &thisValue,
262
+ const jsi::Value *arguments,
263
+ size_t count) -> jsi::Value {
264
+ auto color = arguments[0].asString(
265
+ runtime).utf8(runtime);
266
+ canvas_native_context_draw_paint(
267
+ this->GetContext(),
268
+ rust::Str(color));
269
+ this->UpdateInvalidateState();
270
+ return jsi::Value::undefined();
271
+ }
272
+ );
273
+ } else if (methodName == "drawPoint") {
274
+ return jsi::Function::createFromHostFunction(runtime,
275
+ jsi::PropNameID::forAscii(runtime, methodName),
276
+ 2,
277
+ [this](jsi::Runtime &runtime,
278
+ const jsi::Value &thisValue,
279
+ const jsi::Value *arguments,
280
+ size_t count) -> jsi::Value {
281
+ auto x = (float) arguments[0].asNumber();
282
+ auto y = (float) arguments[1].asNumber();
283
+ canvas_native_context_draw_point(
284
+ this->GetContext(), x, y);
285
+ this->UpdateInvalidateState();
286
+ return jsi::Value::undefined();
287
+ }
288
+ );
289
+ } else if (methodName == "drawPoints") {
290
+ return jsi::Function::createFromHostFunction(runtime,
291
+ jsi::PropNameID::forAscii(runtime, methodName),
292
+ 2,
293
+ [this](jsi::Runtime &runtime,
294
+ const jsi::Value &thisValue,
295
+ const jsi::Value *arguments,
296
+ size_t count) -> jsi::Value {
297
+ auto mode = arguments[0].asString(
298
+ runtime).utf8(
299
+ runtime);
300
+ auto points = arguments[1].asObject(
301
+ runtime).getArray(
302
+ runtime);
303
+ auto size = points.size(runtime);
304
+
305
+
306
+ if ((size % 2) == 0) {
307
+ int32_t pointMode = -1;
308
+ if (mode == "points") {
309
+ pointMode = 0;
310
+ } else if (mode == "lines") {
311
+ pointMode = 1;
312
+ } else if (mode == "polygon") {
313
+ pointMode = 2;
314
+ }
315
+ if (pointMode == -1) {
316
+ return jsi::Value::undefined();
317
+ }
318
+ rust::Vec<float> store;
319
+ store.reserve(size);
320
+ size_t next = 0;
321
+ for (size_t i = 0; i < size; i++) {
322
+
323
+ auto object = points.getValueAtIndex(
324
+ runtime, i).asObject(
325
+ runtime);
326
+
327
+ auto x = object.getProperty(
328
+ runtime, "x").asNumber();
329
+ auto y = object.getProperty(
330
+ runtime, "y").asNumber();
331
+ store[next] = (float) x;
332
+ store[next + 1] = (float) y;
333
+
334
+ next = i + 2;
335
+ }
336
+
337
+ rust::Slice<const float> buf(
338
+ store.data(),
339
+ store.size());
340
+
341
+ canvas_native_context_draw_points(
342
+ this->GetContext(), pointMode,
343
+ buf);
344
+ this->UpdateInvalidateState();
345
+ }
346
+ return jsi::Value::undefined();
347
+ }
348
+ );
349
+ }
350
+
351
+ if (methodName == "filter") {
352
+ auto filter = canvas_native_context_get_filter(this->GetContext());
353
+ return jsi::String::createFromAscii(runtime, filter.data(), filter.length());
354
+ }
355
+
356
+ if (methodName == "__makeDirty") {
357
+ return jsi::Function::createFromHostFunction(runtime,
358
+ jsi::PropNameID::forAscii(runtime, methodName),
359
+ 0,
360
+ [this](jsi::Runtime &runtime,
361
+ const jsi::Value &thisValue,
362
+ const jsi::Value *arguments,
363
+ size_t count) -> jsi::Value {
364
+ this->UpdateInvalidateState();
365
+ return jsi::Value::undefined();
366
+ }
367
+ );
368
+ }
369
+
370
+ if (methodName == "__getPointer") {
371
+ auto ptr = (intptr_t *) &this->GetContext();
372
+ auto ret = std::to_string((intptr_t) ptr);
373
+ return jsi::String::createFromAscii(runtime, ret);
374
+ }
375
+
376
+ if (methodName == "__resize") {
377
+ return jsi::Function::createFromHostFunction(runtime,
378
+ jsi::PropNameID::forAscii(runtime, methodName),
379
+ 2,
380
+ [this](jsi::Runtime &runtime,
381
+ const jsi::Value &thisValue,
382
+ const jsi::Value *arguments,
383
+ size_t count) -> jsi::Value {
384
+ auto width = arguments[0].asNumber();
385
+ auto height = arguments[1].asNumber();
386
+ canvas_native_context_resize(
387
+ this->GetContext(),
388
+ static_cast<float>(width),
389
+ static_cast<float>(height));
390
+ return jsi::Value::undefined();
391
+ }
392
+ );
393
+ } else if (methodName == "font") {
394
+ auto font = canvas_native_context_get_font(this->GetContext());
395
+ return jsi::String::createFromAscii(runtime, font.data(), font.length());
396
+ } else if (methodName == "globalAlpha") {
397
+ return {(double) canvas_native_context_get_global_alpha(this->GetContext())};
398
+ } else if (methodName == "imageSmoothingEnabled") {
399
+ return {canvas_native_context_get_image_smoothing_enabled(this->GetContext())};
400
+ } else if (methodName == "imageSmoothingQuality") {
401
+ auto quality = canvas_native_context_get_image_smoothing_quality(this->GetContext());
402
+ return jsi::String::createFromAscii(runtime, quality.data(), quality.length());
403
+ } else if (methodName == "lineDashOffset") {
404
+ auto lineDashOffset = canvas_native_context_get_line_dash_offset(this->GetContext());
405
+ return {(double) lineDashOffset};
406
+ } else if (methodName == "lineJoin") {
407
+ auto join = canvas_native_context_get_line_join(this->GetContext());
408
+ return jsi::String::createFromAscii(runtime, join.data(), join.size());
409
+ } else if (methodName == "lineCap") {
410
+ auto cap = canvas_native_context_get_line_cap(this->GetContext());
411
+ return jsi::String::createFromAscii(runtime, cap.data(), cap.size());
412
+ } else if (methodName == "miterLimit") {
413
+ auto miterLimit = canvas_native_context_get_miter_limit(this->GetContext());
414
+ return {(double) miterLimit};
415
+ } else if (methodName == "shadowColor") {
416
+ auto shadowColor = canvas_native_context_get_shadow_color(this->GetContext());
417
+ return jsi::String::createFromAscii(runtime, shadowColor.data(), shadowColor.size());
418
+ } else if (methodName == "shadowBlur") {
419
+ return {(double) canvas_native_context_get_shadow_blur(this->GetContext())};
420
+ } else if (methodName == "shadowOffsetX") {
421
+ return {(double) canvas_native_context_get_shadow_offset_x(this->GetContext())};
422
+ } else if (methodName == "shadowOffsetY") {
423
+ return {(double) canvas_native_context_get_shadow_offset_y(this->GetContext())};
424
+ } else if (methodName == "textAlign") {
425
+ auto textAlign = canvas_native_context_get_text_align(this->GetContext());
426
+ return jsi::String::createFromAscii(runtime, textAlign.data(), textAlign.size());
427
+ } else if (methodName == "globalCompositeOperation") {
428
+ auto globalCompositeOperation = canvas_native_context_get_global_composition(
429
+ this->GetContext());
430
+ return jsi::String::createFromAscii(runtime, globalCompositeOperation.data(),
431
+ globalCompositeOperation.size());
432
+ } else if (methodName == "fillStyle") {
433
+ PaintStyleType type = canvas_native_context_get_current_fill_style_type(this->GetContext());
434
+ switch (type) {
435
+ case PaintStyleType::Color: {
436
+ auto color = canvas_native_paint_style_get_current_fill_color_string(
437
+ this->GetContext());
438
+ return jsi::String::createFromAscii(runtime, color.data(), color.size());
439
+ }
440
+ case PaintStyleType::Gradient: {
441
+ auto style = std::make_shared<CanvasGradient>(
442
+ canvas_native_context_get_fill_style(this->GetContext()));
443
+ return jsi::Object::createFromHostObject(runtime, style);
444
+ }
445
+ case PaintStyleType::Pattern: {
446
+ auto style = std::make_shared<CanvasPattern>(
447
+ canvas_native_context_get_fill_style(this->GetContext()));
448
+ return jsi::Object::createFromHostObject(runtime, style);
449
+ }
450
+ case PaintStyleType::None: {
451
+ return jsi::Value::undefined();
452
+ }
453
+ }
454
+ } else if (methodName == "strokeStyle") {
455
+ PaintStyleType type = canvas_native_context_get_current_stroke_style_type(
456
+ this->GetContext());
457
+ switch (type) {
458
+ case PaintStyleType::Color: {
459
+ auto color = canvas_native_paint_style_get_current_stroke_color_string(
460
+ this->GetContext());
461
+ return jsi::String::createFromAscii(runtime, color.data(), color.size());
462
+ }
463
+ case PaintStyleType::Gradient: {
464
+ auto style = std::make_shared<CanvasGradient>(
465
+ canvas_native_context_get_stroke_style(this->GetContext()));
466
+ return jsi::Object::createFromHostObject(runtime, style);
467
+ }
468
+ case PaintStyleType::Pattern: {
469
+ auto style = std::make_shared<CanvasPattern>(
470
+ canvas_native_context_get_stroke_style(this->GetContext()));
471
+ return jsi::Object::createFromHostObject(runtime, style);
472
+ }
473
+ case PaintStyleType::None: {
474
+ return jsi::Value::undefined();
475
+ }
476
+ }
477
+ } else if (methodName == "lineWidth") {
478
+ auto lineWidth = canvas_native_context_get_line_width(this->GetContext());
479
+ return {(double) lineWidth};
480
+ } else if (methodName == "lineDash") {
481
+ auto lineDash = canvas_native_context_get_line_dash(this->GetContext());
482
+ auto size = lineDash.size();
483
+ auto ret = jsi::Array(runtime, size);
484
+ for (size_t i = 0; i < size; i++) {
485
+ auto item = lineDash[i];
486
+ ret.setValueAtIndex(runtime, i, jsi::Value((double) item));
487
+ }
488
+ return ret;
489
+ } else if (methodName == "addHitRegion") {
490
+ return jsi::Function::createFromHostFunction(runtime,
491
+ jsi::PropNameID::forAscii(runtime, methodName),
492
+ 0,
493
+ [](jsi::Runtime &runtime,
494
+ const jsi::Value &thisValue,
495
+ const jsi::Value *arguments,
496
+ size_t count) -> jsi::Value {
497
+ return jsi::Value::undefined();
498
+ }
499
+ );
500
+ } else if (methodName == "arc") {
501
+ return jsi::Function::createFromHostFunction(runtime,
502
+ jsi::PropNameID::forAscii(runtime, methodName),
503
+ 6,
504
+ [this](jsi::Runtime &runtime,
505
+ const jsi::Value &thisValue,
506
+ const jsi::Value *arguments,
507
+ size_t count) -> jsi::Value {
508
+
509
+
510
+ auto anti_clockwise = false;
511
+ if (count == 6) {
512
+ anti_clockwise = arguments[5].asBool();
513
+ }
514
+ canvas_native_context_arc(
515
+ this->GetContext(),
516
+ static_cast<float>(arguments[0].asNumber()),
517
+ static_cast<float>(arguments[1].asNumber()),
518
+ static_cast<float>(arguments[2].asNumber()),
519
+ static_cast<float>(arguments[3].asNumber()),
520
+ static_cast<float>(arguments[4].asNumber()),
521
+ anti_clockwise
522
+ );
523
+
524
+ return jsi::Value::undefined();
525
+ }
526
+ );
527
+ } else if (methodName == "arcTo") {
528
+ return jsi::Function::createFromHostFunction(runtime,
529
+ jsi::PropNameID::forAscii(runtime, methodName),
530
+ 5,
531
+ [this](jsi::Runtime &runtime,
532
+ const jsi::Value &thisValue,
533
+ const jsi::Value *arguments,
534
+ size_t count) -> jsi::Value {
535
+
536
+
537
+ auto x1 = static_cast<float>(arguments[0].asNumber());
538
+ auto y1 = static_cast<float>(arguments[1].asNumber());
539
+ auto x2 = static_cast<float>(arguments[2].asNumber());
540
+ auto y2 = static_cast<float>(arguments[3].asNumber());
541
+ auto radius = static_cast<float>(arguments[4].asNumber());
542
+ canvas_native_context_arc_to(
543
+ this->GetContext(),
544
+ x1,
545
+ y1,
546
+ x2,
547
+ y2,
548
+ radius
549
+ );
550
+
551
+ return jsi::Value::undefined();
552
+ }
553
+ );
554
+ } else if (methodName == "beginPath") {
555
+ return jsi::Function::createFromHostFunction(runtime,
556
+ jsi::PropNameID::forAscii(runtime, methodName),
557
+ 0,
558
+ [this](jsi::Runtime &runtime,
559
+ const jsi::Value &thisValue,
560
+ const jsi::Value *arguments,
561
+ size_t count) -> jsi::Value {
562
+ canvas_native_context_begin_path(
563
+ this->GetContext());
564
+ return jsi::Value::undefined();
565
+ }
566
+ );
567
+ } else if (methodName == "bezierCurveTo") {
568
+ return jsi::Function::createFromHostFunction(runtime,
569
+ jsi::PropNameID::forAscii(runtime, methodName),
570
+ 6,
571
+ [this](jsi::Runtime &runtime,
572
+ const jsi::Value &thisValue,
573
+ const jsi::Value *arguments,
574
+ size_t count) -> jsi::Value {
575
+ canvas_native_context_bezier_curve_to(
576
+ this->GetContext(),
577
+ static_cast<float>(arguments[0].asNumber()),
578
+ static_cast<float>(arguments[1].asNumber()),
579
+ static_cast<float>(arguments[2].asNumber()),
580
+ static_cast<float>(arguments[3].asNumber()),
581
+ static_cast<float>(arguments[4].asNumber()),
582
+ static_cast<float>(arguments[5].asNumber())
583
+ );
584
+ return jsi::Value::undefined();
585
+ }
586
+ );
587
+ } else if (methodName == "clearHitRegions") {
588
+ return jsi::Function::createFromHostFunction(runtime,
589
+ jsi::PropNameID::forAscii(runtime, methodName),
590
+ 0,
591
+ [](jsi::Runtime &runtime,
592
+ const jsi::Value &thisValue,
593
+ const jsi::Value *arguments,
594
+ size_t count) -> jsi::Value {
595
+ return jsi::Value::undefined();
596
+ }
597
+ );
598
+ } else if (methodName == "clearRect") {
599
+ return jsi::Function::createFromHostFunction(runtime,
600
+ jsi::PropNameID::forAscii(runtime, methodName),
601
+ 4,
602
+ [this](jsi::Runtime &runtime,
603
+ const jsi::Value &thisValue,
604
+ const jsi::Value *arguments,
605
+ size_t count) -> jsi::Value {
606
+
607
+ canvas_native_context_clear_rect(
608
+ this->GetContext(),
609
+ static_cast<float>(arguments[0].asNumber()),
610
+ static_cast<float>(arguments[1].asNumber()),
611
+ static_cast<float>(arguments[2].asNumber()),
612
+ static_cast<float>(arguments[3].asNumber())
613
+ );
614
+ this->UpdateInvalidateState();
615
+
616
+ return jsi::Value::undefined();
617
+ }
618
+ );
619
+ } else if (methodName == "clip") {
620
+ return jsi::Function::createFromHostFunction(runtime,
621
+ jsi::PropNameID::forAscii(runtime, methodName),
622
+ 1,
623
+ [this](jsi::Runtime &runtime,
624
+ const jsi::Value &thisValue,
625
+ const jsi::Value *arguments,
626
+ size_t count) -> jsi::Value {
627
+
628
+ if (count == 0) {
629
+ std::string rule("nonzero");
630
+ canvas_native_context_clip_rule(
631
+ this->GetContext(),
632
+ rust::Str(rule.c_str()));
633
+ } else if (arguments[0].isString()) {
634
+ auto val = arguments[0].asString(
635
+ runtime).utf8(runtime);
636
+ canvas_native_context_clip_rule(
637
+ this->GetContext(),
638
+ rust::Str(val.c_str()));
639
+ }
640
+
641
+ return jsi::Value::undefined();
642
+ }
643
+ );
644
+ } else if (methodName == "closePath") {
645
+ return jsi::Function::createFromHostFunction(runtime,
646
+ jsi::PropNameID::forAscii(runtime, methodName),
647
+ 0,
648
+ [this](jsi::Runtime &runtime,
649
+ const jsi::Value &thisValue,
650
+ const jsi::Value *arguments,
651
+ size_t count) -> jsi::Value {
652
+
653
+ canvas_native_context_close_path(
654
+ this->GetContext());
655
+ return jsi::Value::undefined();
656
+ }
657
+ );
658
+ } else if (methodName == "createImageData") {
659
+ return jsi::Function::createFromHostFunction(runtime,
660
+ jsi::PropNameID::forAscii(runtime, methodName),
661
+ 2,
662
+ [](jsi::Runtime &runtime,
663
+ const jsi::Value &thisValue,
664
+ const jsi::Value *arguments,
665
+ size_t count) -> jsi::Value {
666
+
667
+
668
+ if (count == 1 &&
669
+ arguments[0].isObject()) {
670
+
671
+ auto object = getHostObject<ImageDataImpl>(
672
+ runtime, arguments[0]);
673
+
674
+ if (object != nullptr) {
675
+ auto width = canvas_native_image_data_get_width(
676
+ object->GetImageData());
677
+ auto height = canvas_native_image_data_get_height(
678
+ object->GetImageData());
679
+ auto data = std::make_shared<ImageDataImpl>(
680
+ canvas_native_image_data_create(
681
+ width, height));
682
+ return jsi::Object::createFromHostObject(
683
+ runtime, data);
684
+ }
685
+
686
+ } else if (count > 1) {
687
+
688
+ auto width = (int) arguments[0].asNumber();
689
+ auto height = (int) arguments[1].asNumber();
690
+ auto data = std::make_shared<ImageDataImpl>(
691
+ canvas_native_image_data_create(
692
+ width, height));
693
+ return jsi::Object::createFromHostObject(
694
+ runtime, data);
695
+ }
696
+
697
+ // todo throw ?
698
+ return jsi::Value::undefined();
699
+
700
+ }
701
+ );
702
+ } else if (methodName == "createLinearGradient") {
703
+ return jsi::Function::createFromHostFunction(runtime,
704
+ jsi::PropNameID::forAscii(runtime, methodName),
705
+ 4,
706
+ [this](jsi::Runtime &runtime,
707
+ const jsi::Value &thisValue,
708
+ const jsi::Value *arguments,
709
+ size_t count) -> jsi::Value {
710
+
711
+
712
+ if (count == 4) {
713
+ auto x0 = static_cast<float>(arguments[0].asNumber());
714
+ auto y0 = static_cast<float>(arguments[1].asNumber());
715
+ auto x1 = static_cast<float>(arguments[2].asNumber());
716
+ auto y1 = static_cast<float>(arguments[3].asNumber());
717
+
718
+ auto gradient = canvas_native_context_create_linear_gradient(
719
+ this->GetContext(), x0, y0, x1,
720
+ y1);
721
+ auto ret = std::make_shared<CanvasGradient>(
722
+ std::move(gradient));
723
+ return jsi::Object::createFromHostObject(
724
+ runtime,
725
+ ret);
726
+ }
727
+
728
+ return jsi::Value::undefined();
729
+ }
730
+ );
731
+ } else if (methodName == "createPattern") {
732
+ return jsi::Function::createFromHostFunction(runtime,
733
+ jsi::PropNameID::forAscii(runtime, methodName),
734
+ 2,
735
+ [this](jsi::Runtime &runtime,
736
+ const jsi::Value &thisValue,
737
+ const jsi::Value *arguments,
738
+ size_t count) -> jsi::Value {
739
+
740
+ if (count > 1) {
741
+ if (arguments[0].isNull() ||
742
+ arguments[0].isUndefined()) { return jsi::Value::undefined(); }
743
+
744
+ auto object = arguments[0].asObject(
745
+ runtime);
746
+
747
+ try {
748
+ auto image_asset = getHostObject<ImageAssetImpl>(
749
+ runtime, object);
750
+
751
+ if (image_asset != nullptr) {
752
+ auto rep = arguments[1].asString(
753
+ runtime).utf8(runtime);
754
+ rust::Box<PaintStyle> pattern = canvas_native_context_create_pattern_asset(
755
+ this->GetContext(),
756
+ image_asset->GetImageAsset(),
757
+ rust::Str(
758
+ rep.c_str()));
759
+ auto type = canvas_native_context_get_style_type(
760
+ *pattern);
761
+ if (type ==
762
+ PaintStyleType::None) {
763
+ return jsi::Value::undefined();
764
+ } else {
765
+ auto ret = std::make_shared<CanvasPattern>(
766
+ std::move(
767
+ pattern));
768
+ return jsi::Object::createFromHostObject(
769
+ runtime, ret);
770
+ }
771
+ }
772
+ } catch (...) {}
773
+
774
+ try {
775
+ auto canvas_2d = getHostObject<CanvasRenderingContext2DImpl>(
776
+ runtime, object);
777
+ if (canvas_2d != nullptr) {
778
+ auto rep = arguments[1].asString(
779
+ runtime).utf8(runtime);
780
+ rust::Box<PaintStyle> pattern = canvas_native_context_create_pattern_canvas2d(
781
+ canvas_2d->GetContext(),
782
+ this->GetContext(),
783
+ rust::Str(
784
+ rep.c_str()));
785
+ auto type = canvas_native_context_get_style_type(
786
+ *pattern);
787
+ if (type ==
788
+ PaintStyleType::None) {
789
+ return jsi::Value::undefined();
790
+ } else {
791
+ auto ret = std::make_shared<CanvasPattern>(
792
+ std::move(
793
+ pattern));
794
+ return jsi::Object::createFromHostObject(
795
+ runtime, ret);
796
+ }
797
+ }
798
+ } catch (...) {}
799
+
800
+ try {
801
+ auto webgl = getHostObject<WebGLRenderingContextBase>(
802
+ runtime, object);
803
+ if (webgl != nullptr) {
804
+ auto rep = arguments[1].asString(
805
+ runtime).utf8(runtime);
806
+ auto pattern = canvas_native_context_create_pattern_webgl(
807
+ webgl->GetState(),
808
+ this->GetContext(),
809
+ rust::Str(
810
+ rep.c_str()));
811
+ auto type = canvas_native_context_get_style_type(
812
+ *pattern);
813
+ if (type ==
814
+ PaintStyleType::None) {
815
+ return jsi::Value::undefined();
816
+ } else {
817
+ auto ret = std::make_shared<CanvasPattern>(
818
+ std::move(
819
+ pattern));
820
+ return jsi::Object::createFromHostObject(
821
+ runtime, ret);
822
+ }
823
+ }
824
+ } catch (...) {}
825
+
826
+ }
827
+
828
+
829
+ return jsi::Value::undefined();
830
+ }
831
+ );
832
+
833
+ } else if (methodName == "__createPatternWithNative") {
834
+ return jsi::Function::createFromHostFunction(runtime,
835
+ jsi::PropNameID::forAscii(runtime, methodName),
836
+ 1,
837
+ [](jsi::Runtime &runtime,
838
+ const jsi::Value &thisValue,
839
+ const jsi::Value *arguments,
840
+ size_t count) -> jsi::Value {
841
+
842
+ auto ptr = getPointerValue(runtime,
843
+ arguments[0]);
844
+
845
+ auto pattern = canvas_native_pattern_from_ptr(
846
+ ptr);
847
+ auto type = canvas_native_context_get_style_type(
848
+ *pattern);
849
+ if (type == PaintStyleType::None) {
850
+ return jsi::Value::undefined();
851
+ } else {
852
+ auto ret = std::make_shared<CanvasPattern>(
853
+ std::move(pattern));
854
+ return jsi::Object::createFromHostObject(
855
+ runtime, ret);
856
+ }
857
+
858
+ }
859
+ );
860
+
861
+ } else if (methodName == "createRadialGradient") {
862
+ return jsi::Function::createFromHostFunction(runtime,
863
+ jsi::PropNameID::forAscii(runtime, methodName),
864
+ 6,
865
+ [this](jsi::Runtime &runtime,
866
+ const jsi::Value &thisValue,
867
+ const jsi::Value *arguments,
868
+ size_t count) -> jsi::Value {
869
+
870
+
871
+ if (count == 6) {
872
+ auto x0 = static_cast<float>(arguments[0].asNumber());
873
+ auto y0 = static_cast<float>(arguments[1].asNumber());
874
+ auto r0 = static_cast<float>(arguments[2].asNumber());
875
+ auto x1 = static_cast<float>(arguments[3].asNumber());
876
+ auto y1 = static_cast<float>(arguments[4].asNumber());
877
+ auto r1 = static_cast<float>(arguments[5].asNumber());
878
+
879
+ auto gradient = canvas_native_context_create_radial_gradient(
880
+ this->GetContext(), x0, y0, r0,
881
+ x1, y1, r1);
882
+ auto ret = std::make_shared<CanvasGradient>(
883
+ std::move(gradient));
884
+ return jsi::Object::createFromHostObject(
885
+ runtime, ret);
886
+ }
887
+
888
+ return jsi::Value::undefined();
889
+ }
890
+ );
891
+ } else if (methodName == "drawFocusIfNeeded") {
892
+ return jsi::Function::createFromHostFunction(runtime,
893
+ jsi::PropNameID::forAscii(runtime, methodName),
894
+ 0,
895
+ [](jsi::Runtime &runtime,
896
+ const jsi::Value &thisValue,
897
+ const jsi::Value *arguments,
898
+ size_t count) -> jsi::Value {
899
+
900
+ return jsi::Value::undefined();
901
+ }
902
+ );
903
+ } else if (methodName == "drawImage") {
904
+ return jsi::Function::createFromHostFunction(runtime,
905
+ jsi::PropNameID::forAscii(runtime, methodName),
906
+ 9,
907
+ [this](jsi::Runtime &runtime,
908
+ const jsi::Value &thisValue,
909
+ const jsi::Value *arguments,
910
+ size_t count) -> jsi::Value {
911
+
912
+
913
+ if (count == 3) {
914
+ auto image = arguments[0].asObject(
915
+ runtime);
916
+ auto dx = static_cast<float>(arguments[1].asNumber());
917
+ auto dy = static_cast<float>(arguments[2].asNumber());
918
+
919
+
920
+ try {
921
+ auto image_asset = getHostObject<ImageAssetImpl>(
922
+ runtime, image);
923
+
924
+ if (image_asset != nullptr) {
925
+ canvas_native_context_draw_image_dx_dy_asset(
926
+ this->GetContext(),
927
+ image_asset->GetImageAsset(),
928
+ dx, dy);
929
+ this->UpdateInvalidateState();
930
+ return jsi::Value::undefined();
931
+ }
932
+ } catch (...) {}
933
+
934
+
935
+ try {
936
+ auto image_bitmap = getHostObject<ImageBitmapImpl>(
937
+ runtime, image);
938
+ if (image_bitmap != nullptr) {
939
+ canvas_native_context_draw_image_dx_dy_asset(
940
+ this->GetContext(),
941
+ image_bitmap->GetImageAsset(),
942
+ dx, dy);
943
+ this->UpdateInvalidateState();
944
+ }
945
+ } catch (...) {}
946
+
947
+
948
+ try {
949
+ auto image_canvas = getHostObject<CanvasRenderingContext2DImpl>(
950
+ runtime, image);
951
+ if (image_canvas != nullptr) {
952
+ canvas_native_context_draw_image_dx_dy_context(
953
+ this->GetContext(),
954
+ image_canvas->GetContext(),
955
+ dx, dy);
956
+ this->UpdateInvalidateState();
957
+ }
958
+ } catch (...) {}
959
+
960
+
961
+ } else if (count == 5) {
962
+ auto image = arguments[0].asObject(
963
+ runtime);
964
+ auto dx = (float) arguments[1].asNumber();
965
+ auto dy = (float) arguments[2].asNumber();
966
+ auto dWidth = (float) arguments[3].asNumber();
967
+ auto dHeight = (float) arguments[4].asNumber();
968
+
969
+ try {
970
+ auto image_asset = getHostObject<ImageAssetImpl>(
971
+ runtime, image);
972
+ if (image_asset != nullptr) {
973
+ canvas_native_context_draw_image_dx_dy_dw_dh_asset(
974
+ this->GetContext(),
975
+ image_asset->GetImageAsset(),
976
+ dx, dy,
977
+ dWidth,
978
+ dHeight);
979
+ this->UpdateInvalidateState();
980
+ return jsi::Value::undefined();
981
+ }
982
+ } catch (...) {}
983
+
984
+ try {
985
+ auto image_bitmap = getHostObject<ImageBitmapImpl>(
986
+ runtime, image);
987
+ if (image_bitmap != nullptr) {
988
+ canvas_native_context_draw_image_dx_dy_dw_dh_asset(
989
+ this->GetContext(),
990
+ image_bitmap->GetImageAsset(),
991
+ dx, dy,
992
+ dWidth,
993
+ dHeight);
994
+ this->UpdateInvalidateState();
995
+ return jsi::Value::undefined();
996
+ }
997
+ } catch (...) {}
998
+
999
+ try {
1000
+ auto image_canvas = getHostObject<CanvasRenderingContext2DImpl>(
1001
+ runtime, image);
1002
+ if (image_canvas != nullptr) {
1003
+ canvas_native_context_draw_image_dx_dy_dw_dh_context(
1004
+ this->GetContext(),
1005
+ image_canvas->GetContext(),
1006
+ dx, dy,
1007
+ dWidth,
1008
+ dHeight);
1009
+ this->UpdateInvalidateState();
1010
+ return jsi::Value::undefined();
1011
+ }
1012
+ } catch (...) {}
1013
+
1014
+
1015
+ } else if (count == 9) {
1016
+ auto image = arguments[0].asObject(
1017
+ runtime);
1018
+ auto sx = (float) arguments[1].asNumber();
1019
+ auto sy = (float) arguments[2].asNumber();
1020
+ auto sWidth = (float) arguments[3].asNumber();
1021
+ auto sHeight = (float) arguments[4].asNumber();
1022
+ auto dx = (float) arguments[5].asNumber();
1023
+ auto dy = (float) arguments[6].asNumber();
1024
+ auto dWidth = (float) arguments[7].asNumber();
1025
+ auto dHeight = (float) arguments[8].asNumber();
1026
+
1027
+ try {
1028
+ auto image_asset = getHostObject<ImageAssetImpl>(
1029
+ runtime, image);
1030
+ if (image_asset != nullptr) {
1031
+ canvas_native_context_draw_image_asset(
1032
+ this->GetContext(),
1033
+ image_asset->GetImageAsset(),
1034
+ sx,
1035
+ sy, sWidth, sHeight,
1036
+ dx,
1037
+ dy, dWidth, dHeight);
1038
+ this->UpdateInvalidateState();
1039
+ return jsi::Value::undefined();
1040
+ }
1041
+ } catch (...) {}
1042
+
1043
+ try {
1044
+ auto image_bitmap = getHostObject<ImageBitmapImpl>(
1045
+ runtime, image);
1046
+ if (image_bitmap != nullptr) {
1047
+ canvas_native_context_draw_image_asset(
1048
+ this->GetContext(),
1049
+ image_bitmap->GetImageAsset(),
1050
+ sx,
1051
+ sy, sWidth, sHeight,
1052
+ dx,
1053
+ dy, dWidth, dHeight);
1054
+ this->UpdateInvalidateState();
1055
+ return jsi::Value::undefined();
1056
+ }
1057
+ } catch (...) {}
1058
+
1059
+ try {
1060
+ auto image_canvas = getHostObject<CanvasRenderingContext2DImpl>(
1061
+ runtime, image);
1062
+ if (image_canvas != nullptr) {
1063
+ canvas_native_context_draw_image_context(
1064
+ this->GetContext(),
1065
+ image_canvas->GetContext(),
1066
+ sx,
1067
+ sy, sWidth, sHeight,
1068
+ dx,
1069
+ dy, dWidth, dHeight);
1070
+ this->UpdateInvalidateState();
1071
+ return jsi::Value::undefined();
1072
+ }
1073
+ } catch (...) {}
1074
+
1075
+
1076
+ }
1077
+
1078
+ return jsi::Value::undefined();
1079
+ }
1080
+ );
1081
+ } else if (methodName == "ellipse") {
1082
+ return jsi::Function::createFromHostFunction(runtime,
1083
+ jsi::PropNameID::forAscii(runtime, methodName),
1084
+ 8,
1085
+ [this](jsi::Runtime &runtime,
1086
+ const jsi::Value &thisValue,
1087
+ const jsi::Value *arguments,
1088
+ size_t count) -> jsi::Value {
1089
+ if (count == 8) {
1090
+ auto x = static_cast<float>(arguments[0].asNumber());
1091
+ auto y = static_cast<float>(arguments[1].asNumber());
1092
+ auto radiusX = static_cast<float>(arguments[2].asNumber());
1093
+ auto radiusY = static_cast<float>(arguments[3].asNumber());
1094
+ auto rotation = static_cast<float>(arguments[4].asNumber());
1095
+ auto startAngle = static_cast<float>(arguments[5].asNumber());
1096
+ auto endAngle = static_cast<float>(arguments[6].asNumber());
1097
+ auto anticlockwise = false;
1098
+ if (arguments[7].isBool()) {
1099
+ anticlockwise = arguments[7].asBool();
1100
+ }
1101
+ canvas_native_context_ellipse(
1102
+ this->GetContext(), x, y,
1103
+ radiusX,
1104
+ radiusY, rotation,
1105
+ startAngle, endAngle,
1106
+ anticlockwise);
1107
+ }
1108
+
1109
+ return jsi::Value::undefined();
1110
+ }
1111
+ );
1112
+ } else if (methodName == "fill") {
1113
+ return jsi::Function::createFromHostFunction(runtime,
1114
+ jsi::PropNameID::forAscii(runtime, methodName),
1115
+ 2,
1116
+ [this](jsi::Runtime &runtime,
1117
+ const jsi::Value &thisValue,
1118
+ const jsi::Value *arguments,
1119
+ size_t count) -> jsi::Value {
1120
+ if (count == 2) {
1121
+ auto object = getHostObject<Path2D>(
1122
+ runtime, arguments[0]);
1123
+
1124
+ if (object != nullptr) {
1125
+ auto value = arguments[1].asString(
1126
+ runtime).utf8(runtime);
1127
+ canvas_native_context_fill_with_path(
1128
+ this->GetContext(),
1129
+ object->GetPath(),
1130
+ rust::Str(value.c_str()));
1131
+ this->UpdateInvalidateState();
1132
+ }
1133
+ } else if (count == 1) {
1134
+ if (arguments[0].isString()) {
1135
+ auto value = arguments[0].asString(
1136
+ runtime).utf8(runtime);
1137
+ canvas_native_context_fill(
1138
+ this->GetContext(),
1139
+ rust::Str(value.c_str()));
1140
+ this->UpdateInvalidateState();
1141
+ } else if (arguments[0].isObject()) {
1142
+ auto object = getHostObject<Path2D>(
1143
+ runtime, arguments[0]);
1144
+ if (object != nullptr) {
1145
+ std::string rule("nonzero");
1146
+ canvas_native_context_fill_with_path(
1147
+ this->GetContext(),
1148
+ object->GetPath(),
1149
+ rust::Str(
1150
+ rule.c_str()));
1151
+ this->UpdateInvalidateState();
1152
+ }
1153
+ }
1154
+ } else {
1155
+ std::string rule("nonzero");
1156
+ canvas_native_context_fill(
1157
+ this->GetContext(),
1158
+ rust::Str(rule.c_str()));
1159
+ this->UpdateInvalidateState();
1160
+ }
1161
+ return jsi::Value::undefined();
1162
+ }
1163
+ );
1164
+ } else if (methodName == "fillRect") {
1165
+ return jsi::Function::createFromHostFunction(runtime,
1166
+ jsi::PropNameID::forAscii(runtime, methodName),
1167
+ 4,
1168
+ [this](jsi::Runtime &runtime,
1169
+ const jsi::Value &thisValue,
1170
+ const jsi::Value *arguments,
1171
+ size_t count) -> jsi::Value {
1172
+
1173
+ auto x = static_cast<float>(arguments[0].asNumber());
1174
+ auto y = static_cast<float>(arguments[1].asNumber());
1175
+ auto width = static_cast<float>(arguments[2].asNumber());
1176
+ auto height = static_cast<float>(arguments[3].asNumber());
1177
+ canvas_native_context_fill_rect(
1178
+ this->GetContext(), x, y, width,
1179
+ height);
1180
+ this->UpdateInvalidateState();
1181
+
1182
+ return jsi::Value::undefined();
1183
+ }
1184
+ );
1185
+ } else if (methodName == "fillText") {
1186
+ return jsi::Function::createFromHostFunction(runtime,
1187
+ jsi::PropNameID::forAscii(runtime, methodName),
1188
+ 4,
1189
+ [this](jsi::Runtime &runtime,
1190
+ const jsi::Value &thisValue,
1191
+ const jsi::Value *arguments,
1192
+ size_t count) -> jsi::Value {
1193
+
1194
+ auto text = arguments[0].asString(
1195
+ runtime).utf8(
1196
+ runtime);
1197
+ auto x = static_cast<float>(arguments[1].asNumber());
1198
+ auto y = static_cast<float>(arguments[2].asNumber());
1199
+ float width = -1;
1200
+ if (arguments[3].isNumber()) {
1201
+ width = static_cast<float>(arguments[3].asNumber());
1202
+ }
1203
+ canvas_native_context_fill_text(
1204
+ this->GetContext(),
1205
+ rust::Str(text.c_str()), x,
1206
+ y, width);
1207
+ this->UpdateInvalidateState();
1208
+
1209
+ return jsi::Value::undefined();
1210
+ }
1211
+ );
1212
+ } else if (methodName == "getImageData") {
1213
+ return jsi::Function::createFromHostFunction(runtime,
1214
+ jsi::PropNameID::forAscii(runtime, methodName),
1215
+ 4,
1216
+ [this](jsi::Runtime &runtime,
1217
+ const jsi::Value &thisValue,
1218
+ const jsi::Value *arguments,
1219
+ size_t count) -> jsi::Value {
1220
+
1221
+ if (count == 4) {
1222
+ auto sx = static_cast<float>(arguments[0].asNumber());
1223
+ auto sy = static_cast<float>(arguments[1].asNumber());
1224
+ auto sw = static_cast<float>(arguments[2].asNumber());
1225
+ auto sh = static_cast<float>(arguments[3].asNumber());
1226
+ auto data = canvas_native_context_get_image_data(
1227
+ this->GetContext(), sx, sy, sw,
1228
+ sh);
1229
+ auto object = std::make_shared<ImageDataImpl>(
1230
+ std::move(data));
1231
+ return jsi::Object::createFromHostObject(
1232
+ runtime, object);
1233
+ }
1234
+
1235
+ return jsi::Value::undefined();
1236
+ }
1237
+ );
1238
+ } else if (methodName == "getLineDash") {
1239
+ return jsi::Function::createFromHostFunction(runtime,
1240
+ jsi::PropNameID::forAscii(runtime, methodName),
1241
+ 4,
1242
+ [this](jsi::Runtime &runtime,
1243
+ const jsi::Value &thisValue,
1244
+ const jsi::Value *arguments,
1245
+ size_t count) -> jsi::Value {
1246
+
1247
+ auto dash = canvas_native_context_get_line_dash(
1248
+ this->GetContext());
1249
+ auto size = dash.size();
1250
+ auto array = jsi::Array(runtime, size);
1251
+ for (int i = 0; i < size; ++i) {
1252
+ array.setValueAtIndex(runtime, i,
1253
+ jsi::Value(
1254
+ (double) dash[i]));
1255
+ }
1256
+ return array;
1257
+ }
1258
+ );
1259
+ } else if (methodName == "isPointInPath") {
1260
+ return jsi::Function::createFromHostFunction(runtime,
1261
+ jsi::PropNameID::forAscii(runtime, methodName),
1262
+ 4,
1263
+ [this](jsi::Runtime &runtime,
1264
+ const jsi::Value &thisValue,
1265
+ const jsi::Value *arguments,
1266
+ size_t count) -> jsi::Value {
1267
+
1268
+ if (count == 2) {
1269
+ auto x = static_cast<float>(arguments[0].asNumber());
1270
+ auto y = static_cast<float>(arguments[1].asNumber());
1271
+ std::string rule("nonzero");
1272
+ auto ret = canvas_native_context_is_point_in_path(
1273
+ this->GetContext(), x, y,
1274
+ rust::Str(rule.c_str()));
1275
+ return {ret};
1276
+ } else if (count == 3 &&
1277
+ arguments[2].isString()) {
1278
+ auto x = static_cast<float>(arguments[0].asNumber());
1279
+ auto y = static_cast<float>(arguments[1].asNumber());
1280
+ auto rule = arguments[2].asString(
1281
+ runtime).utf8(runtime);
1282
+ auto ret = canvas_native_context_is_point_in_path(
1283
+ this->GetContext(), x, y,
1284
+ rust::Str(rule.c_str()));
1285
+ return {ret};
1286
+ } else if (count == 4 &&
1287
+ arguments[0].isObject() &&
1288
+ arguments[3].isString()) {
1289
+ auto path = getHostObject<Path2D>(
1290
+ runtime, arguments[0]);
1291
+ auto x = static_cast<float>(arguments[1].asNumber());
1292
+ auto y = static_cast<float>(arguments[2].asNumber());
1293
+ auto rule = arguments[3].asString(
1294
+ runtime).utf8(runtime);
1295
+
1296
+
1297
+ if (path != nullptr) {
1298
+ auto ret = canvas_native_context_is_point_in_path_with_path(
1299
+ this->GetContext(),
1300
+ path->GetPath(), x, y,
1301
+ rust::Str(rule.c_str()));
1302
+ return {ret};
1303
+ }
1304
+ }
1305
+
1306
+ return {false};
1307
+
1308
+ }
1309
+ );
1310
+ } else if (methodName == "isPointInStroke") {
1311
+ return jsi::Function::createFromHostFunction(runtime,
1312
+ jsi::PropNameID::forAscii(runtime, methodName),
1313
+ 3,
1314
+ [this](jsi::Runtime &runtime,
1315
+ const jsi::Value &thisValue,
1316
+ const jsi::Value *arguments,
1317
+ size_t count) -> jsi::Value {
1318
+
1319
+ if (count == 2) {
1320
+ auto x = static_cast<float>(arguments[0].asNumber());
1321
+ auto y = static_cast<float>(arguments[1].asNumber());
1322
+ auto ret = canvas_native_context_is_point_in_stroke(
1323
+ this->GetContext(), x, y);
1324
+ return {ret};
1325
+ } else if (count == 3 &&
1326
+ arguments[0].isObject()) {
1327
+ auto path = getHostObject<Path2D>(
1328
+ runtime, arguments[0]);
1329
+ auto x = static_cast<float>(arguments[1].asNumber());
1330
+ auto y = static_cast<float>(arguments[2].asNumber());
1331
+ if (path != nullptr) {
1332
+ auto ret = canvas_native_context_is_point_in_stroke_with_path(
1333
+ this->GetContext(),
1334
+ path->GetPath(), x,
1335
+ y);
1336
+ return {ret};
1337
+ }
1338
+ }
1339
+
1340
+ return {false};
1341
+
1342
+ }
1343
+ );
1344
+ } else if (methodName == "lineTo") {
1345
+ return jsi::Function::createFromHostFunction(runtime,
1346
+ jsi::PropNameID::forAscii(runtime, methodName),
1347
+ 2,
1348
+ [this](jsi::Runtime &runtime,
1349
+ const jsi::Value &thisValue,
1350
+ const jsi::Value *arguments,
1351
+ size_t count) -> jsi::Value {
1352
+
1353
+ if (count > 1) {
1354
+ auto x = static_cast<float>(arguments[0].asNumber());
1355
+ auto y = static_cast<float>(arguments[1].asNumber());
1356
+ canvas_native_context_line_to(
1357
+ this->GetContext(), x, y);
1358
+ }
1359
+
1360
+ return jsi::Value::undefined();
1361
+
1362
+ }
1363
+ );
1364
+ } else if (methodName == "measureText") {
1365
+ return jsi::Function::createFromHostFunction(runtime,
1366
+ jsi::PropNameID::forAscii(runtime, methodName),
1367
+ 2,
1368
+ [this](jsi::Runtime &runtime,
1369
+ const jsi::Value &thisValue,
1370
+ const jsi::Value *arguments,
1371
+ size_t count) -> jsi::Value {
1372
+
1373
+ auto text = arguments[0].asString(
1374
+ runtime).utf8(
1375
+ runtime);
1376
+ auto metrics = canvas_native_context_measure_text(
1377
+ this->GetContext(),
1378
+ rust::Str(text.c_str()));
1379
+
1380
+ auto object = std::make_shared<TextMetricsImpl>(
1381
+ std::move(metrics));
1382
+
1383
+ return jsi::Object::createFromHostObject(
1384
+ runtime, object);
1385
+ }
1386
+ );
1387
+ } else if (methodName == "moveTo") {
1388
+ return jsi::Function::createFromHostFunction(runtime,
1389
+ jsi::PropNameID::forAscii(runtime, methodName),
1390
+ 2,
1391
+ [this](jsi::Runtime &runtime,
1392
+ const jsi::Value &thisValue,
1393
+ const jsi::Value *arguments,
1394
+ size_t count) -> jsi::Value {
1395
+
1396
+ if (count > 1) {
1397
+ auto x = static_cast<float>(arguments[0].asNumber());
1398
+ auto y = static_cast<float>(arguments[1].asNumber());
1399
+ canvas_native_context_move_to(
1400
+ this->GetContext(), x, y);
1401
+ }
1402
+
1403
+ return jsi::Value::undefined();
1404
+
1405
+ }
1406
+ );
1407
+ } else if (methodName == "putImageData") {
1408
+ return jsi::Function::createFromHostFunction(runtime,
1409
+ jsi::PropNameID::forAscii(runtime, methodName),
1410
+ 7,
1411
+ [this](jsi::Runtime &runtime,
1412
+ const jsi::Value &thisValue,
1413
+ const jsi::Value *arguments,
1414
+ size_t count) -> jsi::Value {
1415
+
1416
+ auto imageData = getHostObject<ImageDataImpl>(
1417
+ runtime, arguments[0]);
1418
+ if (count == 3) {
1419
+ auto dx = static_cast<float>(arguments[1].asNumber());
1420
+ auto dy = static_cast<float>(arguments[2].asNumber());
1421
+ float dirtyX = 0;
1422
+ float dirtyY = 0;
1423
+ auto dirtyWidth = (float) canvas_native_image_data_get_width(
1424
+ imageData->GetImageData());
1425
+ auto dirtyHeight = (float) canvas_native_image_data_get_height(
1426
+ imageData->GetImageData());
1427
+ canvas_native_context_put_image_data(
1428
+ this->GetContext(),
1429
+ imageData->GetImageData(), dx,
1430
+ dy, dirtyX, dirtyY,
1431
+ dirtyWidth, dirtyHeight);
1432
+ this->UpdateInvalidateState();
1433
+ } else if (count == 7) {
1434
+ auto dx = static_cast<float>(arguments[1].asNumber());
1435
+ auto dy = static_cast<float>(arguments[2].asNumber());
1436
+ auto dirtyX = static_cast<float>(arguments[3].asNumber());
1437
+ auto dirtyY = static_cast<float>(arguments[4].asNumber());
1438
+ auto dirtyWidth = static_cast<float>(arguments[5].asNumber());
1439
+ auto dirtyHeight = static_cast<float>(arguments[6].asNumber());
1440
+ canvas_native_context_put_image_data(
1441
+ this->GetContext(),
1442
+ imageData->GetImageData(), dx,
1443
+ dy, dirtyX, dirtyY,
1444
+ dirtyWidth, dirtyHeight);
1445
+ this->UpdateInvalidateState();
1446
+ }
1447
+
1448
+ return jsi::Value::undefined();
1449
+
1450
+ }
1451
+ );
1452
+ } else if (methodName == "quadraticCurveTo") {
1453
+ return jsi::Function::createFromHostFunction(runtime,
1454
+ jsi::PropNameID::forAscii(runtime, methodName),
1455
+ 4,
1456
+ [this](jsi::Runtime &runtime,
1457
+ const jsi::Value &thisValue,
1458
+ const jsi::Value *arguments,
1459
+ size_t count) -> jsi::Value {
1460
+
1461
+ if (count == 4) {
1462
+ auto cpx = static_cast<float>(arguments[0].asNumber());
1463
+ auto cpy = static_cast<float>(arguments[1].asNumber());
1464
+ auto x = static_cast<float>(arguments[2].asNumber());
1465
+ auto y = static_cast<float>(arguments[3].asNumber());
1466
+ canvas_native_context_quadratic_curve_to(
1467
+ this->GetContext(), cpx, cpy,
1468
+ x, y);
1469
+ }
1470
+
1471
+ return jsi::Value::undefined();
1472
+
1473
+ }
1474
+ );
1475
+ } else if (methodName == "roundRect") {
1476
+ return jsi::Function::createFromHostFunction(runtime,
1477
+ jsi::PropNameID::forAscii(runtime, methodName),
1478
+ 4,
1479
+ [this](jsi::Runtime &runtime,
1480
+ const jsi::Value &thisValue,
1481
+ const jsi::Value *arguments,
1482
+ size_t count) -> jsi::Value {
1483
+
1484
+ if (count == 5) {
1485
+ auto x = static_cast<float>(arguments[0].asNumber());
1486
+ auto y = static_cast<float>(arguments[1].asNumber());
1487
+ auto width = static_cast<float>(arguments[2].asNumber());
1488
+ auto height = static_cast<float>(arguments[3].asNumber());
1489
+ if (arguments[4].isObject()) {
1490
+ auto radii = arguments[4].asObject(
1491
+ runtime);
1492
+ if (radii.isArray(runtime)) {
1493
+ auto array = radii.getArray(
1494
+ runtime);
1495
+ auto size = array.size(
1496
+ runtime);
1497
+ if (size > 1) {
1498
+ rust::Vec<float> store;
1499
+ store.reserve(size);
1500
+ for (int i = 0;
1501
+ i < size; i++) {
1502
+ store[i] = (float) array.getValueAtIndex(
1503
+ runtime,
1504
+ i).asNumber();
1505
+ }
1506
+
1507
+ rust::Slice<const float> buf(
1508
+ store.data(),
1509
+ store.size());
1510
+ canvas_native_context_round_rect(
1511
+ this->GetContext(),
1512
+ x, y,
1513
+ width,
1514
+ height, buf);
1515
+
1516
+ }
1517
+ }
1518
+ } else {
1519
+ auto radii = (float) arguments[4].asNumber();
1520
+ canvas_native_context_round_rect_tl_tr_br_bl(
1521
+ this->GetContext(), x, y,
1522
+ width,
1523
+ height, radii, radii,
1524
+ radii, radii);
1525
+
1526
+ }
1527
+ }
1528
+
1529
+ return jsi::Value::undefined();
1530
+
1531
+ }
1532
+ );
1533
+ } else if (methodName == "rect") {
1534
+ return jsi::Function::createFromHostFunction(runtime,
1535
+ jsi::PropNameID::forAscii(runtime, methodName),
1536
+ 4,
1537
+ [this](jsi::Runtime &runtime,
1538
+ const jsi::Value &thisValue,
1539
+ const jsi::Value *arguments,
1540
+ size_t count) -> jsi::Value {
1541
+
1542
+ if (count == 4) {
1543
+ auto x = static_cast<float>(arguments[0].asNumber());
1544
+ auto y = static_cast<float>(arguments[1].asNumber());
1545
+ auto width = static_cast<float>(arguments[2].asNumber());
1546
+ auto height = static_cast<float>(arguments[3].asNumber());
1547
+ canvas_native_context_rect(
1548
+ this->GetContext(), x, y,
1549
+ width,
1550
+ height);
1551
+ }
1552
+
1553
+ return jsi::Value::undefined();
1554
+
1555
+ }
1556
+ );
1557
+ } else if (methodName == "removeHitRegion") {
1558
+ return jsi::Function::createFromHostFunction(runtime,
1559
+ jsi::PropNameID::forAscii(runtime, methodName),
1560
+ 0,
1561
+ [](jsi::Runtime &runtime,
1562
+ const jsi::Value &thisValue,
1563
+ const jsi::Value *arguments,
1564
+ size_t count) -> jsi::Value {
1565
+
1566
+ return jsi::Value::undefined();
1567
+
1568
+ }
1569
+ );
1570
+ } else if (methodName == "resetTransform") {
1571
+ return jsi::Function::createFromHostFunction(runtime,
1572
+ jsi::PropNameID::forAscii(runtime, methodName),
1573
+ 0,
1574
+ [this](jsi::Runtime &runtime,
1575
+ const jsi::Value &thisValue,
1576
+ const jsi::Value *arguments,
1577
+ size_t count) -> jsi::Value {
1578
+ canvas_native_context_reset_transform(
1579
+ this->GetContext());
1580
+ return jsi::Value::undefined();
1581
+
1582
+ }
1583
+ );
1584
+ } else if (methodName == "restore") {
1585
+ return jsi::Function::createFromHostFunction(runtime,
1586
+ jsi::PropNameID::forAscii(runtime, methodName),
1587
+ 0,
1588
+ [this](jsi::Runtime &runtime,
1589
+ const jsi::Value &thisValue,
1590
+ const jsi::Value *arguments,
1591
+ size_t count) -> jsi::Value {
1592
+ canvas_native_context_restore(
1593
+ this->GetContext());
1594
+ return jsi::Value::undefined();
1595
+
1596
+ }
1597
+ );
1598
+ } else if (methodName == "rotate") {
1599
+ return jsi::Function::createFromHostFunction(runtime,
1600
+ jsi::PropNameID::forAscii(runtime, methodName),
1601
+ 1,
1602
+ [this](jsi::Runtime &runtime,
1603
+ const jsi::Value &thisValue,
1604
+ const jsi::Value *arguments,
1605
+ size_t count) -> jsi::Value {
1606
+
1607
+ if (count == 1 &&
1608
+ arguments[0].isNumber()) {
1609
+ canvas_native_context_rotate(
1610
+ this->GetContext(),
1611
+ (float) arguments[0].asNumber());
1612
+ }
1613
+
1614
+ return jsi::Value::undefined();
1615
+
1616
+ }
1617
+ );
1618
+ } else if (methodName == "save") {
1619
+ return jsi::Function::createFromHostFunction(runtime,
1620
+ jsi::PropNameID::forAscii(runtime, methodName),
1621
+ 0,
1622
+ [this](jsi::Runtime &runtime,
1623
+ const jsi::Value &thisValue,
1624
+ const jsi::Value *arguments,
1625
+ size_t count) -> jsi::Value {
1626
+ canvas_native_context_save(
1627
+ this->GetContext());
1628
+ return jsi::Value::undefined();
1629
+
1630
+ }
1631
+ );
1632
+ } else if (methodName == "scale") {
1633
+ return jsi::Function::createFromHostFunction(runtime,
1634
+ jsi::PropNameID::forAscii(runtime, methodName),
1635
+ 2,
1636
+ [this](jsi::Runtime &runtime,
1637
+ const jsi::Value &thisValue,
1638
+ const jsi::Value *arguments,
1639
+ size_t count) -> jsi::Value {
1640
+
1641
+ if (count == 2) {
1642
+ auto x = static_cast<float>(arguments[0].asNumber());
1643
+ auto y = static_cast<float>(arguments[1].asNumber());
1644
+ canvas_native_context_scale(
1645
+ this->GetContext(), x, y);
1646
+ }
1647
+
1648
+ return jsi::Value::undefined();
1649
+ }
1650
+ );
1651
+ } else if (methodName == "scrollPathIntoView") {
1652
+ return jsi::Function::createFromHostFunction(runtime,
1653
+ jsi::PropNameID::forAscii(runtime, methodName),
1654
+ 0,
1655
+ [](jsi::Runtime &runtime,
1656
+ const jsi::Value &thisValue,
1657
+ const jsi::Value *arguments,
1658
+ size_t count) -> jsi::Value {
1659
+ return jsi::Value::undefined();
1660
+
1661
+ }
1662
+ );
1663
+ } else if (methodName == "setLineDash") {
1664
+ return jsi::Function::createFromHostFunction(runtime,
1665
+ jsi::PropNameID::forAscii(runtime, methodName),
1666
+ 1,
1667
+ [this](jsi::Runtime &runtime,
1668
+ const jsi::Value &thisValue,
1669
+ const jsi::Value *arguments,
1670
+ size_t count) -> jsi::Value {
1671
+
1672
+ if (count == 1 &&
1673
+ arguments[0].isObject()) {
1674
+ auto vecObject = arguments[0].asObject(
1675
+ runtime);
1676
+ if (vecObject.isArray(
1677
+ runtime)) {
1678
+ auto segments = vecObject.getArray(
1679
+ runtime);
1680
+ auto len = segments.size(runtime);
1681
+ std::vector<float> data;
1682
+ for (int i = 0; i < len; ++i) {
1683
+ auto item = segments.getValueAtIndex(
1684
+ runtime, i);
1685
+ data.push_back(
1686
+ static_cast<float>(item.asNumber()));
1687
+ }
1688
+ rust::Slice<const float> slice{
1689
+ data.data(), data.size()};
1690
+ canvas_native_context_set_line_dash(
1691
+ this->GetContext(), slice);
1692
+ }
1693
+ }
1694
+ return jsi::Value::undefined();
1695
+
1696
+ }
1697
+ );
1698
+ } else if (methodName == "setTransform") {
1699
+ return jsi::Function::createFromHostFunction(runtime,
1700
+ jsi::PropNameID::forAscii(runtime, methodName),
1701
+ 6,
1702
+ [this](jsi::Runtime &runtime,
1703
+ const jsi::Value &thisValue,
1704
+ const jsi::Value *arguments,
1705
+ size_t count) -> jsi::Value {
1706
+
1707
+
1708
+ if (count == 1 &&
1709
+ arguments[0].isObject()) {
1710
+ auto matrix = getHostObject<MatrixImpl>(
1711
+ runtime, arguments[0]);
1712
+ if (matrix != nullptr) {
1713
+ canvas_native_context_set_transform_matrix(
1714
+ this->GetContext(),
1715
+ matrix->GetMatrix());
1716
+ }
1717
+ } else if (count == 6) {
1718
+ auto a = static_cast<float>(arguments[0].asNumber());
1719
+ auto b = static_cast<float>(arguments[1].asNumber());
1720
+ auto c = static_cast<float>(arguments[2].asNumber());
1721
+ auto d = static_cast<float>(arguments[3].asNumber());
1722
+ auto e = static_cast<float>(arguments[4].asNumber());
1723
+ auto f = static_cast<float>(arguments[5].asNumber());
1724
+ canvas_native_context_set_transform(
1725
+ this->GetContext(), a, b, c, d,
1726
+ e,
1727
+ f);
1728
+ }
1729
+
1730
+ return jsi::Value::undefined();
1731
+
1732
+ }
1733
+ );
1734
+ } else if (methodName == "stroke") {
1735
+ return jsi::Function::createFromHostFunction(runtime,
1736
+ jsi::PropNameID::forAscii(runtime, methodName),
1737
+ 1,
1738
+ [this](jsi::Runtime &runtime,
1739
+ const jsi::Value &thisValue,
1740
+ const jsi::Value *arguments,
1741
+ size_t count) -> jsi::Value {
1742
+
1743
+ if (count == 1 &&
1744
+ arguments[0].isObject()) {
1745
+ auto path = getHostObject<Path2D>(
1746
+ runtime, arguments[0]);
1747
+ if (path != nullptr) {
1748
+ canvas_native_context_stroke_with_path(
1749
+ this->GetContext(),
1750
+ path->GetPath());
1751
+ this->UpdateInvalidateState();
1752
+ }
1753
+ } else {
1754
+ canvas_native_context_stroke(
1755
+ this->GetContext());
1756
+ this->UpdateInvalidateState();
1757
+ }
1758
+
1759
+ return jsi::Value::undefined();
1760
+
1761
+ }
1762
+ );
1763
+ } else if (methodName == "strokeRect") {
1764
+ return jsi::Function::createFromHostFunction(runtime,
1765
+ jsi::PropNameID::forAscii(runtime, methodName),
1766
+ 4,
1767
+ [this](jsi::Runtime &runtime,
1768
+ const jsi::Value &thisValue,
1769
+ const jsi::Value *arguments,
1770
+ size_t count) -> jsi::Value {
1771
+
1772
+ if (count == 4) {
1773
+ auto x = static_cast<float>(arguments[0].asNumber());
1774
+ auto y = static_cast<float>(arguments[1].asNumber());
1775
+ auto width = static_cast<float>(arguments[2].asNumber());
1776
+ auto height = static_cast<float>(arguments[3].asNumber());
1777
+ canvas_native_context_stroke_rect(
1778
+ this->GetContext(), x, y,
1779
+ width,
1780
+ height);
1781
+ this->UpdateInvalidateState();
1782
+ }
1783
+
1784
+ return jsi::Value::undefined();
1785
+
1786
+ }
1787
+ );
1788
+ } else if (methodName == "strokeText") {
1789
+ return jsi::Function::createFromHostFunction(runtime,
1790
+ jsi::PropNameID::forAscii(runtime, methodName),
1791
+ 4,
1792
+ [this](jsi::Runtime &runtime,
1793
+ const jsi::Value &thisValue,
1794
+ const jsi::Value *arguments,
1795
+ size_t count) -> jsi::Value {
1796
+
1797
+ if (count >= 3) {
1798
+ auto text = arguments[0].asString(
1799
+ runtime).utf8(runtime);
1800
+ auto x = static_cast<float>(arguments[1].asNumber());
1801
+ auto y = static_cast<float>(arguments[2].asNumber());
1802
+ float maxWidth = -1;
1803
+
1804
+ if (count > 3) {
1805
+ maxWidth = static_cast<float>(arguments[3].asNumber());
1806
+ }
1807
+
1808
+ canvas_native_context_stroke_text(
1809
+ this->GetContext(),
1810
+ rust::Str(text.c_str()),
1811
+ x, y, maxWidth);
1812
+ this->UpdateInvalidateState();
1813
+ }
1814
+ return jsi::Value::undefined();
1815
+
1816
+ }
1817
+ );
1818
+ } else if (methodName == "transform") {
1819
+ return jsi::Function::createFromHostFunction(runtime,
1820
+ jsi::PropNameID::forAscii(runtime, methodName),
1821
+ 6,
1822
+ [this](jsi::Runtime &runtime,
1823
+ const jsi::Value &thisValue,
1824
+ const jsi::Value *arguments,
1825
+ size_t count) -> jsi::Value {
1826
+
1827
+ if (count == 6) {
1828
+ auto a = static_cast<float>(arguments[0].asNumber());
1829
+ auto b = static_cast<float>(arguments[1].asNumber());
1830
+ auto c = static_cast<float>(arguments[2].asNumber());
1831
+ auto d = static_cast<float>(arguments[3].asNumber());
1832
+ auto e = static_cast<float>(arguments[4].asNumber());
1833
+ auto f = static_cast<float>(arguments[5].asNumber());
1834
+ canvas_native_context_transform(
1835
+ this->GetContext(), a, b, c, d,
1836
+ e,
1837
+ f);
1838
+ }
1839
+
1840
+ return jsi::Value::undefined();
1841
+
1842
+ }
1843
+ );
1844
+ } else if (methodName == "translate") {
1845
+ return jsi::Function::createFromHostFunction(runtime,
1846
+ jsi::PropNameID::forAscii(runtime, methodName),
1847
+ 2,
1848
+ [this](jsi::Runtime &runtime,
1849
+ const jsi::Value &thisValue,
1850
+ const jsi::Value *arguments,
1851
+ size_t count) -> jsi::Value {
1852
+
1853
+ if (count == 2) {
1854
+ auto x = static_cast<float>(arguments[0].asNumber());
1855
+ auto y = static_cast<float>(arguments[1].asNumber());
1856
+ canvas_native_context_translate(
1857
+ this->GetContext(), x, y);
1858
+ }
1859
+
1860
+ return jsi::Value::undefined();
1861
+
1862
+ }
1863
+ );
1864
+ } else if (methodName == "__toDataURL") {
1865
+
1866
+ return jsi::Function::createFromHostFunction(runtime,
1867
+ jsi::PropNameID::forAscii(runtime, methodName),
1868
+ 2,
1869
+ [this](jsi::Runtime &runtime,
1870
+ const jsi::Value &thisValue,
1871
+ const jsi::Value *arguments,
1872
+ size_t count) -> jsi::Value {
1873
+
1874
+ auto format = arguments[0].asString(
1875
+ runtime).utf8(
1876
+ runtime);
1877
+ auto quality = static_cast<int>(arguments[1].getNumber());
1878
+
1879
+
1880
+
1881
+ // auto data = canvas_native_to_data_url(
1882
+ // this->GetContext(), rust::Str(format.c_str()),quality);
1883
+
1884
+
1885
+ auto data = canvas_native_to_data_url_c_string(this->GetContext(), format.c_str(),quality);
1886
+
1887
+ return jsi::String::createFromAscii(
1888
+ runtime,
1889
+ data.data(),
1890
+ data.size());
1891
+ }
1892
+ );
1893
+ }
1894
+
1895
+
1896
+ return jsi::Value::undefined();
1897
+ }
1898
+
1899
+ CanvasRenderingContext2DImpl::~CanvasRenderingContext2DImpl() {
1900
+ auto raf = this->raf_.get();
1901
+ if (raf != nullptr) {
1902
+ canvas_native_raf_stop(raf->GetRaf());
1903
+ }
1904
+ }
1905
+
1906
+ void CanvasRenderingContext2DImpl::UpdateInvalidateState() {
1907
+ auto raf = this->GetRaf();
1908
+ if (raf != nullptr) {
1909
+ if (!canvas_native_raf_get_started(raf->GetRaf())) {
1910
+ canvas_native_raf_start(raf->GetRaf());
1911
+ }
1912
+ }
1913
+
1914
+ auto state = this->GetInvalidateState();
1915
+ this->SetInvalidateState((int) state | (int) InvalidateState::PENDING);
1916
+ }
1917
+
1918
+ InvalidateState CanvasRenderingContext2DImpl::GetInvalidateState() const {
1919
+ return (InvalidateState)
1920
+ this->invalidateState_;
1921
+ }
1922
+
1923
+ void CanvasRenderingContext2DImpl::SetInvalidateState(InvalidateState state) {
1924
+ this->invalidateState_ = (int) state;
1925
+ }
1926
+
1927
+ void CanvasRenderingContext2DImpl::SetInvalidateState(int state) {
1928
+ this->invalidateState_ = state;
1929
+ }
1930
+
1931
+
1932
+ void CanvasRenderingContext2DImpl::Flush() {
1933
+ auto state = (int) this->GetInvalidateState() & (int) InvalidateState::PENDING;
1934
+ if (state == (int) InvalidateState::PENDING) {
1935
+ canvas_native_context_flush(this->GetContext());
1936
+ this->SetInvalidateState(InvalidateState::INVALIDATING);
1937
+ canvas_native_context_render(this->GetContext());
1938
+ // canvas_native_context_gl_make_current(this->GetContext());
1939
+ // canvas_native_context_gl_swap_buffers(this->GetContext());
1940
+ this->SetInvalidateState(InvalidateState::NONE);
1941
+ }
1942
+ }
1943
+
1944
+ void CanvasRenderingContext2DImpl::Flush(intptr_t context) {
1945
+ auto ctx = reinterpret_cast<CanvasRenderingContext2DImpl *>(reinterpret_cast<intptr_t *>(context));
1946
+ if (ctx != nullptr) {
1947
+ ctx->Flush();
1948
+ }
1949
+ }
1950
+
1951
+
1952
+ CanvasRenderingContext2D &CanvasRenderingContext2DImpl::GetContext() {
1953
+ return *this->context_;
1954
+ }