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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_divider_bridge.h"
16
17 #include "base/geometry/dimension.h"
18 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
19 #include "core/components/divider/divider_theme.h"
20 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21
22 namespace OHOS::Ace::NG {
SetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)23 ArkUINativeModuleValue DividerBridge::SetStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
24 {
25 EcmaVM* vm = runtimeCallInfo->GetVM();
26 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
27 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
28 Local<JSValueRef> strokeWidthArg = runtimeCallInfo->GetCallArgRef(1);
29 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
30 CalcDimension strokeWidth;
31 if (ArkTSUtils::ParseJsDimensionVpNG(vm, strokeWidthArg, strokeWidth, false) &&
32 strokeWidth.Value() >= 0) {
33 GetArkUINodeModifiers()->getDividerModifier()->setDividerStrokeWidth(
34 nativeNode, strokeWidth.Value(), static_cast<int32_t>(strokeWidth.Unit()));
35 } else {
36 GetArkUINodeModifiers()->getDividerModifier()->resetDividerStrokeWidth(nativeNode);
37 }
38 return panda::JSValueRef::Undefined(vm);
39 }
40
ResetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)41 ArkUINativeModuleValue DividerBridge::ResetStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
42 {
43 EcmaVM* vm = runtimeCallInfo->GetVM();
44 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
45 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
46 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
47 GetArkUINodeModifiers()->getDividerModifier()->resetDividerStrokeWidth(nativeNode);
48 return panda::JSValueRef::Undefined(vm);
49 }
50
SetLineCap(ArkUIRuntimeCallInfo * runtimeCallInfo)51 ArkUINativeModuleValue DividerBridge::SetLineCap(ArkUIRuntimeCallInfo* runtimeCallInfo)
52 {
53 EcmaVM* vm = runtimeCallInfo->GetVM();
54 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
55 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
56 Local<JSValueRef> lineCapArg = runtimeCallInfo->GetCallArgRef(1);
57 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
58 if (lineCapArg->IsNumber()) {
59 int32_t lineCap = lineCapArg->Int32Value(vm);
60 GetArkUINodeModifiers()->getDividerModifier()->setDividerLineCap(nativeNode, lineCap);
61 } else {
62 GetArkUINodeModifiers()->getDividerModifier()->resetDividerLineCap(nativeNode);
63 }
64 return panda::JSValueRef::Undefined(vm);
65 }
66
ResetLineCap(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue DividerBridge::ResetLineCap(ArkUIRuntimeCallInfo* runtimeCallInfo)
68 {
69 EcmaVM* vm = runtimeCallInfo->GetVM();
70 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
72 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
73 GetArkUINodeModifiers()->getDividerModifier()->resetDividerLineCap(nativeNode);
74 return panda::JSValueRef::Undefined(vm);
75 }
76
SetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue DividerBridge::SetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
78 {
79 EcmaVM* vm = runtimeCallInfo->GetVM();
80 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
82 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(1);
83 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
84 Color color;
85 if (ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
86 GetArkUINodeModifiers()->getDividerModifier()->setDividerColor(nativeNode, color.GetValue());
87 } else {
88 GetArkUINodeModifiers()->getDividerModifier()->resetDividerColor(nativeNode);
89 }
90 return panda::JSValueRef::Undefined(vm);
91 }
92
ResetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)93 ArkUINativeModuleValue DividerBridge::ResetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
94 {
95 EcmaVM* vm = runtimeCallInfo->GetVM();
96 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
97 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
98 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
99 GetArkUINodeModifiers()->getDividerModifier()->resetDividerColor(nativeNode);
100 return panda::JSValueRef::Undefined(vm);
101 }
102
SetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)103 ArkUINativeModuleValue DividerBridge::SetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
104 {
105 EcmaVM* vm = runtimeCallInfo->GetVM();
106 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
107 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
108 Local<JSValueRef> verticalArg = runtimeCallInfo->GetCallArgRef(1);
109 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
110 if (verticalArg->IsBoolean()) {
111 bool value = verticalArg->ToBoolean(vm)->Value();
112 GetArkUINodeModifiers()->getDividerModifier()->setDividerVertical(nativeNode, value);
113 } else {
114 GetArkUINodeModifiers()->getDividerModifier()->resetDividerVertical(nativeNode);
115 }
116 return panda::JSValueRef::Undefined(vm);
117 }
118
ResetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)119 ArkUINativeModuleValue DividerBridge::ResetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
120 {
121 EcmaVM* vm = runtimeCallInfo->GetVM();
122 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
123 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
124 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
125 GetArkUINodeModifiers()->getDividerModifier()->resetDividerVertical(nativeNode);
126 return panda::JSValueRef::Undefined(vm);
127 }
128 } // namespace OHOS::Ace::NG
129