• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.h"
17 
18 #include "base/log/log.h"
19 #include "frameworks/bridge/declarative_frontend/jsview/js_utils.h"
20 #include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h"
21 
22 #ifdef ENABLE_DRAG_FRAMEWORK
23 #include "js_native_api_types.h"
24 #include "napi/native_api.h"
25 #include "native_engine/native_engine.h"
26 #include "native_engine/native_value.h"
27 
28 #include "core/common/udmf/udmf_client.h"
29 #include "frameworks/bridge/common/utils/engine_helper.h"
30 #include "frameworks/bridge/declarative_frontend/engine/js_converter.h"
31 #include "frameworks/bridge/js_frontend/engine/common/js_engine.h"
32 #endif
33 
34 namespace OHOS::Ace::Framework {
35 namespace {
36 #ifdef ENABLE_DRAG_FRAMEWORK
NapiThrow(const RefPtr<Framework::JsEngine> & engine,int32_t errCode,const std::string & message)37 void NapiThrow(const RefPtr<Framework::JsEngine>& engine, int32_t errCode, const std::string& message)
38 {
39     NativeEngine* nativeEngine = engine->GetNativeEngine();
40     napi_env env = reinterpret_cast<napi_env>(nativeEngine);
41     napi_value code = nullptr;
42     std::string strCode = std::to_string(errCode);
43     napi_create_string_utf8(env, strCode.c_str(), strCode.length(), &code);
44     napi_value msg = nullptr;
45     napi_create_string_utf8(env, message.c_str(), message.length(), &msg);
46     napi_value error = nullptr;
47     napi_create_error(env, code, msg, &error);
48     napi_throw(env, error);
49 }
50 #endif
51 } // namespace
52 
53 class JsPasteData : public Referenced {
54 public:
JSBind(BindingTarget globalObj)55     static void JSBind(BindingTarget globalObj)
56     {
57         JSClass<JsPasteData>::Declare("PasteData");
58         JSClass<JsPasteData>::CustomMethod("setPlainText", &JsPasteData::SetPlainText);
59         JSClass<JsPasteData>::CustomMethod("getPlainText", &JsPasteData::GetPlainText);
60         JSClass<JsPasteData>::Bind(globalObj, &JsPasteData::Constructor, &JsPasteData::Destructor);
61     }
62 
SetPlainText(const JSCallbackInfo & args)63     void SetPlainText(const JSCallbackInfo& args)
64     {
65         if (args[0]->IsString()) {
66             pasteData_->SetPlainText(args[0]->ToString());
67         }
68     }
69 
GetPlainText(const JSCallbackInfo & args)70     void GetPlainText(const JSCallbackInfo& args)
71     {
72         auto plainText = JSVal(ToJSValue(pasteData_->GetPlainText()));
73         auto plainTextRef = JSRef<JSVal>::Make(plainText);
74         args.SetReturnValue(plainTextRef);
75     }
76 
SetPasteData(const RefPtr<PasteData> & pasteData)77     void SetPasteData(const RefPtr<PasteData>& pasteData)
78     {
79         pasteData_ = pasteData;
80     }
81 
GetPasteData() const82     RefPtr<PasteData> GetPasteData() const
83     {
84         return pasteData_;
85     }
86 
87 private:
Constructor(const JSCallbackInfo & args)88     static void Constructor(const JSCallbackInfo& args)
89     {
90         auto jsPasteData = Referenced::MakeRefPtr<JsPasteData>();
91         jsPasteData->IncRefCount();
92         args.SetReturnValue(Referenced::RawPtr(jsPasteData));
93     }
94 
Destructor(JsPasteData * jsPasteData)95     static void Destructor(JsPasteData* jsPasteData)
96     {
97         if (jsPasteData != nullptr) {
98             jsPasteData->DecRefCount();
99         }
100     }
101 
102     RefPtr<PasteData> pasteData_;
103 };
104 
JSBind(BindingTarget globalObj)105 void JsDragEvent::JSBind(BindingTarget globalObj)
106 {
107     JSClass<JsDragEvent>::Declare("DragEvent");
108     JSClass<JsDragEvent>::CustomMethod("getPasteData", &JsDragEvent::GetJsPasteData);
109     JSClass<JsDragEvent>::CustomMethod("getDisplayX", &JsDragEvent::GetScreenX);
110     JSClass<JsDragEvent>::CustomMethod("getDisplayY", &JsDragEvent::GetScreenY);
111     JSClass<JsDragEvent>::CustomMethod("getWindowX", &JsDragEvent::GetX);
112     JSClass<JsDragEvent>::CustomMethod("getWindowY", &JsDragEvent::GetY);
113     JSClass<JsDragEvent>::CustomMethod("getX", &JsDragEvent::GetX);
114     JSClass<JsDragEvent>::CustomMethod("getY", &JsDragEvent::GetY);
115     JSClass<JsDragEvent>::CustomMethod("getDescription", &JsDragEvent::GetDescription);
116     JSClass<JsDragEvent>::CustomMethod("setDescription", &JsDragEvent::SetDescription);
117 #ifdef ENABLE_DRAG_FRAMEWORK
118     JSClass<JsDragEvent>::CustomMethod("setData", &JsDragEvent::SetData);
119     JSClass<JsDragEvent>::CustomMethod("getData", &JsDragEvent::GetData);
120     JSClass<JsDragEvent>::CustomMethod("getSummary", &JsDragEvent::GetSummary);
121     JSClass<JsDragEvent>::CustomMethod("setResult", &JsDragEvent::SetResult);
122     JSClass<JsDragEvent>::CustomMethod("getResult", &JsDragEvent::GetResult);
123     JSClass<JsDragEvent>::CustomMethod("getPreviewRect", &JsDragEvent::GetPreviewRect);
124     JSClass<JsDragEvent>::CustomProperty(
125         "useCustomDropAnimation", &JsDragEvent::GetUseCustomDropAnimation, &JsDragEvent::SetUseCustomDropAnimation);
126     JSClass<JsDragEvent>::CustomMethod("setDragInfo", &JsDragEvent::SetDragInfo);
127     JSClass<JsDragEvent>::CustomMethod("getDragInfo", &JsDragEvent::GetDragInfo);
128     JSClass<JsDragEvent>::CustomProperty("dragBehavior", &JsDragEvent::GetDragBehavior, &JsDragEvent::SetDragBehavior);
129 #endif
130     JSClass<JsDragEvent>::CustomMethod("getVelocityX", &JsDragEvent::GetVelocityX);
131     JSClass<JsDragEvent>::CustomMethod("getVelocityY", &JsDragEvent::GetVelocityY);
132     JSClass<JsDragEvent>::CustomMethod("getVelocity", &JsDragEvent::GetVelocity);
133     JSClass<JsDragEvent>::Bind(globalObj, &JsDragEvent::Constructor, &JsDragEvent::Destructor);
134 }
135 
SetJsPasteData(const JSRef<JSObject> & jsPasteData)136 void JsDragEvent::SetJsPasteData(const JSRef<JSObject>& jsPasteData)
137 {
138     jsPasteData_ = jsPasteData;
139 }
140 
GetJsPasteData(const JSCallbackInfo & args)141 void JsDragEvent::GetJsPasteData(const JSCallbackInfo& args)
142 {
143     args.SetReturnValue(jsPasteData_);
144 }
145 
GetScreenX(const JSCallbackInfo & args)146 void JsDragEvent::GetScreenX(const JSCallbackInfo& args)
147 {
148     auto xValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetScreenX())));
149     auto xValueRef = JSRef<JSVal>::Make(xValue);
150     args.SetReturnValue(xValueRef);
151 }
152 
GetScreenY(const JSCallbackInfo & args)153 void JsDragEvent::GetScreenY(const JSCallbackInfo& args)
154 {
155     auto yValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetScreenY())));
156     auto yValueRef = JSRef<JSVal>::Make(yValue);
157     args.SetReturnValue(yValueRef);
158 }
159 
GetX(const JSCallbackInfo & args)160 void JsDragEvent::GetX(const JSCallbackInfo& args)
161 {
162     auto xValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetX())));
163     auto xValueRef = JSRef<JSVal>::Make(xValue);
164     args.SetReturnValue(xValueRef);
165 }
166 
GetY(const JSCallbackInfo & args)167 void JsDragEvent::GetY(const JSCallbackInfo& args)
168 {
169     auto yValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetY())));
170     auto yValueRef = JSRef<JSVal>::Make(yValue);
171     args.SetReturnValue(yValueRef);
172 }
173 
GetDescription(const JSCallbackInfo & args)174 void JsDragEvent::GetDescription(const JSCallbackInfo& args)
175 {
176     auto description = JSVal(ToJSValue(dragEvent_->GetDescription()));
177     auto descriptionRef = JSRef<JSVal>::Make(description);
178     args.SetReturnValue(descriptionRef);
179 }
180 
SetDescription(const JSCallbackInfo & args)181 void JsDragEvent::SetDescription(const JSCallbackInfo& args)
182 {
183     if (args[0]->IsString()) {
184         dragEvent_->SetDescription(args[0]->ToString());
185     }
186 }
187 #ifdef ENABLE_DRAG_FRAMEWORK
SetData(const JSCallbackInfo & args)188 void JsDragEvent::SetData(const JSCallbackInfo& args)
189 {
190     if (!args[0]->IsObject()) {
191         LOGE("info[0] is not an object when try SetData");
192         return;
193     }
194     auto engine = EngineHelper::GetCurrentEngine();
195     CHECK_NULL_VOID(engine);
196     NativeEngine* nativeEngine = engine->GetNativeEngine();
197     panda::Local<JsiValue> value = args[0].Get().GetLocalHandle();
198     JSValueWrapper valueWrapper = value;
199     ScopeRAII scope(nativeEngine->GetScopeManager());
200     NativeValue* nativeValue = nativeEngine->ValueToNativeValue(valueWrapper);
201     RefPtr<UnifiedData> udData = UdmfClient::GetInstance()->TransformUnifiedData(nativeValue);
202     CHECK_NULL_VOID(udData);
203     dragEvent_->SetData(udData);
204 }
205 
GetData(const JSCallbackInfo & args)206 void JsDragEvent::GetData(const JSCallbackInfo& args)
207 {
208     auto dragData = dragEvent_->GetData();
209     if (!dragEvent_->IsGetDataSuccess()) {
210         LOGE("UDMF GetData failed in first attempt");
211         std::string udKey = dragEvent_->GetUdKey();
212         if (udKey.empty()) {
213             args.SetReturnValue(JSVal::Undefined());
214             return;
215         }
216         int ret = UdmfClient::GetInstance()->GetData(dragData, udKey);
217         if (ret != 0) {
218             LOGW("UDMF GetData failed: %{public}d", ret);
219             auto engine = EngineHelper::GetCurrentEngine();
220             if (!engine) {
221                 args.SetReturnValue(JSVal::Undefined());
222                 return;
223             }
224             auto errorInfo = UdmfClient::GetInstance()->GetErrorInfo(ret);
225             NapiThrow(engine, errorInfo.first, errorInfo.second);
226             return;
227         } else {
228             dragEvent_->SetData(dragData);
229             dragEvent_->SetIsGetDataSuccess(true);
230         }
231     }
232     CHECK_NULL_VOID(dragData);
233     NativeValue* nativeValue = UdmfClient::GetInstance()->TransformUdmfUnifiedData(dragData);
234     CHECK_NULL_VOID(nativeValue);
235     auto jsValue = JsConverter::ConvertNativeValueToJsVal(nativeValue);
236     args.SetReturnValue(jsValue);
237 }
238 
GetSummary(const JSCallbackInfo & args)239 void JsDragEvent::GetSummary(const JSCallbackInfo& args)
240 {
241     auto engine = EngineHelper::GetCurrentEngine();
242     CHECK_NULL_VOID(engine);
243     auto summary = dragEvent_->GetSummary();
244     NativeValue* nativeValue = UdmfClient::GetInstance()->TransformSummary(summary);
245     CHECK_NULL_VOID(nativeValue);
246     auto jsValue = JsConverter::ConvertNativeValueToJsVal(nativeValue);
247     args.SetReturnValue(jsValue);
248 }
249 
SetResult(const JSCallbackInfo & args)250 void JsDragEvent::SetResult(const JSCallbackInfo& args)
251 {
252     if (args[0]->IsNumber()) {
253         auto dragRet = args[0]->ToNumber<int32_t>();
254         dragEvent_->SetResult((DragRet)dragRet);
255     }
256 }
257 
GetResult(const JSCallbackInfo & args)258 void JsDragEvent::GetResult(const JSCallbackInfo& args)
259 {
260     auto dragRet = JSVal(ToJSValue(static_cast<int32_t>(dragEvent_->GetResult())));
261     auto dragRetRef = JSRef<JSVal>::Make(dragRet);
262     args.SetReturnValue(dragRetRef);
263 }
264 
GetPreviewRect(const JSCallbackInfo & args)265 void JsDragEvent::GetPreviewRect(const JSCallbackInfo& args)
266 {
267     auto rectObj = CreateRectangle(dragEvent_->GetPreviewRect());
268     JSRef<JSVal> previewRect = JSRef<JSObject>::Cast(rectObj);
269     args.SetReturnValue(previewRect);
270 }
271 
SetUseCustomDropAnimation(const JSCallbackInfo & args)272 void JsDragEvent::SetUseCustomDropAnimation(const JSCallbackInfo& args)
273 {
274     if (args[0]->IsBoolean()) {
275         dragEvent_->UseCustomAnimation(args[0]->ToBoolean());
276     }
277 }
278 
GetUseCustomDropAnimation(const JSCallbackInfo & args)279 void JsDragEvent::GetUseCustomDropAnimation(const JSCallbackInfo& args)
280 {
281     auto useCustomAnimation = JSVal(ToJSValue(dragEvent_->IsUseCustomAnimation()));
282     auto useCustomAnimationRef = JSRef<JSVal>::Make(useCustomAnimation);
283     args.SetReturnValue(useCustomAnimationRef);
284 }
285 
SetDragInfo(const JSCallbackInfo & args)286 void JsDragEvent::SetDragInfo(const JSCallbackInfo& args)
287 {
288     if (!args[0]->IsObject()) {
289         LOGE("info[0] is not an object when try SetDragInfo");
290         return;
291     }
292     auto engine = EngineHelper::GetCurrentEngine();
293     CHECK_NULL_VOID(engine);
294     NativeEngine* nativeEngine = engine->GetNativeEngine();
295     panda::Local<JsiValue> value = args[0].Get().GetLocalHandle();
296     JSValueWrapper valueWrapper = value;
297     ScopeRAII scope(nativeEngine->GetScopeManager());
298     NativeValue* nativeValue = nativeEngine->ValueToNativeValue(valueWrapper);
299     RefPtr<UnifiedData> udData = UdmfClient::GetInstance()->TransformUnifiedData(nativeValue);
300     CHECK_NULL_VOID(udData);
301     dragEvent_->SetData(udData);
302 }
303 
GetDragInfo(const JSCallbackInfo & args)304 void JsDragEvent::GetDragInfo(const JSCallbackInfo& args)
305 {
306     auto dragData = dragEvent_->GetDragInfo();
307     CHECK_NULL_VOID(dragData);
308     NativeValue* nativeValue = UdmfClient::GetInstance()->TransformUdmfUnifiedData(dragData);
309     CHECK_NULL_VOID(nativeValue);
310     auto jsValue = JsConverter::ConvertNativeValueToJsVal(nativeValue);
311     args.SetReturnValue(jsValue);
312 }
313 
SetDragBehavior(const JSCallbackInfo & args)314 void JsDragEvent::SetDragBehavior(const JSCallbackInfo& args)
315 {
316     if (args[0]->IsNumber()) {
317         dragEvent_->SetCopy(!static_cast<bool>(args[0]->ToNumber<int32_t>()));
318     }
319 }
320 
GetDragBehavior(const JSCallbackInfo & args)321 void JsDragEvent::GetDragBehavior(const JSCallbackInfo& args)
322 {
323     auto dragBehavior = JSVal(ToJSValue(static_cast<int32_t>(!dragEvent_->IsCopy())));
324     auto dragBehaviorRef = JSRef<JSVal>::Make(dragBehavior);
325     args.SetReturnValue(dragBehaviorRef);
326 }
327 #endif
328 
GetVelocityX(const JSCallbackInfo & args)329 void JsDragEvent::GetVelocityX(const JSCallbackInfo& args)
330 {
331     auto jsValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetVelocity().GetVelocityX())));
332     auto jsValueRef = JSRef<JSVal>::Make(jsValue);
333     args.SetReturnValue(jsValueRef);
334 }
335 
GetVelocityY(const JSCallbackInfo & args)336 void JsDragEvent::GetVelocityY(const JSCallbackInfo& args)
337 {
338     auto jsValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetVelocity().GetVelocityY())));
339     auto jsValueRef = JSRef<JSVal>::Make(jsValue);
340     args.SetReturnValue(jsValueRef);
341 }
342 
GetVelocity(const JSCallbackInfo & args)343 void JsDragEvent::GetVelocity(const JSCallbackInfo& args)
344 {
345     auto jsValue = JSVal(ToJSValue(SystemProperties::Px2Vp(dragEvent_->GetVelocity().GetVelocityValue())));
346     auto jsValueRef = JSRef<JSVal>::Make(jsValue);
347     args.SetReturnValue(jsValueRef);
348 }
349 
Constructor(const JSCallbackInfo & args)350 void JsDragEvent::Constructor(const JSCallbackInfo& args)
351 {
352     auto dragEvent = Referenced::MakeRefPtr<JsDragEvent>();
353     dragEvent->IncRefCount();
354     args.SetReturnValue(Referenced::RawPtr(dragEvent));
355 }
356 
Destructor(JsDragEvent * dragEvent)357 void JsDragEvent::Destructor(JsDragEvent* dragEvent)
358 {
359     if (dragEvent != nullptr) {
360         dragEvent->DecRefCount();
361     }
362 }
363 #ifdef ENABLE_DRAG_FRAMEWORK
CreateRectangle(const Rect & info)364 JSRef<JSObject> JsDragEvent::CreateRectangle(const Rect& info)
365 {
366     JSRef<JSObject> rectObj = JSRef<JSObject>::New();
367     rectObj->SetProperty<double>("x", SystemProperties::Px2Vp(info.Left()));
368     rectObj->SetProperty<double>("y", SystemProperties::Px2Vp(info.Top()));
369     rectObj->SetProperty<double>("width", SystemProperties::Px2Vp(info.Width()));
370     rectObj->SetProperty<double>("height", SystemProperties::Px2Vp(info.Height()));
371     return rectObj;
372 }
373 #endif
374 
JSBind(BindingTarget globalObj)375 void JsDragFunction::JSBind(BindingTarget globalObj)
376 {
377     JsPasteData::JSBind(globalObj);
378     JsDragEvent::JSBind(globalObj);
379 }
380 
Execute()381 void JsDragFunction::Execute()
382 {
383     JsFunction::Execute();
384 }
385 
Execute(const RefPtr<DragEvent> & info,const std::string & extraParams)386 JSRef<JSVal> JsDragFunction::Execute(const RefPtr<DragEvent>& info, const std::string& extraParams)
387 {
388     JSRef<JSVal> dragInfo = JSRef<JSObject>::Cast(CreateDragEvent(info));
389     JSRef<JSVal> jsonInfo = JSRef<JSVal>::Make(ToJSValue(extraParams));
390     JSRef<JSVal> params[] = { dragInfo, jsonInfo };
391     return JsFunction::ExecuteJS(2, params);
392 }
393 
Execute(const RefPtr<DragEvent> & info)394 JSRef<JSVal> JsDragFunction::Execute(const RefPtr<DragEvent>& info)
395 {
396     JSRef<JSVal> dragInfo = JSRef<JSObject>::Cast(CreateDragEvent(info));
397     JSRef<JSVal> params[] = { dragInfo };
398     return JsFunction::ExecuteJS(1, params);
399 }
400 
ItemDragStartExecute(const ItemDragInfo & info,int32_t itemIndex)401 JSRef<JSVal> JsDragFunction::ItemDragStartExecute(const ItemDragInfo& info, int32_t itemIndex)
402 {
403     JSRef<JSVal> itemDragInfo = JSRef<JSObject>::Cast(CreateItemDragInfo(info));
404     JSRef<JSVal> itemIndexParam = JSRef<JSVal>::Make(ToJSValue(itemIndex));
405     JSRef<JSVal> params[] = { itemDragInfo, itemIndexParam };
406     return JsFunction::ExecuteJS(2, params);
407 }
408 
ItemDragEnterExecute(const ItemDragInfo & info)409 void JsDragFunction::ItemDragEnterExecute(const ItemDragInfo& info)
410 {
411     JSRef<JSObject> itemDragInfo = JSRef<JSObject>::Cast(CreateItemDragInfo(info));
412     JSRef<JSVal> param = itemDragInfo;
413     JsFunction::ExecuteJS(1, &param);
414 }
415 
ItemDragMoveExecute(const ItemDragInfo & info,int32_t itemIndex,int32_t insertIndex)416 void JsDragFunction::ItemDragMoveExecute(const ItemDragInfo& info, int32_t itemIndex, int32_t insertIndex)
417 {
418     JSRef<JSVal> itemDragInfo = JSRef<JSObject>::Cast(CreateItemDragInfo(info));
419     JSRef<JSVal> itemIndexParam = JSRef<JSVal>::Make(ToJSValue(itemIndex));
420     JSRef<JSVal> insertIndexParam = JSRef<JSVal>::Make(ToJSValue(insertIndex));
421     JSRef<JSVal> params[] = { itemDragInfo, itemIndexParam, insertIndexParam };
422     JsFunction::ExecuteJS(3, params);
423 }
424 
ItemDragLeaveExecute(const ItemDragInfo & info,int32_t itemIndex)425 void JsDragFunction::ItemDragLeaveExecute(const ItemDragInfo& info, int32_t itemIndex)
426 {
427     JSRef<JSVal> itemDragInfo = JSRef<JSObject>::Cast(CreateItemDragInfo(info));
428     JSRef<JSVal> itemIndexParam = JSRef<JSVal>::Make(ToJSValue(itemIndex));
429     JSRef<JSVal> params[] = { itemDragInfo, itemIndexParam };
430     JsFunction::ExecuteJS(2, params);
431 }
432 
ItemDropExecute(const ItemDragInfo & info,int32_t itemIndex,int32_t insertIndex,bool isSuccess)433 void JsDragFunction::ItemDropExecute(const ItemDragInfo& info, int32_t itemIndex, int32_t insertIndex, bool isSuccess)
434 {
435     JSRef<JSVal> itemDragInfo = JSRef<JSObject>::Cast(CreateItemDragInfo(info));
436     JSRef<JSVal> itemIndexParam = JSRef<JSVal>::Make(ToJSValue(itemIndex));
437     JSRef<JSVal> insertIndexParam = JSRef<JSVal>::Make(ToJSValue(insertIndex));
438     JSRef<JSVal> isSuccessParam = JSRef<JSVal>::Make(ToJSValue(isSuccess));
439     JSRef<JSVal> params[] = { itemDragInfo, itemIndexParam, insertIndexParam, isSuccessParam };
440     JsFunction::ExecuteJS(4, params);
441 }
442 
CreateDragEvent(const RefPtr<DragEvent> & info)443 JSRef<JSObject> JsDragFunction::CreateDragEvent(const RefPtr<DragEvent>& info)
444 {
445     JSRef<JSObject> dragObj = JSClass<JsDragEvent>::NewInstance();
446     auto dragEvent = Referenced::Claim(dragObj->Unwrap<JsDragEvent>());
447     dragEvent->SetDragEvent(info);
448     auto pasteDataInfo = dragEvent->GetDragEvent()->GetPasteData();
449     JSRef<JSObject> pasteData = CreatePasteData(pasteDataInfo);
450     dragEvent->SetJsPasteData(pasteData);
451     return dragObj;
452 }
453 
CreatePasteData(const RefPtr<PasteData> & info)454 JSRef<JSObject> JsDragFunction::CreatePasteData(const RefPtr<PasteData>& info)
455 {
456     JSRef<JSObject> pasteObj = JSClass<JsPasteData>::NewInstance();
457     auto pasteData = Referenced::Claim(pasteObj->Unwrap<JsPasteData>());
458     pasteData->SetPasteData(info);
459     return pasteObj;
460 }
461 
CreateItemDragInfo(const ItemDragInfo & info)462 JSRef<JSObject> JsDragFunction::CreateItemDragInfo(const ItemDragInfo& info)
463 {
464     JSRef<JSObject> itemDragInfoObj = JSRef<JSObject>::New();
465     itemDragInfoObj->SetProperty<double>("x", SystemProperties::Px2Vp(info.GetX()));
466     itemDragInfoObj->SetProperty<double>("y", SystemProperties::Px2Vp(info.GetY()));
467     return itemDragInfoObj;
468 }
469 
470 } // namespace OHOS::Ace::Framework
471