1 /*
2  * Copyright (c) 2023 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 "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_hyperlink_bridge.h"
17 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
18 
19 namespace OHOS::Ace::NG {
20 namespace {
21 constexpr int NUM_0 = 0;
22 constexpr int NUM_1 = 1;
23 constexpr int NUM_2 = 2;
24 } // namespace
SetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)25 ArkUINativeModuleValue HyperlinkBridge::SetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
26 {
27     EcmaVM* vm = runtimeCallInfo->GetVM();
28     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
29     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
30     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
31     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
32     Color color;
33     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
34         GetArkUINodeModifiers()->getHyperlinkModifier()->resetHyperlinkColor(nativeNode);
35     } else {
36         GetArkUINodeModifiers()->getHyperlinkModifier()->setHyperlinkColor(nativeNode, color.GetValue());
37     }
38     return panda::JSValueRef::Undefined(vm);
39 }
40 
ResetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)41 ArkUINativeModuleValue HyperlinkBridge::ResetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
42 {
43     EcmaVM* vm = runtimeCallInfo->GetVM();
44     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
45     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
46     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
47     GetArkUINodeModifiers()->getHyperlinkModifier()->resetHyperlinkColor(nativeNode);
48     return panda::JSValueRef::Undefined(vm);
49 }
50 
SetDraggable(ArkUIRuntimeCallInfo * runtimeCallInfo)51 ArkUINativeModuleValue HyperlinkBridge::SetDraggable(ArkUIRuntimeCallInfo* runtimeCallInfo)
52 {
53     EcmaVM* vm = runtimeCallInfo->GetVM();
54     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
55     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
56     Local<JSValueRef> draggableArg = runtimeCallInfo->GetCallArgRef(1);
57     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
58     if (draggableArg->IsBoolean()) {
59         bool boolValue = draggableArg->ToBoolean(vm)->Value();
60         GetArkUINodeModifiers()->getHyperlinkModifier()->setHyperlinkDraggable(nativeNode, boolValue);
61     } else {
62         GetArkUINodeModifiers()->getHyperlinkModifier()->resetHyperlinkDraggable(nativeNode);
63     }
64     return panda::JSValueRef::Undefined(vm);
65 }
66 
ResetDraggable(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue HyperlinkBridge::ResetDraggable(ArkUIRuntimeCallInfo* runtimeCallInfo)
68 {
69     EcmaVM* vm = runtimeCallInfo->GetVM();
70     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
72     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
73     GetArkUINodeModifiers()->getHyperlinkModifier()->resetHyperlinkDraggable(nativeNode);
74     return panda::JSValueRef::Undefined(vm);
75 }
76 
SetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue HyperlinkBridge::SetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
78 {
79     EcmaVM* vm = runtimeCallInfo->GetVM();
80     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
82     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
83     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
84     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
85     int32_t length = thirdArg->Int32Value(vm);
86     ArkUI_Float32 regionArray[length];
87     int32_t regionUnits[length];
88     if (!ArkTSUtils::ParseResponseRegion(vm, secondArg, regionArray, regionUnits, length)) {
89         GetArkUINodeModifiers()->getHyperlinkModifier()->resetHyperlinkResponseRegion(nativeNode);
90         return panda::JSValueRef::Undefined(vm);
91     }
92     GetArkUINodeModifiers()->getHyperlinkModifier()->setHyperlinkResponseRegion(
93         nativeNode, regionArray, regionUnits, length);
94     return panda::JSValueRef::Undefined(vm);
95 }
96 
ResetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)97 ArkUINativeModuleValue HyperlinkBridge::ResetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
98 {
99     EcmaVM* vm = runtimeCallInfo->GetVM();
100     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
101     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
102     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
103     GetArkUINodeModifiers()->getHyperlinkModifier()->resetHyperlinkResponseRegion(nativeNode);
104     return panda::JSValueRef::Undefined(vm);
105 }
106 } // namespace OHOS::Ace::NG