@nativescript/canvas 2.0.0-webgpu.35 → 2.0.0-webgpu.37
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.
- package/Canvas/common.d.ts +1 -1
- package/Canvas/common.js +24 -18
- package/Canvas/common.js.map +1 -1
- package/Canvas/index.android.js.map +1 -1
- package/Canvas/index.ios.js +1 -1
- package/Canvas/index.ios.js.map +1 -1
- package/Canvas2D/CanvasRenderingContext2D/index.d.ts +2 -1
- package/Canvas2D/CanvasRenderingContext2D/index.js +1 -4
- package/Canvas2D/CanvasRenderingContext2D/index.js.map +1 -1
- package/ImageAsset/index.d.ts +4 -2
- package/ImageAsset/index.js +76 -6
- package/ImageAsset/index.js.map +1 -1
- package/WebGL/WebGLRenderingContext/common.d.ts +1 -1
- package/WebGL/WebGLRenderingContext/index.js +4 -3
- package/WebGL/WebGLRenderingContext/index.js.map +1 -1
- package/WebGPU/GPUCanvasContext.d.ts +2 -1
- package/WebGPU/GPUCanvasContext.js.map +1 -1
- package/WebGPU/GPUQueue.js +9 -0
- package/WebGPU/GPUQueue.js.map +1 -1
- package/WebGPU/GPURenderPassEncoder.d.ts +3 -0
- package/WebGPU/GPURenderPassEncoder.js +9 -0
- package/WebGPU/GPURenderPassEncoder.js.map +1 -1
- package/angular/esm2022/index.mjs +4 -4
- package/angular/fesm2022/nativescript-canvas-angular.mjs +4 -4
- package/angular/fesm2022/nativescript-canvas-angular.mjs.map +1 -1
- package/common.js.map +1 -1
- package/index.d.ts +2 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/platforms/android/canvas-release.aar +0 -0
- package/platforms/ios/CanvasNative.xcframework/Info.plist +5 -5
- package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +85 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json +7293 -7997
- package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +681 -681
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +85 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json +7293 -7997
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json +7293 -7997
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +6 -6
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +683 -683
- package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml +736 -736
- package/platforms/ios/src/cpp/CanvasJSIModule.cpp +129 -0
- package/platforms/ios/src/cpp/CanvasJSIModule.h +2 -0
- package/platforms/ios/src/cpp/ImageAssetImpl.cpp +572 -397
- package/platforms/ios/src/cpp/ImageAssetImpl.h +4 -0
- package/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp +40 -8
- package/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp +67 -0
- package/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.h +4 -0
- package/utils.d.ts +1 -1
|
@@ -23,11 +23,11 @@ void ImageAssetImpl::Init(v8::Local<v8::Object> canvasModule, v8::Isolate *isola
|
|
|
23
23
|
v8::Locker locker(isolate);
|
|
24
24
|
v8::Isolate::Scope isolate_scope(isolate);
|
|
25
25
|
v8::HandleScope handle_scope(isolate);
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
auto ctor = GetCtor(isolate);
|
|
28
28
|
auto context = isolate->GetCurrentContext();
|
|
29
29
|
auto func = ctor->GetFunction(context).ToLocalChecked();
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
canvasModule->Set(context, ConvertToV8String(isolate, "ImageAsset"), func).IsJust();
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -45,93 +45,102 @@ v8::Local<v8::FunctionTemplate> ImageAssetImpl::GetCtor(v8::Isolate *isolate) {
|
|
|
45
45
|
if (ctor != nullptr) {
|
|
46
46
|
return ctor->Get(isolate);
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
v8::Local<v8::FunctionTemplate> ctorTmpl = v8::FunctionTemplate::New(isolate, Ctor);
|
|
50
50
|
ctorTmpl->InstanceTemplate()->SetInternalFieldCount(2);
|
|
51
51
|
ctorTmpl->SetClassName(ConvertToV8String(isolate, "ImageAsset"));
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
auto tmpl = ctorTmpl->InstanceTemplate();
|
|
54
54
|
tmpl->SetInternalFieldCount(2);
|
|
55
55
|
tmpl->SetAccessor(
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
ConvertToV8String(isolate, "width"),
|
|
57
|
+
GetWidth);
|
|
58
58
|
tmpl->SetAccessor(
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
ConvertToV8String(isolate, "height"),
|
|
60
|
+
GetHeight);
|
|
61
61
|
tmpl->SetAccessor(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
ConvertToV8String(isolate, "error"),
|
|
63
|
+
GetError);
|
|
64
|
+
|
|
65
65
|
tmpl->SetAccessor(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
ConvertToV8String(isolate, "__addr"),
|
|
67
|
+
GetAddr);
|
|
68
|
+
|
|
69
69
|
tmpl->Set(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// tmpl->Set(
|
|
76
|
-
// ConvertToV8String(isolate, "scale"),
|
|
77
|
-
// v8::FunctionTemplate::New(isolate, &Scale));
|
|
78
|
-
|
|
70
|
+
ConvertToV8String(isolate, "__getRef"),
|
|
71
|
+
v8::FunctionTemplate::New(isolate, GetReference));
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
// tmpl->Set(
|
|
76
|
+
// ConvertToV8String(isolate, "scale"),
|
|
77
|
+
// v8::FunctionTemplate::New(isolate, &Scale));
|
|
78
|
+
|
|
79
79
|
tmpl->Set(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
ConvertToV8String(isolate, "fromUrlSync"),
|
|
81
|
+
v8::FunctionTemplate::New(isolate, &FromUrlSync));
|
|
82
|
+
|
|
83
83
|
tmpl->Set(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
ConvertToV8String(isolate, "fromUrlCb"),
|
|
85
|
+
v8::FunctionTemplate::New(isolate, &FromUrlCb));
|
|
86
|
+
|
|
87
|
+
|
|
88
88
|
tmpl->Set(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
ConvertToV8String(isolate, "fromFileSync"),
|
|
90
|
+
v8::FunctionTemplate::New(isolate, &FromFileSync));
|
|
91
|
+
|
|
92
92
|
tmpl->Set(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
ConvertToV8String(isolate, "fromFileCb"),
|
|
94
|
+
v8::FunctionTemplate::New(isolate, &FromFileCb));
|
|
95
|
+
|
|
96
|
+
|
|
97
97
|
tmpl->Set(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
ConvertToV8String(isolate, "fromBytesSync"),
|
|
99
|
+
v8::FunctionTemplate::New(isolate, &FromBytesSync));
|
|
100
|
+
|
|
101
101
|
tmpl->Set(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
ConvertToV8String(isolate, "fromBytesCb"),
|
|
103
|
+
v8::FunctionTemplate::New(isolate, &FromBytesCb));
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
tmpl->Set(
|
|
107
|
+
ConvertToV8String(isolate, "fromEncodedBytesSync"),
|
|
108
|
+
v8::FunctionTemplate::New(isolate, &FromEncodedBytesSync));
|
|
109
|
+
|
|
110
|
+
tmpl->Set(
|
|
111
|
+
ConvertToV8String(isolate, "fromEncodedBytesCb"),
|
|
112
|
+
v8::FunctionTemplate::New(isolate, &FromEncodedBytesCb));
|
|
113
|
+
|
|
114
|
+
|
|
106
115
|
/* tmpl->Set(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
ConvertToV8String(isolate, "saveSync"),
|
|
117
|
+
v8::FunctionTemplate::New(isolate, &SaveSync));
|
|
118
|
+
|
|
119
|
+
tmpl->Set(
|
|
120
|
+
ConvertToV8String(isolate, "saveCb"),
|
|
121
|
+
v8::FunctionTemplate::New(isolate, &SaveCb));
|
|
122
|
+
*/
|
|
123
|
+
|
|
115
124
|
cache->ImageAssetTmpl =
|
|
116
|
-
|
|
125
|
+
std::make_unique<v8::Persistent<v8::FunctionTemplate>>(isolate, ctorTmpl);
|
|
117
126
|
return ctorTmpl;
|
|
118
127
|
}
|
|
119
128
|
|
|
120
129
|
void ImageAssetImpl::Ctor(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
121
130
|
auto isolate = args.GetIsolate();
|
|
122
|
-
|
|
131
|
+
|
|
123
132
|
auto ret = args.This();
|
|
124
|
-
|
|
133
|
+
|
|
125
134
|
auto image_asset = canvas_native_image_asset_create();
|
|
126
|
-
|
|
135
|
+
|
|
127
136
|
auto object = new ImageAssetImpl(image_asset);
|
|
128
|
-
|
|
137
|
+
|
|
129
138
|
SetNativeType(object, NativeType::ImageAsset);
|
|
130
|
-
|
|
139
|
+
|
|
131
140
|
ret->SetAlignedPointerInInternalField(0, object);
|
|
132
|
-
|
|
141
|
+
|
|
133
142
|
object->BindFinalizer(isolate, ret);
|
|
134
|
-
|
|
143
|
+
|
|
135
144
|
args.GetReturnValue().Set(ret);
|
|
136
145
|
}
|
|
137
146
|
|
|
@@ -184,7 +193,7 @@ ImageAssetImpl::GetReference(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
|
184
193
|
args.GetReturnValue().Set(ConvertToV8String(isolate, ret));
|
|
185
194
|
return;
|
|
186
195
|
}
|
|
187
|
-
|
|
196
|
+
|
|
188
197
|
args.GetReturnValue().SetEmptyString();
|
|
189
198
|
}
|
|
190
199
|
|
|
@@ -210,9 +219,9 @@ void ImageAssetImpl::FromUrlSync(const v8::FunctionCallbackInfo<v8::Value> &args
|
|
|
210
219
|
}
|
|
211
220
|
auto isolate = args.GetIsolate();
|
|
212
221
|
auto url = ConvertFromV8String(isolate, args[0]);
|
|
213
|
-
|
|
222
|
+
|
|
214
223
|
auto done = canvas_native_image_asset_load_from_url(ptr->GetImageAsset(), url.c_str());
|
|
215
|
-
|
|
224
|
+
|
|
216
225
|
args.GetReturnValue().Set(done);
|
|
217
226
|
}
|
|
218
227
|
|
|
@@ -221,90 +230,90 @@ void ImageAssetImpl::FromUrlCb(const v8::FunctionCallbackInfo<v8::Value> &args)
|
|
|
221
230
|
if (ptr == nullptr) {
|
|
222
231
|
return;
|
|
223
232
|
}
|
|
224
|
-
|
|
233
|
+
|
|
225
234
|
auto isolate = args.GetIsolate();
|
|
226
|
-
|
|
235
|
+
|
|
227
236
|
if (args.Length() < 2) {
|
|
228
237
|
return;
|
|
229
238
|
}
|
|
230
|
-
|
|
239
|
+
|
|
231
240
|
auto url = ConvertFromV8String(isolate, args[0]);
|
|
232
|
-
|
|
241
|
+
|
|
233
242
|
auto asset = canvas_native_image_asset_reference(ptr->asset_);
|
|
234
|
-
|
|
243
|
+
|
|
235
244
|
auto callback = args[1].As<v8::Function>();
|
|
236
|
-
|
|
245
|
+
|
|
237
246
|
auto jsi_callback = new JSICallback(isolate, callback);
|
|
238
|
-
|
|
247
|
+
|
|
239
248
|
#ifdef __ANDROID__
|
|
240
|
-
|
|
249
|
+
|
|
241
250
|
ALooper_addFd(jsi_callback->looper_,
|
|
242
251
|
jsi_callback->fd_[0],
|
|
243
252
|
0,
|
|
244
253
|
ALOOPER_EVENT_INPUT,
|
|
245
254
|
[](int fd, int events,
|
|
246
255
|
void *data) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
256
|
+
auto cb = static_cast<JSICallback *>(data);
|
|
257
|
+
bool done;
|
|
258
|
+
read(fd, &done,
|
|
259
|
+
sizeof(bool));
|
|
260
|
+
|
|
261
|
+
v8::Isolate *isolate = cb->isolate_;
|
|
262
|
+
v8::Locker locker(isolate);
|
|
263
|
+
v8::Isolate::Scope isolate_scope(isolate);
|
|
264
|
+
v8::HandleScope handle_scope(isolate);
|
|
265
|
+
v8::Local<v8::Function> callback = cb->callback_->Get(isolate);
|
|
266
|
+
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
267
|
+
v8::Context::Scope context_scope(context);
|
|
268
|
+
|
|
269
|
+
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
270
|
+
|
|
271
|
+
// v8::TryCatch tc(isolate);
|
|
272
|
+
|
|
273
|
+
callback->Call(context, context->Global(), 1,
|
|
274
|
+
args); // ignore JS return value
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
delete static_cast<JSICallback *>(data);
|
|
278
|
+
return 0;
|
|
279
|
+
}, jsi_callback);
|
|
280
|
+
|
|
281
|
+
|
|
273
282
|
std::thread thread(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
283
|
+
[jsi_callback, asset](
|
|
284
|
+
const std::string &url) {
|
|
285
|
+
auto done = canvas_native_image_asset_load_from_url(asset, url.c_str());
|
|
286
|
+
|
|
287
|
+
canvas_native_image_asset_release(asset);
|
|
288
|
+
|
|
289
|
+
write(jsi_callback->fd_[1],
|
|
290
|
+
&done,
|
|
291
|
+
sizeof(bool));
|
|
292
|
+
|
|
293
|
+
}, std::move(url));
|
|
294
|
+
|
|
286
295
|
thread.detach();
|
|
287
|
-
|
|
296
|
+
|
|
288
297
|
#endif
|
|
289
|
-
|
|
290
|
-
|
|
298
|
+
|
|
299
|
+
|
|
291
300
|
#ifdef __APPLE__
|
|
292
|
-
|
|
301
|
+
|
|
293
302
|
auto current_queue = new NSOperationQueueWrapper(true);
|
|
294
|
-
|
|
303
|
+
|
|
295
304
|
auto queue = new NSOperationQueueWrapper(false);
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
299
308
|
/* std::thread task([jsi_callback, current_queue, asset](std::string url) {
|
|
300
|
-
|
|
301
|
-
|
|
309
|
+
|
|
310
|
+
|
|
302
311
|
auto done = canvas_native_image_asset_load_from_url(asset, url.c_str());
|
|
303
|
-
|
|
304
|
-
|
|
312
|
+
|
|
313
|
+
|
|
305
314
|
auto main_task = [jsi_callback, current_queue, url, done]() {
|
|
306
|
-
|
|
307
|
-
|
|
315
|
+
|
|
316
|
+
|
|
308
317
|
v8::Isolate *isolate = jsi_callback->isolate_;
|
|
309
318
|
v8::Locker locker(isolate);
|
|
310
319
|
v8::Isolate::Scope isolate_scope(isolate);
|
|
@@ -312,43 +321,43 @@ void ImageAssetImpl::FromUrlCb(const v8::FunctionCallbackInfo<v8::Value> &args)
|
|
|
312
321
|
v8::Local<v8::Function> callback = jsi_callback->callback_->Get(isolate);
|
|
313
322
|
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
314
323
|
v8::Context::Scope context_scope(context);
|
|
315
|
-
|
|
324
|
+
|
|
316
325
|
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
317
|
-
|
|
326
|
+
|
|
318
327
|
// v8::TryCatch tc(isolate);
|
|
319
|
-
|
|
328
|
+
|
|
320
329
|
callback->Call(context, context->Global(), 1,
|
|
321
330
|
args); // ignore JS return value
|
|
322
|
-
|
|
323
|
-
|
|
331
|
+
|
|
332
|
+
|
|
324
333
|
delete jsi_callback;
|
|
325
334
|
// delete queue;
|
|
326
335
|
delete current_queue;
|
|
327
|
-
|
|
328
|
-
|
|
336
|
+
|
|
337
|
+
|
|
329
338
|
};
|
|
330
|
-
|
|
339
|
+
|
|
331
340
|
current_queue->addOperation(main_task);
|
|
332
|
-
|
|
333
|
-
|
|
341
|
+
|
|
342
|
+
|
|
334
343
|
}, std::move(url));
|
|
335
|
-
|
|
344
|
+
|
|
336
345
|
task.detach();
|
|
337
|
-
|
|
346
|
+
|
|
338
347
|
*/
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
344
353
|
auto task = [jsi_callback, current_queue, queue, asset, url]() {
|
|
345
|
-
|
|
354
|
+
|
|
346
355
|
auto done = canvas_native_image_asset_load_from_url(asset, url.c_str());
|
|
347
356
|
canvas_native_image_asset_release(asset);
|
|
348
|
-
|
|
357
|
+
|
|
349
358
|
auto main_task = [jsi_callback, current_queue, queue, url, done]() {
|
|
350
|
-
|
|
351
|
-
|
|
359
|
+
|
|
360
|
+
|
|
352
361
|
v8::Isolate *isolate = jsi_callback->isolate_;
|
|
353
362
|
v8::Locker locker(isolate);
|
|
354
363
|
v8::Isolate::Scope isolate_scope(isolate);
|
|
@@ -356,31 +365,31 @@ void ImageAssetImpl::FromUrlCb(const v8::FunctionCallbackInfo<v8::Value> &args)
|
|
|
356
365
|
v8::Local<v8::Function> callback = jsi_callback->callback_->Get(isolate);
|
|
357
366
|
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
358
367
|
v8::Context::Scope context_scope(context);
|
|
359
|
-
|
|
368
|
+
|
|
360
369
|
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
361
|
-
|
|
370
|
+
|
|
362
371
|
// v8::TryCatch tc(isolate);
|
|
363
|
-
|
|
372
|
+
|
|
364
373
|
callback->Call(context, context->Global(), 1,
|
|
365
374
|
args); // ignore JS return value
|
|
366
|
-
|
|
367
|
-
|
|
375
|
+
|
|
376
|
+
|
|
368
377
|
delete jsi_callback;
|
|
369
378
|
delete queue;
|
|
370
379
|
delete current_queue;
|
|
371
|
-
|
|
372
|
-
|
|
380
|
+
|
|
381
|
+
|
|
373
382
|
};
|
|
374
|
-
|
|
383
|
+
|
|
375
384
|
current_queue->addOperation(main_task);
|
|
376
|
-
|
|
385
|
+
|
|
377
386
|
};
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
|
|
381
390
|
queue->addOperation(task);
|
|
382
391
|
#endif
|
|
383
|
-
|
|
392
|
+
|
|
384
393
|
}
|
|
385
394
|
|
|
386
395
|
void ImageAssetImpl::FromFileSync(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
@@ -391,9 +400,9 @@ void ImageAssetImpl::FromFileSync(const v8::FunctionCallbackInfo<v8::Value> &arg
|
|
|
391
400
|
}
|
|
392
401
|
auto isolate = args.GetIsolate();
|
|
393
402
|
auto path = ConvertFromV8String(isolate, args[0]);
|
|
394
|
-
|
|
403
|
+
|
|
395
404
|
auto done = canvas_native_image_asset_load_from_path(ptr->GetImageAsset(), path.c_str());
|
|
396
|
-
|
|
405
|
+
|
|
397
406
|
args.GetReturnValue().Set(done);
|
|
398
407
|
}
|
|
399
408
|
|
|
@@ -403,85 +412,85 @@ void ImageAssetImpl::FromFileCb(const v8::FunctionCallbackInfo<v8::Value> &args)
|
|
|
403
412
|
return;
|
|
404
413
|
}
|
|
405
414
|
auto isolate = args.GetIsolate();
|
|
406
|
-
|
|
415
|
+
|
|
407
416
|
if (args.Length() < 2) {
|
|
408
417
|
return;
|
|
409
418
|
}
|
|
410
|
-
|
|
419
|
+
|
|
411
420
|
auto path = ConvertFromV8String(isolate, args[0]);
|
|
412
|
-
|
|
421
|
+
|
|
413
422
|
auto asset = canvas_native_image_asset_reference(ptr->GetImageAsset());
|
|
414
|
-
|
|
423
|
+
|
|
415
424
|
auto callback = args[1].As<v8::Function>();
|
|
416
|
-
|
|
425
|
+
|
|
417
426
|
auto jsi_callback = new JSICallback(isolate, callback);
|
|
418
|
-
|
|
427
|
+
|
|
419
428
|
#ifdef __ANDROID__
|
|
420
|
-
|
|
429
|
+
|
|
421
430
|
ALooper_addFd(jsi_callback->looper_,
|
|
422
431
|
jsi_callback->fd_[0],
|
|
423
432
|
0,
|
|
424
433
|
ALOOPER_EVENT_INPUT,
|
|
425
434
|
[](int fd, int events,
|
|
426
435
|
void *data) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
436
|
+
auto cb = static_cast<JSICallback *>(data);
|
|
437
|
+
bool done;
|
|
438
|
+
read(fd, &done,
|
|
439
|
+
sizeof(bool));
|
|
440
|
+
|
|
441
|
+
v8::Isolate *isolate = cb->isolate_;
|
|
442
|
+
v8::Locker locker(isolate);
|
|
443
|
+
v8::Isolate::Scope isolate_scope(isolate);
|
|
444
|
+
v8::HandleScope handle_scope(isolate);
|
|
445
|
+
v8::Local<v8::Function> callback = cb->callback_->Get(isolate);
|
|
446
|
+
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
447
|
+
v8::Context::Scope context_scope(context);
|
|
448
|
+
|
|
449
|
+
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
450
|
+
|
|
451
|
+
v8::TryCatch tc(isolate);
|
|
452
|
+
|
|
453
|
+
callback->Call(context, context->Global(), 1,
|
|
454
|
+
args); // ignore JS return value
|
|
455
|
+
|
|
456
|
+
delete static_cast<JSICallback *>(data);
|
|
457
|
+
return 0;
|
|
458
|
+
}, jsi_callback);
|
|
459
|
+
|
|
460
|
+
|
|
452
461
|
std::thread thread(
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
462
|
+
[jsi_callback, asset](
|
|
463
|
+
const std::string path) {
|
|
464
|
+
|
|
465
|
+
auto done = canvas_native_image_asset_load_from_path(asset, path.c_str());
|
|
466
|
+
|
|
467
|
+
write(jsi_callback->fd_[1],
|
|
468
|
+
&done,
|
|
469
|
+
sizeof(bool));
|
|
470
|
+
|
|
471
|
+
canvas_native_image_asset_release(asset);
|
|
472
|
+
|
|
473
|
+
}, std::move(path));
|
|
474
|
+
|
|
466
475
|
thread.detach();
|
|
467
|
-
|
|
476
|
+
|
|
468
477
|
#endif
|
|
469
|
-
|
|
470
|
-
|
|
478
|
+
|
|
479
|
+
|
|
471
480
|
#ifdef __APPLE__
|
|
472
|
-
|
|
481
|
+
|
|
473
482
|
auto current_queue = new NSOperationQueueWrapper(true);
|
|
474
|
-
|
|
483
|
+
|
|
475
484
|
auto queue = new NSOperationQueueWrapper(false);
|
|
476
|
-
|
|
485
|
+
|
|
477
486
|
auto task = [jsi_callback, current_queue, queue, asset, path]() {
|
|
478
|
-
|
|
487
|
+
|
|
479
488
|
auto done = canvas_native_image_asset_load_from_path(asset, path.c_str());
|
|
480
|
-
|
|
489
|
+
|
|
481
490
|
canvas_native_image_asset_release(asset);
|
|
482
|
-
|
|
491
|
+
|
|
483
492
|
auto main_task = [jsi_callback, current_queue, queue, done]() {
|
|
484
|
-
|
|
493
|
+
|
|
485
494
|
v8::Isolate *isolate = jsi_callback->isolate_;
|
|
486
495
|
v8::Locker locker(isolate);
|
|
487
496
|
v8::Isolate::Scope isolate_scope(isolate);
|
|
@@ -489,27 +498,27 @@ void ImageAssetImpl::FromFileCb(const v8::FunctionCallbackInfo<v8::Value> &args)
|
|
|
489
498
|
v8::Local<v8::Function> callback = jsi_callback->callback_->Get(isolate);
|
|
490
499
|
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
491
500
|
v8::Context::Scope context_scope(context);
|
|
492
|
-
|
|
501
|
+
|
|
493
502
|
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
494
|
-
|
|
503
|
+
|
|
495
504
|
// v8::TryCatch tc(isolate);
|
|
496
|
-
|
|
505
|
+
|
|
497
506
|
callback->Call(context, context->Global(), 1,
|
|
498
507
|
args); // ignore JS return value
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
508
|
+
|
|
509
|
+
delete queue;
|
|
510
|
+
delete current_queue;
|
|
511
|
+
delete jsi_callback;
|
|
512
|
+
|
|
504
513
|
};
|
|
505
|
-
|
|
514
|
+
|
|
506
515
|
current_queue->addOperation(main_task);
|
|
507
|
-
|
|
516
|
+
|
|
508
517
|
};
|
|
509
|
-
|
|
518
|
+
|
|
510
519
|
queue->addOperation(task);
|
|
511
|
-
|
|
512
|
-
|
|
520
|
+
|
|
521
|
+
|
|
513
522
|
#endif
|
|
514
523
|
}
|
|
515
524
|
|
|
@@ -519,24 +528,32 @@ void ImageAssetImpl::FromBytesSync(const v8::FunctionCallbackInfo<v8::Value> &ar
|
|
|
519
528
|
args.GetReturnValue().Set(false);
|
|
520
529
|
return;
|
|
521
530
|
}
|
|
522
|
-
|
|
523
|
-
auto value = args[
|
|
524
|
-
|
|
531
|
+
auto context = args.GetIsolate()->GetCurrentContext();
|
|
532
|
+
auto value = args[2];
|
|
533
|
+
|
|
525
534
|
if (value->IsObject()) {
|
|
526
535
|
if (!value->IsArrayBuffer()) {
|
|
527
536
|
args.GetReturnValue().Set(false);
|
|
528
537
|
return;
|
|
529
538
|
}
|
|
530
539
|
auto buf = value.As<v8::ArrayBuffer>();
|
|
531
|
-
|
|
540
|
+
|
|
532
541
|
auto size = (uintptr_t) buf->ByteLength();
|
|
533
542
|
auto data = (uint8_t *) buf->GetBackingStore()->Data();
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
543
|
+
|
|
544
|
+
uint32_t width;
|
|
545
|
+
uint32_t height;
|
|
546
|
+
bool done = false;
|
|
547
|
+
if(args[0]->Uint32Value(context).To(&width)
|
|
548
|
+
&& args[1]->Uint32Value(context).To(&height)
|
|
549
|
+
) {
|
|
550
|
+
done = canvas_native_image_asset_load_from_raw(ptr->GetImageAsset(), width, height, data, size);
|
|
551
|
+
}
|
|
552
|
+
|
|
537
553
|
args.GetReturnValue().Set(done);
|
|
554
|
+
return;
|
|
538
555
|
}
|
|
539
|
-
|
|
556
|
+
|
|
540
557
|
args.GetReturnValue().Set(false);
|
|
541
558
|
}
|
|
542
559
|
|
|
@@ -546,89 +563,96 @@ void ImageAssetImpl::FromBytesCb(const v8::FunctionCallbackInfo<v8::Value> &args
|
|
|
546
563
|
return;
|
|
547
564
|
}
|
|
548
565
|
auto isolate = args.GetIsolate();
|
|
549
|
-
|
|
566
|
+
|
|
550
567
|
if (args.Length() < 2) {
|
|
551
568
|
return;
|
|
552
569
|
}
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
auto bytes = args[
|
|
556
|
-
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
auto bytes = args[2].As<v8::ArrayBuffer>();
|
|
573
|
+
|
|
557
574
|
auto size = bytes->ByteLength();
|
|
558
|
-
|
|
575
|
+
|
|
559
576
|
auto data = (uint8_t *) bytes->GetBackingStore()->Data();
|
|
560
|
-
|
|
577
|
+
|
|
561
578
|
auto asset = canvas_native_image_asset_reference(ptr->GetImageAsset());
|
|
562
|
-
|
|
563
|
-
auto
|
|
564
|
-
|
|
579
|
+
|
|
580
|
+
auto context = args.GetIsolate()->GetCurrentContext();
|
|
581
|
+
|
|
582
|
+
uint32_t width;
|
|
583
|
+
uint32_t height;
|
|
584
|
+
args[0]->Uint32Value(context).To(&width);
|
|
585
|
+
args[1]->Uint32Value(context).To(&height);
|
|
586
|
+
|
|
587
|
+
auto callback = args[3].As<v8::Function>();
|
|
588
|
+
|
|
565
589
|
auto jsi_callback = new JSICallback(isolate, callback);
|
|
566
|
-
|
|
590
|
+
|
|
567
591
|
#ifdef __ANDROID__
|
|
568
|
-
|
|
592
|
+
|
|
569
593
|
ALooper_addFd(jsi_callback->looper_,
|
|
570
594
|
jsi_callback->fd_[0],
|
|
571
595
|
0,
|
|
572
596
|
ALOOPER_EVENT_INPUT,
|
|
573
597
|
[](int fd, int events,
|
|
574
598
|
void *data) {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
+
auto cb = static_cast<JSICallback *>(data);
|
|
600
|
+
bool done;
|
|
601
|
+
read(fd, &done,
|
|
602
|
+
sizeof(bool));
|
|
603
|
+
|
|
604
|
+
v8::Isolate *isolate = cb->isolate_;
|
|
605
|
+
v8::Locker locker(isolate);
|
|
606
|
+
v8::Isolate::Scope isolate_scope(isolate);
|
|
607
|
+
v8::HandleScope handle_scope(isolate);
|
|
608
|
+
v8::Local<v8::Function> callback = cb->callback_->Get(isolate);
|
|
609
|
+
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
610
|
+
v8::Context::Scope context_scope(context);
|
|
611
|
+
|
|
612
|
+
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
613
|
+
|
|
614
|
+
// v8::TryCatch tc(isolate);
|
|
615
|
+
|
|
616
|
+
callback->Call(context, context->Global(), 1,
|
|
617
|
+
args); // ignore JS return value
|
|
618
|
+
|
|
619
|
+
delete static_cast<JSICallback *>(data);
|
|
620
|
+
return 0;
|
|
621
|
+
}, jsi_callback);
|
|
622
|
+
|
|
599
623
|
std::thread thread(
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
624
|
+
[jsi_callback, asset, width, height, data, size]() {
|
|
625
|
+
|
|
626
|
+
auto done = canvas_native_image_asset_load_from_raw(asset, width, height, data, size);
|
|
627
|
+
|
|
628
|
+
canvas_native_image_asset_release(asset);
|
|
629
|
+
|
|
630
|
+
write(jsi_callback->fd_[1],
|
|
631
|
+
&done,
|
|
632
|
+
sizeof(bool));
|
|
633
|
+
|
|
634
|
+
});
|
|
635
|
+
|
|
612
636
|
thread.detach();
|
|
613
|
-
|
|
637
|
+
|
|
614
638
|
#endif
|
|
615
|
-
|
|
616
|
-
|
|
639
|
+
|
|
640
|
+
|
|
617
641
|
#ifdef __APPLE__
|
|
618
|
-
|
|
642
|
+
|
|
619
643
|
auto current_queue = new NSOperationQueueWrapper(true);
|
|
620
|
-
|
|
644
|
+
|
|
621
645
|
auto queue = new NSOperationQueueWrapper(false);
|
|
622
|
-
|
|
623
|
-
auto task = [jsi_callback, current_queue, queue, asset, data, size]() {
|
|
624
|
-
|
|
625
|
-
auto done = canvas_native_image_asset_load_from_raw(asset, data, size);
|
|
626
|
-
|
|
646
|
+
|
|
647
|
+
auto task = [jsi_callback, current_queue, queue, asset, width, height,data, size]() {
|
|
648
|
+
|
|
649
|
+
auto done = canvas_native_image_asset_load_from_raw(asset, width, height, data, size);
|
|
650
|
+
|
|
627
651
|
canvas_native_image_asset_release(asset);
|
|
628
|
-
|
|
652
|
+
|
|
629
653
|
auto main_task = [jsi_callback, current_queue, queue, done]() {
|
|
630
|
-
|
|
631
|
-
|
|
654
|
+
|
|
655
|
+
|
|
632
656
|
v8::Isolate *isolate = jsi_callback->isolate_;
|
|
633
657
|
v8::Locker locker(isolate);
|
|
634
658
|
v8::Isolate::Scope isolate_scope(isolate);
|
|
@@ -636,141 +660,150 @@ void ImageAssetImpl::FromBytesCb(const v8::FunctionCallbackInfo<v8::Value> &args
|
|
|
636
660
|
v8::Local<v8::Function> callback = jsi_callback->callback_->Get(isolate);
|
|
637
661
|
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
638
662
|
v8::Context::Scope context_scope(context);
|
|
639
|
-
|
|
663
|
+
|
|
640
664
|
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
641
|
-
|
|
665
|
+
|
|
642
666
|
// v8::TryCatch tc(isolate);
|
|
643
|
-
|
|
667
|
+
|
|
644
668
|
callback->Call(context, context->Global(), 1,
|
|
645
669
|
args); // ignore JS return value
|
|
646
|
-
|
|
647
|
-
|
|
670
|
+
|
|
671
|
+
|
|
648
672
|
delete jsi_callback;
|
|
649
673
|
delete queue;
|
|
650
674
|
delete current_queue;
|
|
651
|
-
|
|
652
|
-
|
|
675
|
+
|
|
676
|
+
|
|
653
677
|
};
|
|
654
|
-
|
|
678
|
+
|
|
655
679
|
current_queue->addOperation(main_task);
|
|
656
|
-
|
|
680
|
+
|
|
657
681
|
};
|
|
658
|
-
|
|
682
|
+
|
|
659
683
|
queue->addOperation(task);
|
|
660
684
|
#endif
|
|
661
|
-
|
|
685
|
+
|
|
662
686
|
}
|
|
663
687
|
|
|
664
|
-
|
|
665
|
-
void ImageAssetImpl::
|
|
688
|
+
|
|
689
|
+
void ImageAssetImpl::FromEncodedBytesSync(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
666
690
|
ImageAssetImpl *ptr = GetPointer(args.This());
|
|
667
691
|
if (ptr == nullptr) {
|
|
668
692
|
args.GetReturnValue().Set(false);
|
|
669
693
|
return;
|
|
670
694
|
}
|
|
671
|
-
|
|
672
|
-
auto
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
695
|
+
|
|
696
|
+
auto value = args[0];
|
|
697
|
+
|
|
698
|
+
if (value->IsObject()) {
|
|
699
|
+
if (!value->IsArrayBuffer()) {
|
|
700
|
+
args.GetReturnValue().Set(false);
|
|
701
|
+
return;
|
|
702
|
+
}
|
|
703
|
+
auto buf = value.As<v8::ArrayBuffer>();
|
|
704
|
+
|
|
705
|
+
auto size = (uintptr_t) buf->ByteLength();
|
|
706
|
+
auto data = (uint8_t *) buf->GetBackingStore()->Data();
|
|
707
|
+
|
|
708
|
+
auto done = canvas_native_image_asset_load_from_raw_encoded(ptr->GetImageAsset(), data,
|
|
709
|
+
size);
|
|
710
|
+
|
|
711
|
+
args.GetReturnValue().Set(done);
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
args.GetReturnValue().Set(false);
|
|
679
716
|
}
|
|
680
717
|
|
|
681
|
-
void ImageAssetImpl::
|
|
718
|
+
void ImageAssetImpl::FromEncodedBytesCb(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
682
719
|
ImageAssetImpl *ptr = GetPointer(args.This());
|
|
683
720
|
if (ptr == nullptr) {
|
|
684
721
|
return;
|
|
685
722
|
}
|
|
686
723
|
auto isolate = args.GetIsolate();
|
|
687
|
-
|
|
724
|
+
|
|
688
725
|
if (args.Length() < 2) {
|
|
689
726
|
return;
|
|
690
727
|
}
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
auto
|
|
694
|
-
|
|
695
|
-
auto
|
|
696
|
-
|
|
697
|
-
auto
|
|
698
|
-
|
|
699
|
-
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
auto bytes = args[0].As<v8::ArrayBuffer>();
|
|
731
|
+
|
|
732
|
+
auto size = bytes->ByteLength();
|
|
733
|
+
|
|
734
|
+
auto data = (uint8_t *) bytes->GetBackingStore()->Data();
|
|
735
|
+
|
|
736
|
+
auto asset = canvas_native_image_asset_reference(ptr->GetImageAsset());
|
|
737
|
+
|
|
700
738
|
auto callback = args[1].As<v8::Function>();
|
|
701
|
-
|
|
739
|
+
|
|
702
740
|
auto jsi_callback = new JSICallback(isolate, callback);
|
|
703
|
-
|
|
704
|
-
|
|
741
|
+
|
|
705
742
|
#ifdef __ANDROID__
|
|
706
|
-
|
|
743
|
+
|
|
707
744
|
ALooper_addFd(jsi_callback->looper_,
|
|
708
745
|
jsi_callback->fd_[0],
|
|
709
746
|
0,
|
|
710
747
|
ALOOPER_EVENT_INPUT,
|
|
711
748
|
[](int fd, int events,
|
|
712
749
|
void *data) {
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
750
|
+
auto cb = static_cast<JSICallback *>(data);
|
|
751
|
+
bool done;
|
|
752
|
+
read(fd, &done,
|
|
753
|
+
sizeof(bool));
|
|
754
|
+
|
|
755
|
+
v8::Isolate *isolate = cb->isolate_;
|
|
756
|
+
v8::Locker locker(isolate);
|
|
757
|
+
v8::Isolate::Scope isolate_scope(isolate);
|
|
758
|
+
v8::HandleScope handle_scope(isolate);
|
|
759
|
+
v8::Local<v8::Function> callback = cb->callback_->Get(isolate);
|
|
760
|
+
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
761
|
+
v8::Context::Scope context_scope(context);
|
|
762
|
+
|
|
763
|
+
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
764
|
+
|
|
765
|
+
// v8::TryCatch tc(isolate);
|
|
766
|
+
|
|
767
|
+
callback->Call(context, context->Global(), 1,
|
|
768
|
+
args); // ignore JS return value
|
|
769
|
+
|
|
770
|
+
delete static_cast<JSICallback *>(data);
|
|
771
|
+
return 0;
|
|
772
|
+
}, jsi_callback);
|
|
773
|
+
|
|
737
774
|
std::thread thread(
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
}, std::move(path));
|
|
752
|
-
|
|
753
|
-
|
|
775
|
+
[jsi_callback, asset, data, size]() {
|
|
776
|
+
|
|
777
|
+
auto done = canvas_native_image_asset_load_from_raw_encoded(asset, data, size);
|
|
778
|
+
|
|
779
|
+
canvas_native_image_asset_release(asset);
|
|
780
|
+
|
|
781
|
+
write(jsi_callback->fd_[1],
|
|
782
|
+
&done,
|
|
783
|
+
sizeof(bool));
|
|
784
|
+
|
|
785
|
+
});
|
|
786
|
+
|
|
754
787
|
thread.detach();
|
|
755
|
-
|
|
788
|
+
|
|
756
789
|
#endif
|
|
757
|
-
|
|
758
|
-
|
|
790
|
+
|
|
791
|
+
|
|
759
792
|
#ifdef __APPLE__
|
|
760
|
-
|
|
793
|
+
|
|
761
794
|
auto current_queue = new NSOperationQueueWrapper(true);
|
|
762
|
-
|
|
795
|
+
|
|
763
796
|
auto queue = new NSOperationQueueWrapper(false);
|
|
764
|
-
|
|
765
|
-
auto task = [jsi_callback, current_queue, queue, asset,
|
|
766
|
-
|
|
767
|
-
auto done =
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
797
|
+
|
|
798
|
+
auto task = [jsi_callback, current_queue, queue, asset, data, size]() {
|
|
799
|
+
|
|
800
|
+
auto done = canvas_native_image_asset_load_from_raw_encoded(asset, data, size);
|
|
801
|
+
|
|
802
|
+
canvas_native_image_asset_release(asset);
|
|
803
|
+
|
|
771
804
|
auto main_task = [jsi_callback, current_queue, queue, done]() {
|
|
772
|
-
|
|
773
|
-
|
|
805
|
+
|
|
806
|
+
|
|
774
807
|
v8::Isolate *isolate = jsi_callback->isolate_;
|
|
775
808
|
v8::Locker locker(isolate);
|
|
776
809
|
v8::Isolate::Scope isolate_scope(isolate);
|
|
@@ -778,30 +811,172 @@ void ImageAssetImpl::SaveCb(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
|
778
811
|
v8::Local<v8::Function> callback = jsi_callback->callback_->Get(isolate);
|
|
779
812
|
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
780
813
|
v8::Context::Scope context_scope(context);
|
|
781
|
-
|
|
814
|
+
|
|
782
815
|
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
783
|
-
|
|
816
|
+
|
|
784
817
|
// v8::TryCatch tc(isolate);
|
|
785
|
-
|
|
818
|
+
|
|
786
819
|
callback->Call(context, context->Global(), 1,
|
|
787
820
|
args); // ignore JS return value
|
|
788
|
-
|
|
789
|
-
|
|
821
|
+
|
|
822
|
+
|
|
790
823
|
delete jsi_callback;
|
|
791
824
|
delete queue;
|
|
792
825
|
delete current_queue;
|
|
793
|
-
|
|
794
|
-
|
|
826
|
+
|
|
827
|
+
|
|
795
828
|
};
|
|
829
|
+
|
|
796
830
|
current_queue->addOperation(main_task);
|
|
831
|
+
|
|
797
832
|
};
|
|
798
|
-
|
|
833
|
+
|
|
799
834
|
queue->addOperation(task);
|
|
800
835
|
#endif
|
|
801
|
-
|
|
802
|
-
|
|
836
|
+
|
|
803
837
|
}
|
|
804
|
-
|
|
838
|
+
|
|
839
|
+
/*
|
|
840
|
+
void ImageAssetImpl::SaveSync(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
841
|
+
ImageAssetImpl *ptr = GetPointer(args.This());
|
|
842
|
+
if (ptr == nullptr) {
|
|
843
|
+
args.GetReturnValue().Set(false);
|
|
844
|
+
return;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
auto isolate = args.GetIsolate();
|
|
848
|
+
auto context = isolate->GetCurrentContext();
|
|
849
|
+
auto path = ConvertFromV8String(isolate, args[0]);
|
|
850
|
+
auto format = args[1]->Uint32Value(context).ToChecked();
|
|
851
|
+
auto done = canvas_native_image_asset_save_path(ptr->GetImageAsset(), path.c_str(), format);
|
|
852
|
+
|
|
853
|
+
args.GetReturnValue().Set(done);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
void ImageAssetImpl::SaveCb(const v8::FunctionCallbackInfo<v8::Value> &args) {
|
|
857
|
+
ImageAssetImpl *ptr = GetPointer(args.This());
|
|
858
|
+
if (ptr == nullptr) {
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
861
|
+
auto isolate = args.GetIsolate();
|
|
862
|
+
auto context = isolate->GetCurrentContext();
|
|
863
|
+
if (args.Length() < 2) {
|
|
864
|
+
return;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
auto path = ConvertFromV8String(isolate, args[0]);
|
|
869
|
+
|
|
870
|
+
auto format = args[1]->Uint32Value(context).ToChecked();
|
|
871
|
+
|
|
872
|
+
auto asset = canvas_native_image_asset_shared_clone(
|
|
873
|
+
ptr->GetImageAsset());
|
|
874
|
+
|
|
875
|
+
auto callback = args[1].As<v8::Function>();
|
|
876
|
+
|
|
877
|
+
auto jsi_callback = new JSICallback(isolate, callback);
|
|
878
|
+
|
|
879
|
+
|
|
880
|
+
#ifdef __ANDROID__
|
|
881
|
+
|
|
882
|
+
ALooper_addFd(jsi_callback->looper_,
|
|
883
|
+
jsi_callback->fd_[0],
|
|
884
|
+
0,
|
|
885
|
+
ALOOPER_EVENT_INPUT,
|
|
886
|
+
[](int fd, int events,
|
|
887
|
+
void *data) {
|
|
888
|
+
auto cb = static_cast<JSICallback *>(data);
|
|
889
|
+
bool done;
|
|
890
|
+
read(fd, &done,
|
|
891
|
+
sizeof(bool));
|
|
892
|
+
|
|
893
|
+
v8::Isolate *isolate = cb->isolate_;
|
|
894
|
+
v8::Locker locker(isolate);
|
|
895
|
+
v8::Isolate::Scope isolate_scope(isolate);
|
|
896
|
+
v8::HandleScope handle_scope(isolate);
|
|
897
|
+
v8::Local<v8::Function> callback = cb->callback_->Get(isolate);
|
|
898
|
+
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
899
|
+
v8::Context::Scope context_scope(context);
|
|
900
|
+
|
|
901
|
+
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
902
|
+
|
|
903
|
+
// v8::TryCatch tc(isolate);
|
|
904
|
+
|
|
905
|
+
callback->Call(context, context->Global(), 1,
|
|
906
|
+
args); // ignore JS return value
|
|
907
|
+
|
|
908
|
+
delete static_cast<JSICallback *>(data);
|
|
909
|
+
return 0;
|
|
910
|
+
}, jsi_callback);
|
|
911
|
+
|
|
912
|
+
std::thread thread(
|
|
913
|
+
[jsi_callback, asset, format](
|
|
914
|
+
const std::string &path) {
|
|
915
|
+
|
|
916
|
+
auto done = canvas_native_image_asset_save_path(asset,
|
|
917
|
+
path.c_str(),
|
|
918
|
+
format);
|
|
919
|
+
|
|
920
|
+
canvas_native_image_asset_destroy(asset);
|
|
921
|
+
|
|
922
|
+
write(jsi_callback->fd_[1],
|
|
923
|
+
&done,
|
|
924
|
+
sizeof(bool));
|
|
925
|
+
|
|
926
|
+
}, std::move(path));
|
|
927
|
+
|
|
928
|
+
|
|
929
|
+
thread.detach();
|
|
930
|
+
|
|
931
|
+
#endif
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
#ifdef __APPLE__
|
|
935
|
+
|
|
936
|
+
auto current_queue = new NSOperationQueueWrapper(true);
|
|
937
|
+
|
|
938
|
+
auto queue = new NSOperationQueueWrapper(false);
|
|
939
|
+
|
|
940
|
+
auto task = [jsi_callback, current_queue, queue, asset, path, format]() {
|
|
941
|
+
|
|
942
|
+
auto done = canvas_native_image_asset_save_path(asset, path.c_str(), format);
|
|
943
|
+
|
|
944
|
+
canvas_native_image_asset_destroy(asset);
|
|
945
|
+
|
|
946
|
+
auto main_task = [jsi_callback, current_queue, queue, done]() {
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
v8::Isolate *isolate = jsi_callback->isolate_;
|
|
950
|
+
v8::Locker locker(isolate);
|
|
951
|
+
v8::Isolate::Scope isolate_scope(isolate);
|
|
952
|
+
v8::HandleScope handle_scope(isolate);
|
|
953
|
+
v8::Local<v8::Function> callback = jsi_callback->callback_->Get(isolate);
|
|
954
|
+
v8::Local<v8::Context> context = callback->GetCreationContextChecked();
|
|
955
|
+
v8::Context::Scope context_scope(context);
|
|
956
|
+
|
|
957
|
+
v8::Local<v8::Value> args[1] = {v8::Boolean::New(isolate, done)};
|
|
958
|
+
|
|
959
|
+
// v8::TryCatch tc(isolate);
|
|
960
|
+
|
|
961
|
+
callback->Call(context, context->Global(), 1,
|
|
962
|
+
args); // ignore JS return value
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
delete jsi_callback;
|
|
966
|
+
delete queue;
|
|
967
|
+
delete current_queue;
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
};
|
|
971
|
+
current_queue->addOperation(main_task);
|
|
972
|
+
};
|
|
973
|
+
|
|
974
|
+
queue->addOperation(task);
|
|
975
|
+
#endif
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
}
|
|
979
|
+
*/
|
|
805
980
|
|
|
806
981
|
const ImageAsset *ImageAssetImpl::GetImageAsset() {
|
|
807
982
|
return this->asset_;
|