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